Claude Code 日常使用
Claude Code 日常使用
会话管理
2 分钟阅读
管理会话
命名、恢复、分支和切换 Claude Code 对话。涵盖
--continue、--resume、--from-pr、/resume选择器、会话命名、导出转录以及转录存储位置。
会话是绑定到项目目录的保存对话。Claude Code 在你工作时将其本地存储,因此你可以从中断处继续、分支尝试不同方法,或在任务之间切换。
桌面应用、Claude Code on the web 和 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 工作树,因此在其他地方创建的会话会报告 No conversation found with session ID: <session-id>。
会话选择器的查找范围
会话按项目目录存储。默认情况下,会话选择器显示当前工作树的交互式会话,以及使用 /add-dir 添加了当前目录的其他地方启动的会话。使用 Ctrl+W 扩展到仓库的所有工作树,或 Ctrl+A 扩展到本机上的每个项目。
从 v2.1.169 开始,使用 /cd 移动会话会将其重新定位到新目录的项目存储,因此之后它会出现在该目录的选择器中。从 v2.1.196 开始,移动的会话即使在崩溃或强制退出后也不会出现在旧目录的选择器中。在早期版本中,如果旧路径包含下划线等特殊字符,它在不干净的退出后仍可能重新出现在旧目录的列表中。
选择同一仓库另一个工作树中的会话会就地恢复。选择来自无关项目的会话会改为将 cd 和恢复命令复制到你的剪贴板。
按名称恢复会解析当前仓库及其工作树。两种形式都查找精确匹配并直接恢复,即使它位于不同的工作树:
| 命令 | 精确匹配 | 模糊名称 |
|---|---|---|
claude --resume <name> | 直接恢复 | 打开会话选择器,名称预填充为搜索词 |
/resume <name> | 直接恢复 | 报告错误;运行无参数的 /resume 以打开会话选择器 |
命名会话
给会话起描述性名称,以便在会话选择器中找到它们并按名称恢复。当你并行处理多个任务时,这最重要。
| 时机 | 设置名称的方式 |
|---|---|
| 启动时 | claude -n auth-refactor |
| 会话期间 | /rename auth-refactor。名称也会显示在提示栏上 |
| 从会话选择器 | 高亮会话并按 Ctrl+R |
| 计划接受时 | 在计划模式中接受计划会根据计划内容自动命名会话,除非你已设置名称 |
会话命名后,使用 claude --resume <name> 或 /resume <name> 返回。请参阅恢复会话了解名称跨工作树的解析行为。
从未命名的交互式会话在启动时仍会获得默认显示名称。需要 Claude Code v2.1.196 或更高版本。默认名称结合工作目录名称和两位后缀,例如 my-app-3f,并在运行会话列表中标识会话,如 agent view 和 claude agents --json 输出。
默认名称不是恢复句柄: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 | 显示当前仓库所有工作树的会话。再次按以返回当前工作树。仅在多工作树仓库中显示 |
Ctrl+B | 过滤到当前 git 分支的会话。再次按以显示所有分支 |
Esc | 退出会话选择器或搜索模式 |
每行显示会话名称(如果已设置),否则显示对话摘要或第一个提示,以及自上次活动以来的时间、消息数和 git 分支。在你使用 Ctrl+A 扩展到所有项目后,项目路径会显示。
使用 /branch、/rewind 或 --fork-session 创建的分支会话会分组在其根会话下。按 → 展开组。
分支会话
分支会创建到目前为止对话的副本并切换你进入它,保持原始会话不变。用它来尝试不同的方法而不丢失你正在走的路。
在会话中,运行 /branch 并可选带一个名称:
如果省略名称,Claude Code 会以对话中的第一个提示命名新分支。从 v2.1.198 开始,这在压缩后也适用;早期版本会回退到字面名称 Branched conversation,而非在压缩摘要之后查找原始第一个提示。
从命令行,结合 --continue 或 --resume 与 --fork-session:
原始会话保持不变,并仍可在会话选择器中使用。/branch 确认会打印两个会话 ID:你现在所在的新分支和原始会话。要返回原始会话,将其 ID 传递给 /resume,使用会话选择器,或运行 /resume <original-name>。你用"允许本次会话"批准的权限不会延续到新分支。如果你在不分支的情况下在两个终端中恢复同一会话,来自两者的消息会交错进入同一个转录。
对于单一会话中基于检查点的回退,请参阅检查点。
管理会话内的上下文
这些命令控制上下文窗口中的内容,而无需离开会话:
/clear:以空上下文重新开始。之前的对话会被保存并可恢复/compact [instructions]:将历史替换为摘要,可选聚焦于你指定的内容/context:显示当前消耗上下文的内容
有关压缩如何与 CLAUDE.md、技能和规则交互,请参阅上下文窗口指南。有关何时清除与压缩的策略,请参阅最佳实践。
导出和定位会话数据
运行 /export 打开一个菜单,允许你将当前对话复制到剪贴板或保存为纯文本文件,消息和工具输出渲染为可读文本。传递文件名以跳过菜单并直接写入该文件。
从脚本访问对话
/export 生成供人阅读的渲染转录。以下接口生成供脚本解析的结构化数据:运行的 JSON 结果、会话转录文件的路径或事件的实时流。根据触发脚本的内容选择:
- 运行一次 Claude 并捕获结果:使用
--output-format json或stream-json调用claude -p,以将非交互式运行的结果、会话 ID、使用量和成本捕获为结构化 JSON。 - 向现有会话提问:将会话 ID 传递给
claude -p --resume以发送后续提示,如摘要请求,并捕获结构化响应。 - 响应会话事件:读取钩子和状态行命令接收的
transcript_path字段作为输入。SessionEnd钩子可以在会话结束时归档转录。 - 将 Claude 嵌入 TypeScript 或 Python 应用:使用 Agent SDK 以编程方式接收每条消息。
以下示例使用第二个接口。它向现有会话发送后续提示并使用 jq 读取答案:
转录存储位置
默认情况下,转录以 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 | CLI 标志与 claude -p |
另请参阅
这些页面涵盖相关的会话和并行机制: