Run claude --resume with no arguments and Claude Code opens an interactive picker of your past sessions. That is the list. There is no claude list-sessions, no claude sessions, and no flag that prints them as plain text, which is why searching for one turns up nothing. The picker is the feature, and once you know its two hidden keys and where it reads from, finding a specific old conversation stops being guesswork.
Three ways to see your Claude Code sessions
They are not alternatives so much as three levels of zoom. Start at the top and only go down when the one you want is not there:
claude --resumethe picker. No arguments, no session id. It lists the past sessions for the directory you are in, showing each one's name (or a summary of its first prompt if you never named it), how long since it was last active, its message count, and the git branch it was on. Arrow to one, hit enter, you are back in it.Ctrl+W and Ctrl+Athe two keys nobody mentions. Inside the picker, Ctrl+W widens the search to every git worktree of this repo, and Ctrl+A widens it to every project on the machine. If your session is missing because you started it one folder over, this is the fix, not a reinstall..jsonl file on your disk. When you want to grep across old conversations instead of scrolling a picker, read them directly. The path is below.Where Claude Code stores the list
Sessions live in ~/.claude/projects/, one folder per project, one .jsonl file per session, named by its session id. The folder name is your working directory's path with every non-alphanumeric character replaced by a dash, which is why it looks mangled. A project at /Users/you/code/app becomes -Users-you-code-app. There is no central index file and no database. The folder layout is the index.
Each file is one JSON object per line, appended as the conversation goes. That makes the whole history greppable with tools you already have, which is the real reason to know the path. The exact shape of each line is internal and changes between versions, so read it for search, not for parsing into something you depend on.
Why the session you want is not in the list
Almost always one of four things, in this order of likelihood:
- You are in the wrong directory. Sessions are scoped to the folder you launched from, and so is the picker. Standing one directory up shows you a different list, not an empty one. Press
Ctrl+Ain the picker to search every project instead. - It was on a different git worktree. Worktrees of the same repo have different paths, so they get different session folders.
Ctrl+Wsearches all of them at once. - It aged out. Claude Code deletes session files older than
cleanupPeriodDays, which defaults to 30 days, and it does the sweep at startup. A session from two months ago is not hidden, it is gone. Raise the setting insettings.jsonbefore you need it, not after. - You are looking for something /clear removed. It did not remove it.
/clearempties your current context but the transcript is still saved and still resumable, so it stays in the picker.

A list of sessions tells you when, not what
Here is the limit of the picker, and it is the reason this search is so common. The list answers "which conversation was that" with a timestamp, a message count, and a branch name. None of those is what you actually remember. You remember what you were doing: the feature you were halfway through, the decision you made and did not want to relitigate. The picker cannot show you that, because Claude Code stores the transcript, not the plot.
So the kit stores the plot separately. Every kitstarter project keeps a small .kitstarter/ folder next to your code: journey.json holds the roadmap and which step you are on, events.jsonl is an append-only feed of what the engine did, and last-recap.txt is the receipts card from the session that just ended. Our SessionStart hook writes a session-start marker into that feed every time you open a session, which is what lets the SessionEnd hook slice out exactly this session's activity rather than replaying your whole week. That state is plain text, it is per project, and it does not age out at 30 days.
The honest summary: use `claude --resume` to find the session, and keep your own notes for the part a picker was never going to hold. That is what kitstarter automates. The state layer is five small JSON files, no database, and it fails open by design, so a corrupt file loses a receipt rather than breaking your session. Worth reading next: where your conversation history actually lives, and how to jump straight back into the last one without opening a picker at all.
Common questions
How do I list Claude Code sessions? Run claude --resume with no arguments. It opens an interactive picker of the past sessions for your current directory, showing each session's name or summary, how long since it was last active, its message count, and its git branch. There is no separate list command.
Is there a claude list-sessions command? No. Listing is built into the resume picker rather than exposed as its own command, which is why searching for claude list-sessions finds nothing. Run claude --resume to see the list, or read the session files directly from ~/.claude/projects if you need plain text.
Where are Claude Code sessions stored? In ~/.claude/projects/, as one .jsonl file per session inside a folder named after your project path with every non-alphanumeric character replaced by a dash. Each line of the file is a JSON object. There is no central index; the folder layout is the index.
Why is my old session missing from the list? Usually you are in a different directory, since the picker is scoped to where you launched from. Press Ctrl+A inside the picker to search every project, or Ctrl+W to search every worktree of the current repo. If it is older than cleanupPeriodDays, which defaults to 30, Claude Code has already deleted it at startup.
Keep the plot, not just the transcript
kitstarter keeps a plain-text roadmap, an event feed, and a receipts card per project, so picking up an old thread does not depend on remembering which row in the picker it was. For Claude Code, Codex, and Antigravity.
