📌 项目地址akitaonrails/ai-memory | ⭐ 1,903 颗星 | 🔧 Rust | 📜 未标注

先看它解决的问题

当前AI编程代理(Claude Code、Codex、Cursor、Gemini CLI等)的问题不是单次会话能力不够,而是没有长期记忆。你今天用Claude Code重构了一个模块,明天换成Codex继续开发,Codex不知道你做过什么决定、踩过什么坑、还有哪些问题没解决。所有上下文要重新口述一遍,很多时候还要重新摸索一遍失败路径。

ai-memory就是干这个的。它把每个工作目录里的代理会话过程记录下来——包括你做了哪些操作、探索过什么方案、最后得出了什么结论——然后在新的代理启动时把这些记忆自动注入进去。项目简介说得很直接:在Claude Code干到一半,换成OpenAI Codex,继续干,不用重新解释架构、失败尝试、未决问题。

它的工作方式

ai-memory不是靠猜测或日志分析,它的工作方式分成两层:

一是MCP配置。它作为MCP(Model Context Protocol)服务器,给代理提供读取和写入记忆的能力。安装了MCP配置后,代理就能在自己的会话里主动调用记忆相关的工具。

二是生命周期钩子。它在代理的hook事件里挂上脚本,让捕获记忆的行为自动化。比如Claude Code有SessionStart、Stop这些事件,ai-memory就利用这些时机自动保存上下文,并在新会话启动时注入之前的手记(handoffs)。

项目里有一个术语叫”capture exclusions”(捕获排除),指某些内容不会被记录——这点很重要,因为编码代理的会话里可能有密钥、个人路径等敏感信息,它默认会过滤掉这些内容。官方说”native commands enforce capture exclusions”,即原生命令会强制不捕获这些信息。

实际用法

ai-memory的典型使用流程是:安装二进制 → 安装MCP配置 + 钩子 → 正常使用代理 → 需要结束时手动或自动完成会话总结。

具体命令有下面这些(注意,部分命令的通用参数和完整选项需要参考官方文档,README中重点强调了以下几点):

安装

安装方式取决于你的平台。Linux支持Docker镜像(amd64/arm64)和Arch/AUR包,macOS发布原生的ai-memory-macos-aarch64.tar.gzai-memory-macos-x86_64.tar.gz二进制,Windows通过WSL2使用Linux版,原生Windows目前是实验性支持,发布ai-memory-windows-x86_64.zip

Apple Silicon上官方推荐用原生二进制,这是最平滑的路径。

配置代理

配置入口是install-mcp这个命令。比如对Claude Code:

ai-memory install-mcp --session-aware

--session-aware是个值得注意的选项,它通过一个本地stdio桥接器,为每个会话自动做作用域隔离,这样不同会话的记忆不会被相互污染。

对Codex和Claude Code等不同代理,安装MCP的方式不同。OpenCode用的是远程MCP配置加一个生成的TypeScript插件,而Command Code把配置写在~/.commandcode/mcp.json~/.commandcode/settings.json里。

结束会话

不同代理对”会话结束”的感知不一样。Claude Code有真实的Stop钩子,而Codex没有一个可靠的”会话真正结束”钩子,所以在Claude Code里,Stop事件会触发捕获逻辑;但在Codex里,你需要在收工时手动运行:

ai-memory finalize-session

Command Code的情况类似:它的Stop事件只是一个回合(turn)边界,不是整个会话的结束。所以如果你用的是Command Code,最后一轮之后要运行:

ai-memory finalize-session --agent command-code

ai-memory run command-code 这个命令可以做到v3原生命令的会话恢复和可见事件导入,这是Command Code用户后续值得尝试的功能。

各代理支持程度差异

README给了一张支持矩阵,每个代理的支持细节都有微妙的不同,这里挑重点说:

  • Claude Code:MCP配置 + 生命周期钩子,支持--session-aware模式;还支持一个”捕获助手最后一轮回复”的选项,需要同时安装时加--capture-assistant和服务器端开启capture_assistant双选同意,默认关闭。
  • Codex:没有自动的会话结束钩子,所以需要手动finalize-session来生成最终摘要/交接文档。
  • Command Code:四个稳定的生命周期事件都支持,SessionStart会注入交接文档;但Stop只算回合边界,结束后要手动finalize。
  • Devin CLI:用PostCompaction事件来注入交接信息,因为Devin不暴露subagent事件,所以subagent相关内容不会被记录。
  • OpenCode:远程MCP + 生成的TypeScript插件,插件本身负责强制捕获排除规则。
  • OMP:需要--client omp--agent omp参数来指定。

工程细节

这个项目用Rust写的。选Rust而不是Python或TypeScript,大概率和性能、发布物形态(单二进制)有关——发布产物直接是一个个平台的原生二进制或tar包,不需要运行时依赖,这对CLI工具来说是很实用的选择。

项目的发布矩阵覆盖了Linux、macOS、Windows(原生和WSL2)、Docker镜像(多架构)、Arch/AUR包,以及systemd单位文件。这说明它把自己定位成一个真正的系统级工具,而不是某个代理的插件。也正因如此,它才能横跨Claude Code、Codex、Cursor、Gemini CLI这些完全不同的代理来做统一的记忆层。

需要留意的点

几个值得注意的事项:

记忆捕获的触发需要代理有对应的钩子机制。Codex和Command Code都没有真正的会话结束事件,所以最可靠的收尾方式还是手动运行finalize-session。如果你指望完全自动、零操作,这两个代理上的体验会稍差。

非对称的操作方式。不同代理的安装方式差异挺大:Claude Code是MCP+钩子,OpenCode是插件,Command Code是写settings.json。不是装一次就所有代理通用。好在你只需要装你正在用的那个代理的适配。

Windows原生支持是实验性的。README称其为Experimental,发布包是zip格式的exe。如果你是Windows用户,走WSL2反而更稳妥。

记忆内容的安全问题。它有捕获排除机制,但排除逻辑依赖代理的hook机制能正确传递信息。另外,Claude Code上”捕获助手最后一轮回复”是双选同意默认关闭的,降低误解读或泄露上下文的风险。对密钥这类敏感信息,最好假设排除机制并不能100%替你兜底,自己在提示词里也要注意。

适合谁用

这个项目适合那些真的会在多个AI编程代理之间切换的人,或者一个团队里有人用Claude Code、有人用Codex、有人用Cursor,大家需要一个共享的项目记忆上下文。如果你从头到尾只用Claude Code、不做多代理切换,ai-memory的优势没那么明显,它解决的问题是”跨代理的记忆持久化”而不仅仅是”给Claude Code加记忆”。但如果你试过从Claude Code切到Codex后感觉自己像失忆了一样,这个工具就是为这个痛点设计的。

这篇文章对你有帮助吗?

发表回复