实际迁移了什么
.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.md、productContext.md、activeContext.md、systemPatterns.md、techContext.md、progress.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.md 和 techContext.md 的大部分内容都是这些:架构模式、组件关系、技术栈、设置、依赖项。它很稳定,压缩成规则后很短,属于指令文件。
需求和产品上下文 → 仓库,引用而不是粘贴。 projectbrief.md 和 productContext.md 既是给人类看的文档,也是给智能体看的文档。将它们保留为文档并指向它们;不要内联它们。
状态 → 无处可去,这就是问题所在。 activeContext.md(“当前关注点、最近的更改、后续步骤”,文档指出它“更新最频繁”)和 progress.md(“什么工作正常、还剩什么、已知问题”)是运行状态。它们不是规范,也不是文档。把它们放在 CLAUDE.md 中,你就是在每次请求中发送上周二的状态;把它们留作文件,则没有任何东西会读取它们。
这第三个堆正是 Memory Bank 存在的原因,而它也是 Claude Code 没有容器来容纳的部分。即使没有这个机制,这个习惯也值得保持 —— 通用情况请参阅为什么 Cline 会遗忘任务历史。
更好的方法:给状态一个不是指令文件的家
Memory Bank 有一点做得完全正确:某些项目知识是状态而不是规则,它需要被记录下来并重新读取。它遇到瓶颈的地方在于,存储介质是靠提示词约束的六个 markdown 文件,这意味着它依赖于智能体遵循某种仪式,并且它存在于一个工具的一个仓库中。
这就是 MemoryLake 的用途:你的智能体读取的状态和推理,作为单独的可检索条目,而不是完整发送的文档。设置分为三个步骤。
步骤 1:创建 API 密钥
登录 MemoryLake 并创建 API 密钥。一个凭据即可跨越你连接的所有工具。

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

来自 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 读取相同的记忆。这意味着你可以在完成切换之前执行此操作,并且在评估时两个工具都可以读取相同的状态。

三个坦率的限制。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 中,将简报保留为引用的文档,并将已知问题、决策和被拒绝的方法放入你的智能体查询的层中 —— 这样下一次工具切换就不会让你损失花费了六个月积累起来的部分。