MemoryLake
返回全部文章
Pain Point2026 年 5 月 22 日7 分钟阅读

为什么 Claude Code 会忘记我的项目上下文?

你终于把 Claude Code 调整好了:它知道代码库,知道约定,刚刚提交了一个干净的 PR。你关闭终端,明天再打开,运行 `claude`,代理又开始询问你的项目是做什么的,以及你使用哪个包管理器。

`CLAUDE.md` 就在那里。那么,为什么上下文会消失呢?

简短的答案

Claude Code 忘记项目上下文是因为每个新会话都是从一个新的上下文窗口开始,CLAUDE.md 被加载为静态规则(而不是记忆),而 --resume 存在已记录的错误,导致先前的对话上下文未能完全恢复。自动记忆捕获短笔记,而不是记录。一个持久的项目记忆层可以在每次运行时保持完整的上下文可加载。

为什么 Claude Code 会忘记项目上下文

Claude Code 是围绕每个会话都是一个新的代理的理念构建的。三个机制驱动了遗忘:

1. 每个会话都以一个空的上下文窗口开始。 Claude Code 每次运行都从一个干净的状态开始,然后加载 CLAUDE.md、任何引用的文件和你的提示。窗口本身——通常在 Claude Sonnet 4.5/4.6/4.7 上为 200K 令牌——是慷慨的,但每个会话都是独立的。长时间的代理运行读取许多文件时,会比你预期的更快填满它。

2. `CLAUDE.md` 是规则,而不是记忆。 Anthropic 自己的文档将 CLAUDE.md 描述为代理在会话开始时读取的静态入职文件。它非常适合“使用 pnpm,使用 Vitest 编写测试,永远不要编辑 /legacy/*”。它不是一个记录存储。决策背后的理由不属于这里,过去会话的实质也不在这里。

3. `--continue` 和 `--resume` 存在已知的上下文丢失问题。 一个广泛讨论的 GitHub 问题(anthropics/claude-code #43696)报告说,恢复的会话可以像新对话一样重新开始,丢失累积的上下文。即使恢复有效,会话之间也无法相互查看——没有跨会话搜索。

结果是:规则保留,代理状态消失。

当 Claude Code 忘记项目上下文时你会失去什么

每次新的 claude 调用都会让你重新定位:

  • 决策背后的推理消失。 “我们选择将遗留的 users_v1 表保持为只读,因为迁移成本”在昨天的会话中是存在的。今天的 Claude Code 建议写入它。
  • 多会话工作失去线索。 跨越三个会话的重构每次都需要在代理面前展示计划。使用 CLAUDE.md 你可以固定一段文字;你无法固定一个包含理由的 12 步计划。
  • 你在重新加载相同文件时消耗令牌。 每个会话都会重新读取相同的规范,重新发现相同的约定,重新询问相同的澄清问题。

Claude Code 的内置解决方法(以及每个方法的不足之处)

Claude Code 提供了三个旨在持久性的功能。每个功能都有帮助,但没有一个能替代真正的项目记忆。

`CLAUDE.md` 是稳定规则和入职的正确工具。它在每个会话中加载。Anthropic 的官方指导是将持久的指令放在那里,而不是在早期消息中。反过来:CLAUDE.md 最好保持简短——它与其他所有内容竞争上下文空间——这使得它不适合不断发展的项目历史。

自动记忆 让 Claude 在会话期间保存自己的笔记,按用户偏好、反馈、项目上下文和参考指针进行组织。适用于“用户偏好简洁的差异”。不适合完整的记录或决策日志。

`/resume` 和 `--continue` 旨在恢复先前的会话并保持完整的上下文。实际上,用户报告(问题 #43696,2026 年 4 月)恢复的会话可能会空白,即使它们有效,会话之间也无法相互查看。

你可以阅读 官方 Claude Code 文档 以获取完整的功能集。

对于稳定规则,原生工具是可靠的。对于跨会话和工具的项目上下文,它们则显得不足。

Claude Code 的内置记忆不足之处

更深层次的问题是:大多数运行 Claude Code 的团队也使用 Cursor 进行快速迭代,使用 Cascade 进行紧密的 IDE 工作流,以及使用 ChatGPT 进行设计讨论。CLAUDE.md 不会传递到它们中的任何一个。每个工具都有自己的一份项目规则和孤立的历史。上下文在工具之间碎片化,项目受到影响。

记忆需要跟随项目,而不是编辑器。

MemoryLake 如何修复 Claude Code 忘记项目上下文的问题

MemoryLake 是一个跨模型的记忆层,通过原生 MCP 支持连接到 Claude Code。你不再依赖静态的 CLAUDE.md,而是为项目提供自己的记忆,Claude Code 在每个会话中从中读取。

  • 每个项目的记忆,而不是每个文件的记忆。 规范、ADR、过去的 claude 记录和决策日志都存储在项目中。Claude Code 根据每次的相关性获取内容,而不是试图将所有内容放入 CLAUDE.md
  • 比原始提示多 10,000 倍的上下文。 MemoryLake 的检索引擎从数十亿个项目记忆的令牌中读取,并仅返回重要的部分。你不再在重新加载相同规范时消耗令牌。
  • 可移植到其他 AI。 相同的项目记忆可以在 Cursor、Windsurf、Claude Desktop、ChatGPT 和 Gemini 中使用。在项目中间切换工具时,你的上下文会随之而来。

MemoryLake 在 LoCoMo 长上下文基准测试中得分 94.03%——截至 2026 年的最高已发布结果——具有毫秒级检索和 AES-256 端到端加密。

在 3 个步骤中将 MemoryLake 连接到 Claude Code

  1. 创建项目并加载你的上下文。 登录 MemoryLake,打开项目管理,点击创建项目,并根据你的代码库命名(例如,“acme-api — Claude Code 项目”)。通过文档驱动上传你的规范、ADR 和过去的 claude 记录(支持 PDF、Markdown、Word、Excel、图像)。在记忆标签中添加简短的常驻指令——保持 CLAUDE.md 精简,让 MemoryLake 保存长格式的上下文。
  2. 生成 MCP 服务器端点。 在你的项目中打开 MCP 服务器标签,点击添加 MCP 服务器,命名为“Claude Code 集成”,然后点击生成。MemoryLake 返回一个 API 密钥 ID、密钥和端点 URL。立即复制密钥——它只显示一次。
  3. 将服务器添加到 Claude Code 的 MCP 配置中。 运行 claude mcp add memorylake --transport http <endpoint-url>,并在提示时添加 Bearer 令牌。(如果你更喜欢,也可以直接编辑 ~/.claude.json——注意尾随逗号;JSON 不允许它们。)重启 claude。代理现在有一个 memorylake 工具,可以在每个会话开始时调用,以加载项目上下文。

常见问题

Claude Code 会在会话之间记住我的项目上下文吗?

Claude Code 在每个会话开始时加载 CLAUDE.md 和任何引用的文件,因此静态规则会持续存在。过去会话的实质不会——每次 claude 调用都从一个新的上下文窗口开始。自动记忆保存短笔记,而不是记录。

我如何让 Claude Code 在会话之间记住项目上下文?

通过原生 MCP 集成(claude mcp add~/.claude.json)将 Claude Code 连接到外部记忆层,如 MemoryLake。项目文件、决策和过去的记录只需存储一次,并在每个会话中提取,因此代理以完整的上下文打开。

为什么即使我使用 --resume,Claude Code 仍然会忘记我们讨论的内容?

一个已记录的问题(anthropics/claude-code #43696,2026 年 4 月)报告说,--resume--continue 可能会像新会话一样重新开始,丢失累积的上下文。即使恢复有效,单个会话之间也无法相互搜索。

Claude Code 的上下文窗口大小是多少?

Claude Code 通常在 Claude Sonnet 4.5/4.6/4.7 上运行,每个会话的窗口为 200K 令牌。长时间的代理运行读取许多文件和运行许多工具时,会比原始规范建议的速度更快填满该窗口,而新会话会重置它。

我可以与 Cursor 或 ChatGPT 分享我的 Claude Code 项目上下文吗?

CLAUDE.md 是特定于 Claude Code 的。MemoryLake 在模型中立的项目中存储记忆,因此相同的项目上下文可以在 Claude Code、Cursor、Windsurf、Claude Desktop、ChatGPT 和任何支持 MCP 或 REST 的工具中使用。