~/.claude/projects

Your Claude Code sessions

Every conversation is kept in a local .jsonl. Click any row to read it, or copy the command to pick it up again — --resume only finds the session from its original directory, so the button copies the cd too.

Resume

Left stripe = age: today / yesterday last week two weeks older
unindexed = on disk but not listed in MEMORY.md, so it is not loaded into context

Each project keeps its memories in <project>/memory/: one .md per memory and a MEMORY.md that indexes them. The index is the only thing read when a session starts.

Claude picks the type when it writes them: project is ongoing work, user who you are and how you work, feedback your corrections, reference pointers to external resources.

Titles are generated by Claude during the session. When there is none, it falls back to your first message — which shows, because it starts in lowercase or reads like a stray question.

Empty is a session that was opened but never got a message: a cancelled /resume, a /login. Non-interactive is a claude -p with something piped through stdin — typically a git diff to draft a commit message, not a chat.

The transcript has the conversation text and one line per tool used, but not what those tools returned: that is 95% of the size on disk.