MemoryLake
返回全部文章
Tutorial2026 年 8 月 12 日·11 分钟阅读

为什么 Claude Code 会在你的另一台机器上遗忘一切——以及如何解决它(2026)

在你的笔记本电脑上,Claude Code 了解这个仓库。它知道实际起作用的构建命令、因环境原因而时好时坏的测试,以及谁都不应该触碰的那两个目录。然而,当你坐在台式机前,在相同的提交(commit)下打开同一个仓库时,它却一无所知。相同的账号、相同的项目、相同的代码——一切却是一张白纸。

以下是直接的答案:Claude Code 的记忆是写入该记忆的机器上的一个本地文件夹。自动记忆默认开启,并将 Claude 学习到的内容存储在 `~/.claude/projects/<project>/memory/` 下,而官方文档清晰地指出了这一界限:“文件不会在机器或云环境之间共享。” 没有任何东西损坏,也没有任何同步失败,因为原本就没有任何东西会被同步。你的台式机、工作笔记本电脑、云端会话和容器是四个独立的记忆,只是恰好都属于你。

本文将详细介绍哪些是本地内容、你可以提交什么,以及知识应该存放在哪里,从而让每台机器都从同一起跑线开始。

为什么 Claude Code 会在你的另一台机器上遗忘

自动记忆是一个目录,且该目录是本地的

自动记忆默认开启,并且确实在发挥作用:Claude 会在运行过程中将自己的笔记(构建命令、调试见解、发现的规范)写入每个项目的专属目录中,在每次会话开始时加载 MEMORY.md 索引,并根据需要读取主题文件。

所有这些都存放在一台电脑的个人主目录下。文档明确指出,一个仓库的所有工作区(worktrees)和子目录共享同一个记忆目录,并且这些文件不会在机器或云环境之间共享。因此,“Claude 学习了我们的构建命令”这句话只对某一台笔记本电脑成立。

每台机器都保留自己的版本,且它们会产生偏差

因为每台机器都是独立学习的,它们不仅在记忆量上有所不同,甚至会产生冲突。你的笔记本电脑在你修复 Dockerfile 之前学习了构建命令;而你的台式机则是在修复之后学习的。两者都不知道对方的存在,因此既不会注意到冲突,也没有对齐和解的过程。

注意这会对信任产生什么影响。在会话中,你无法分辨一个缺失的事实是根本没有被学习过,还是在其他地方被学习过。从会话内部来看,这两种情况完全一样。

工作区共享记忆;机器则不共享

有一个对你有利的界限,了解它能让你更清楚另一个界限。文档指出,仓库中的所有工作区和子目录共享同一个记忆目录。因此,如果你为三个分支保留了三个工作区,它们共享同一个记忆,在功能分支上工作时学到的东西在主分支(main)上同样可用。

这是一个正确的设计,它展示了记忆的实际单位:该文件系统上的仓库。跨越了这个文件系统,你就进入了另一个记忆,这就是为什么第二台电脑上的同一个仓库开始时是空的,而第一台电脑上的五个工作区却不是。

云端或 Web 会话是另一台机器

这是让那些以为自己已经解决问题的人感到意外的部分。Claude Code 会话可以在你终端之外的地方运行——Web 和移动客户端、Remote Control,以及自 v2.1.224 起引入的 claude self-hosted-runner(它能将你自己的机器或容器变成这些会话执行的场所)。

就记忆而言,其中的每一个都是独立的文件系统。文档中的表述是“机器或云环境”,而容器中的自托管运行器(self-hosted runner)正是如此:它不是你的笔记本电脑,因此也没有你笔记本电脑的记忆。

它也是一个清理机制可以触及的文件夹

本地文件伴随着本地文件的生命周期。~/.claude 目录的保留受制于清理会话记录的相同 cleanupPeriodDays 设置,因此记忆目录存在于正常的清理机制中,而不是在其之外。

此外,它还可能受到 Bug 的影响,这一点值得准确而非夸张地说明。2026 年 8 月 11 日发布的 v2.1.228 变更日志中包含:“修复了会话清理会删除项目记忆文件夹内内容的问题。” 一个版本就修复了它。但结构性的教训依然成立——由工具自身的清理逻辑管理的生成目录是一个缓存,而不是记录,即使在没有 Bug 的情况下也应该这样对待。

会话之间的消息传递也不会转移知识

Claude Code 会话现在可以相互发送消息,包括跨机器发送,这听起来似乎能解决这个问题。但从设计上来说,它并不能。消息是文本,而不是历史记录或文件。跨机器消息传递是仅限回复的——另一台机器的会话可以回答你,但不能被直接发起提问——而且发现机制依赖于本地文件和套接字(sockets),因此容器和它的宿主机根本无法看到彼此。

这是一个按预期工作的协调通道。它传递的是一句话,而不是记忆。

人们尝试过的方法

提交 `CLAUDE.md`。 这是正确的,每个人都应该这样做。该项目文件受版本控制,因此它会随仓库一起传输到每台机器和每个团队成员。它的局限性在于它是维护的文件——它保存的是你的常规规则,而不是 Claude 在工作时摸索出的上百件事。

在新机器上再次运行 `/init`。 这能让你从仓库中获取一个初始的 CLAUDE.md,这确实有用,但也只是对代码中已可见内容的重新推导。它无法恢复关于不稳定性测试的知识,因为这些知识从未存在于仓库中。

使用 Dropbox 或 dotfiles 仓库同步 `~/.claude`。 这是最受欢迎的尝试,但也是需要小心对待的一个。你将在一个该工具假设其独占的路径上,同步生成的临时状态、会话数据和凭证,并且两台机器可能会同时写入。有些实践者会这样做;但这不是官方文档支持的配置,而且“我的智能体记忆文件夹被另一个主机写入了一半”会让你度过一个糟糕的下午。如果你要尝试,请进行精细同步,并且绝不要在会话处于活跃状态时进行。

让智能体重新学习。 可行,但需要消耗一个会话的探索成本,并且会产生与另一台机器略有不同的笔记。你是在支付 Token 来重建你已经拥有的东西。

使用 Remote Control,从而始终只有一个会话。 一个切实的策略:将工作保留在一个宿主机上,并从其他地方连接。这确实避免了偏差,但也意味着你的知识现在单点存放在一台可能会丢失、被抹掉或被清理的笔记本电脑上。

以上每种方法管理的都是本地缓存。没有一种能让知识独立于机器而存在。

解决方案:将可共享的部分放在机器无法独占的地方

根据谁需要这些内容,将该文件夹中的内容进行拆分,因为这两部分有不同的归宿。

特定于机器的状态应该保留在特定机器上。 本地路径、正在运行的容器、你自己环境的奇特之处。让自动记忆保留它,并让它成为可丢弃的。

第二台机器或第二个人需要的所有内容都应该存在于任何机器之外。 实际起作用的构建命令。某个目录被禁止访问的原因。决策及其日期。不稳定性测试以及它为什么不稳定。这些都与你的笔记本电脑无关;它们与项目有关。

两个举措可以实现这一点。首先,使用已经受版本控制的作用域:在仓库根目录提交 CLAUDE.md,使用 .claude/rules/ 存放路径作用域规则,以及——如果你使用子智能体——使用 memory: project,它会写入 .claude/agent-memory/<name-of-agent>/,并且可以通过版本控制进行共享,而不是存放在你的个人主目录下。其次,将非规则形式的知识放入每台机器都能读取的存储中。

MemoryLake 是针对这第二部分内容的记忆层——将决策、事件记录和源文档保存在一个存储中,任何机器上的 Claude Code、Codex 以及通过 API 的 ChatGPT 都可以通过 MCP 访问它。笔记本电脑保留其缓存;而知识不再仅仅存在于其上。

步骤 1:创建 API 密钥

生成一个密钥,并在大约 30 秒内发出你的第一次请求。将其保存在你的环境变量或机密管理器中,而不是粘贴到会话中——请注意,这也是让新机器在 5 分钟内完成配置,而不是进行重新学习的关键所在。

创建 MemoryLake API 密钥
创建 MemoryLake API 密钥

步骤 2:上传你的第一批记忆

放入你的另一台机器不得不重新发现的文档、图像和文件:操作手册、架构决策、事件记录、API 契约、“为什么这个测试不稳定”的笔记。上传源文件而不是摘要——摘要是本地记忆文件夹中已经包含的内容,而且是不易迁移的部分。

上传你的第一批记忆到 MemoryLake
上传你的第一批记忆到 MemoryLake

步骤 3:连接你的 AI 和智能体

让 Claude、Codex、OpenClaw 和其他 AI 智能体通过 MCP 或 API 访问记忆。每台机器配置一次 MCP 服务端,每个会话就会读取相同的存储,无论它是你的笔记本电脑、台式机、Web 会话,还是容器中的自托管运行器。这是本地记忆无法拥有的特性。

通过 MCP 连接你的 AI 和智能体
通过 MCP 连接你的 AI 和智能体

这在实践中改变了什么

第一个区别是,新机器的加入是“配置”,而不是“入职培训”。克隆仓库,指向存储,智能体就会从团队已知的内容开始工作,而不是从这台特定电脑恰好记住的内容开始。

第二个区别是,云端和容器会话不再是“二等公民”。自托管运行器上的会话没有可继承的本地记忆,这在今天意味着它是你工作流中信息最匮乏的参与者。通过读取共享存储,它能像你的笔记本电脑一样获取充足的信息——这对于你最不可能监督的自动化运行来说尤为重要。

第三个区别是,丢失文件夹不再重要。清理扫除、机器被抹掉、容器重新安装:所有这些都只是变成了一种不便,而不是损失,因为持久的那一半内容从未存放在那里。

并且它与 Claude Code 的原生功能相辅相成。自动记忆继续为每个仓库编写本地笔记,CLAUDE.md 继续通过版本控制承载你的常规规则,两者都不必成为记录系统(System of Record)——这是它们最不适合扮演的角色,也是保持多个智能体在同一个记忆上协调一致的相同分工。

多机器 Claude Code 的最佳实践

提交所有可以提交的内容

仓库根目录下的 CLAUDE.md、用于限定范围规则的 .claude/rules/、用于项目范围子智能体的 .claude/agent-memory/。版本控制中的任何内容都会自动实现多机器共享,并自动与团队成员共享。将 CLAUDE.local.md 和本地范围的记忆留给那些真正不应该离开你机器的内容。

将记忆文件夹视为缓存

问问自己,如果 ~/.claude/projects/<project>/memory/ 今晚消失,你会失去什么。如果答案是任何你会想念的东西,那么该内容就放错了地方——请将其写入仓库或共享存储中。v2.1.228 的修复是一个提醒,而不是原因。

保持 MEMORY.md 为索引

会话开始时仅加载 MEMORY.md 的前 200 行或 25KB(以先到者为准)。每个条目占一行,并在主题文件中保留详细信息,这样可以使索引保持在预算之内;臃肿的索引会被默默截断,这是你永远不会注意到的失效模式。

不要随意同步 ~/.claude

如果你一定要同步它,请务必精细且谨慎:绝不要在活跃会话期间同步,绝不要两台机器同时写入,并且绝不要假设生成的临时状态可以安全合并。受支持的多机器路径是版本控制和共享存储,而不是对该工具拥有的目录进行文件复制。

给自动化会话与你的终端相同的上下文

Web 会话、Remote Control 和自托管运行器在启动时没有本地记忆。如果这些运行很重要,请确保共享存储和提交的文件携带了它们所需的一切——否则,受监督最少的会话将是使用最少上下文工作的会话。

不要指望其中任何内容具有强制性

Claude Code 的文档将指令文件和自动记忆描述为上下文,而不是强制配置。任何必须在每台机器上生效的内容(格式化工具、受保护的路径、禁止直接推送至 main 分支)都属于 hooks 和 CI,它们同样被提交,因此也同样适用于多机器。

结论

Claude Code 会在你的另一台机器上遗忘,因为它的记忆是一个本地目录,且文档直接指出了这一点:文件不会在机器或云环境之间共享。每个宿主机都是独立学习的,云端和容器会话是额外的宿主机,而且该文件夹处于正常的保留清理范围内——8 月 11 日的变更日志条目“修复了会话清理会删除项目记忆文件夹内内容的问题”提醒我们,生成的目录只是一个缓存。

因此,保留缓存,但不要再依赖它。提交可以提交的内容:CLAUDE.md.claude/rules/、项目范围的智能体记忆。然后将非规则形式的知识——原因、决策、艰难获得的运营细节——放入每台机器都能读取的一个存储中。这样,第二台机器就不是一个全新的开始,而只是另一个入口。

常见问题

Claude Code 会在我的电脑之间同步记忆吗?

不会。自动记忆是按项目本地存储的,文档指出这些文件不会在机器或云环境之间共享。使用相同的账号也没有区别;记忆不是账号状态,而是磁盘上的文件。

Claude Code 的记忆存储在哪里?

自动记忆保存在 ~/.claude/projects/<project>/memory/ 下,与仓库绑定,在会话开始时加载 MEMORY.md 索引,并根据需要读取主题文件。项目范围内的子智能体记忆则保存在仓库内的 .claude/agent-memory/<name-of-agent>/ 中,这是受版本控制的选项。

我可以直接同步 .claude 文件夹吗?

你可以尝试,但这并不是官方支持的配置。你将在一个该工具假设其独占的路径上复制生成的临时状态和会话数据,如果两台机器同时处于活跃状态,会有文件写入不完整的真实风险。受支持的解决方案是:将属于项目的内容进行版本控制,其余内容使用共享存储。

云端或 Web 会话会继承我的本地记忆吗?

不会。它们是独立的环境,这正是文档中“机器或云环境”所涵盖的范围——包括在你自己容器中的自托管运行器上运行的会话。这些会话所需的任何内容都必须来自仓库或它们可以访问的存储。

是 Bug 删除了我的记忆文件夹吗?

确实曾有一个 Bug,但它已被修复:2026 年 8 月 11 日发布的 v2.1.228 包含了“修复了会话清理会删除项目记忆文件夹内内容的问题”。请进行升级。然后吸取更广泛的教训,不要再将该文件夹视为你所关心的任何内容的唯一副本。

我的每个 git 工作区(worktree)都有独立的记忆吗?

不会——这是唯一共享记忆的情况。根据文档,仓库中的所有工作区和子目录都使用同一个记忆目录,因此在一个分支上学到的知识在另一个分支上同样可用。分叉发生在机器级别,而不是分支级别。

这与 Claude Code 在会话之间遗忘有什么不同?

边界不同。在会话之间丢失项目上下文是指在同一台机器上进行新对话,在这种情况下,自动记忆和 CLAUDE.md 确实能提供帮助。而这指的是完全不同的宿主机,在这些宿主机上,这些文件根本不存在——而且会话之间的消息传递虽然可以传递一句话,但绝无法传递其背后的记忆。