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

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

在复制任何文件之前,请先在 Claude Code 中运行 /memory 并打开自动记忆文件夹。大多数从 Claude Code 迁移的用户从未看过这个文件夹,而这正是他们配置中唯一没有去处的部分。

原因如下。Claude Code 通过两种机制(而非一种)跨会话传递知识:"CLAUDE.md 文件:你编写的用于为 Claude 提供持久上下文的指令"以及"自动记忆:Claude 根据你的纠正和偏好自行记录的笔记"。第一种你很熟悉 —— 就是你一直在编辑的那个文件。第二种则一直在默默累积,因为自动记忆默认是开启的,它保存在 ~/.claude/projects/<project>/memory/ 目录下,包含一个 MEMORY.md 索引以及每个记忆主题对应的一个文件。

Cursor 没有等效的功能,没有导入器,也无法得知该目录的存在。与此同时,你的 CLAUDE.md 内容几乎不需要任何工作就可以直接迁移过去。

本文将介绍实际可以传输的内容、切换前需要做的两件事,以及将这些知识存放在何处(因为这两个工具的规则文件都无法承载这些知识)。关于症状表现,请参阅 why Claude Code forgets project context

实际可以传输的内容

你的 CLAUDE.md 文本内容。 构建命令、约定、架构说明、"始终执行 X"的规则。Cursor 会读取项目根目录和子目录中的 AGENTS.md —— "Markdown 格式的 Agent 指令。.cursor/rules 的简单替代方案"。重命名或复制即可完成。请注意,这与 Claude Code 端的限制正好相反,后者的文档明确指出:"Claude Code 读取 CLAUDE.md,而不是 AGENTS.md。"

路径范围规则,具有真正的一对一映射。 这是整个迁移中最干净利落的部分,但大多数人都忽略了。Claude Code 的 .claude/rules/ 文件采用 glob 模式的 paths: frontmatter 字段,并且"没有 paths 字段的规则将被无条件加载并应用于所有文件。"Cursor 的项目规则在 .mdc frontmatter 中使用 globs,其目的相同:在设置 alwaysApply: false 并提供 globs 时,该规则会"在匹配的文件处于上下文中时自动附加。"因此,Claude Code 中作用域为 src/api/**/*.ts 的规则在 Cursor 中也会变成作用域为 src/api/**/*.ts 的规则。相同的模式语法,相同的理念。

你的个人偏好,放入设置面板。 Claude Code 的用户级层是 ~/.claude/CLAUDE.md 加上 ~/.claude/rules/。Cursor 的对应功能是 User Rules(用户规则)—— "在 Customize → Rules 中定义的全局偏好,适用于所有项目。"作用相同。在依赖它之前,有一个值得注意的警告:"User Rules 不适用于 Inline Edit (Cmd/Ctrl+K)。它们仅由 Agent (Chat) 使用。"

组织范围的指令,放入仪表盘。 Claude Code 支持由 IT 在操作系统级路径部署的托管策略 CLAUDE.md。Cursor 的对应功能是 Team Rules(团队规则),在 Team 和 Enterprise 计划中通过 Cursor 仪表盘创建,其中"Enforce this rule(强制执行此规则):启用后,该规则对所有团队成员都是必需的,且无法在 Customize 中禁用。"

没有其他内容了。以下是具体清单。

自动记忆没有去处。 Claude 为自己保存了四种笔记,记录在每个文件 frontmatter 的 type 字段中:user(你的角色和工作偏好)、feedback(你给 Claude 的纠正和确认的方法)、project(进行中的工作以及 Claude 无法从代码或 git 历史中推导出的决策)和 reference(在项目之外哪里可以找到东西)。它会刻意跳过它可以从代码库中读取的内容以及"你的 CLAUDE.md 文件已经说明的任何内容" —— 这意味着,根据设计,自动记忆中保存的恰恰是其他地方都没有写下来的材料。而且它无法迁移:"自动记忆是本地机器特有的。同一 git 仓库中的所有工作树和子目录共享一个自动记忆目录。文件不会在机器或云环境之间共享。"在离开前请先阅读它。

@path 导入没有 Cursor 等效项。 CLAUDE.md 可以使用 @path/to/import 语法递归引入其他文件,"最大深度为四跳,"并且导入的文件"在启动时会被展开并加载到上下文中。"Cursor 最接近的机制是规则内部的 @filename.ts,常见问题解答(FAQ)也证实了这一点 —— "使用 @filename.ts 将文件包含在规则的上下文中" —— 但它不是一个导入链,也无法进行四层深度的组合。一个四跳的导入树必须被扁平化为一个文件,或者拆分为多个规则。

CLAUDE.local.md 失去了它的形式。 它是项目根目录下被 git 忽略的个人层,"用于不应提交到版本控制的私有单项目偏好。"Cursor 的 User Rules 是全局的,而不是针对单个项目的,因此仅在某个仓库中有意义的个人笔记要么变成全局的,要么变成一个未提交的 AGENTS.md(你必须记住不要将其暂存)。

冲突处理方式不同,这会改变行为。 Claude Code:"所有发现的文件都会被拼接进上下文中,而不是相互覆盖,"顺序从文件系统根目录向下,如果两个文件不一致"Claude 可能会任意选择一个。"Cursor 则规定了实际的优先级:"规则按以下顺序应用:Team Rules → Project Rules → User Rules。所有适用的规则都会被合并;当指南冲突时,较早的来源优先。"如果你一直带着某种矛盾共存(而 Claude Code 之前是通过抛硬币的方式来解决的),Cursor 将会一致地解决它 —— 这可能不是你已经习惯的方式。

Hook(钩子)不会随之迁移。 Claude Code 对这一逃生通道有明确说明:"要阻止某项操作,无论 Claude 做出什么决定,请改用 PreToolUse 钩子。"这是强制执行而非上下文,不属于你正在迁移的规则系统。

Subagent(子智能体)的记忆本来就是独立的。 "主对话的自动记忆不会加载到子智能体中,"并且子智能体自身的自动记忆位于其专属目录中 —— 这是留在后面的每个子智能体的状态。该界限在 why Claude Code subagents don't share memory 中有详细介绍。

手动迁移

步骤 1:在更改任何内容之前,导出实际加载的内容

你无法迁移一个你从未阅读过的配置,而在 Claude Code 中,实际加载的内容很少与你记忆中写下的一致。

在会话中运行 /context 并阅读 Memory files 下的列表。这是哪些 CLAUDE.mdCLAUDE.local.md 文件成功载入的真实情况 —— 文档将其作为第一步调试步骤,因为"如果那里缺少某个文件,Claude 就无法看到它。"工作目录之上的文件在启动时加载;子目录中的文件"在 Claude 读取这些目录中的文件时按需加载,"因此从未匹配过的子目录规则将不会出现。

然后运行 /memory。它会列出你的 CLAUDE.mdCLAUDE.local.md 和其他记忆文件位置,并提供打开自动记忆文件夹的选项。打开它。里面的所有内容都是普通的 Markdown,你可以阅读、编辑或删除,而 feedbackproject 文件通常是整个配置中价值最高的段落:你给出的纠正、截止日期、代码中没有体现的决策。将仍然重要的内容复制到可移植的格式中。它不会自己跑到 Cursor 里去。

在那里时,有两点值得注意。MEMORY.md 最多只加载"MEMORY.md 的前 200 行,或前 25KB,以先到者为准" —— 因此如果它很长,尾部的内容反正也不会被读取。而且主题文件在启动时根本不会加载;Claude "使用其标准文件工具按需读取它们。"如果你想要日志形式的审计而不是肉眼查看,InstructionsLoaded 钩子会记录"确切加载了哪些指令文件、何时加载以及原因。"

步骤 2:在 Cursor 中重建层级,一次性决定格式

按此顺序做出四个决定。

仓库指令:AGENTS.md 还是 .cursor/rulesCLAUDE.md 复制到 AGENTS.md,你就可以立即投入使用。仅针对你希望条件加载的内容转换为 .cursor/rules —— 这正是 .mdc frontmatter 所带来的能力。Cursor 的四种规则类型是 Always Apply(始终应用)、Apply Intelligently(智能应用,"当 Agent 根据描述决定其相关时")、Apply to Specific Files(应用于特定文件,"当文件匹配指定模式时")和 Apply Manually(手动应用,"在聊天中被 @ 提及时")。如果你已经有了 paths: 作用域的规则,这些就是需要转换的规则;其余的可以保持纯文本。

注意扩展名。".cursor/rules 中的普通 .md 文件会被规则系统忽略,因为它没有 frontmatter 来指定 descriptionglobsalwaysApply。如果你更喜欢纯 Markdown,请改用 AGENTS.md。"直接将旧的规则文件原封不动地丢进该目录,是迁移后毫无反应的最常见原因。

扁平化导入。 将每个 @path 链解析到引用它的文件中,或者拆分为独立的规则。在此过程中请注意长度:Cursor 的指南是"将规则保持在 500 行以下"并"引用文件而不是复制其内容 —— 这可以保持规则简短,并防止它们随着代码更改而过时。"Claude Code 也有相同的方向,目标是"每个 CLAUDE.md 文件在 200 行以下。"

将全局与本地分离。 个人偏好放入 Customize → Rules。仓库约定放入 AGENTS.md.cursor/rules 并进行提交。嵌套的 AGENTS.md 无需任何 frontmatter 即可为你提供目录作用域 —— 指令"会与父目录合并,更具体的指令优先。"

如果你的团队共享规则,请使用远程规则。 Cursor 可以从 GitHub 仓库导入规则:Customize → Rules → Add Rule → Remote Rule (Github),粘贴仓库 URL,"Cursor 将扫描仓库中的所有 .mdc 文件,"并将它们放置在 .cursor/rules/imported/<repoName> 中,同时保留相对路径。这仅支持 .mdc,因此这是进行转换而不是保留纯文本的一个原因 —— 并且这是这两个工具中最接近共享、可更新规则源的功能。

如果你最终会同时运行这两个工具一段时间,反向迁移的步骤记录在 migrating from Cursor to Claude Code 中,而文件标准问题在 migrating your CLAUDE.md to AGENTS.md 中有详细介绍。

更好的方法:在两个工具之外为积累的知识安家

看看你在步骤 1 中做了什么。你打开了一个文件夹,里面是 Claude 几个月来记录的关于你项目的笔记,手动阅读并把好的部分复制到了其他地方。这确实管用,但它只能用一次。

必须手动操作的原因是结构性的。自动记忆在设计上是本地机器特有的。Cursor 的规则在设计上是每个仓库独立且受版本控制的。这两个工具都限制了它们所能承载的内容 —— 这里 200 行,那里 500 行 —— 因为每次请求都会附带这些始终开启的内容。它们都不是为了持久存储"为什么你的架构是这样"而设计的,它们也从未声称自己是。

这正是 MemoryLake 的用武之地:将你项目的持久知识保存在一个你的工具可以读取的层中,这样工具切换就不再需要进行知识迁移。设置只需三个步骤。

步骤 1:创建 API 密钥

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

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

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

简短的条目,每条记录一个要点。你刚刚阅读的自动记忆文件夹就是你的源材料 —— 它已经大致分好了类:

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

你不得不给出多次的纠正。 这是 Claude Code 自己的 feedback 类别,也是该目录下价值最高的东西。把它移到两个工具都能读取的地方。

带有强制约束的决策。 "迁移只能是递增的,因为读取副本在负载下存在延迟。"规则规定了策略;只有这样才能阻止下周再次提出替代方案。

你已经拒绝的方法以及原因。 这一类别不会出现在任何规则文件或提交信息中。每个新的 Agent 都会再次提议它。

你通过艰难教训学到的环境事实。 仅在 CI 中失败的测试、未记录的速率限制、没有最新数据的暂存数据库。

步骤 3:连接你的 AI 和 Agent

连接你使用的工具。MemoryLake 可以通过 MCP 和 API 访问,因此支持 MCP 的原生 Agent(包括 Claude Code、Codex 和 OpenClaw)可以通过指向 MCP 服务器进行连接,而其他助手则通过 API 读取相同的记忆。这就是让切换变得可逆的原因:在你还在做决定时,两个编辑器都可以读取相同的层。

通过 MCP 连接你的 AI 和 Agent
通过 MCP 连接你的 AI 和 Agent

三个坦诚的限制。MemoryLake 不会读取你的自动记忆文件夹,也不会写入你的 CLAUDE.md 或你的 Cursor 规则 —— 步骤 1 仍然需要手动读取,而规则文件是你引导每个工具的方式。它只保存你或你的 Agent 放入其中的内容。此外,规则和记忆都是上下文,而不是强制配置;如果你需要某件事每次都无条件发生,那应该是一个钩子(hook)或 CI 检查,而不是记忆层。

这在实践中改变了什么

切换不再是单向门。 两个编辑器读取相同的外部记忆意味着你可以运行 Cursor 两周,而无需拆除你的 Claude Code 配置。

即使你留下来,读取自动记忆也是值得的。 大多数人从未打开过那个文件夹,而 project and feedback 文件是对过去六个月令人惊讶的良好总结。

新工具中的规则文件变得更短。 CLAUDE.md 增长超过 200 行是因为它在承担两项工作 —— 引导和记忆。一旦将它们拆分,这两个工具的上限就都不会成为限制。

"它还不了解我的项目"得到了真正的解答。 不是"写更多规则",而是"那些知识从未存在于规则中" —— 这在 why RAG isn't memory 中有通用案例分析。

从 Claude Code 切换到 Cursor 的最佳实践

在做任何其他事情之前,先打开自动记忆文件夹。 这是你配置中唯一在另一端没有导入器的部分,而且这是你没有亲手写下的部分。

相信 /context,而不是你对所写内容的记忆。 Memory files 列表是实际加载的内容。从未匹配过的子目录文件将不会出现在那里。

paths: 规则转换为 globs,其余保持为纯文本。 这种映射是直接的。其他所有内容作为 AGENTS.md 成本更低。

绝不要在 .cursor/rules 中留下普通的 .md 文件。 它会被默默忽略。请使用带有 frontmatter 的 .mdc,或使用 AGENTS.md

扁平化 @path 导入,而不是重新创建它们。 Cursor 的 @filename 引用并不是一个四跳的导入链。

决定冲突应该如何解决。 Cursor 合并规则的优先级是 Team Rules 高于 Project 高于 User;Claude Code 则是拼接并任意选择。解决你之前侥幸避开的冲突。

将全局偏好放入 User Rules,并注意 Inline Edit 的差距 —— 它们适用于所有项目,但不适用于 Cmd/Ctrl+K。

将推理过程保留在两个规则系统之外。 规则是方向和指针;决策背后的论据才是让 Agent 能够处理你未预料到的情况的关键 —— 这种形式在 why agents ignore the instruction files you wrote 中有详细讨论。

结论

从 Claude Code 到 Cursor 在纸面上很容易,但在实践中会有损耗,而且分歧点并不在人们预料的地方。你的 CLAUDE.md 经过重命名后变成 AGENTS.md。你的 paths: 作用域规则几乎可以完全映射到 Cursor 的 globs 上。你的用户级文件变成 User Rules,而托管策略文件变成 Team Rules。

无法迁移的是 Claude 为自己编写的所有内容。自动记忆默认开启,以本地机器 Markdown 文件的形式存储在 ~/.claude/projects/<project>/memory/ 中,其中保存的恰恰是你的 CLAUDE.md 中没有的材料 —— 而 Cursor 永远不会看到它。@path 链必须被扁平化,CLAUDE.local.md 失去了其单项目作用域,并且 Claude Code 任意解决的冲突现在将通过规定的优先级顺序来解决。

因此,请先阅读自动记忆文件夹,使用 /context 导出已加载的集合,仅转换需要条件的规则,并将决策和被拒绝的方法放在两个编辑器都可以查询的层中。

常见问题

Cursor 会读取 CLAUDE.md 吗?

不会。Cursor 文档中记录的规则来源是 .cursor/rules 中的 Project Rules、User Rules、Team Rules 以及项目根目录或子目录中的 AGENTS.md。最简单的迁移方法是将 CLAUDE.md 复制到 AGENTS.md。还要注意另一个方向的限制:Claude Code 文档指出 Claude Code 读取 CLAUDE.md,而不是 AGENTS.md

当我迁移到 Cursor 时,Claude Code 的自动记忆会发生什么?

它会保留在原处。自动记忆按项目存储在 ~/.claude/projects/<project>/memory/ 中,包含一个 MEMORY.md 索引和主题文件,文档指出它是本地机器特有的,不会在机器或云环境之间共享。Cursor 没有等效的功能,也没有导入路径,因此请阅读该文件夹并手动迁移重要的内容。

我可以保留我的 .claude/rules 文件吗?

无法原样保留,但概念可以干净地转移。带有 paths: frontmatter 字段的规则会变成带有 globs 的 Cursor .mdc 规则;没有该字段的规则会被无条件加载,并变成 alwaysApply: true 或普通的 AGENTS.md 内容。重命名为 .mdc 并添加 frontmatter —— .cursor/rules 内部的普通 .md 文件会被忽略。

在 Cursor 中,什么可以替代 @path 导入?

没有具有相同语义的替代项。CLAUDE.md 导入在启动时展开,并且最多可以嵌套四层深度。在 Cursor 中,你可以在规则内使用 @filename.ts 引用文件,但它不是一个递归导入链,因此多级导入树需要扁平化为一个文件或拆分为多个规则。

我该如何检查 Cursor 实际正在使用哪些指令?

打开 Customize → Rules,你可以在那里看到所有规则及其状态。如果某个规则没有应用,Cursor 的 FAQ 建议首先检查规则类型:对于 Apply Intelligently,确认定义了描述;对于 Apply to Specific Files,确认文件模式与被引用的文件匹配。同时确认文件使用了 .mdc 扩展名。

冲突的指令在这两个工具中的行为会相同吗?

不同,这值得提前规划。Claude Code 会拼接所有发现的记忆文件,而不是让它们相互覆盖,并且文档指出 Claude 可能会在矛盾的指令之间任意选择。Cursor 则会依次应用 Team Rules、Project Rules,然后是 User Rules,合并所有适用的规则,并在指南冲突时以较早的来源优先。