Claude Code 如何查找会话 ID
会话是按项目存储的。Anthropic 的会话文档指出,Claude Code 将记录“以 JSONL 格式存储在 ~/.claude/projects/<project>/<session-id>.jsonl,其中 <project> 是你的工作目录路径,非字母数字字符被替换为 -”。
当你通过 ID 恢复时,Claude Code 按固定顺序搜索:
- 当前项目目录及其 git 工作树 (worktrees)
- 此机器上的每个其他项目
Anthropic 为第二步增加了一个条件:“仅当恰好有一个其他项目持有该 ID 的记录时,跨项目搜索才会解析该 ID;因此,手动复制的副本会导致 Claude Code 报告未找到,而不是恢复任意一个副本。”
版本在这里很重要。错误参考指出:“在 v2.1.223 之前,查找止于当前项目目录及其 git 工作树,因此请从上次工作的目录中恢复。”在旧版本上,从不同的文件夹运行命令就足以产生该错误。
原因 1:ID 错误
最简单的原因是输入错误或 ID 错误。对于你以交互方式启动的会话,ID 会显示在 Claude Code 中。对于非交互式运行,Anthropic 表示“ID 是 --output-format json 输出的 session_id 字段”。
两个细节导致 ID 容易出错:
- 显示名称不是 ID。 你未命名的会话会获得一个默认显示名称,例如带有短后缀的文件夹名称。Anthropic 表示:“默认名称不是恢复句柄。如果你将其传递给
claude --resume或/resume,Claude Code 将找不到该会话。” - 生成的标题有效,但仅作为名称。 “只有生成的标题可以作为恢复句柄”。按名称恢复可以在当前仓库及其工作树中解析,但不能在机器上的每个项目中解析。
原因 2:记录在 30 天后被删除
这个原因很容易被忽略,因为清理是静默进行的。错误参考明确列出了这一点:“Claude Code 在保留期(默认为 30 天)后,根据保留清理规则删除记录”。
控制它的设置是 cleanupPeriodDays。Anthropic 的设置参考描述了它的作用:Claude Code 将“会话记录和其他应用程序数据”保留这么多天,并且“清理过程会删除记录而不显示消息”。其默认值为 30,最小值为 1。
因此,你上次接触时间超过一个月的会话可能已经消失了。发生这种情况时没有提示,所以这个错误可能是第一个迹象。
两个相关点:
- Desktop 和 Cowork 会话的处理方式不同。 默认情况下,Claude Code 会将你在 Claude Desktop 或 Cowork 中启动或最近继续的会话记录保留超过此期限,并且可以通过单独的设置
desktopSessionCleanupPeriodDays为其设定年龄限制。 - 你可以延长记录保留时间。 将其设置为
0会导致验证失败,因此 Anthropic 建议“设置一个较大的值,例如3650以实现长期保留”。
提高该值只能保护仍然存在的记录。一旦清理程序删除了记录,更改设置无法将其找回。
原因 3:会话在另一台机器上运行
记录不会同步。错误参考指出:“Claude Code 在本地存储记录,因此请在运行该会话的机器上恢复会话”。
如果你在工作笔记本电脑上启动了一个会话并尝试在台式机上恢复它,将一无所获。解决方法是在其运行的地方恢复。如果你经常在机器之间移动工作,我们的查找、恢复和删除 Claude Code 会话历史指南涵盖了历史记录在每台机器上的存放位置。
原因 4:两个副本携带相同的 ID
如果你复制了 ~/.claude/projects 下的项目文件夹,两个记录最终可能会拥有相同的 ID。Anthropic 表示,在这种情况下,“Claude Code 会报告此消息,而不是任意恢复其中一个副本”。
解决方法是删除或重命名重复的副本,使只有一个记录持有该 ID,然后再次尝试恢复。
从未在选择器中显示的会话
某些会话在设计上被排除在会话选择器之外,这看起来像是丢失了:
-p和 Agent SDK 会话。 “Claude Code 将使用claude -p或 Agent SDK 创建的会话排除在会话选择器和claude --continue之外。”你仍然可以通过传递其会话 ID 来恢复其中一个。/loop会话。 第一个提示词是/loop命令的会话不会出现在选择器中,claude --continue也会跳过它们。- 正在运行的后台会话。
claude --continue会打开已完成的后台会话,但不会打开仍在运行的会话。在这种情况下,Claude Code 会退出并告诉你该会话正在后台运行,并提供其 ID。
对于 -p 和 SDK 运行,错误参考的建议是“根据原始运行打印的 session_id 重新检查 ID”。
如何搜索此机器上的每个项目
对于交互式会话,会话选择器的搜索范围可以超出当前文件夹。Anthropic 的会话文档解释了它默认显示的内容:来自当前工作树的会话(包括后台会话),以及通过 /add-dir 添加了当前目录的会话。
要扩大范围:
- “使用
Ctrl+W扩大到仓库的所有工作树,或使用Ctrl+A扩大到此机器上的每个项目。”
因此,对于交互式会话,该错误的官方修复方法是“使用 claude --resume 打开会话选择器,按 Ctrl+A 将其扩大到此机器上的每个项目,然后选择会话”。
当你从不相关的项目中选择会话时,Claude Code 不会移动它。它会“将 cd 和恢复命令复制到你的剪贴板”。如果该项目的目录不再存在,它将在你当前的目录中恢复会话。
含义不同的类似消息
一些附近的错误看起来很相似,但原因不同。
Failed to resume the conversation (恢复对话失败)。 这意味着 Claude Code 找到了会话,但“无法读取或处理保存的记录”。它会退出而不是在部分加载的状态下继续,消息中包含重试命令。Anthropic 的步骤:使用会话 ID 重试;在 v2.1.285 之前的版本上,更新并再次恢复,因为“这些版本在保存的记录包含无法读取的条目时会恢复失败”;如果仍然失败,请启动新会话。
The saved conversation is no longer on disk (保存的对话已不在磁盘上)。 这是针对后台会话的。当会话“在后台服务关闭时结束,并且记录清理随后删除了其保存的对话(例如机器关闭数周后)”时,会出现此提示。Claude Code 会拒绝恢复,而不是重新运行会话的原始提示词。你可以使用 claude rm 删除该行,或者使用 claude respawn 将原始提示词作为新对话再次运行。
The session has no saved transcript (会话没有保存的记录)。 当你连接到一个移至后台但在“运行自己的轮次之前就停止了”的会话时,会出现此提示。如果它是从另一个对话转入后台的,Anthropic 指出该对话仍然完好无损。
记录包含什么,不包含什么
当恢复成功时,你可以找回对话。根据 Anthropic 的目录参考,记录包括“消息、工具调用和工具结果”。这就是丢失记录会很痛苦的原因:它是会话的完整工作记录。要详细了解其中的内容,请参阅我们的Claude Code 记录视图显示什么指南。
但记录是单台机器上的一个文件,默认寿命为 30 天。会话中超出该会话本身的重要部分,例如你达成的决定、你拒绝的方法或你追踪到的错误原因,只有在也被写在其他地方时才是安全的。
人们首先尝试的操作
粘贴显示名称。 默认显示名称不是恢复句柄。
在旧版本上从不同文件夹运行命令。 在 v2.1.223 之前,查找不会搜索其他项目。
寻找一个月前的会话。 记录默认在 30 天后被删除,且没有消息提示。
在不同的机器上恢复。 记录存储在本地。
复制项目文件夹作为备份。 重复的 ID 会导致 Claude Code 报告未找到。
修复方法:找到会话或找回重要内容
第 1 步:检查 ID
使用 Claude Code 显示的 ID,或 -p 运行的 JSON 输出中的 session_id,而不是显示名称。
第 2 步:扩大选择器范围
运行 claude --resume 并按 Ctrl+A 搜索此机器上的每个项目。
第 3 步:检查机器和时长
在运行会话的机器上恢复。如果它早于你的 cleanupPeriodDays,请假设记录已消失。
第 4 步:如果需要旧会话,请提高保留期
在设置中将 cleanupPeriodDays 设置为更大的数字,以延长未来记录的保留时间。
第 5 步:写下你不能承受丢失的内容
在重要会话结束后,将决定和发现记录在记录文件之外。
在 MemoryLake 中设置
记录是会话的完整记录,默认在单台机器上保留 30 天。下个月你需要的少数几件事,如决定、根本原因或商定的惯例,值得写在不会过期的地方。
MemoryLake 是此类项目上下文(如决定、发现和惯例)的记忆层,保存在你维护的一个地方,并可供你连接的助手(如 ChatGPT、Claude Code 和 Codex)使用。
你自己用自己的话编写条目。不会从你的会话记录、~/.claude 文件夹、会话选择器、CLAUDE.md 文件、自动记忆或任何供应商的存储中读取、写入或删除任何内容。恢复、保留和清理的工作方式仍如 Anthropic 所描述的那样。
第 1 步:创建 API 密钥
登录并从控制面板生成密钥。像对待任何其他凭据一样,将其存储在仓库之外。

第 2 步:上传你的第一条记忆
从你在修复方法的第 5 步中写下的内容开始:重要会话中的决定、根本原因和惯例。每个条目一项内容。

第 3 步:连接你的 AI 和代理
连接 Claude Code 和你使用的任何其他助手。在任何机器上的新会话都可以利用相同的条目。

这在实践中改变了什么
第一个区别是减少了对恢复 (resume) 的依赖。如果记录消失了,结论还在。
第二个区别是每台机器上都有相同的上下文。条目不与运行会话的文件夹绑定。
第三个区别是没有保留期竞赛。你写下的内容不取决于 cleanupPeriodDays。
恢复 Claude Code 会话的最佳实践
为重要会话命名。 使用 claude -n 或 /rename,并按名称恢复。
保留真实的会话 ID。 显示名称不能作为恢复句柄。
在选择器中使用 Ctrl+A。 它会搜索机器上的每个项目。
了解你的保留期。 记录默认在 30 天后被删除。
不要复制项目文件夹。 一个 ID 对应两个副本会导致恢复报告未找到。
在重试失败的恢复之前进行更新。 旧版本在遇到无法读取的条目时会失败。
写下结果。 记录不是你应该拥有的唯一记录。
结论
当你向 claude --resume 传递会话 ID 且没有保存的记录与之匹配时,Claude Code 会显示“未找到对话”错误。在 v2.1.223 及更高版本中,它会先搜索当前项目,然后搜索机器上的每个其他项目。记录在案的原因包括 ID 输入错误、记录在 30 天默认保留期后被删除、会话在另一台机器上运行以及携带相同 ID 的重复副本。
要恢复,请检查 ID,使用 claude --resume 打开选择器并按 Ctrl+A,然后在运行会话的机器上恢复。如果记录已过期,它就消失了,因此请为未来提高 cleanupPeriodDays,并将重要会话的决定记录在记录文件之外。