Profile Image of the Author
Coding
GreenRoc
ATKPr/Ae/PS
INTC++/Java/Py
AGIWin/Mac/Lin
熟练掌握以上软件的 安装与卸载
精通以上语言的 单词拼写
熟悉以上系统的 开关机
本周在折腾:kimi-k3 + kimi-code
2586 字
13 分钟
给四个 AI 编程工具的对话记录建了个知识库

说在前头:我同时用了四个 AI 编程 CLI 工具,对话记录散落在系统各处,格式还全不一样。这篇文章记录的是我花了一天把它们全部收进一个 Obsidian vault 的过程。没有现成的导出指南,最后全靠”挖本地文件 + 读 CHANGELOG”硬刚出来的。

为什么要折腾这个#

我是个管不住手的折腾爱好者(这博客哪篇文章不是折腾出来的),同时用着四个 AI 编程 CLI 工具:Antigravity CLI、Claude Code、OpenCode、grok-cli。每个工具都跟我聊了几十上百个会话,帮我做过博客、整蛊平台、刷课脚本、翻页时钟……

问题是:这些对话记录全散着

这四个工具各自把对话存在系统不同角落,格式还都不一样。我在 Antigravity 里跟 AI 讨论过的 boom 架构设计,和在 OpenCode 里做的 boom 代码审查,完全是两条线,谁也接不上。更别提有时候我换了个工具继续同一个项目,前因后果全断了。

所以我想:能不能把这些对话全收进一个地方,整理成能检索的知识库?

(这不是什么新鲜想法,Karpathy 之前就提过用 LLM 帮你维护个人 wiki 的思路,刚好有个现成的 skill 可以用。)

第一步:建 vault#

先用 Obsidian 建了个空 vault,分了三个目录:

  • raw/ - 放原始对话日志和代码库综述(原料区)
  • wiki/ - 放结构化知识页面(成品区)
  • journal/ - 日记(后来没用上)

然后 git init,写好 .gitignore(排除了依赖、密钥、临时文件),首次提交 init: empty vault。干净的空仓库,准备开干。

第二步:Antigravity CLI(踩坑最重的部分)#

官方文档啥也没写#

Antigravity CLI 号称有”持久化历史”功能,但你翻遍官方文档和 GitHub README,关于历史存哪、什么格式、怎么导出—一个字都没写。文档站还是个 JS 渲染的单页应用,抓都抓不到正文(这文档站做得跟没上线似的)。

到这一步我已经开始怀疑了:一个有”持久化历史”功能的工具,官方居然没有任何导出说明?

仓库里根本没有源码#

不死心,我去翻 Antigravity CLI 的 GitHub 仓库目录结构,想直接看源码里历史是怎么存的。结果发现—

这个仓库根本没有源码目录。

根目录就三个文件:CHANGELOG.mdREADME.md、一个 25MB 的 demo gif,外加一个 examples/ 目录(里面只有 statusline 和 title 两个示例)。CLI 本体是闭源的。

(也好理解,Google 的东西嘛,开源个壳子意思一下。)

读 CHANGELOG 逆天改命#

正准备放弃这条路的时候,我顺手抓了 CHANGELOG.md 的原始内容。这一抓,金矿出来了。

CHANGELOG 里大量版本更新都提到了会话历史相关的改动,拼凑出了完整的信息:

  • 会话格式:SQLite 数据库(.db 文件),从 v1.0.4 起是正式会话格式
  • 存储目录:在 Gemini 的配置目录下(因为 Antigravity 基于 Gemini 生态),有个专门的 antigravity-cli 子目录
  • 查看/恢复历史/resume 斜杠命令,交互式选择器,支持搜索、重命名、删除
  • 命令行恢复agy -c <会话ID> -p <路径> 可以 headless 恢复指定会话
  • workspace 映射:有个 projects.json 存着”工作目录 -> 项目”的映射关系

人话解释:Antigravity CLI 把你每次跟它的对话存在一个数据库文件里,不是明文文本。数据库文件藏得很深,在 Gemini 的配置目录底下。你想看历史对话得用 /resume 命令在 CLI 里交互式浏览,没有现成的”导出”按钮。

与其继续猜数据库文件的确切位置和结构,不如直接看本机实际的目录—既然有历史对话,本地就一定有这个目录。

果然,一查本地,17 个会话文件整整齐齐躺在那。导入 vault,commit 完成。

第三步:Claude Code 和 OpenCode(直接挖本地)#

有了 Antigravity 的经验,这回我直接跳过查文档,挖本地数据目录—反正对话存在本机,找到文件就完事。

Claude Code#

Claude Code 的对话存储相对”正规”:每个项目一个目录,目录名是工作目录路径编码后的字符串(把 / 替换成 -),里面每个会话一个 .jsonl 文件,文件名是 session UUID。

人话解释:JSONL 就是”一行一个 JSON 对象”的文本格式,每行存一条消息。比 SQLite 数据库友好多了,至少能用文本编辑器直接打开看。

本机查下来,Claude Code 下有几个项目的对话记录,每个项目里若干个会话文件,清清楚楚。

OpenCode#

OpenCode 的存储方式和 Antigravity 类似—SQLite 数据库。一个 opencode.db 文件装下所有会话。

这里有个差点踩的坑:OpenCode 的数据目录里除了数据库,还有凭证相关的文件(认证信息、账号配置)。这些绝对不能导入 vault,不然就等于把钥匙塞进保险箱还贴了张条子写”钥匙在里面”。

人话解释:四个工具两种存储方式。SQLite 数据库(Antigravity、OpenCode)和 JSONL 文本文件(Claude Code、grok-cli)。数据库需要写脚本查询导出,JSONL 直接复制就行。这就是为什么后面的整理工作量不一样。

第四步:grok-cli 和代码库#

grok-cli 的对话也在本地,JSONL 格式,6 个会话,直接导入。

除了对话记录,我还把本地几个项目的代码库也做了综述导入—boom(整蛊平台)、博客、翻页时钟、open-design 等。每个代码库写一份”它到底在干什么、用了什么技术栈”的综述放进 raw/,这样 wiki 页面引用时有据可查。

第五步:用 skill 编译成 wiki#

原料全进 raw/ 之后,用 karpathy-llm-wiki skill 把它们编译成结构化的 wiki 页面。

编译出来的 wiki 分几种类型:

  • 实体页(entity):每个工具、每个项目一个页面,记”它是什么、什么技术栈、关键属性”
  • 概念页(concept):跨项目提取的技术概念,比如”AI CLI 对话存储机制”把四个工具的存储方式放一张表对比
  • 综述页(summary):每个工具的对话记录综述,提炼出”聊了什么、做了什么”

比如 boom 这个项目,在 Antigravity 里讨论过架构设计,在 Claude Code 里做过代码审查,在 OpenCode 里重设计过 UI—这些原本散在三个工具里的对话,现在通过 wiki 页面上的交叉引用串起来了。

第六步:分类重构(两次)#

第一版 wiki 是按工具分类的:Antigravity 一堆、Claude Code 一堆、OpenCode 一堆。但很快发现问题—同一个项目的信息被打散到不同工具目录下了。boom 的架构设计在 Antigravity 目录,代码审查在 Claude Code 目录,UI 重设计在 OpenCode 目录,找起来要跨三个地方。

于是第一次重构:改成 tools/(工具)+ summaries/(对话综述)+ 项目目录(按项目聚合)。

用了之后又觉得不对:projects 里面混着”实用工具”(boom 整蛊平台、刷课脚本)和”展示作品”(博客、翻页时钟),这俩性质完全不同。

于是第二次重构:拆成三大类—

  • projects:实用工具,解决实际问题的(boom、刷课、文件互传、办公自动化 agent)
  • creations:展示作品,美学与表达的(博客、翻页时钟)
  • explorations:学习笔记,研究别人开源项目的(open-design)

人话解释:就像整理书架,第一版按”在哪买的”分(京东一堆、淘宝一堆),发现不好用;第二版按”是什么”分(工具书一堆、小说一堆),发现还是混;第三版按”用来干嘛”分(干活用的、看着爽的、学东西的),终于顺了。

两次重构一共移动了 19 个文件,所有跨目录链接全部更新。链接用 Obsidian 的 [[双链]] 语法,改一次目录就要批量修一堆引用,痛不欲生。

成果#

一天下来,知识库的格局是:

  • 4 个工具的对话记录全部导入(Antigravity 17 会话、Claude Code 11 会话、OpenCode 69 会话、grok-cli 6 会话)
  • 7 个代码库的综述
  • 30+ 个 wiki 页面(实体页 + 概念页 + 综述页)
  • 三级分类(tools / projects+creations+explorations / summaries),交叉引用串成网

最爽的是:现在开一个新会话,让 AI 先去读 wiki 的 index,它就能快速恢复”我之前用这些工具做过这些项目、踩过这些坑”的上下文。相当于给没有跨会话记忆的 AI 装了个外挂记忆。

踩坑总结#

解法
官方文档没写导出方法放弃文档,直接挖本地数据目录
Antigravity 仓库没源码读 CHANGELOG 反而挖到最关键的信息(存储格式、路径、命令)
四种存储格式全不同SQLite 的写脚本查表导出,JSONL 的直接复制
OpenCode 数据目录混着凭证文件导入前仔细甄别,凭证文件绝对不能进 vault
wiki 分类两次都不对第一次按工具分(信息打散),第二次按项目分(性质混淆),第三次按用途分才顺
改目录要批量修链接Obsidian 双链的代价,改一次痛一次

后记#

这次折腾最大的感悟是:有时候官方文档帮不了你,但 CHANGELOG 可以。 Antigravity CLI 的 CHANGELOG 里密密麻麻记着每次版本更新对会话历史的改动,拼起来就是一份完整的”数据存储演进史”。官方文档啥都没写,CHANGELOG 全写了。

(所以养成写 CHANGELOG 的好习惯啊各位开发者,你永远不知道谁会在哪天靠这玩意儿救命。)

知识库现在还在用,每次新会话产出有价值的内容就往里沉淀。虽然 AI 没有跨会话记忆,但有了这个 vault,至少不用每次从零开始解释”我是谁、我做过什么、别再问我为什么用 vibe coding 了”。

给四个 AI 编程工具的对话记录建了个知识库
https://gr114.com/posts/llm-wiki-knowledge-base/
作者
GreenRoc
发布于
2026-07-23
许可协议
CC BY-NC-SA 4.0

评论

滚动到此处加载评论…