给 Codex CLI 加记忆

MCP 服务器、需要你批准的钩子,还有插件市场

Codex CLI 会记下每个会话,然后把下一个会话开成空的。rollout 文件还在磁盘上,同一周里你在另一个智能体里做的事也还在。

全部记忆就是 AGENTS.md

Codex 在会话开始时读 AGENTS.md——仓库里的那份,以及对所有项目生效的 ~/.codex/AGENTS.md——这就是它仅有的记忆。它没有自动提炼记忆的功能,也不会替你追加任何内容;除了你自己写进那个文件的,什么都带不到下一个会话。

Codex 已经有的部分

rollout 放在 ${CODEX_HOME:-~/.codex}/sessions/YYYY/MM/DD/rollout-*.jsonl 下,你敲过的提示词放在旁边的 history.jsonl 里。完整,但没有任何东西读它。Codex 的会话文件是怎么读的里有格式,以及解析它时踩过的坑。

接上召回

deja install codex-auto

这会把 deja MCP 服务器写进 ~/.codex/config.toml,同时写入把召回送进会话的钩子:会话开始时、每次提问时、执行命令或补丁之前、命令失败之后、压缩之前,以及会话结束时。只装服务器用 deja install codex。

在你怀疑有 bug 之前先知道一点:Codex 不会运行没给它看过的钩子。打开 Codex,在 /hooks 里批准一次,否则磁盘上的文件看起来全都对,记忆却一条也送不到——codex exec 也一样。

这个仓库同时也是一个 Codex 插件市场:

codex plugin marketplace add https://github.com/vshulcz/deja-vu
codex plugin add deja-vu@deja-vu

两条路一起跑是安全的,不会变成两份:MCP 服务器按名字索引,而我们交付的每份清单都把它叫作 deja,所以两边会合成同一个服务器,而不是把每个工具列两遍。

无论走哪条路都需要那个二进制,因为插件交付的是文件,不是运行时:

brew install deja-vu
# 或者
curl -fsSL https://raw.githubusercontent.com/vshulcz/deja-vu/main/install.sh | sh

为什么这在 Codex 里比多数智能体更要紧

Codex 的会话短而多——一天的活分散在十几个 rollout 文件里,而不是一条长线程。于是你周二定下的那件事,靠翻很难找到,靠搜索却很容易。找回解决问题的那次会话讲的就是命令这一侧。

Codex 还会在压缩之前把会话记录交给钩子,所以这里的工作上下文可以恢复:deja 留下任务、涉及的文件,以及每条命令和它是否成功,并在摘要之后的下一轮交还一次。见压缩之后。

和这个 harness 无关的那一半

索引覆盖这台机器上每个智能体的转录——今天是四十二个,各有各的格式——所以在一个工具里找到的修法,能回答在另一个工具里提的问题,包括这一切装上来之前的会话。这就是选择索引、而不是选择边用边记的原因。

这里没有任何东西在写记忆,所以也就没有什么能凭空编进你的历史里;建索引和检索都在本地,凭据在建索引时就被脱敏(隐私说明)。每次提问注入上限 1536 字节,每次工具调用约 4 KB——记忆要花多少 token 里有实测对比。

快速开始 · Codex 的会话文件是怎么读的