实际传输的内容
Devin Desktop 通过两种机制保留你的上下文,其文档异常直接地指出了应该信任哪一种:“Devin Desktop 中有两种机制:记忆(由 Cascade 自动生成)和规则(由用户在全局、工作区或系统级别手动定义)。”
AGENTS.md 可以免费传输,这是最重要的新闻。 Devin 将其视为一等规则源:AGENTS.md 会被“自动发现”并输入到“驱动 .devin/rules/(以及遗留的 .windsurf/rules/)的同一个规则引擎中——只是激活模式是从文件位置推断出来的,而不是从 frontmatter 中推断出来的。”根目录文件始终处于开启状态;子目录文件则成为 glob 规则,“具有自动生成的 <directory>/** 模式”。对于目前使用默认智能体的任何人来说,至关重要的一点是:“Devin Local 智能体通过 Devin CLI 规则系统读取 AGENTS.md。”
Codex 读取相同的文件名。其文档开头写道:“Codex 在执行任何工作之前都会读取 AGENTS.md 文件。”因此,同一个文件可以被遗留的 Cascade、当前的 Devin Local 智能体以及 Codex 读取。无需任何转换。
规则可以传输,但激活模型不行。 Devin 的工作区规则通过 frontmatter 中的 trigger 字段声明模式,包含四个值和不同的上下文成本:always_on 会将“完整的规则内容...放入每条消息的系统提示词中”;model_decision 在系统提示词中“仅显示 description...”,并在 Cascade 判定相关时加载主体;glob 在“Cascade 读取或编辑匹配 globs 模式的文件时”应用规则;manual 则将规则排除在提示词之外,直到“你在 Cascade 输入框中输入 @rule-name 来激活它”。
Codex 没有等效的控制台。它每次运行构建一个指令链:在全局作用域内,它读取 AGENTS.override.md 或 AGENTS.md,并且“Codex 仅使用该级别下的第一个非空文件”。在项目作用域内,它“向下遍历到你当前的工作目录”,检查每个目录并“每个目录最多包含一个文件”。然后进行合并:“Codex 从根目录向下拼接文件,用空行连接它们。更接近你当前目录的文件会覆盖先前的引导,因为它们出现在组合提示词的后面。”
位置取代了 frontmatter。这就是本次迁移的实际工作,并且它有一个上限:“Codex 会跳过空文件,并且一旦组合大小达到 project_doc_max_bytes(默认为 32 KiB)定义的限制,就会停止添加文件。”
记忆无法传输,而且它们本来就已经处于孤立状态。 Cascade 的记忆“与创建它们的工作区相关联,并本地存储在 ~/.codeium/windsurf/memories/ 中”,一句话指出了两个限制:“在一个工作区中生成的记忆在另一个工作区中不可用,并且它们不会提交到你的仓库中。”Devin 坦白地补充道:“自动生成的记忆仅存在于你的机器上。”
也没有可以依赖的导入器。Codex 的导入流程明确命名了其支持的来源——桌面应用“可以从 Claude Code、Claude Cowork 或 Cursor 导入”,而 CLI “可以从 Claude Code 或 Cursor 导入”。Devin 不在这两个列表中,在寻找导入按钮之前,这一点值得了解。Codex 可以从 Cursor 和 Claude 导入什么 涵盖了该流程,如果你刚好也是从这些工具之一迁移过来的话。
手动迁移步骤
步骤 1:找出哪个智能体一直在读取你的上下文,然后进行盘点
打开 Cascade 中的 Customizations(自定义)面板或 Devin Settings(设置),查看实际存在的内容。Devin 的文档描述了这两个界面:记忆和规则“可以随时通过点击 Cascade 右上角滑动菜单中的 Customizations 图标,或通过 'Devin - Settings' 进行访问和配置”。
然后检查以下四个位置,因为规则存在的地方比人们预期的要多:
~/.codeium/windsurf/memories/global_rules.md—— “单个文件,应用于所有工作区。始终开启。限制为 6,000 个字符。”注意路径:全局规则文件位于记忆目录内,这也是人们经常认为自己没有全局规则的常见原因。- 工作区中的
.devin/rules/*.md(“首选”),以.windsurf/rules/*.md作为备用,且“每个文件限制为 12,000 个字符”。 - 工作区根目录,其中“工作区根目录下的遗留单文件
.windsurfrules仍会被读取”。 - 类似于
/etc/devin/rules/路径下的企业托管系统规则,这些规则“由 IT 部署,对最终用户只读”,并且“与工作区和全局规则合并,在不覆盖用户定义规则的情况下为 Cascade 提供额外的上下文”。如果存在这些规则,它们不归你移动——请向负责部署的人员报告。
还有一个需要检查的发现奇特之处:Devin 会“向上搜索到 git 根目录以在父目录中查找规则”,但是“当你创建新规则时,它将保存在当前工作区的 .devin/rules 目录中,而不一定在 git 根目录下”。在单体仓库(monorepo)中,这意味着规则可能会分散在你没有想到的子目录中。
对于记忆,现在请阅读它们并将任何值得保留的内容复制到文本中。没有导出功能,它们不在你的仓库中,如果它们所属的工作区发生变化,你就会失去关联。
步骤 2:将四种激活模式扁平化为一个拼接链
按 trigger 值对你保留的每个规则进行排序,并为每个模式指定一个目的地:
always_on 放入根目录的 AGENTS.md 中。这两种工具都将根级别文件视为无条件的,因此这是直接复制。注意总数:Devin 允许全局 6,000 个字符,每个工作区文件 12,000 个字符,而 Codex 在组合大小达到 32 KiB 时停止追加,当你达到上限时,其指导建议是“提高限制或将指令拆分到嵌套目录中”。
glob 变成目录放置。作用域为 src/**/*.ts 的规则变成该目录下的 AGENTS.md,当工作目录位于该目录或其下方时,Codex 会获取该文件。这是转换最干净的模式,因为 Devin already 将子目录 AGENTS.md 文件视为具有自动生成的 <directory>/** 模式的 glob。
model_decision 没有直接的等效项,这是唯一需要思考而不是直接翻译的地方。该规则在提示词中仅作为描述存在,主体在相关时才被拉入。在 Codex 中,你可以选择:如果它足够重要以至于需要始终应用,则在最近的 AGENTS.md 中将其提升为无条件规则;或者将其完全移出指令,并将其表示为技能,这也是 Devin 自身的迁移向导针对 Cascade 记忆所指向的方向。将所有内容都提升是默认会犯的错误——这是用偶尔才起作用的材料快速达到 32 KiB 上限的最快方式。如果对指令和按需能力之间的区别感到陌生,为什么智能体技能不是记忆 划清了界限。
manual 规则是你刻意调用的内容。它们根本不属于始终加载的指令链。将它们保留为你粘贴的文档,或者作为技能。
最后,按照 Codex 的意图使用 AGENTS.override.md:“当你需要临时全局覆盖而不删除基础文件时,请使用 ~/.codex/AGENTS.override.md。”这非常适合以前存在于 global_rules.md 中的个人偏好,而不会让这些偏好泄露到仓库中。
在宣布完成之前进行最后一次检查。Codex 自己的文档划定了与 Devin 相同的界限,而且措辞几乎相同:“将团队必需的引导保留在 AGENTS.md 或签入的文档中。将记忆视为有用的召回层,而不是必须始终应用的规则的唯一来源。”如果规则必须始终成立,它应该属于文件,而不是任何一个工具生成的记忆。如果 Codex 似乎仍然忽略了已放置的文件,为什么 Codex 会跳过 AGENTS.md 规则 涵盖了常见原因。
更好的方法:将学习到的另一半放在任何智能体都不拥有的地方
步骤 1 和步骤 2 移动了曾经作为文件的所有内容。它们无法移动的是两个厂商都告诉你不要依赖的那一层——而且他们确实都这么说了。Devin 的建议是“将其写为规则或添加到你仓库中的 AGENTS.md 中,而不是依赖自动生成的记忆”,因为“规则是版本控制的、可与团队共享的,并且能让你对激活进行显式控制”。与此同时,Codex 的本地记忆“默认关闭”,作为“生成的状态”存在于 ~/.codex/memories/ 中,并且“当你剩余的 Codex 速率限制百分比低于配置的阈值时”会完全跳过后台传递——这意味着你最繁忙的会话最不可能被记录。
因此,在双方看来,积累的理解要么是机器本地的、生成的,要么是明确不推荐作为真理来源的。指令属于仓库。学习到的另一半则属于任何编辑器都无法控制的地方。
MemoryLake 就是这样一个地方:一个由你拥有的记忆层,由你通过 API 运行的任何智能体读取,而不是通过某个工具的私有目录。只需三个步骤。
步骤 1:创建 API 密钥
登录并从你的工作区设置中创建 API 密钥。它是属于你的,而不是编辑器的,因此未来的切换不会使其失效。

步骤 2:上传你的第一批记忆
从你从 Cascade 记忆中复制的内容开始,然后添加那些永远不适合规则文件的材料:团队已经尝试并拒绝了哪些方法、为什么某个模块要这样构建、不断重复出现的审查意见、对在这里工作了一年的人来说显而易见的约束。文件按原样输入,包括多模态文件,因此架构图或编码约定的电子表格可以直接输入。

步骤 3:连接你的 AI 和智能体
连接 Codex,如果你仍在使用 Devin Desktop,请保持其连接。从那时起,学习层将从一个地方读取,因此在过渡期间运行这两个工具不再意味着需要维护两套上下文。

三个限制。MemoryLake 不会读取或写入 ~/.codeium/windsurf/memories/ 或 ~/.codex/memories/——这些是每个工具的生成状态,这正是手动迁移步骤 1 需要手动操作的原因。它不会改变 Codex 构建其指令链的方式,也不会改变 32 KiB 上限的应用方式。而且它不能替代 AGENTS.md:必须对每个人都适用的规则属于仓库,以便团队成员和代码审查可以看到它们。
这在实践中改变了什么
最直接的是,它改变了顺序。你审计哪个智能体一直在读取你的上下文,你原封不动地移动 AGENTS.md,你刻意地将四种触发模式扁平化,而不是将所有内容都倾倒进一个根文件中,并且你将学习到的另一半保留在两个工具之外。
在几个月的时间里,它改变了下一次过渡的成本。这次迁移有一个不寻常的特点:源工具已经弃用了自己的记忆系统以支持文件,而目标工具在交付时关闭了本地记忆,并警告不要将它们视为权威。两个独立的厂商得出相同的结论,这是一个相当强烈的信号,表明持久知识应该存在于何处——而这两个答案都不是“在编辑器内部”。
它还消除了重叠期间的多工具税,对大多数团队来说,这个重叠期比计划的要长。Devin 记忆是针对每个工作区和每台机器的;Codex 记忆是针对每台机器的,且默认关闭。在没有外部层的情况下运行这两者意味着相同的上下文会在两个地方被重复教授,这就是编程智能体实际读取的内容中所描述的模式。
切换后的最佳实践
保留一个根目录 AGENTS.md,并将具体性向下推入树中。 Codex 每个目录最多包含一个文件,并允许更深的文件覆盖较浅的文件,因此目录树现在是你的作用域机制。
注意 32 KiB 的组合上限。 达到该上限时,Codex 会停止追加,且该失败是静默截断,而不是报错。
不要通过提升所有 model_decision 规则来移植它们。 该模式的存在是为了保持低廉的上下文成本。提升所有内容会花光你刚刚继承的预算。
在验证新链之前,将 .windsurfrules 保留在原处。 Devin 仍然会读取它,因此它是重叠期间的一个有效备用方案——但不要将其视为长期归宿。
按主题拆分规则,每个关注点一个文件。 Devin 关于保持规则“简单、简洁和具体”的指导同样适用于 Codex,而主题大小的文件正是使基于目录的作用域模型清晰易读的关键。
深思熟虑地决定是否启用 Codex 的本地记忆。 它们默认是关闭的。如果你开启它们,请记住文档中记录的行为:生成的状态、不适合手动编辑、在简短会话中会被跳过,以及当你的速率限制余量较低时会完全跳过。相关症状在为什么 Codex 会忘记项目上下文中有所涵盖。
结论
这次迁移中的意外发现并不在 Codex 这一侧。而是 Devin Desktop 的默认智能体不会持久化记忆,这意味着人们最害怕失去的那一层可能早已脱节。一旦确定了这一点,剩下的工作就是机械性的了:AGENTS.md 原封不动地移动,工作区规则从四种激活模式扁平化为具有字节上限的目录树,而记忆则需要手动读取,因为没有其他工具会为你读取它们。
值得好好做的部分是最后一部分。两个厂商都指明不要使用它们自己生成的记忆,而是指向签入的文件,文件才是规则的正确归宿。对于规则之外的所有知识,持久的解决方案是一个比你本季度使用的任何编辑器都更长寿的层。