Resuming — --continue, --resume, and naming things
By the end you can
- Choose between --continue, --resume and --resume <name> for how you left off
- Name a session so future-you can find it, and know which labels are resume handles
- State what a resumed session restores and what you must pass again
- Make the resume-from-summary choice deliberately rather than dismissing the dialog
- Fork a conversation with /branch when you want to keep both the old approach and a new one
- Know where transcripts live and how long they last
Lesson 3.3 made the case for clearing between tasks, and left one objection standing: what if I need that conversation back? This lesson closes it. The conversation is saved whether you clear or not — the only question is whether you can find it.
The four ways back in
A session is a saved conversation tied to a project directory. — Manage sessions
| Command | What it does |
|---|---|
claude --continue | Resumes the most recent interactive session in the current directory |
claude --resume | Opens the session picker |
claude --resume <name> | Resumes the named session directly |
claude --from-pr <number> | Opens the picker filtered to sessions linked to that pull request |
/resume | Switches to a different conversation from inside an active session |
--continue is the "pick up where I left off" reflex and needs nothing from
you. --resume <name> is the one that repays a small habit, and the habit is
the next section.
Naming is the price of resuming
An unnamed session is not lost, but finding it means recognising it in a list by its first prompt. Naming takes two seconds:
| When | How |
|---|---|
| At startup | claude -n auth-refactor |
| During a session | /rename auth-refactor — the name also shows on the prompt bar |
| From the picker | Highlight a session and press Ctrl+R |
| On plan accept | Accepting a plan generates a title from the plan, unless you already named it |
The guidance suggests treating named sessions like branches — one per workstream, each with its own persistent context.
There is a trap in the labels, and it is worth knowing which is which. An unnamed interactive session gets two automatic labels, and only one of them works as a resume handle:
- A default display name combining the directory with a two-character
suffix, like
my-app-3f. This identifies the session in listings of running sessions — agent view,claude agents --json. It is not a resume handle: pass it to--resumeand Claude Code will not find the session. Unnamed sessions started getting one in v2.1.196. - A generated title, a short summary of your first prompt written by a
background request to the small, fast model. This is usable with
--resumeand/resume, which resolve it exactly like a name you set yourself.
So the trap has two halves: until you name the session or accept a plan in it, the label the running-session listings show you is not a resume handle, and the one that is, is a machine's paraphrase of a sentence you wrote hours ago. Picking that out of a list is precisely the work that naming was supposed to save you.
Collisions have a resolution now. If two live sessions on the machine would end
up with the same name, Claude Code leaves the name with the one that already has
it, renames yours with a two-word suffix such as
auth-refactor-graceful-unicorn, and tells you; run /rename if you would
rather pick. Before v2.1.232 nothing intervened and both kept the name, so two
terminals both running claude -n fix left you two identical rows, separable
only by the branch and last-activity time the picker prints beside them. The
suffix spares you that, but fix-graceful-unicorn is not much of a handle
either. Name for the workstream, not the verb.
What comes back, and what you pass again
A resumed session restores the conversation history including tool calls and
results, the model it was using, the agent if it was started with --agent, the
permission mode in most terminal cases, an active goal, and unexpired scheduled
tasks.
The goal is worth a note of its own, because it used to depend on how you came
back. Every route restores it now — --continue, --resume with a name or ID,
and the claude --resume picker. Before v2.1.239 the picker was the one route
that dropped it, which made "resume a /goal session by name, not by picker" a
habit worth having; it no longer buys you anything.
It does not restore every launch flag. If the session depended on any of these, pass them again:
--mcp-config --settings --plugin-dir --fallback-model --add-dirStandard settings files such as settings.json are re-read at launch, so
anything living in them needs no repeating. The rule of thumb: configuration
that lives on disk returns by itself; configuration you typed on the command
line does not. That is the same on-disk-versus-in-the-moment distinction that
decided what survives compaction in Lesson 3.2.
The dialog that is actually a context decision
Resume a big, old session on a Pro or Max plan and you get a choice that most people click through. It is worth slowing down for, because it is the whole of Level 3 in one prompt.
The dialog appears when the session has been inactive for more than about an hour and is over 100,000 tokens. By then its prompt cache has expired, so the next request reprocesses the full history once whichever option you pick. What you are choosing is what later requests carry:
| Option | What it does | The trade |
|---|---|---|
| Resume from summary | Runs /compact immediately: one summarization request, then history is replaced by the summary, recent exchanges, and up to five recently read files | Cheaper on every later request; whatever the summary omits is gone |
| Resume full session as-is | Loads the conversation unchanged | Every detail stays available, at a per-request cost that scales with the conversation |
| Don't ask me again | Resumes full, and stops offering the choice | Convenience now, no prompt later |
Read the third row carefully. "Don't ask me again" is not a preference about dialogs — it commits every future resume to the most expensive option without telling you. If you pick anything by reflex, pick one of the first two.
Two more controls worth knowing
Branching. /branch <name> copies the conversation so far and switches you
into the copy, leaving the original intact in the picker. It is the move for
"try a different approach without losing this one" — a sibling of the rewind
from Lesson 3.4, except it keeps both paths rather than choosing between them.
From the shell it is claude --continue --fork-session.
The picker's shortcuts. Inside /resume: Ctrl+A widens to every project on
the machine, Ctrl+W to all worktrees of the repository, Ctrl+B filters to the
current git branch, Ctrl+R renames, and Space previews the conversation
before you commit to it.
Where it all lives
Transcripts are stored as JSONL at ~/.claude/projects/<project>/<session-id>.jsonl,
where the project directory is your working directory path with non-alphanumeric
characters replaced by -. They are swept on the same retention schedule as the
rest of your session data — 30 days by default, configurable with
cleanupPeriodDays.
Checkpoint
-
You want to get back into yesterday afternoon's work, in a directory where you have run four other sessions since. Which command, and what should you have done yesterday to make it easy?
Show answerAnswer
claude --resume, which opens the session picker — orclaude --resume <name>if the session has a name.--continueis the wrong reflex here: it resumes the most recent interactive session in the current directory, which is one of the four you have run since.What you should have done yesterday is name it:
claude -n auth-refactorat startup,/rename auth-refactorduring the session, orCtrl+Ron it in the picker. Without that you are hunting for it by its generated title — a background paraphrase of your first prompt, usable with--resumebut exactly the recognition work naming was supposed to save you. And do not reach for themy-app-3fstyle display name: that identifies running sessions in listings and is not a resume handle at all. Treat named sessions like branches, one per workstream. -
A session was launched with
--mcp-config ./mcp.json. You resume it and the MCP tools are missing. Is this a bug?Show answerAnswer
No — pass the flag again. A resumed session does not restore every launch flag, and
--mcp-configis on the documented list along with--settings,--plugin-dir,--fallback-modeland--add-dir.The rule of thumb is the same on-disk-versus-in-the-moment distinction that decided what survives compaction in Lesson 3.2: configuration that lives on disk comes back by itself — standard settings files such as
settings.jsonare re-read at launch — while configuration you typed on the command line does not. -
You resume a 140k-token session from last week and the dialog appears. What are you actually choosing between, and which option should you almost never pick?
Show answerAnswer
You are choosing what later requests carry, not what this one costs. The session is over 100,000 tokens and has been idle more than about an hour, so its prompt cache has expired and the next request reprocesses the full history whichever option you pick. Resume from summary runs
/compactimmediately — one summarization request, after which history is replaced by the summary, recent exchanges and up to five recently read files — making every later request cheaper, at the price that whatever the summary omits is gone. Resume full session as-is keeps every detail available, at a per-request cost that scales with the conversation.Almost never pick Don't ask me again. It reads like a preference about dialogs and is not: it resumes full and commits every future resume to the most expensive option without telling you. If you are going to answer this by reflex, make the reflex one of the first two.