CCLearn

Resuming — --continue, --resume, and naming things

verified against Claude Code 2.1.261 · 2026-09-0914 min

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

CommandWhat it does
claude --continueResumes the most recent interactive session in the current directory
claude --resumeOpens 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
/resumeSwitches 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:

WhenHow
At startupclaude -n auth-refactor
During a session/rename auth-refactor — the name also shows on the prompt bar
From the pickerHighlight a session and press Ctrl+R
On plan acceptAccepting 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 --resume and 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 --resume and /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:

text
--mcp-config   --settings   --plugin-dir   --fallback-model   --add-dir

Standard 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:

OptionWhat it doesThe trade
Resume from summaryRuns /compact immediately: one summarization request, then history is replaced by the summary, recent exchanges, and up to five recently read filesCheaper on every later request; whatever the summary omits is gone
Resume full session as-isLoads the conversation unchangedEvery detail stays available, at a per-request cost that scales with the conversation
Don't ask me againResumes full, and stops offering the choiceConvenience 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

  1. 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 answer

    claude --resume, which opens the session picker — or claude --resume <name> if the session has a name. --continue is 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-refactor at startup, /rename auth-refactor during the session, or Ctrl+R on it in the picker. Without that you are hunting for it by its generated title — a background paraphrase of your first prompt, usable with --resume but exactly the recognition work naming was supposed to save you. And do not reach for the my-app-3f style display name: that identifies running sessions in listings and is not a resume handle at all. Treat named sessions like branches, one per workstream.

  2. A session was launched with --mcp-config ./mcp.json. You resume it and the MCP tools are missing. Is this a bug?

    Show answer

    No — pass the flag again. A resumed session does not restore every launch flag, and --mcp-config is on the documented list along with --settings, --plugin-dir, --fallback-model and --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.json are re-read at launch — while configuration you typed on the command line does not.

  3. 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 answer

    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 /compact immediately — 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.

Sources