「换个工具,记忆就断了」

过去两年,开发者手上的编码智能体换得越来越勤:这个项目用某个命令行助手,那个项目换成另一个,团队里还有人用第三种。每次切换都会遇到同一个问题——上一个工具里的会话记录还在磁盘上,但没有任何工具能把它翻出来。更麻烦的是,即便不换工具,新开一个会话也不会主动去读旧会话,智能体在每次启动时只看到当前仓库的代码,看不到此前与你的讨论。

这件事的成本平时不显眼,累积起来却很可观。项目目标、架构决策、试过但失败的方案、踩过的坑,这些信息在会话结束后就散落成无人调用的文件。开发者要么靠人脑记住,要么重新解释一遍,要么在同一个坑里再踩一次。

近一个月,有三个开源项目从不同方向回应这个问题。它们的共同判断是:不要把记忆留在工具里,而要把经验搬到工具之外。

需要说明的是,这三个项目均处于活跃开发阶段,缺少大规模企业部署验证与长期稳定性数据,官方及行业暂未披露更多细节,后续将持续跟进迭代动态。本文讨论的是它们公开的设计思路与已知数据。

OpenContext:把知识库接回你已有的命令行

OpenContext 是一个 MIT 许可的开源项目,定位是「给编码智能体用的个人上下文仓库」。它的做法是在本地建一个持久化的知识库,存放项目决策与上下文,让 Cursor、Claude Code、Codex 这类工具跨天、跨会话、跨仓库地复用。

它有一个明确的设计立场:不自带模型。安装后,它会为已有的命令行工具生成一组技能与若干条斜杠命令——开工前用一条命令把相关背景加载进来,收工后用另一条命令把这次学到的内容写回知识库。知识库的管理直接复用手头的命令行工具,用户不需要额外订阅一个智能体。

技术上,它提供一个基于 Tauri 的桌面界面用于浏览、搜索与编辑上下文,同时内置 MCP 服务,让智能体可以直接读写与检索知识库。项目公开时的星标数在八百上下,属于早期但增长较快的项目。

这种路线的优点是侵入性低。它不要求用户更换工具,只是在既有工作流上加了「加载」与「写回」两个动作。风险也在于此:它依赖用户养成写回习惯,如果「收工写回」这一步被跳过,知识库就会逐渐失真,最后变成一个没人维护的文档集合。

ai-memory:用 Git 存记忆,用协议做交接

ai-memory 是一个用 Rust 写的长期记忆方案,同样采用 MIT 许可,公开时星标数接近六千。它和 OpenContext 最大的区别,在于记忆的存储形式与交接机制。

存储上,它选择把记忆存成纯 Markdown 文件,放在一个 Git 仓库里。这个选择的直接好处是:可以用 grep 全文检索,可以用编辑器打开浏览,可以用常规备份工具同步,还可以通过版本历史回看过去的状态。它明确不依赖向量数据库,也不需要第三方服务。

捕获上,它通过生命周期钩子自动记录——会话开始与结束、用户提示、工具调用与通知都被采集,然后编译成结构化的 Wiki 页面。官方强调默认路径「零模型调用」,也就是在没有配置任何模型接口的情况下,检索也能靠全文搜索与实体匹配完成,只有需要生成汇总页或做矛盾检查时才调用模型。

交接上,它试图把「跨工具传递」做成一个真正的协议:记忆由二十多个命令行工具共同写入,交接带有类型、有归属人,并且只能被认领一次。此外它支持多用户认证、按人归属与审计日志,可以部署在局域网或自有服务器上供团队共用,也支持按操作者划分命名空间。

项目维护者公布的数据是:到 2.0 版本累计超过 1500 次提交、371 个已合并的拉取请求、181 个已关闭的议题,贡献者从最初的十几人增长到七十人左右。这些数字说明它已经从周末项目变成了有一定社区规模的项目,但也意味着接口与格式仍可能随版本变化。

ctx:把四十多种 Agent 的历史做成索引

第三个项目 ctx 走的是另一条路。它不新增记忆载体,而是把已经存在的会话记录变成可检索的资产。它是一个 Rust 编写的本地命令行工具,运行初始化命令后会自动发现机器上支持的编码智能体——覆盖四十多种,包括主流命令行助手与编辑器内置 Agent——并把它们的历史会话导入本地数据库。

它的检索返回的不是原始对话文本,而是结构化的匹配结果:会话标识、事件标识、命中的片段与来源工具。智能体拿到这些标识后,可以再展开具体上下文。项目给出的对比数字很有说服力:同一个查询,结构化检索返回约 917 个词元,而原始文本搜索需要约 45734 个词元,相差约五十倍。

这个差距的来源是信息组织方式。原始会话日志是按时间排列的自然语言,搜索一个关键词会命中所有包含它的消息,包括「这件事跟那个问题无关」这类噪音;而把对话拆成会话、事件与元数据三层之后,检索可以匹配事件标题与关键字段,返回带引用的片段,而不是整段日志流。

项目还强调它不上传、不总结、不改写——原始记录保持原样,只是被索引。这个定位让它在合规上更容易被接受,但也意味着它不解决「记忆质量」问题,只解决「找得到」问题。

三条路线的共同判断

把三个项目放在一起看,能发现一个共同的判断:记忆不应该绑定在工具上。OpenContext 通过外部知识库实现这一点,ai-memory 通过 Git 仓库与交接协议实现,ctx 通过跨工具的兼容层实现。三者都选择了本地优先,都把「换工具」当作常态而不是例外。

另一个共同点是它们都不试图替代模型能力。三者都明确表示不自带模型或不改变模型行为,只解决上下文的保存与调用。这个定位很务实——模型能力由厂商竞争推动,而记忆的归属问题厂商没有动力去解决,因为它与工具锁定相冲突。第三方项目在这里找到了空间。

值得注意的是,这条路线与近期的研究动向是呼应的。已经有论文指出,让策展型智能体只依赖已完成的轨迹来整理记忆,会保留错误、过度泛化与过时知识;给这个策展过程配上最小权限的只读世界工具去核实与刷新,能在不重训练的前提下把通过率从三成多提升到七成多。这说明「记忆写进去之后由谁来验」是一个独立问题,而目前这三个项目主要解决的仍是「怎么存、怎么找、怎么交接」。

中立思辨

需要辩证看待几件事。其一,跨工具记忆的价值与「一个人用几个工具」强相关,如果团队统一使用单一工具,这类方案带来的收益会明显下降,而运行一个记忆服务本身是有维护成本的。其二,把记忆存成 Markdown 加 Git 提升了可读性与可迁移性,但也意味着记忆的检索能力受限于文本匹配,语义相近但用词不同的内容可能检索不到,除非额外配置模型。其三,自动捕获会话记录虽然省事,但也可能把噪音、临时试错与错误结论一并写入,长期积累后知识库的信噪比会下降,「谁来清理」这个问题的难度不低于「谁来写」。其四,兼容层的维护成本被低估——四十多种工具各自升级会话格式,兼容层就要持续跟进,一旦某个工具改了格式,记忆链路就可能中断。其五,多用户共用记忆会引入权限与冲突问题:某个人的错误结论被写进共享知识库后,可能影响整个团队后续的判断,而这类污染很难被发现。其六,这三个项目都是社区驱动,长期维护依赖贡献者持续投入,把它们作为团队关键基础设施存在一定风险,需要评估备份与退出方案。

趋势研判

短期看,跨工具记忆会先在「多项目并行、频繁切换工具」的开发者群体里扩散,因为那里的痛点最直接;中期看,如果这类方案成熟,企业内部可能形成一层共享的工程知识库,把架构决策与踩坑记录沉淀为组织资产,而不是留在个人会话里;长期看,记忆的归属权可能成为一个真实的竞争议题——厂商希望记忆留在自己的工具里以增加迁移成本,而用户与团队希望记忆可以自由搬走,这个张力会决定下一代开发工具的产品设计。

对开发者来说,一个务实的起点是先把「值得记住的东西」定义清楚。架构决策、被否决的方案、踩过的坑、以及为什么当初这么选,这四类信息的价值最高;而具体的调试过程与临时命令,多数不值得长期保存。先想清楚记什么,再去选工具,比先装一个记忆系统再往里灌内容要有效得多。