Claude Code 将您的会话历史记录保存在哪里
Anthropic 的会话文档定义了这一单元:"会话是与项目目录绑定的已保存对话。" 会话是在您工作时写入的:"在您工作时,会话会持续保存到本地转录文件中,因此您可以在退出或运行 /clear 后返回该会话。"
这些文件是纯 JSONL 格式。"默认情况下,Claude Code 将转录内容以 JSONL 格式存储在 ~/.claude/projects/<project>/<session-id>.jsonl,其中 <project> 是您的工作目录路径,非字母数字字符会被替换为 -。" 该格式不适合您进行编辑:"条目格式是 Claude Code 内部的,并且在不同版本之间会发生变化,因此直接解析这些文件的脚本可能会在任何版本发布时失效。"
有三个设置可以更改存储位置和保留时间。CLAUDE_CONFIG_DIR 可将存储移出 ~/.claude。cleanupPeriodDays 可更改转录内容的保留时间。而对于一次性运行,使用 claude -p 配合 --no-session-persistence 可以完全阻止写入转录内容。
为什么会话看起来似乎丢失了
在认为会话丢失之前,请检查以下几点。只有最后一种情况才意味着历史记录彻底消失了。
选择器仅显示当前工作区
会话选择器的初始范围很窄。默认情况下,它显示"当前工作区(包括后台会话)的会话",以及"在其他地方启动但通过 /add-dir 添加了当前目录的会话"。文档中指出了扩大范围的快捷键:"使用 Ctrl+W 扩大到该仓库的所有工作区,或使用 Ctrl+A 扩大到这台机器上的每个项目。"
如果您在不同的文件夹或同一仓库的不同工作区中启动了会话,它虽然存在于磁盘上,但超出了默认视图范围。claude --continue 的范围更窄:它"重新打开当前目录中最近的会话"。
某些类型的会话永远不会出现在选择器中
设计上排除了三种会话。"Claude Code 会将使用 claude -p 或 Agent SDK 创建的会话排除在会话选择器和 claude --continue 之外。" 并且 "首个提示词为 /loop 命令的会话不会出现在选择器中,claude --continue 也会跳过它们。" 您仍然可以通过 ID 访问其中的任何会话:"您仍然可以通过将工作会话 ID 传递给 claude --resume <session-id> 来恢复它。"
后台会话仍在运行
如果您最近的对话正在后台运行,claude --continue 将不会打开它。它会"退出并提示 Your most recent conversation is running in the background 以及该会话的 ID。" 请改为从 claude agents 接入它。
您正在查看其他应用程序的列表
CLI 并不是 Claude Code 的唯一界面,会话页面指出:"桌面应用、claude.ai/code 和 VS Code 插件各自保留自己的会话列表。" VS Code 文档则从另一个角度描述了与 CLI 的关系:"该插件和 CLI 共享相同的对话历史记录。要在 CLI 中继续插件中的对话,请在终端中运行 claude --resume。"
这两句话并不一定冲突:每个应用都有自己的列表,而 VS Code 插件的对话也可以通过 CLI 访问。如果丢失的历史记录是 Claude 应用(而非 Claude Code)中的聊天,我们关于查找丢失的 Claude 聊天历史记录的指南涵盖了这一情况。云端会话则又有所不同。它们列在 claude.ai/code 上,且 Web 文档指出:"--resume 会重新打开此机器本地历史记录中的对话,而不会列出云端会话。"
会话被移动了
"使用 /cd 移动会话会将其重新定位到新目录的项目存储中,因此之后它会出现在该目录的选择器中。" 如果您在会话中途更改了目录,请在新目录下查找。
会话已过期
这是历史记录彻底消失的唯一情况。Claude Code 会自动删除旧的转录内容:"只要 Claude Code 能够安全地确定保留期限,一旦以下路径中的文件早于 cleanupPeriodDays,它就会将其删除。默认值为 30 天,最小值为 1 天。" 子智能体(subagent)的转录内容会随其父会话一起删除。
有两种数据遵循不同的规则。自动记忆(Auto memory)会被保留:"清理扫描不会删除项目自动记忆目录中的记忆文件。" 此外,在 Claude Desktop 或 Cowork 中启动或上次继续的会话将"在任何时间"保留,除非您在 Claude Code v2.1.248 或更高版本上设置了 desktopSessionCleanupPeriodDays。
人们首先尝试的方法
运行 claude --continue 并以为这就是全部。 它只打开当前目录中最近的会话。
在不扩大范围的情况下搜索选择器。 默认视图是当前工作区。Ctrl+A 可以显示每个项目。
在选择器中寻找 claude -p 的运行记录。 非交互式和 SDK 会话已被排除。请通过 ID 恢复它们。
以为在智能体视图中删除会话会移除其历史记录。 事实并非如此。智能体视图文档指出,在您删除会话后,"它的转录内容仍会通过 claude --resume 保留在您的机器上"。
编辑 JSONL 文件以恢复或清理会话。 格式在不同版本之间会发生变化。请使用 /export 获取可读副本,并使用文档中说明的命令进行删除。
对于单个会话内的检查点,我们关于回滚 Claude Code 会话的指南涵盖了回滚时会恢复哪些内容。
解决方法:扩大选择器范围、通过 ID 恢复,然后设置保留期限并有目的地删除
步骤 1:查找会话
使用 claude --resume 打开选择器。如果会话不在那里,请按 Ctrl+W 查看该仓库的所有工作区,然后按 Ctrl+A 查看这台机器上的每个项目。从另一个工作区选择会话会在原处恢复它。对于不相关的项目,"Claude Code 会将 cd 和恢复命令复制到您的剪贴板。"
如果您知道会话 ID,则完全不需要选择器。"您可以从任何目录运行 claude --resume <session-id>"。Claude Code 会首先在当前项目及其工作区中查找,然后在所有其他项目中查找。您还可以直接传递文件本身:claude --resume <transcript-path> 会恢复"存储在该绝对路径下的 .jsonl 转录文件中的会话"。
如果您只粗略记得工作时间,可以按日期列出 ~/.claude/projects/ 下的文件。每个项目都有一个以其路径命名的文件夹,每个会话都是一个 .jsonl 文件。如果那里没有一个月以上的文件,请检查您的 cleanupPeriodDays 设置:清理扫描可能已经将其删除了。
步骤 2:以您需要的状态恢复它
恢复不仅能恢复消息。文档中列出了对话历史记录"包括工具调用和结果"、会话运行所使用的智能体、文档中记录的权限模式、任何活动目标,以及未完成的后台工作笔记。
某些启动选项不会恢复。"如果会话依赖于 --mcp-config、--settings、--plugin-dir、--fallback-model 或通过 --add-dir 添加的目录,请在恢复时重新传递它们"。在会话中途通过 /add-dir 添加的目录也不会恢复。settings.json 和 settings.local.json 中的设置会在启动时重新读取,因此无需重复输入。
如果您想在不改变原会话的情况下尝试其他操作,请在恢复时添加 --fork-session。会话页面还介绍了如何为会话命名,这使下一次搜索更加容易:claude --resume <name> 可以直接恢复精确匹配的会话。在长时间休假之前,我们关于 Claude Code 空闲压缩的指南涵盖了如果您在离开期间大型会话被压缩,您回来时会看到什么。
步骤 3:设置保留期限、保留重要内容并有目的地删除
选择保留期限。 在 settings.json 中设置 cleanupPeriodDays,以保留长于或短于 30 天的转录内容。托管设置可以为组织进行设置,此时 Claude Code 会使用该值。
保留任何重要内容的易读副本。 "运行 /export 打开一个菜单,允许您将当前对话复制到剪贴板或将其保存为纯文本文件"。将导出的文件保存到 ~/.claude 之外,这样针对该目录下路径运行的保留清理扫描就不会影响它。
使用 claude purge 删除项目的历史记录。 该命令会删除"项目的所有本地 Claude Code 状态:转录内容、任务列表、调试日志、文件编辑历史记录、提示词历史记录行,以及项目在 ~/.claude.json 中的条目。" 请先使用 --dry-run 进行预览。请注意,清除操作还会删除自动记忆:claude-directory 文档在其删除内容中列出了"projects/ 下的转录内容和自动记忆"。如果您想保留 Claude Code 了解到的关于该项目的信息,请在确认前检查计划。在 v2.1.288 之前,该命令为 claude project purge。
使用 claude rm 从列表中移除后台会话。 这可以整理智能体视图,但转录内容仍会保留在您的机器上,并可通过 claude --resume 继续使用。
在 claude.ai/code 删除云端会话。 "删除会话将永久移除该会话及其数据。此操作无法撤销。" 您可以从侧边栏的已归档过滤器或会话菜单中进行删除。
在 MemoryLake 中进行设置
会话历史记录是工作进展情况的记录。您返回旧会话寻找的内容通常更简短:您达成的决定、您否决的方法、最终起作用的设置。这些内容在冗长的转录中很容易丢失,并且当保留清理扫描运行或您清除项目时,它们会随之消失。
MemoryLake 是一个记忆层,用于将此类结论保存在您维护的一个列表中,供 Claude Code 以及您连接的其他助手(如 ChatGPT 和 Codex)使用,而无需关心磁盘上还保留着哪些转录内容。
您可以用自己的语言亲自编写这些条目。不会从您的会话转录、您的 ~/.claude 目录、您的自动记忆、您的云端会话或任何供应商的存储中读取、写入或删除任何内容。请不要包含机密和凭据,并遵守您组织关于项目细节的政策。
步骤 1:创建 API 密钥
登录并从控制面板生成一个密钥。该密钥属于您的 MemoryLake 工作区,与您的 Anthropic 账户是分开的。

步骤 2:上传您的第一批记忆
从您平时会去旧会话中寻找的内容开始:关于项目的决定、不起作用的方法及其原因、解决重复出现的命令和设置。每个条目记录一个决定,注明日期,并标明其所属的项目。

步骤 3:连接您的 AI 和智能体
连接 Claude Code 和您使用的其他助手。这样,新的会话就可以从您写下的结论开始,而无需任何人去恢复上个月的转录内容。

这在实践中带来了什么改变
第一个改变是,看起来凭空消失的会话变少了。一旦您知道选择器是从当前工作区开始的,Ctrl+A 和 claude --resume <session-id> 就能访问仍保存在磁盘上的会话。
第二个改变是删除变得更加审慎。保留期限是您自己选择的设置,claude purge --dry-run 会在删除任何内容之前显示计划,并且您知道从智能体视图中移除会话会保留其转录内容。
第三个改变是减少了对旧转录内容的依赖。会话过期是设计使然。写下结论意味着 30 天的清理扫除的是记录,而不是您对项目的知识。在并行会话之间共享这些知识是一个相关的问题,我们关于在 Claude Code 会话之间共享上下文的指南涵盖了这一内容。
Claude Code 会话历史记录的最佳实践
先扩大范围,再担心丢失。 在选择器中按 Ctrl+W,然后按 Ctrl+A。
通过 ID 恢复 -p 和 SDK 运行。 它们永远不会出现在选择器中。
为您会返回的会话命名。 精确的名称可以直接恢复。
在恢复时重新传递启动标志。 MCP 配置、设置文件、插件目录和添加的目录不会被恢复。
有目的地设置 cleanupPeriodDays。 默认值为 30 天。
导出重要内容。 将 /export 副本保存到 ~/.claude 之外。
在每次清除前进行演练(Dry-run)。 它会连同转录内容一起删除自动记忆。
记住 claude rm 会保留转录内容。 当您希望彻底清除历史记录时,请使用 claude purge。
如果您使用多个编码智能体,我们关于查找丢失的 Codex 聊天历史记录的指南涵盖了针对 Codex 的相同问题。
结论
默认情况下,Claude Code 会将您的会话作为文件保存在 ~/.claude/projects/ 下,每个项目一个文件夹,每个会话一个文件,保留 30 天。看起来丢失的会话可能只是超出了选择器的默认视图、是永远不会出现在那里的 -p 或 SDK 运行、仍在后台运行、在另一个应用的列表中,或者已通过 /cd 移动。只有过期或被清除的会话才是真正消失了。
使用 Ctrl+W 和 Ctrl+A 扩大选择器范围,在知道 ID 或转录路径时通过它们进行恢复,并重新传递您的启动标志。然后选择您的保留期限,导出您需要保留的内容,并在您想要删除项目历史记录时使用带有 --dry-run 的 claude purge,同时记住这会连同自动记忆一起删除。