Claude Code forgets my project every session

Every session starts from nothing. That is by design — and a single file is what carries your project across the gap.

Last updated: 2026-09-20

Why it happens

A session has no memory of the one before it. That is not a bug to be worked around; it is why the tool is predictable. But it means everything your project needs to be understood has to be readable at the start of a session.

Without a briefing file, that means re-deriving your build from whatever is lying around — and a guess that was right yesterday can be wrong today.

The fix: a CLAUDE.md at the project root

# Project: your-app

## Commands
- Install: `npm install`
- Dev: `npm run dev`
- Test: `npm test`
- Lint: `npm run lint`

## Layout
- `src/`: app code
- `tests/`: tests mirror `src/` paths

## Rules
- Run the tests before saying anything is done. A clean build is not proof.
- Small diffs. One concern per commit.
- Match the surrounding code's style; don't reformat files you didn't change.

## Never
- Never read or print `.env*` files or secrets.
- Never force-push or rewrite shared history.
- Never add a dependency without saying why in the commit message.

Commit it. Every session from now on starts already knowing this.

The one edit that matters

Fill in the four commands with what actually works in your repo, exactly as you would type them, flags included. If your test command is pnpm vitest run --silent, write that. It gets copied, not interpreted.

Everything else in the file is useful. This part is the reason the file exists.

What to leave out

Leave outWhy
Your architecture essayIt gets skimmed, and it goes stale faster than the code
Anything secretThe file is committed. Name the environment variable, never the value
Aspirational rules nobody followsA rule contradicted by the code teaches the contradiction
Generated contentIf it has to be regenerated to stay true, it will stop being true

If your CLAUDE.md has grown past two screens, the useful parts are no longer being read. Cut it back to the commands, the layout and the never-list. That is not a compromise — it is the version that works.

Related

The other half of week one is the permission prompts — see Claude Code keeps asking permission for the same command. The free starter repo has both files filled in.

Free starter repo

What does it cost to have someone set this up?

Flat prices, written scope, stop at any rung. No call to book, no retainer.

RungWhat you getClock
Free — starter repoA real setup you copy yourselfnow
$29 — Setup LiteOne project: CLAUDE.md, allowlist, one skill, as a pull request you review24 hours
$99 — Setup Sprint3–5 skills, hooks, up to 3 MCP servers, plus a runbook48 hours
$79 — Surface AuditAlready set up and still fighting it: contradictions and an exact fix list48 hours
Setup Lite $29 Or start free

Clocks run from a complete intake, not from the Stripe receipt.