实际转移的内容
你的 CLAUDE.md 会有条件地原样转移。 如上所述。请将其视为一个过渡期,而不是最终目的地:在同一个目录下出现 AGENTS.md 之前,它都是有效的。
加载模型非常相似,令人放心。 Claude Code 在启动时会加载“工作目录上方目录层级中的 CLAUDE.md 和 CLAUDE.local.md 文件...”,而“当 Claude 读取这些目录中的文件时,子目录中的文件会按需加载”。Amp 几乎完全相同:“当前工作目录(或编辑器工作区根目录)以及 父目录(最高到 $HOME)中的 AGENTS.md 文件总是会被包含在内”,并且“当智能体读取子树中的文件时,子树中的 AGENTS.md 文件会被包含在内”。
相同的结构,相同的子树延迟加载。你心智模型中的这一半得以保留。
个人和系统范围在双方都存在,只是路径不同。 Claude Code 在加载顺序上有四个已记录的范围:托管策略、用户(~/.claude/CLAUDE.md)、项目和 ./CLAUDE.local.md。Amp 拥有仓库文件,外加用于“在提交前在本地测试的个人偏好、设备特定命令和指南”的 "$HOME/.config/amp/AGENTS.md" 和 "$HOME/.config/AGENTS.md",以及位于 /etc/ampcode/AGENTS.md、/Library/Application Support/ampcode/AGENTS.md 或 %ProgramData%\ampcode\AGENTS.md 的系统级文件,用于“针对所有 Amp 会话的系统级或组织托管的指南”。
Amp 的所有非仓库文件都是“如果存在,则总是包含在内”。因此,你的用户范围内容可以干净地映射;路径发生了变化,且双方的加载都是无条件的。
条件规则可以转移,而且变得更好。 这是真正的升级。Claude Code 通过 .claude/rules/ 前置元数据(frontmatter)中的 paths 字段来限制指令范围,其中“当 Claude 读取与模式匹配的文件时,会触发路径范围的规则”。Amp 通过带有 globs 列表的 @ 提及文件来完成同样的工作:“只有当 Amp 读取了与任何 glob 匹配的文件时,带有 globs 的被提及文件才会被包含在内。”
转换时需要了解两件事。单纯的提及是无条件的——“如果没有指定 globs,那么在被 @ 提及的时候,该文件总是会被包含在内”——所以前置元数据是核心所在。此外,glob 解析有其自身的规则:“Globs 默认会隐式添加 **/ 前缀,除非它们以 ../ 或 ./ 开头,在这种情况下,它们指的是相对于被提及文件的路径。”
导入语法的含义发生了变化,而不仅仅是拼写。 Claude Code 的 @path/to/import 会在启动时引入一个文件:“导入的文件会在启动时展开并加载到上下文中,与引用它们的 CLAUDE.md 一起”,并且“最大深度为四跳”。Amp 的 @ 提及看起来一样,并且可以是条件性的。两者都会跳过代码块——Claude Code 的“导入解析会跳过 Markdown 代码跨度和围栏代码块”,Amp 的“代码块中的 @ 提及会被忽略,以避免误报”——因此反引号中的路径在两者中都保持字面意思。
需要注意的一个区别:“相对路径是相对于包含该提及的智能体文件来解析的”,而不是相对于你的工作目录。Claude Code 的解析方式相同,因此直接复制通常有效,但如果你将文件向上或向下移动一级,就会破坏它自己的提及。
自动记忆无法转移。因为没有可以承载它的地方。 Claude Code 运行着两个系统,而不是一个。除了你编写的文件之外,“自动记忆让 Claude 能够在你不编写任何内容的情况下跨会话积累知识”,并按类型进行标记:user 代表“你的角色、专业知识和工作偏好”,feedback 代表“你给 Claude 的纠正和确认的方法”,project 代表“Claude 无法从代码或 git 历史记录中推导出的进行中的工作、截止日期和决策”,以及 reference 代表外部指针。
它默认开启,保存在 ~/.claude/projects/<project>/memory/ 下的本地文件中,并带有 MEMORY.md 索引,其范围是“每个仓库,跨工作树共享”,并且加载的片段是有界的:“每个会话(前 200 行或 25KB)”。
Amp 文档中记录的持久化方式是你编写的 AGENTS.md 文件外加线程(threads),而线程是对话而不是存储库——目前没有文档记录的与自动写入记忆目录相对应的功能。因此,你 Claude Code 配置中自动积累的那一半内容——你给出的纠正、它推断出的偏好——没有去处。
线程不是记忆层,Amp 也没有这样声称。 它们在保持工作连续性方面确实设计得很好:一个线程有一个 URL,“同一个线程可以在 Web 应用、CLI、适用于 iOS 和 macOS 的 Amp 应用中打开”,并且“智能体运行的地方与你查看它的地方是分开的”。建议是每个任务一个线程,因为“混合了无关工作的线程会给智能体提供更糟糕的推理上下文”,并且在线程变大时有一个文档记录的逃生通道——“让智能体‘移交并……’,它就会启动一个带有重要上下文的新线程”。
很有用。但它也不是保存事实的地方,因为移交只携带智能体认为相关的内容,而不是关于你项目的全部真实情况。
手动迁移
步骤 1:刻意重命名,然后按触发器拆分
不要依赖备用方案。在你的 CLAUDE.md 文件所在的相同路径上创建真正的 AGENTS.md 文件,这样行为就是显式的,而不是取决于以后是否有人添加文件。
然后进行拆分,因为 Amp 要求你这样做:“在包含多个子项目的大型仓库中,我们建议保持顶层 AGENTS.md 的通用性,并在每个子项目的子树中创建更具体的 AGENTS.md 文件。”Claude Code 从另一个方向给出了相同的建议——“目标是每个 CLAUDE.md 文件控制在 200 行以下。更长的文件会消耗更多上下文并降低遵循度”——所以如果你已经在这个上限之下,这基本上只是复制。
接下来转换你的 .claude/rules/ 条目。带有 paths 字段的规则会变成一个从 AGENTS.md 引用的文件,并在其前置元数据中包含一个 globs 列表。没有该字段的规则是无条件加载的,因此它属于通用文件,而不是作为单纯的提及。
将 ~/.claude/CLAUDE.md 的内容移动到 $HOME/.config/amp/AGENTS.md。对于 CLAUDE.local.md 中的任何内容——你没有纳入版本控制的“个人项目特定偏好”——Amp 的 $HOME/.config 文件是最接近的归宿,区别在于它们适用于所有地方,而不是仅适用于一个项目。
然后进行验证,使用为此构建的命令:“要查看 Amp 正在使用的智能体文件,请从命令面板中选择 agents-md list。”从几个不同的目录运行它,并在智能体读取了不同的文件类型之后运行。这相当于在 Claude Code 中检查 /context 中的 Memory files(记忆文件),这也是你捕获在移动中因相对路径损坏而失效的提及的方法。
步骤 2:在停止使用 Claude Code 之前,读取你的自动记忆
这一步没有工具支持,而且是人们最容易跳过的一步。
打开 ~/.claude/projects/<project>/memory/。这些文件是带有 MEMORY.md 索引的纯 Markdown 文件,它们之所以可读,正是因为 Claude 是写给它自己看的。阅读它们。
你会发现那是数月来纠正留下的残留物,边读边整理是非常值得的。读起来像指令的条目——例如格式偏好、你不断重申的规则——可以变成你新的 AGENTS.md 或 glob 范围文件中的内容。读起来像关于项目的事实条目——例如截止日期、决策及其原因、为什么存在某种临时解决方案——根本不属于指令文件,我们稍后会回到这些内容。
还要注意 Claude Code 刻意没有记录的内容,因为这会改变你预期能找到的东西:“Claude 会跳过任何它可以从代码库中推导出的内容”,并且“还会跳过你的 CLAUDE.md 文件中已经说明的任何内容”。因此,自动记忆是你文件的补充,而不是它们的副本。里面的所有内容都是代码无法告诉你的——这也是为什么它是最值得挽救的部分,也是为什么 Claude Code 在丢失这些文件时会忘记项目上下文背后的规律。
更好的方法:保留在两个工具之外积累的那一半
重命名是机械式的,glob 转换是一次升级。让这次迁移耗费真正时间的是积累下来的那一半——而且在下一次切换时你还会再次为此付出代价,因为积累下来的东西被存储在了一个工具内部。
Claude Code 自身的设计框架指出了原因。它将你编写的内容与智能体学到的内容分开,并将两者都视为上下文而不是配置:“Claude 将它们视为上下文,而不是强制配置。”Amp 保留了第一类,丢弃了第二类。这两个工具都没有错;这个类别只是需要一个不属于任何工具的归宿。
将积累的那一半放入记忆层,迁移就缩减为了简单的重命名。MemoryLake 只需三步即可设置完成。
步骤 1:创建 API 密钥
登录并在你的控制面板中生成一个 API 密钥。它不是编辑器设置,也不是智能体的本地目录,因此它不具备引发这次迁移的属性——它没有任何部分是另一个文件可以静默超越的备用方案。

步骤 2:上传你的第一批记忆
这就是步骤 2 中第二堆内容的去处:决策及其原因、截止日期、领域词汇、为什么存在某种临时解决方案,以及你已经给出不止一次的纠正。

将行为留在 AGENTS.md 中,并在适用模式的地方使用 globs 限制范围。这两个层承担着不同的工作,将它们混在一起会导致指令文件膨胀到无法被遵循的程度。
步骤 3:连接你的 AI 和智能体
将 Amp 指向该存储库。你的 AGENTS.md 文件将保持简短且专注于行为,新线程将从你项目的事实开始,而不是从移交摘要开始,并且这些知识在你评估下一个工具时依然能够存活——正如跨智能体记忆中所阐述的观点。

这在实践中改变了什么
第一个变化是备用方案不再承担重任。显式的 AGENTS.md 文件加上外部存储库意味着你的配置中没有任何部分依赖于某个文件不存在。
第二个变化是丢失自动记忆的代价变小了。这是一个很好的功能,Amp 没有它是真正的差距——但这也仅仅针对那些无处安放的知识而言。
第三个变化是 glob 范围的指南可以保持精简。Amp 的条件加载确实比一直开启的文件更好,而且当你要限制的内容是指令而不是项目事实的档案柜时,它的效果最好——正如通过记忆层减少 Token 使用量中所论证的。
从 Claude Code 迁移到 Amp 的最佳实践
- 创建真正的
AGENTS.md文件。CLAUDE.md备用方案仅在不存在AGENTS.md的地方适用。 - 拆分根文件。 Amp 建议使用通用的顶层文件和特定的子树文件。
- 将
paths转换为globs。 并且记住,单纯的@提及是无条件的。 - 注意 glob 解析。 除非模式以
./或../开头,否则会隐式添加**/前缀。 - 移动文件后检查提及路径。 它们是相对于包含该提及的文件来解析的。
- 先读取你的自动记忆目录。 纯 Markdown 格式,由
MEMORY.md索引,且没有任何工具可以导出它。 - 使用
agents-md list进行验证。 从多个目录运行,并在接触不同的文件类型之后运行。 - 不要将线程视为存储。 每个任务一个线程,且移交只携带智能体认为相关的内容。
结论
Amp 读取 CLAUDE.md 让这看起来像是同类中最简单的迁移,对于文件那一半来说也确实几乎如此——它带来了一个比你之前拥有的更好的条件加载模型。
让人痛苦的是自动写入的那一半。Claude Code 将你的纠正积累到本地的 Markdown 中;Amp 没有这样的层,也没有导入器来处理它。在离开之前阅读该目录,将指令与事实分开,并将事实放在下一次工具切换无法波及的地方。