管理会话
会话是与项目目录关联的已保存对话。Claude Code 在工作时将其本地存储,因此可以从中断处恢复、分支以尝试不同的方法,或在任务之间切换
- 命名、恢复、分支和在 Claude Code 对话之间切换
- 涵盖 –continue、–resume、–from-pr、/resume 选择器、会话命名、导出文本记录和文本记录存储位置
桌面应用、网页版 Claude Code 和 VS Code 扩展各自维护自己的会话历史记录 接下来主要讲述 CLI
恢复会话
会话在工作时持续保存到本地文本记录文件,因此可以在退出或运行 /clear 后返回到一个会话。使用这些入口点:
| 命令 | 功能 |
| claude –continue | 恢复当前目录中最近的会话 |
| claude –resume | 打开会话选择器 |
| claude –resume <name> | 直接恢复命名的会话 |
| claude –from-pr <number> | 恢复链接到该拉取请求的会话 |
| /resume | 从活跃会话内切换到不同的对话 |
使用 claude -p 或 Agent SDK 创建的会话不会出现在会话选择器中,但仍然可以通过将其 会话 ID 传递给 claude –resume <session-id> 来恢复它
从会话启动所在的目录运行此命令:会话 ID 查找的范围限于当前项目目录及其 git worktrees 因此在其他地方创建的会话会报告 No conversation found with session ID: <session-id>
会话选择器查看的位置
会话按项目目录存储:
- 默认情况下,会话选择器显示来自当前 worktree 的交互式会话,以及在其他地方启动但使用 /add-dir 添加了当前目录的会话
- 使用 Ctrl+W 扩展到存储库的所有 worktree,或使用 Ctrl+A 扩展到此计算机上的每个项目
从 v2.1.169 开始,使用 /cd 移动会话会将其重新定位到新目录的项目存储中,因此之后它会出现在该目录的选择器中 从 v2.1.196 开始,移动的会话在崩溃或强制退出后会保持不在旧目录的选择器中 在较早的版本中,当旧路径包含下划线等特殊字符时,在不干净的退出后,它也可能在旧目录的列表中重新出现
从同一存储库的另一个 worktree 选择会话会在原地恢复它
从不相关项目选择会话会将 cd 和恢复命令复制到您的剪贴板
按名称恢复会跨当前存储库及其 worktree 解析。两种形式都查找精确匹配并直接恢复它,即使它位于不同的 worktree 中:
| 命令 | 精确匹配 | 模糊名称 |
| claude –resume <name> | 直接恢复 | 打开会话选择器,名称预填充为搜索词 |
| /resume <name> | 直接恢复 | 报告错误;运行不带参数的 /resume 打开会话选择器 |
命名会话
为会话提供描述性名称,以便在会话选择器中可以找到它们,并可以按名称恢复
当并行处理多个任务时,这一点最重要
| 时间 | 如何设置名称 |
| 启动时 | claude -n auth-refactor |
| 在会话期间 | /rename auth-refactor。名称也会出现在提示栏上 |
| 从会话选择器 | 突出显示会话并按 Ctrl+R |
| 在计划接受时 | 在 Plan Mode 中接受计划会从计划内容命名会话,除非您已经设置了一个 |
会话命名后,使用 claude –resume <name> 或 /resume <name> 返回到它
有关名称解析如何跨 worktrees 工作的信息,请参阅恢复会话
从未命名的交互式会话在启动时仍会获得默认显示名称。默认名称将工作目录的名称与两个字符的后缀组合在一起
例如 my-app-3f,并在运行会话的列表中标识会话,例如 agent view 和 claude agents --json 输出 需要 Claude Code v2.1.196 或更高版本
默认名称不是恢复句柄:claude –resume <name>、/resume <name> 和会话选择器仅匹配您设置的名称。命名会话会替换默认名称
使用会话选择器
在会话内运行 /resume ,或不带参数运行 claude –resume ,以打开交互式会话选择器。使用这些快捷键导航、搜索和扩展列表:
| 快捷键 | 操作 |
| ↑ / ↓ | 在会话之间导航 |
| → / ← | 展开或折叠分组的会话 |
| Enter | 恢复突出显示的会话 |
| Space | 预览会话内容。在不将其捕获为粘贴的终端上也可以使用 Ctrl+V |
| Ctrl+R | 重命名突出显示的会话 |
| / 或除 Space 外的任何可打印字符 | 进入搜索模式并过滤会话。粘贴 GitHub、GitHub Enterprise、GitLab 或 Bitbucket 拉取或合并请求 URL 以查找创建它的会话 |
| Ctrl+A | 显示此计算机上所有项目的会话。再次按下以返回到当前存储库 |
| Ctrl+W | 显示当前存储库所有 worktrees 的会话。再次按下以返回到当前 worktree。仅在多 worktree 存储库中显示 |
| Ctrl+B | 过滤到当前 git 分支的会话。再次按下以显示所有分支 |
| Esc | 退出会话选择器或搜索模式 |
每行显示会话名称(如果已设置),否则显示对话摘要或第一个提示,以及自上次活动以来的时间、消息计数和 git 分支
使用 Ctrl+A 扩展到所有项目后,项目路径会出现
使用 /branch、/rewind 或 –fork-session 创建的分叉会话会分组在其根会话下
按 → 展开一个组
分支会话
分支创建迄今为止对话的副本并将切换到其中,保持原始对话完整
使用它来尝试不同的方法而不会丢失所在的路径
从会话内,运行带有可选名称的 /branch:
/branch try-streaming-approach
如果省略名称,Claude Code 会根据对话中的第一个提示为新分支命名
从 v2.1.198 开始,这也适用于 compaction 之后 较早的版本会回退到字面名称 Branched conversation,而不是查看 compaction 摘要之外的原始第一个提示
从命令行,将 –continue 或 –resume 与 –fork-session 结合:
claude --continue --fork-session
原始会话保持不变,并在会话选择器中保持可用
- /branch 确认打印两个会话 ID:现在所在的新分支和原始分支
- 要返回到原始分支,将其 ID 传递给 /resume、使用会话选择器或运行 /resume <original-name>
- 使用”允许此会话”批准的权限不会转移到新分支
- 如果在两个终端中恢复同一会话而不分叉,来自两者的消息会交错到一个文本记录中
对于单个会话内基于 checkpoint 的回退,请参阅 Checkpointing https://code.claude.com/docs/zh-CN/checkpointing
管理会话内的上下文
导出和定位会话数据
运行 /export 打开一个菜单,将当前对话复制到剪贴板或将其保存为纯文本文件
- 消息和工具输出呈现为可读文本
- 传递文件名以跳过菜单并直接写入该文件
从脚本访问对话
/export 生成一个供人阅读的呈现文本记录。下面的接口生成结构化数据供脚本解析:运行的 JSON 结果、会话文本记录文件的路径或事件的实时流。根据触发脚本的内容选择:
- 运行 Claude 一次并捕获结果:使用 –output-format json 或 stream-json 调用 claude -p 以捕获非交互式运行的结果、会话 ID、使用情况和成本作为结构化 JSON
- 向现有会话提问:将会话 ID 传递给 claude -p –resume 以发送后续提示(例如摘要请求),并捕获结构化响应
- 对会话事件做出反应:读取 hooks 和 status line commands 作为输入接收的 transcript_path 字段。SessionEnd hook 可以在会话结束时存档文本记录
- 在 TypeScript 或 Python 应用中嵌入 Claude:使用 Agent SDK 以编程方式接收每条消息
下面的示例使用第二个接口。它向现有会话发送后续提示,并使用 jq 读取答案:
claude -p --resume <session-id> --output-format json "summarize what we changed" | jq -r '.result'
文本记录存储位置
默认情况下,文本记录存储为 JSONL ,位置为 ~/.claude/projects/<project>/<session-id>.jsonl ,其中
- <project> 是工作目录路径,非字母数字字符被替换为 -
- 每行是消息、工具使用或元数据条目的 JSON 对象
条目格式是 Claude Code 的内部格式
在版本之间会发生变化,因此直接解析这些文件的脚本可能在任何版本上中断
要基于会话数据构建,请改用 /export 或 脚本接口
位置、保留期和写入行为是可配置的:
| 目的 | 设置 | 位置 |
| 将存储移出 ~/.claude | CLAUDE_CONFIG_DIR | 环境变量 |
| 更改 30 天保留期 | cleanupPeriodDays | settings.json |
| 在所有模式下禁止文本记录写入 | CLAUDE_CODE_SKIP_PROMPT_HISTORY | 环境变量 |
| 禁止一次非交互式运行的写入 | –no-session-persistence | 与 claude -p 一起使用的 CLI 标志 |
| Next:工作流程 | Previous:权限模式 | Home: 使用 Claude |