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

如何在不丢失上下文的情况下从 Cline 迁移到 Claude Code (2026)

这次迁移可以干净地一分为二,而这两部分有着截然相反的命运。

你的 .clinerules/ 文件有一条文档记录的、近乎自动的路径可以导入到 Claude Code。但你的 Memory Bank 却没有 —— 这并不是因为缺少了什么,而是因为 Claude Code 的记忆是一个拼接的指令树,而 Memory Bank 是一个附带仪式感的六文档状态机。这里没有可以容纳它的插槽。

在开始之前,了解这一点非常重要,因为 Memory Bank 通常是你真正关心的那一半。.clinerules 保存了你的规范;memory-bank/activeContext.md 保存了你之前所处的位置。本文将带你了解自动迁移的部分、手动迁移的部分,以及第二部分真正应该存放的地方。症状方面请参阅为什么 Cline 会遗忘项目上下文

实际迁移了什么

.clinerules/ 会进行迁移,并且有两种文档记录的机制。

第一种是 /init。根据 Claude Code 的文档,它“读取 .cursor/rules/.cursorrules 中的 Cursor 规则,以及 .github/copilot-instructions.md 中的 Copilot 规则,并将相关部分整合到生成的 CLAUDE.md 中。在设置了 CLAUDE_CODE_NEW_INIT=1 的情况下,/init 还会读取 AGENTS.md.devin/rules/.windsurf/rules/.windsurfrules 以及 .clinerules。”

注意这个条件:只有在设置了该环境变量时,才会读取 .clinerules 如果在没有设置它的情况下运行 /init,你的 Cline 规则将被默默跳过。

第二种是 /import,它的功能更多。它将“受支持的编码智能体的配置导入到 Claude Code 中,这会将指令文件(如 AGENTS.md)的一次性副本追加到匹配的 CLAUDE.md 中,并继承 MCP 服务器、命令、子智能体和技能。需要 Claude Code v2.1.213 或更高版本。”这里需要注意两点:它是一次性复制,而不是同步,并且有最低版本限制。

始终处于活动状态的规则可以干净地映射。 Cline“处理 .clinerules/ 内部的所有 .md.txt 文件,将它们合并为一套统一的规则”,并且“没有 frontmatter 的规则始终处于活动状态”。基于相同的逻辑,Claude Code 的 CLAUDE.md 也是始终开启的,因此这些规则会落到你期望的地方。

条件规则无法映射。 Cline 的 frontmatter 门控规则根据你当前的工作上下文激活 —— 打开的文件、可见的标签页、提及的路径、正在编辑的文件。Claude Code 在 CLAUDE.md 中没有 frontmatter 条件。相反,它具有目录树行为:它“通过从当前工作目录向上遍历目录树来读取 CLAUDE.md 文件”,并且子目录中的文件“在 Claude 读取这些子目录中的文件时被包含”,而不是在启动时加载。这是基于路径而不是基于模式的。精神上很接近,但机制不同 —— 具有 glob 作用域的 Cline 规则会变成其适用目录中的 CLAUDE.md

规则优先级发生了重要的转变。 Cline:“当工作区规则和全局规则同时存在时,Cline 会将它们合并。当它们与全局规则冲突时,工作区规则优先。” Claude Code:“所有发现的文件都会被拼接进上下文中,而不是相互覆盖”,顺序是“从文件系统根目录向下到你的工作目录”,并在每个目录中的 CLAUDE.md 之后追加 CLAUDE.local.md。因此,Claude Code 没有显式的冲突解决机制 —— 后面的文本只是简单地出现在后面。Cline 通过优先级解决的矛盾,在 Claude Code 中变成了它会同时读取两部分的矛盾。在迁移过程中请清理这些矛盾。

Memory Bank 没有接收端。 它的六个文件 —— projectbrief.mdproductContext.mdactiveContext.mdsystemPatterns.mdtechContext.mdprogress.md —— 都是普通的 markdown,因此它们会作为文件保留下来。无法保留的是其系统:该方法论自身的指令(以 Cline 的口吻编写)是“我必须在每个任务开始时读取所有 memory bank 文件 - 这不是可选的”,由“initialize memory bank”、“update memory bank”和“follow your custom instructions”等命令驱动。

这是一个通过提示词强制执行的仪式,也是让它发挥作用的部分。Claude Code 没有等效的命令,将六个文档粘贴到 CLAUDE.md 中并不能替代它 —— 这相当于在每次请求中都发送六个文档。

手动迁移

步骤 1:导入规则,然后进行协调

首先检查你的版本 —— /import 需要 Claude Code v2.1.213 或更高版本。然后:

CLAUDE_CODE_NEW_INIT=1 claude

……然后运行 /init 以将 .clinerules 折叠到生成的 CLAUDE.md 中,或者如果你还想继承 MCP 服务器、命令、子智能体和技能,请运行 /import。请记住,/import 追加的是一次性副本;它不会跟踪 Cline 端的后续编辑。

然后阅读结果,而不是盲目信任它。需要手动修复的三件事:

变成无条件的条件规则。 任何在 .clinerules 中具有 glob 作用域的内容现在都是始终开启的。将每一个移动到它实际管理的目录中的 CLAUDE.md 中,或者如果它只与一个区域相关,则将其删除。

以前可以解决的矛盾。 工作区优先于全局的规则不再适用。如果两条规则不一致且 Cline 选择了其中一条,Claude Code 将会同时读取这两条。

长度。 Claude Code 的指南指出,较长的文件会消耗更多上下文并降低遵循度,并且有一个结构化的替代方案:.claude/rules/ 用于组织指令。请进行拆分,而不是累积。

使用 /context 进行验证,并确认 CLAUDE.md 出现在 Memory files 下。

如果你的 CLAUDE.md 最终从项目外部导入了任何内容,请注意一个警告:“Claude Code 第一次在项目中遇到外部导入时,它会显示一个列出文件的批准对话框。如果你拒绝,导入将保持禁用状态,并且该对话框不会再次出现。” 用户作用域文件(如 ~/.claude/CLAUDE.md)中的导入无需对话框即可加载。如果迁移后指令似乎丢失了,拒绝对话框可能是一个原因。

步骤 2:决定如何处理 Memory Bank

阅读这六个文件,并将它们的内容分类到三个堆中。这是迁移的真正工作,大约需要 20 分钟。

规范和约束 → CLAUDE.md systemPatterns.mdtechContext.md 的大部分内容都是这些:架构模式、组件关系、技术栈、设置、依赖项。它很稳定,压缩成规则后很短,属于指令文件。

需求和产品上下文 → 仓库,引用而不是粘贴。 projectbrief.mdproductContext.md 既是给人类看的文档,也是给智能体看的文档。将它们保留为文档并指向它们;不要内联它们。

状态 → 无处可去,这就是问题所在。 activeContext.md(“当前关注点、最近的更改、后续步骤”,文档指出它“更新最频繁”)和 progress.md(“什么工作正常、还剩什么、已知问题”)是运行状态。它们不是规范,也不是文档。把它们放在 CLAUDE.md 中,你就是在每次请求中发送上周二的状态;把它们留作文件,则没有任何东西会读取它们。

这第三个堆正是 Memory Bank 存在的原因,而它也是 Claude Code 没有容器来容纳的部分。即使没有这个机制,这个习惯也值得保持 —— 通用情况请参阅为什么 Cline 会遗忘任务历史

更好的方法:给状态一个不是指令文件的家

Memory Bank 有一点做得完全正确:某些项目知识是状态而不是规则,它需要被记录下来并重新读取。它遇到瓶颈的地方在于,存储介质是靠提示词约束的六个 markdown 文件,这意味着它依赖于智能体遵循某种仪式,并且它存在于一个工具的一个仓库中。

这就是 MemoryLake 的用途:你的智能体读取的状态和推理,作为单独的可检索条目,而不是完整发送的文档。设置分为三个步骤。

步骤 1:创建 API 密钥

登录 MemoryLake 并创建 API 密钥。一个凭据即可跨越你连接的所有工具。

从 Cline 迁移到 Claude Code 时创建 MemoryLake API 密钥
从 Cline 迁移到 Claude Code 时创建 MemoryLake API 密钥

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

你的 Memory Bank 是一个异常好的起点,因为已经有人完成了提取工作。不要粘贴文件 —— 将它们拆分为简短的条目,每个条目包含一个断言:

将 Cline 的 Memory Bank 拆分为单个 MemoryLake 条目
将 Cline 的 Memory Bank 拆分为单个 MemoryLake 条目

来自 progress.md:什么工作正常、还剩什么以及已知问题。 每个已知问题都是一个条目,包含其症状和原因。这是整个 Memory Bank 中价值最高的内容,作为条目检索的效果远好于作为文档检索。

来自 activeContext.md:当前关注点背后的决策。 不是“正在进行计费重构” —— 这会过期。而“计费重构使用 outbox 模式,因为服务商在没有幂等密钥的情况下会进行重试”则不会。

来自 systemPatterns.md:每个模式背后的原因。 模式放在 CLAUDE.md 中;支持它的论据放在这里,这样智能体就能处理你没有预料到的情况。

所有你不得不纠正过两次的事情。 除非将拒绝记录下来,否则 Cline 和 Claude Code 都会再次提出被拒绝的方法。

保持条目简短,并丢弃任何描述已废弃系统的内容。一个六文件的 Memory Bank 通常会产生 20 到 40 个条目;如果你产生了 200 个,那你就是在抄写了。

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

连接你使用的工具。MemoryLake 可以通过 MCP 和 API 访问,因此 MCP 原生智能体(包括 Claude Code、Codex 和 OpenClaw)通过指向 MCP 服务器进行连接,而其他助手则通过 API 读取相同的记忆。这意味着你可以在完成切换之前执行此操作,并且在评估时两个工具都可以读取相同的状态。

将 Claude Code 和 MCP 原生智能体连接到便携式记忆层
将 Claude Code 和 MCP 原生智能体连接到便携式记忆层

三个坦率的限制。MemoryLake 不能替代 CLAUDE.md.clinerules —— 它们是你引导每个工具的方式,上面的导入本身就值得做。它只保存你或你的智能体写入其中的内容,因此步骤 2 是手动工作。而且它不是一种强制执行机制:可检索的上下文并不能保证模型一定会对其采取行动。

这在实践中改变了什么

activeContext.md 不再是一个没人阅读的文件。 作为可检索条目的运行状态可以按需提供,而不是被整体粘贴或遗忘。

指令文件保持简短。 CLAUDE.md 承载规范。它不承载六个文档,这使其长度保持在能够维持遵循度的范围内。

“更新 memory bank”不再是一项必要的仪式。 价值在于记录下来,而不是在每个任务开始时重新读取六个文件的仪式。

拒绝导入对话框不再让你丢失上下文。 当持久知识是外部的时,加载失败的指令文件只是一种不便,而不是重置。

再次切换工具的成本很低。 状态不在 Cline 形状或 Claude 形状的容器中 —— 这种形状在什么是 AI 记忆,什么不是中有所介绍。

切换的最佳实践

/init 之前设置 CLAUDE_CODE_NEW_INIT=1 如果没有它,.clinerules 将不在读取的文件之列。

在依赖 /import 之前,请检查版本是否为 v2.1.213 或更高。 这是文档记录的最低版本,/import 是承载 MCP 服务器、命令、子智能体和技能的关键。

将导入视为快照。 它追加的是一次性副本。后续对 .clinerules 的编辑不会传播。

重新划分每个条件规则的作用域。 除非你将具有 glob 作用域的 Cline 规则移动到它所管理的目录中,否则它会变成始终开启状态。

自己解决矛盾。 Claude Code 是拼接而不是覆盖,因此 Cline 应用的优先级已不复存在。

projectbrief.md 保留为文档。 引用它;不要内联它。

永远不要将 activeContext.md 粘贴到 CLAUDE.md 中。 根据 Cline 自己的文档,这是更改最频繁的文件 —— 对于随每次请求一起发送的内容来说,这是最糟糕的内容。

每次更改后运行 /context 确认 CLAUDE.md 出现在 Memory files 下只需五秒钟,并能解决大多数“它加载了吗”的问题 —— 相关领域请参阅为什么 Claude Code 会遗忘项目上下文

结论

这次迁移中关于规则的一半对你来说已经接近解决:带有 CLAUDE_CODE_NEW_INIT=1/init 会读取 .clinerules,而 v2.1.213 或更高版本上的 /import 会承载更广泛的配置,包括 MCP 服务器、命令、子智能体和技能。相反,你应该把时间花在协调上 —— 默默变成无条件的条件规则,以及由于 Claude Code 拼接而不是覆盖而不再存在的工作区优先于全局的优先级。

Memory Bank 是值得思考的那一半。它的洞察是正确的:某些知识是状态,状态必须被记录下来并重新读取。它的实现是靠一个提示词约束的六个文档,存在于一个工具的一个仓库中。将规范移动到 CLAUDE.md 中,将简报保留为引用的文档,并将已知问题、决策和被拒绝的方法放入你的智能体查询的层中 —— 这样下一次工具切换就不会让你损失花费了六个月积累起来的部分。

常见问题

Claude Code 可以自动导入我的 .clinerules 吗?

可以,但有条件。默认情况下,运行 /init 会整合 Cursor 和 Copilot 规则;只有在设置了 CLAUDE_CODE_NEW_INIT=1 时才会包含 .clinerules。或者,/import 可以导入受支持智能体的配置,并继承 MCP 服务器、命令、子智能体和技能 —— 这需要 Claude Code v2.1.213 或更高版本。

/import 会保持我的 Cline 规则同步吗?

不会。文档将其描述为将指令文件的一次性副本追加到匹配的 CLAUDE.md 中。Cline 端的后续更改不会传播。

Cline 的 Memory Bank 会怎么样?

这六个 markdown 文件会作为文件保留下来,但围绕它们的系统则无法保留。Memory Bank 通过指示 Cline 在每个任务开始时读取其所有文件的指令,以及“initialize memory bank”和“update memory bank”等命令来工作。Claude Code 没有等效的命令,因此内容必须重新安置 —— 规范放入 CLAUDE.md,简报作为引用的文档,运行状态放入记忆层。

条件 Cline 规则在 Claude Code 中表现如何?

它们会变成无条件的。Cline 根据你的工作上下文激活 frontmatter 门控规则;CLAUDE.md 没有 frontmatter 条件。Claude Code 最接近的等效方式是基于路径的 —— 当 Claude 读取子目录中的文件时,该子目录中的文件会被包含进来 —— 因此请将具有 glob 作用域的规则移动到它适用的目录中。

迁移后如果两条规则发生冲突,哪一条会胜出?

显式地看,哪一个都不会。Cline 合并工作区和全局规则,并在冲突时以工作区优先。Claude Code 将所有发现的文件拼接进上下文中,而不是相互覆盖,顺序是从根目录向下到你的工作目录,因此矛盾的两部分都会被读取。请在迁移过程中解决冲突。

导入后我的指令似乎丢失了。我应该检查什么?

运行 /context 并在 Memory files 下寻找 CLAUDE.md。如果你的 CLAUDE.md 从项目外部导入了任何内容,请检查你是否拒绝了外部导入批准对话框 —— 根据文档,拒绝会使导入保持禁用状态,并且该对话框不会再次出现。