← 返回博客
Ai预计阅读 9 分钟

你的下一个编程 Agent,不该从零开始

发布于 2026年10月24日
你的下一个编程 Agent,不该从零开始

换编程 Agent 最贵的地方,不是订阅费,而是你又花了一个小时,把项目从头讲一遍。

哪些文件重要,哪个方案已经试过并且挂了,测试为什么是这个结构,那个做到一半的分支在干什么。Claude Code 一概不知。Codex、Cursor、Gemini CLI 也一样。每个都是从空的上下文窗口开始,再加上一句客气的“我很乐意帮忙”。

ai-memory 是一个想解决这件事的 Rust 二进制程序,而它的设计取舍比功能列表更有意思。

一份记忆,多个 harness

它的卖点是:二十来个 agent harness——Claude Code、Codex、Cursor、Gemini CLI、OpenCode、Grok、Devin、Kimi、Kiro 等等——都从同一个共享记忆库里读。你在其中一个里干活,任务做到一半停下,在同一个目录里打开另一个,它接着上一个的进度往下走。

机制是“有归属的交接”。不是让 agent 自己生成一段摘要、然后祈祷它准确,而是一条明确的记录,带一个只能被认领一次的 owner。最后这条约束才是关键:它意味着两个 Agent 不可能同时以为自己是在接着干,也意味着一个被放弃的交接是看得见的,而不是悄悄丢掉。

还有一层是跨项目的。你的工作偏好——包管理器、测试布局、你喜欢怎么组织模块——会跟着你进新仓库,所以刚 clone 下来的项目,在那些“到哪儿都成立”的事情上不用从零开始。

A half-open wooden card catalogue drawer packed with index cards under warm side light

拿 Markdown 当真相来源

这里有个设计决策,值得好好吵一吵。

Agent 的记忆系统通常就是 embedding。把历史切块、向量化、塞进向量数据库、按相似度检索。这套能跑,但有三个问题:你读不了它,你 diff 不了它,而且检索足够不透明——当它返回错误的东西时,你根本不知道为什么。

ai-memory 把它倒过来了。真相来源是一份普通的 Markdown wiki,用 git 做版本管理。SQLite 索引——全文搜索、实体、embedding——是派生的,可以重建。把数据库删了,你什么都没损失。

这一个选择换来很多东西。你可以 grep 这份 wiki。可以在 Obsidian 里打开它。可以手动改掉一条错的记录。可以 rsync 它。可以看一个 diff,然后发现 Agent 对你架构的理解在周二变了。而且没有向量库把你锁死。

这也意味着记忆是可审计的,而这对团队很重要。“Agent 为什么认为我们用 pnpm”这个问题,答案是某个文件。

会变旧,但不会被删

项目里描述了一套记忆老化机制:分层衰减、按访问加权保留、去重、矛盾标记。不用的笔记优先级会下降,但不会消失;互相冲突的条目会被标出来,而不是被悄悄覆盖。

重要的细节是:没有硬删除。旧页面留在 git 里,一条 restore 命令就能找回来。想想 Agent 那条“过时”的笔记,有多经常是某个决定为何做出的唯一记录,这个默认值就是对的。

还有个可选功能叫 dreaming,在空闲时间用 LLM 重写一批冷笔记。默认关闭,README 也写得很明确:它从不删除原始素材。任何用模型改写你笔记的东西,默认关掉都是对的。

安装确实很短

Linux 或 macOS 上两条命令:一个 curl 到 shell 的安装脚本(会校验 SHA-256),然后 ai-memory setup,它会建好数据目录、启动一个用户级服务,再把它检测到的 Agent 都接上。Windows 有对应的 PowerShell 版本,另外还有 AUR、RPM、Nix、Docker,以及 Claude Code 和 Codex 的插件市场条目。

日常使用围绕一个 wrapper:用 ai-memory run claude 代替 claude。首次运行会装好对应的 hooks 和 MCP server,并把会话限定在当前项目。之后 ai-memory continue 恢复最近一次受管理的 checkout,resume --search auth 则按名字从你的工作流里挑一个。

还有个 bootstrap 命令,一次性导入已有的项目历史——这就是“你会真的用起来的工具”和“你一直打算用起来的工具”之间的差别。

让人不太舒服的部分

通过生命周期 hooks 静默抓取,意味着系统会在你干活的时候记录 prompt、工具调用和会话边界。这是它唯一能运转的方式——你不可能手动写日志——但这一点值得看清楚。你对着客户代码库敲过的每一条 prompt,其记录都是敏感材料,而现在它就躺在一个被 git 版本管理的目录里。

缓解措施算是合理:默认只绑 loopback,setup 会生成一个 bearer token,写进只有 owner 能读的文件,而不是写进你的 Agent 配置里。但 Docker 的快速启动是不带认证跑的,README 也标了仅限本地使用。如果你在没有 TLS 反向代理的情况下把那个端口暴露出去,等于把你的工作历史公开了。

团队那部分比我预想的成熟,考虑到这项目还这么年轻:共享服务器、按项目共享、私有交接、多用户认证、归属和审计日志,全在付费层之外。这套功能集才决定它能不能扛住和一个真实工程组织的接触。

如果你不想跑服务器

一个合理的反对意见:“我自己的服务器”这句话,一出口就劝退一半读者。

它不一定非得是台服务器。setup 命令会在同一台机器上起一个用户级服务,绑在 loopback 上,这就是默认路径——不用 homelab,不用 VPS,不用 DNS。跨机器和团队功能只有在你想要的时候才重要,而且它们和核心循环是可分开的。

还有个从仓库里构建的 macOS 菜单栏应用,以及一个只读的网页视图——如果你更想在浏览器里而不是编辑器里翻你的 wiki。Docker 那条路,主要是给本来就习惯用容器思考的人准备的。

所以老实的上手阶梯是:装到你的笔记本上,让它记录一个项目,然后看看它产出的 wiki 是不是你真的会去读的东西。如果是,剩下的自然跟上。如果 wiki 就是一堆噪音,再多的团队功能也救不了它。

为什么这事比听起来更重要

Agent 市场现在是按厂商划分的,而厂商没有动机让你轻松离开。你的上下文就是锁定本身。这就是为什么切换成本感觉比订阅价格所暗示的要高。

一个坐在所有厂商下面、用你自己拥有的格式保存记忆的工具,是一次小规模但实在的用户侧标准化。ai-memory 是不是最后赢的那个,其实几乎不重要——这个解法的形状,可移植的纯文本加上可重建的索引,明显是对的,而且每一个专有的记忆功能,早晚都得和这个形状竞争。

另外,它就是个单二进制,核心循环不需要 API key。在一个“记忆”通常意味着“再订一个服务”的品类里,这挺少见。

相关文章