用 Codex 和 Claude Code 写代码久了,最头疼的是它不记事。上周跟它一起查了一下午,根因找到了,方案也定了。这周开个新会话,它又从头猜一遍,有时还会把当初否掉的方案再提出来。
我试过两种办法,都不太顺手。
一种是写进 AGENTS.md / CLAUDE.md。放"必须遵守的规则"没问题。但"这个接口为什么要做幂等""那个报错其实是连接池配置引起的"这类经验,一条条加进去,文件很快就几百行。每次会话都全量塞给模型,真正相关的那几句反而被淹没了。
另一种是用客户端自带的记忆。记什么由模型自己决定,我看不全,也不知道哪条在哪次起了作用,记错了也很难发现。
所以我做了 Precedent Loop ,思路很简单:经验让 Agent 来提,入不入库我说了算,用的时候按需去取。
实际用起来是这样一个循环:
- 方案定下来,或者根因查清楚的时候,Agent 会整理一条"候选",写明背景、结论和适用范围。
- 候选出现在桌面 App 里。我可以改,可以让 AI 重写,也可以直接拒掉。点了确认才会入库,入库的就是我看到的那一版。
- 之后的会话里,Agent 碰到相关任务会自己去查。一次最多拿 8 条、总共不超过 5000 字,先看标题和摘要,需要了再读全文。
- 真正影响了它判断的那几条,它会标记"用上了"。用的时候发现内容过时,它会提一条修订,同样由我确认。
和前面两种办法比,好处主要有这几点:
- 库里每一条都是我看过的。 Agent 只能提候选,不能直接往库里写,所以不会越记越乱。
- 上下文不会膨胀。 库里有几百条也没关系,每次只取和当前任务相关的几条,而且有上限。
- 知识会跟着项目更新。 旧结论不对了,是在用的时候顺手发现、顺手提修订,不需要我定期去翻。
- 能看出哪些经验真有用。 每条被查到几次、被用上几次都有记录,长期没人用的可以清掉。
- Codex 和 Claude Code 共用一个库。 多个项目之间也能互相查,比如在后端项目里查前端那边的约定。
- 全在本地。 数据就是一个 SQLite 文件,App 不调用任何模型 API ,也不保存 Key 。已有的 Markdown 笔记可以借本机的 Codex / Claude Code CLI 转成候选导进来。
它不是用来替代 AGENTS.md 的。每次都要遵守的规则继续写在那里,只在特定场景下用得上的经验放到这里。
先说清楚现在的不足,免得大家装了失望:
- 只支持 Apple Silicon 的 Mac 。App 没签名,第一次打开要去系统设置里手动放行。界面目前只有中文。
- 检索用的是 SQLite 全文检索( FTS5 trigram )加字面匹配,没上向量。好处是简单、能解释,不依赖外部服务;缺点是换个说法可能就搜不到。现在的补救办法是每条知识入库时必须带 3–16 个检索词,把常见说法提前写进去。这是我最想改进的地方。
- 没做过严格的对照实验。我自己从 7 月 8 日用到 10 月 4 日,库里攒了 79 条,被查到 307 次,模型标记用上 113 次。"用上"是模型自己报的,只能当个参考。
GitHub: https://github.com/hemuzzz/PrecedentLoop ( Apache-2.0 )
README 开头有一段 83 秒的演示视频。装好后 App 有引导,跟着点几步就能把 Codex 和 Claude Code 都接上。
欢迎试用、提 issue 。特别想听听大家的意见:同义说法怎么检索比较好,召回效果又该怎么评测。