为什么 Codex 仍然没有记住您期望的内容
记忆默认关闭,需在以下两个地方之一开启
文档中写得很清楚:“本地 Codex 记忆默认关闭。”
有两种启用它们的方法。在 ChatGPT 桌面应用中,打开 Settings > Personalization 并开启 Enable memories。对于基于配置的设置,请将功能标志添加到 config.toml 中:
[features]
memories = true如果您在桌面应用、CLI 和 IDE 插件中跨平台使用 Codex,请注意,IDE 插件“使用连接的 Codex 主机的本地记忆存储”——它不维护自己的存储。在主机上启用它,插件就会随之启用。
还有一个容易让人混淆的区别:网页版的 ChatGPT 是一个独立的系统。“ChatGPT 网页版使用 ChatGPT 记忆,而本地 Codex 客户端使用独立的本地记忆存储和控制。” 并且 ChatGPT Work 完全“不使用本地 Codex 记忆存储或本地记忆控制”。开启其中一个并不会开启另一个。
写入是延迟的,且可能会被跳过
即使开启了记忆,在对话结束的那一刻也不会立即出现任何内容。“对话结束时,记忆可能不会马上更新。Codex 会等待对话空闲足够长的时间,以避免对仍在进行中的工作进行总结。” Codex 还会“跳过活跃或短暂的会话”。
这是一个合理的设计,但它会导致第一天使用时让人感到困惑:您启用了该功能,结束了一个会话,寻找记忆,却一无所获。
另一个更重要但更隐蔽的特征是:“当您的 Codex 剩余速率限制百分比低于配置的阈值时,记忆生成也可以跳过后台处理,这样 Codex 就不会在您接近限制时消耗额度。”
从它触发的时机来理解这一点。最有可能被跳过的会话是那些在繁重工作结束时、冗长、高密度且艰难的会话——而这些恰恰是最值得记住的会话。该阈值可以通过 memories.min_rate_limit_remaining_percent 进行配置,但默认行为是,您最繁忙的工作最不可能被记录下来。
写入的内容是生成的临时状态,官方建议不要编辑它
该存储位于您的 Codex 主目录下(默认为 ~/.codex),并且“主要的记忆文件位于 ~/.codex/memories/ 下,包括摘要、持久条目、最近的输入以及来自先前对话的支持证据。”
接着是定义整个功能定位的说明:“将这些文件视为生成的临时状态。您可以在排查问题或共享 Codex 主目录之前检查它们,但不要依赖手动编辑它们作为您的主要控制手段。”
因此,它是可检查的,但不是可创作的。您可以阅读它以找出 Codex 为什么相信某事;但您不能将其维护为项目运行方式的权威记录。这是一个刻意的界限,也是文档在几行之后再次划定的界限。
外部上下文可以完全排除在记忆生成之外
这是这组键中最有趣的一个。memories.disable_on_external_context,“当为 true 时,会将使用外部上下文(如 MCP 工具调用、网页搜索或工具搜索)的对话排除在记忆生成之外。” 较旧的键 memories.no_memories_if_mcp_or_web_search 仍被接受作为别名。
厂商提供一个将受外部影响的会话排除在记忆存储之外的开关,是关于这些系统如何失效的一个有意义的信号。智能体从其他地方获取的内容是进入持久记忆的一条看似合理的途径,而 OpenAI 为您提供了一种关闭它的方法。
不过,这种权衡是真实存在的。开启它,您那些偏重研究的会话(通常是包含最多真正新信息的会话)将不再贡献记忆。关闭它,智能体阅读的任何内容都可能影响它所记住的内容。
其他键简介
还有四个键值得了解。memories.generate_memories “控制新创建的对话是否可以作为记忆生成的输入进行存储。” memories.use_memories “控制 Codex 是否将现有记忆注入到未来的会话中”——这两个方向是分开的,因此您可以只读不写,或只写不读。而 memories.extract_model 和 memories.consolidation_model 分别覆盖用于单次对话提取和全局合并的模型。
在单次对话级别,桌面应用和 Codex TUI 中的 /memories 控制该对话是否可以使用现有记忆以及是否可以为未来的记忆提供输入。“对话级别的选择不会改变您的全局记忆设置。”
人们的尝试
断定 Codex 没有记忆。 这是可以理解的,而且由于该存储默认是关闭的,这是最常见的误区。请先检查 Settings > Personalization。
将所有内容写入 AGENTS.md。 这确实有效,且文档针对某一特定类别也积极推荐这种做法——但不断膨胀的指令文件会在每次请求中争夺上下文,而且它不适合用于推理。
手动编辑 ~/.codex/memories/。 明确不建议这样做:这些是生成的文件,Codex 的合并过程才是维护它们的方式。您的编辑并不是控制手段。
启用记忆并认为万事大吉。 延迟写入和速率限制跳过意味着其覆盖范围在设计上就是零散的。没有任何机制能保证特定的会话一定会留下痕迹。
开启 disable_on_external_context 后便置之不理。 这是一个安全的默认设置,但它会默默地将您信息最密集的会话排除在外。
在每次会话开始时粘贴上下文。 可靠、手动,并且一直有效,直到您忘记的那一天。
解决方案:区分“必须遵守的规则”与“便于召回的信息”,
文档为您提供了这种划分,非常值得完整引用,因为这是所有厂商发布过的关于此问题最清晰的声明:
“将团队所需的指导保留在 AGENTS.md 或已签入的文档中。将记忆视为一个有用的召回层,而不是必须始终适用的规则的唯一来源。”
那么,这就分为三个层级。每次都必须遵守的规则放入 AGENTS.md 或已签入的文档中。便利性召回(您的偏好、您喜欢的输出形式)是本地存储的用武之地,让它自动运行才是关键。在这两者之间,是所有既不是指令也不是可有可无的持久内容:决策及其原因、已被排除的方法、使显而易见的答案变得错误的约束条件。这一层级不能存在于一个在您接近速率限制时会跳过处理的存储中,也不应该存在于一个在每次请求时都会加载的指令文件中。
这正是 MemoryLake 所承载的层级——您的工具会刻意查询的持久项目知识,从而使 AGENTS.md 保持简短,而本地存储保持其便利性。设置只需三个步骤。
步骤 1:创建 API 密钥
登录并创建 API 密钥。一个凭据即可跨您连接的工具使用。

步骤 2:上传您的第一批记忆
简短的条目,每条只包含一个主张。一个有用的测试是,失去它是否会让你在争论中失利,而不仅仅是多敲几次键盘:

决策及其原因。 “我们批量写入是因为连接池在并发达到 200 时会饱和。” 规则可以写在 AGENTS.md 中;而原因则是防止它在下个季度被推翻的关键。
已被排除的方法。 这一类别不会出现在任何指令文件或提交信息中,却会在每次新会话中被重新提议。
无处声明的环境事实。 未记录的速率限制、顺序依赖关系、仅在 CI 中失败的测试。
任何您不希望因跳过处理而丢失的内容。 如果它很重要,而本地存储的覆盖只是尽力而为,那就不要依赖这种尽力而为。
步骤 3:连接您的 AI 和智能体
连接您使用的工具。MemoryLake 可以通过 MCP 和 API 访问,且 Codex 支持 MCP 服务端——值得注意的是,如果您将 memories.disable_on_external_context 保持设置为 true,那么使用 MCP 工具的会话将不再为 Codex 自身的本地记忆提供输入。这是需要深思熟虑哪个存储保留什么内容的原因,而不是避免使用其中任何一个的理由。

三个坦诚的限制。MemoryLake 不会读取、写入或删除 ~/.codex/memories/——那是 OpenAI 维护的生成状态,任何外部工具都不应该编辑它。它不会写入您的 AGENTS.md,这仍然是您引导 Codex 的方式。并且除非您或您的智能体主动放入,否则任何内容都不会进入记忆,因此步骤 2 是刻意为之的。
这在实践中改变了什么
“Codex 能记住吗?”得到了真正的答案。 是的,一旦启用——而且您知道文件在哪里。
跳过后台处理不再会让您损失任何重要内容。 持久层并不在那个会跳过处理的存储中。
AGENTS.md 停止膨胀。 指令依然是指令;推理内容被移出。
您可以只检查而不编辑。 阅读 ~/.codex/memories/ 以理解某种设定,修改持久层以纠正它。
偏重研究的会话可以安全运行。 当重要的结论被刻意记录下来时,将外部上下文排除在 Codex 自身的存储之外对您造成的损失就会减少。
Codex 本地记忆的最佳实践
显式开启它们,并检查您实际使用的界面。 默认关闭;IDE 插件跟随其主机;ChatGPT 网页版是一个独立的系统。
深思熟虑地决定 disable_on_external_context。 它关闭了一条进入记忆的真实路径,并将您信息最密集的会话排除在外。请明智选择。
不要在记忆中放入敏感信息。 文档很直接:“不要在记忆中存储敏感信息。” Codex 会从生成的字段中脱敏敏感信息,但在共享您的 Codex 主目录之前,请务必检查这些文件。
在断定该功能有误之前,先阅读文件。 支持检查;但不支持将手动编辑作为控制手段。
将所需的指导保留在 AGENTS.md 中。 这是厂商自己的建议,本地存储并不能替代它。
将读取与写入分离。 use_memories 和 generate_memories 是独立的键,这在共享或敏感工作中非常有用。
定期审计积累的内容。 通用实践请参见 how to audit what your AI remembers。
保持持久层精简。 条目并非越多越好——论点请参见 why agent memory should keep less。
结论
Codex 记住的内容比大多数用户想象的要多,但比“记忆”一词所暗示的要少。在 ~/.codex/memories/ 处有一个有文档记录的本地存储,保存着摘要、持久条目、最近的输入和支持证据——它默认关闭,可通过 Settings > Personalization 或 config.toml 功能标志启用,并通过 /memories 进行单次对话控制,背后还有半打配置键。
它的覆盖范围刻意设计为“尽力而为”。写入会等待对话空闲,短暂的会话会被跳过,当您的剩余速率限制低于配置的阈值时,后台处理可以被完全跳过。这些文件是生成的临时状态,官方建议您检查但不要手动编辑。并且 disable_on_external_context 会将任何涉及 MCP 或网页搜索的会话完全排除在记忆生成之外,这确实是一个很好的控制,但也确实是一个很大的排除范围。
这一切都不是缺陷,而是一种范围。文档本身就指明了这一范围:将所需的指导保留在 AGENTS.md 或已签入的文档中,并将记忆视为一个有用的召回层,而不是必须始终适用的规则的唯一来源。开启该存储,让它处理便利性事务,并将您会为之争论的决策放入在您繁忙时不会跳过处理的工具中。仅靠上下文无法解决这一问题的更广泛原因,请参见 why long context isn't memory。