会话管理:--continue、--resume、会话命名与导出

会话是什么

一次会话(session)就是一段绑定到项目目录的对话,Claude Code 边聊边把它存成本地 JSONL 转录文件。退出、崩溃、/clear 都不等于丢失——会话像游戏存档,随时可以读档回来。这套机制是 --continue、--resume、/rewind、/export 共同的地基。

六个入口,覆盖所有回来场景

命令 作用
claude --continue(或 -c) 接续当前目录最近一次会话
claude --resume 弹出会话选择器
claude --resume <名字> 按名字直接恢复
claude --resume <ID> 按会话 ID 恢复(可跨目录,甚至跨项目)
claude --from-pr 1234 列出与某个 PR 关联的会话
/resume 会话内切换到别的会话

日常九成的需求是 claude -c:早上的重构下午接着干。稍复杂的就 claude --resume 挑列表。有个细节:转录文件按项目目录归档,--resume <ID> 找不到时它会在当前项目和 worktree 里找,再到全机其他项目找,但要求全机只有一份匹配,宁报"没找到"也不猜。

命名:让会话可以被一句话找回

并行任务一多,"哪个会话是干嘛的"就成了问题。命名是解药,有四个入口:

claude -n auth-refactor      # 启动时命名
/rename auth-refactor        # 会话中改名(也显示在提示栏)

会话选择器里高亮一条按 Ctrl+R 也能改名;计划模式批准计划时会自动生成一个基于计划的标题(你没手动命名的话),这个标题同样可以作为恢复句柄。没命名的会话也有默认显示名(目录名加两位后缀),但那只是显示用,不能拿来 --resume。

会话选择器的完整键位

claude --resume 打开的选择器功能比想象的多,值得花两分钟记键位:

键 功能
上/下 或 k/j 移动
数字 1-9 直接恢复对应行
Space 预览会话内容
Ctrl+R 重命名
直接打字 搜索过滤(贴 PR URL 能找到创建该 PR 的会话)
Ctrl+W 扩大到本仓库所有 worktree 的会话
Ctrl+B 只看当前 git 分支的会话
Ctrl+A 扩大到本机所有项目

默认列表显示当前 worktree 的会话,多 worktree 用户重点记 Ctrl+W 和 Ctrl+B。

分叉与分支:两条路都试试

发现方向错了想试另一条路?两条路可选:/branch [名字] 复制当前对话并切进副本,原对话原封不动留在选择器里随时回去;命令行上 claude --continue --fork-session 同理但开在新进程。恢复会话时权限模式也基本跟着还原(计划模式例外较多),细节以官方会话文档为准。

两者的取舍很简单:想在同一个终端里继续操作就用 /branch(进程不换,"本次会话内不再询问"的权限授权也会带过去);想让副本独立跑就用 --fork-session(新进程,权限要重新批)。相关命令还有 /fork(把对话复制成后台会话,本会话继续干活)和 /subtask(派一个继承完整对话的子代理去干副活,结果回到主对话)——它们构成一个完整的"对话分身术"工具箱。

打几个比方理清关系:--continue 是存档续玩,/branch 是读档后另开一个存档位——主线剧情不丢,支线随便浪;/fork 是把存档交给朋友去打,你继续主线;/subtask 是让分身去打副本,装备(结论)带回来。

转录文件、保留期与崩溃恢复

会话数据的存储细节值得知道,因为总有一天你要跟它打交道:

  • 位置:~/.claude/projects/<项目名>/<会话ID>.jsonl,项目名是工作目录路径的非字母数字字符换成 - 得来的;
  • 内容:每行一个 JSON 对象——消息、工具调用、工具结果全在里面,明文存储;
  • 保留期:默认 30 天后随清理扫除(cleanupPeriodDays 可改,最小 1 天);自动记忆目录不受清理影响;
  • 隐私提示:转录是明文。如果会话中读到了密钥或敏感文件,它们就在磁盘上的转录里。敏感环境调低保留期,或用权限规则禁止读密钥文件。

崩溃恢复是转录机制的隐性福利:进程挂了,工作重开 claude -c 就接上了。被中断的工具调用会在恢复时标记"未完成",Claude 被告知先检查是否生效再决定重跑——不会出现"crash 后重复扣款"式的二次执行。

一个使用纪律:同一个会话别在两个终端里同时开着。没有分叉地恢复同一会话,两边消息会交织进同一条转录,历史会变得混乱。要在两处接续就先 /branch 分叉。

导出与会话数据的归宿

人看的导出用 /export:可复制到剪贴板或存成纯文本文件,消息和工具输出都渲染成可读格式。写事故复盘、给同事展示问题现场,都用它。

脚本用的接口是另一套:

# 结构化拿结果(JSON 里有 result、session ID、用量、成本)
claude -p "总结这次改动" --output-format json | jq -r '.result'

# 给已有会话追问一句并拿结构化回答
claude -p --resume <session-id> --output-format json "我们改了哪些文件"

转录原文存在 ~/.claude/projects/<项目>/<会话ID>.jsonl,每行一个 JSON 对象。注意官方明确说这个内部格式随版本可能变,脚本别直接解析它,走 /export 或上面的结构化接口。默认保留期 30 天(cleanupPeriodDays 可调),自动记忆不在清理范围。想手动删某个项目的全部数据用 claude purge <路径>,支持 --dry-run 预览删除计划。

三个真实使用场景

场景一:跨天的重构。 周五的重构进行到一半,周一 claude -c 接上。恢复后它会先复述一下"我们做到哪了",你确认或纠正后继续——比重新口头同步上下文快十倍。

场景二:一次失败的尝试要复盘。 方案 A 试了三天失败,/rewind 回到决策点,/branch 出一条方案 B 的支线继续。方案 A 的全过程留在原会话里当反面教材,复盘会上 /export 导出直接用。

场景三:交接。 你休假,同事接手。他 claude --resume 从选择器里找到你命名清晰的会话,/recap 一句话看清现状,继续干活。命名 + 导出 + 摘要,三件套交接无摩擦。

恢复时能带回来什么

--resume 恢复的不只是消息。完整清单值得过一遍,知道边界在哪才不会踩空:

恢复项 行为
对话历史 全量还原;压缩过的会话从摘要处接续
模型 沿用会话当时的模型
权限模式 终端 --continue / --resume 名字或ID 会还原当时的模式;从选择器恢复则按新会话规则
计划模式 会话结束时在 plan 模式,恢复时通常还在 plan 模式
会话内定时任务 未过期的会被还原
活跃目标(goal) 带过来,但计数和计时重置
被中断的工具调用 标记为"未完成",Claude 先核查再决定重跑
启动参数 --mcp-config、--settings、--add-dir 等需重传;settings.json 里的常规配置自动重读

特别说明 claude -p 与 Agent SDK 创建的会话:它们不出现在选择器、也不被 --continue 覆盖,但可以用 claude --resume <ID> 精确恢复——脚本里产出的会话照样可以人工接管。

后台会话(挂到后台跑的)也在恢复体系里:选择器里标着 bg,恢复一个还在跑的后台会话会直接附着上去而不是重复加载。

一句话总结本章:会话是资产,命名是索引,导出是出口。 把这套机制用顺之后,你会发现"关机焦虑"消失了——任务可以放心切走,一切都能回来。

本章由 WorkBuddy 原创整理,事实性内容参考 Claude Code 官方文档。