Skip to content
FunCoding

Search

Search docs, agents, posts, Skills and MCP servers

管理会话

命名、恢复、分叉会话,使用会话选择器,管理上下文,以及导出和定位会话数据。

会话是和项目目录绑定的一段已保存的对话。Claude Code 在你工作时把它存在本地,所以你可以接着上次继续、分叉出去试另一种方案,或在多个任务之间切换。

本页讲 CLI。桌面应用、claude.ai/code 和 VS Code 扩展各自有自己的会话列表。

恢复会话

会话会持续保存到本地的转录文件,所以退出或运行 /clear 之后仍可回到它。入口有:

命令作用
claude --continue重新打开当前目录里最近的一次对话
claude --resume打开会话选择器
claude --resume <name>直接恢复指定名字的会话
claude --resume <transcript-path>恢复该绝对路径下 .jsonl 转录文件里的对话
claude --from-pr <number>打开会话选择器,只显示与该 PR 关联的会话
/resume在已有会话里切换到另一段对话

用 claude -p 或 Agent SDK 创建的会话不会出现在选择器里,也不会被 claude --continue 选中,但可以把会话 ID 传给 claude --resume <session-id> 恢复。claude --resume <session-id> 可以在任意目录运行:它先在当前项目目录及其 worktree 里找,再找本机的其他项目。

恢复后会还原什么

  • 对话历史:完整历史,包括工具调用和结果。上次进程结束时仍在运行的工具不会重新执行,Claude 会看到它被标记为「结果记录前被中断」,并被告知先检查是否已生效再决定是否重跑
  • 模型:延续会话之前所用的模型(模型已下线、被 availableModels 禁止、启动时用 --model 或 ANTHROPIC_MODEL 指定、或使用 Bedrock 等带专属部署 ID 的提供商时除外)
  • 智能体:用 --agent 或 agent 设置启动的会话会继续以该智能体运行
  • 权限模式:在终端用 claude --continue、claude --resume <session-id> 或名字唯一匹配的 claude --resume <name>(不带 -p)恢复时,会还原会话当时的权限模式;传 --permission-mode 或 --dangerously-skip-permissions 可覆盖。从会话选择器或 /resume 恢复时不还原,按新会话的方式起步。上次在 bypassPermissions 或 plan 下结束的会话,终端恢复后用新会话本来的权限模式
  • 活动中的目标、未过期的定时任务会还原;后台 Bash 和监视任务不会

并非启动时的所有配置标志都会还原。如果会话依赖 --mcp-config、--settings、--plugin-dir、--fallback-model 或 --add-dir 添加的目录,恢复时要再传一次。

从摘要恢复

在 Pro 或 Max 套餐下,恢复一个闲置超过约一小时、且超过 10 万 token 的会话时,Claude Code 会在你发第一条消息前弹出对话框。此时会话的提示缓存已过期,所以无论选哪项,下一次请求都要完整处理一遍历史。三个选项:

  • Resume from summary:立即运行 /compact,用摘要、最近几轮和最多五个最近读取的文件替换历史,之后每次请求携带摘要,更省
  • Resume full session as-is:原样加载,保留所有细节,但每次请求的成本随对话大小增长
  • Don't ask me again:原样恢复并不再显示该对话框

会话选择器在哪里找

默认显示当前 worktree 的会话(包括标为 bg 的后台会话),以及用 /add-dir 添加了当前目录的其他会话。按 Ctrl+W 扩展到仓库的所有 worktree,按 Ctrl+A 扩展到本机所有项目。第一条提示是 /loop 命令的会话不会出现在选择器里,claude --continue 也会跳过它们。

按名字恢复会在当前仓库及其 worktree 内解析:claude --resume <name> 精确匹配就直接恢复,名字有歧义时打开选择器并把名字预填为搜索词;/resume <name> 有歧义时则报错。

给会话命名

给会话起个有描述性的名字,便于在选择器里找到并按名字恢复,并行做多个任务时尤其有用。

时机方法
启动时claude -n auth-refactor
会话中/rename auth-refactor,名字也会显示在提示栏上
在会话选择器里高亮会话后按 Ctrl+R
接受计划时在计划模式下接受计划,会按计划生成会话标题(除非你已命名)
在 claude.ai 或 Claude App 里重命名 Remote Control 会话(需要 v2.1.221 或更新版本)

如果你给会话起的名字已被本机另一个活动会话使用,Claude Code 会保留原会话的名字,把你的改成带两个单词后缀的变体(如 auth-refactor-graceful-unicorn)并告诉你。

没命名的会话还有两个由 Claude Code 分配的标签:默认显示名(工作目录名加两个字符后缀,如 my-app-3f,用于正在运行会话的列表,不能用来恢复)和生成的标题(由后台请求根据第一条提示总结,可以用来恢复)。

会话选择器快捷键

在会话里运行 /resume,或不带参数运行 claude --resume,打开交互式会话选择器:

快捷键动作
↑ / ↓在会话间移动
→ / ←展开或折叠分组的会话
Enter恢复高亮的会话
Space预览会话内容
Ctrl+R重命名高亮的会话
/ 或任意可打印字符进入搜索模式;粘贴 GitHub、GitLab 或 Bitbucket 的 PR/MR 链接可以找到创建它的会话
Ctrl+A显示本机所有项目的会话,再按一次返回
Ctrl+W显示当前仓库所有 worktree 的会话,再按一次返回
Ctrl+B只显示当前 git 分支的会话,再按一次显示全部
Esc退出选择器或搜索模式

分叉会话

分叉会复制到目前为止的对话并切换过去,原会话保持不变,适合尝试另一种方案而不丢掉原来的路径。

在会话里运行 /branch(可带名字):

/branch try-streaming-approach

不带名字则以对话里的第一条提示命名。从命令行用 --continue 或 --resume 搭配 --fork-session:

claude --continue --fork-session

/branch 会打印两个会话 ID:你现在所在的新分支和原会话。原会话可以用 /resume <原名字> 回去。分叉时,对话历史复制到分支;「本会话允许」的权限授权会保留(同一进程内);仍在运行的后台子智能体和后台 Bash 命令继续运行,输出出现在新分支里;Remote Control 连接保持。

如果在两个终端里不分叉地恢复同一个会话,两边的消息会交织写入同一份转录。会话内基于检查点的回退见检查点。

管理会话内的上下文

这些命令在不离开会话的情况下控制上下文窗口里有什么:

  • /clear:用空上下文重新开始。之前的对话会被保存,可以用 /resume 找回
  • /compact [instructions]:用摘要替换历史,可选地聚焦于你指定的内容
  • /context:显示当前是什么在占用上下文

导出与定位会话数据

运行 /export 打开菜单,把当前对话复制到剪贴板或存成纯文本文件;带文件名参数则直接写入该文件。

要从脚本里访问对话,按触发方式选:

  • 运行一次 Claude 并拿到结果:claude -p 搭配 --output-format json 或 stream-json,获取结果、会话 ID、用量和花费
  • 向已有会话提问:把会话 ID 传给 claude -p --resume
  • 响应会话事件:Hook 和状态栏命令的输入里有 transcript_path 字段,SessionEnd Hook 可以在会话结束时归档转录
  • 嵌入你的应用:用 Agent SDK 以编程方式接收每条消息
claude -p --resume <session-id> --output-format json "summarize what we changed" | jq -r '.result'

默认情况下转录存为 JSONL,路径是 ~/.claude/projects/<project>/<session-id>.jsonl,其中 <project> 是工作目录路径把非字母数字字符替换成 - 的结果。每行是一个 JSON 对象,格式属于内部实现、随版本变化,所以不要直接解析,请用 /export 或上面的脚本接口。

可配置的位置和保留策略:

目的设置位置
把存储移出 ~/.claudeCLAUDE_CONFIG_DIR环境变量
自己命名 <project> 目录CLAUDE_CODE_PROJECT_DIR_NAME环境变量
修改默认 30 天的保留期cleanupPeriodDayssettings.json
在所有模式下禁止写转录CLAUDE_CODE_SKIP_PROMPT_HISTORY环境变量
对单次非交互运行禁止写入--no-session-persistence配合 claude -p 的 CLI 标志