你的 AI 助手得了健忘症?这个工具让它拥有长期记忆
先说结论:如果你用 Claude Code 写代码,那你一定遇到过这种情况,agent 聊着聊着就”忘了”之前说过什么。Obelisk 这个开源工具让 agent 能直接查询自己的历史对话,而且核心设计特别有意思,不是让人去翻记录,而是让 agent 自己写代码查。
问题从哪来
用过 Claude Code 的人都知道,agent 的上下文窗口是有限的。
compact 之后,很多决策细节就丢了。你明明前 5 分钟让 agent 改了一个接口的设计思路,后面它可能就忘了为什么要这么改。
但其实 Claude Code 的每一次对话、subagent、workflow 都以 jsonl 的格式保存在本地了。信息就在那里,但 agent 没有工具去翻。
说白了,agent 就像一个记忆力很差但笔记记得很全的人。问题是,它不会翻自己的笔记。
Obelisk 是怎么解决的
这个项目出自开发者 tommy0103,目前 32 个 star,MIT 协议,纯 JavaScript 实现,零 npm 依赖。
它的核心思路很直接:不给人类设计一个历史浏览器,而是给 agent 一个查询接口,让它自己写 JS 去查 SQLite。
整个项目就一个 runtime.mjs,大概 400 行代码。依赖只有 Node.js 22+ 的内置 node:sqlite 模块,支持 FTS5 全文搜索。
安装也简单:
1 | npx skills add tommy0103/obelisk |
装完之后在 Claude Code 里直接说人话就行,比如:
1 | /obelisk 上次 auth bug 最后到底改了哪些文件 |
底层怎么运转
整个过程分四步:
你问问题 → Agent 写一个 JS 查询脚本 → runtime.mjs 在本地 SQLite 上执行 → Agent 拿到 JSON 结果,用自然语言回答你
Indexed 的数据包括 sessions、messages、tool calls、subagents、workflows,还有 workflow 里每个 agent 的完整对话记录。
API 分两层设计。简单层直接教给 agent:
search(text):FTS5 全文搜索,返回匹配结果和上下文context(uuid):拿到一条消息的完整前后链条sql(query, ...params):原始 SQL,想怎么查就怎么查
复杂一点的查询,比如追踪 subagent 的调用链、分析 workflow 的执行树、查看文件修改历史,agent 需要时自己去读 schema.md,不需要一开始就把全部文档塞进上下文。
这种渐进式披露的设计挺聪明的。agent 不会因为拿到太多用不到的信息而分心。
为什么这个思路值得留意
市面上大多数历史工具是做给人看的。Obelisk 不一样,它是做给 agent 用的。
这个区别很关键。人浏览历史需要 UI、需要搜索框、需要筛选器。Agent 不需要这些,它会写代码。给它一个查询运行时,它就能自己做调查、做推理、做总结。
Twitter 上 @QuantumTransf 提到一个很有意思的观察:看到 Claude 的 dynamic-workflow 功能后意识到,agent 已经会写脚本来编排工作了,那为什么不能写脚本来检索自己的历史?
这就是 Obelisk 的核心原则:code as query language。不设计 DSL,不做固定 API,直接让 agent 写 JS 查 SQLite。有数据就能有分析。
第一次运行会花大概 5 秒钟建索引(100 个 session 的量级),之后是增量更新,新的或修改过的 JSONL 文件才会被重新解析。
局限性也得说清楚
目前只支持 Claude Code 的 skills 体系安装,其他 AI 编程工具暂时用不了。
需要 Node.js 22 以上版本,因为依赖内置的 node:sqlite 和 FTS5。
刚发布不久,7 个 commit,1 个 fork,社区还在早期阶段。能不能持续维护要看作者和社区参与度。
适合谁用
如果你符合以下任意一条,可以试试看:
- 用 Claude Code 做长期项目,session 多了之后找历史记录很痛苦
- Agent 经常”失忆”,重复犯之前讨论过的错误
- 想让自己的 AI 编程助手有个可查询的”长期记忆”
- 对 agent 架构设计感兴趣,想看看 code-as-query 的实践案例
如果只是偶尔用几次 Claude Code,可能感受不明显。但长期用下来,agent 能记住自己做过什么、为什么这么做,体验差很多。
上手建议
安装很简单,按官方 README 走就行。装完之后别急着查复杂的东西,先用简单的自然语言问几个问题,感受下 agent 是怎么理解你的意图并转成查询的。
有一个很实用的场景:项目做到一半,隔了几天再打开,直接问 agent “我之前在这个文件上做过哪些修改,为什么要改”,比人肉翻历史高效得多。
参考
- GitHub: tommy0103/obelisk — 开源仓库,MIT 协议
- X/Twitter @QuantumTransf — 关于 agent 自省能力的讨论
- Node.js 22 node:sqlite 文档