现在 AI 编程工具很多,我反而越来越不想把项目历史锁在某一个工具里。
有时 Claude Code 更适合做长时间的代码分析,有时想换 Codex 处理任务。问题是工具一换,记忆也断了:项目为什么这么设计、哪些方案试过失败、当前任务做到哪里,都要重新解释。
最简单的解决方式,是把关键信息写进 AGENTS.md 或项目文档。但如果你希望会话结束时自动整理进度,并在另一个 Agent 启动时收到交接,就需要一个独立于工具的记忆层。
开源项目 ai-memory 做的就是这件事:
Claude Code 负责这一班,Codex 接下一班;项目 Wiki 和交接记录留在中间。
它怎么让两个 Agent 共享记忆?
ai-memory 主要靠两组能力:
- Hooks:记录提示、工具调用和会话结束等事件;
- MCP:让 Agent 查询、写入和接收记忆。
每次会话结束后,系统会把执行过程整理成项目 Wiki 和交接信息。另一个支持 Hooks 的 Agent 从同一项目目录启动时,可以获得上次会话的摘要、未完成事项和下一步建议。
上层记忆使用 Markdown 保存,并通过 Git 记录版本;底层服务保存 Session、观察记录和搜索索引。你可以直接搜索,也可以打开本地 Web 页面查看。
这和“把全部聊天记录复制给下一个模型”不同。它更像交接班:保留关键状态,需要细节时再查原始记录。
安装前先知道这些
这套方案不是一个浏览器插件,需要:
- 本机安装 Docker,或者使用项目提供的原生二进制;
- 在本地运行 ai-memory 服务;
- 分别为 Claude Code 和 Codex 安装 MCP 与 Hooks;
- 确保两个工具从同一个 Git 项目目录工作。
本文使用官方 README 提供的 Docker 路线,Linux 和 macOS 都能使用。macOS 用户如果不想用容器,官方更推荐原生二进制,具体命令应以项目 Releases 和 docs/macos.md 为准。
以下命令会修改用户目录下的 Agent 配置。请先备份配置,并在测试项目中操作。
第一步:安装命令行包装器
先下载 ai-memory 提供的 CLI 包装脚本:
mkdir -p ~/.local/bin
curl -fsSL https://raw.githubusercontent.com/akitaonrails/ai-memory/main/bin/ai-memory \
-o ~/.local/bin/ai-memory
chmod +x ~/.local/bin/ai-memory
如果执行 which ai-memory 找不到命令,把 ~/.local/bin 加入 PATH:
export PATH="$HOME/.local/bin:$PATH"
正式长期使用,可以把这一行加入 ~/.zshrc 或 ~/.bashrc。
第二步:启动本地记忆服务
官方示例默认把服务绑定到 127.0.0.1:49374,只有本机可以访问:
docker run -d --name ai-memory \
--restart unless-stopped \
-p 127.0.0.1:49374:49374 \
-v ai-memory-data:/data \
akitaonrails/ai-memory:latest
这个最小配置不需要 LLM API Key,仍然可以使用 FTS5 搜索和规则摘要。如果希望自动把会话归纳成更连贯的 Wiki,可以再按官方文档配置 LLM 和 Embedding Provider。
我建议第一次先用无 LLM 模式跑通。这样更容易确认哪些数据留在本机、哪些功能确实需要外部模型。
启动后检查状态:
ai-memory status
第三步:接入 Claude Code
给 Claude Code 添加 MCP 和生命周期 Hooks:
ai-memory install-mcp --client claude-code --apply
ai-memory install-hooks --agent claude-code --apply
这两个命令是幂等的,重复运行会更新 ai-memory 自己的配置项,并保留其他 MCP 与 Hook 设置。官方说明修改前会在配置旁创建带时间戳的备份。
如果想先看它准备修改什么,去掉 --apply,让命令只打印配置片段。
第四步:接入 Codex
再为 Codex 安装对应配置:
ai-memory install-mcp --client codex --apply
ai-memory install-hooks --agent codex --apply
建议从启动 Agent 的同一个终端执行这些命令,避免配置写进了另一个环境,尤其是在 WSL、远程 SSH 或多套 Shell 配置并存时。
由于 Agent 客户端和 ai-memory 都在快速迭代,如果命令提示不支持某个 client/agent 名称,应先运行帮助命令并以当前版本文档为准:
ai-memory install-mcp --help
ai-memory install-hooks --help
第五步:做一次真实交接
准备一个测试仓库,在 Claude Code 里完成一个小任务,例如:
- 阅读项目结构;
- 记录一个架构约束;
- 修改一个非关键文件;
- 留下一个未完成问题;
- 正常结束会话。
然后在同一目录打开 Codex,检查它是否获得交接信息。也可以在终端查看状态和搜索:
ai-memory status
ai-memory search "架构约束"
本地 Wiki 页面默认可以通过下面的地址访问:
http://127.0.0.1:49374/web
重点不要只看“有没有记录”,而要检查三件事:
- 项目是否识别正确;
- 未完成事项是否准确;
- 有没有把临时猜测错误地写成长期规则。
老项目怎么补上历史?
如果项目在安装 ai-memory 前已经开发了很久,可以在项目目录运行:
ai-memory bootstrap
它会读取 Git 历史、README、docs/、模块信息和项目规则,生成初始 Wiki。这个过程可能读取大量仓库内容;敏感项目在启用外部 LLM Provider 前,应先确认数据发送范围。
哪些内容应该长期保存?
我建议长期记忆只保留高价值信息:
- 已确认的架构决策;
- 项目固定命令和验证方式;
- 明确的禁止事项;
- 已经失败并确认原因的方案;
- 当前任务的未完成项和风险。
下面这些内容不适合无脑长期保存:
- API Key、密码和客户敏感信息;
- 未经验证的模型猜测;
- 一次性的错误日志全文;
- 已经失效的临时任务状态。
ai-memory 支持固定页面、查看 checkpoints、恢复单页和清理项目。记忆系统不是装完就不管,还需要定期检查和整理。
不想部署服务,还有一个轻量方案
如果你只想让 Claude Code 和 Codex 共享最关键的背景,其实不一定要上完整系统。可以在仓库里维护三份普通文件:
AGENTS.md # 长期规则和验证命令
docs/decisions.md # 架构决策与原因
docs/handoff.md # 当前进度、问题和下一步
每次结束任务前,让当前 Agent 更新 handoff.md;下一个 Agent 开始时先读这三份文件。
这个方案没有自动捕获和搜索,但透明、简单、零服务依赖。对于个人项目,它可能已经够用。
需要注意什么?
第一,Hooks 会记录提示和工具事件。代码、路径、日志中可能带有敏感信息,使用前应检查存储目录、外部 Provider 和备份策略。
第二,共享记忆会共享错误。不要让未经验证的总结自动升级成永久项目规则,关键页面最好人工审核。
第三,不要把交接摘要当作事实来源。涉及重要决策时,应沿着记录回看代码、测试或原始文档。
第四,先在测试项目验证卸载方式。确认不再使用后,再按照官方文档移除 MCP、Hooks、容器和数据卷,避免配置残留。
小结
Claude Code 和 Codex 共享记忆,真正要解决的不是“把聊天记录同步过去”,而是把项目状态变成独立资产。
ai-memory 提供了一套自动化程度较高的方案:Hooks 捕获过程,MCP 提供读写,Markdown Wiki 保存长期知识,交接信息连接不同 Agent。
如果你只偶尔切换工具,三份项目文件可能更合适;如果你每天都在多个 Agent 之间接力,而且项目周期很长,独立记忆层会开始体现价值。
工具可以换,项目为什么这样做、现在做到哪里,不应该跟着工具一起消失。
项目地址
GitHub:
https://github.com/akitaonrails/ai-memory
安装文档:
https://github.com/akitaonrails/ai-memory/blob/main/docs/install.md
macOS 文档:
https://github.com/akitaonrails/ai-memory/blob/main/docs/macos.md