这个项目能做什么
ohmyboring 是面向编码代理的自托管个人记忆系统。它捕获你在 Claude Code、Kimi Code 以及符合条件的 Codex 会话中解决问题的方式,把每个会话提炼成一条精选 markdown 笔记,存到本地 vault;当你问“我上次是怎么做这个的?”时,再把这些笔记带回来。一切都在本地运行:嵌入与综合通过本地 LLM 服务器(Ollama、LM Studio 或其他兼容 OpenAI 的端点)完成,无需外部 API 或令牌。
记忆如何进入:
- 会话结束时自动进行:SessionEnd 钩子提炼转录文本并存储;配对的 UserPromptSubmit 钩子向新提示注入最多三条相关的历史片段,每条都携带已确定的结论。
- Codex 工作器:由于 Codex 没有 SessionEnd 钩子,主机工作器每 20 分钟扫描 ~/.codex/sessions,并摄取符合条件的转录文本。
- 回填:`make collect` 从过往 Claude Code 历史为原本为空的 vault 填充初始数据(按最新优先、幂等、每次运行 N 条);`make collect-kimi` 对 Kimi Code 执行相同操作。
- 会话中途:`make distill-now` 重新提炼当前转录文本,`make remember M="..."` 保存一条显式笔记。
记忆以 markdown 为先:vault/wiki 中是朴素、人类可读、可 git diff 的笔记,可直接作为 Obsidian vault 打开,获得图谱视图、反向链接、标签和全文搜索。可选的 pgvector 加速器(BORING_VECTOR=on)在规模需要时增加相似性搜索和 GraphRAG。
架构将快速、不使用 LLM 的读入门(`make ask`、recall.py、MCP recall)与受控写入门分开(distill-session.py 调用本地 LLM,并通过确定性的 remember MCP 工具写入)。重复门会跳过重复笔记,但允许更丰富的笔记重写同一个 wiki 文件。drudge/src/workflow.rs 中 Rust 侧的类型化工作流图契约定义了用于会话发现、提炼、验证、修复、remember、标记更新、事件日志和就绪状态投影的节点/边词汇表,而 Python 钩子和工作器仍执行主机 I/O。
配置位于 boring.json(来自 boring.example.json):笔记语言、LLM provider/base_url/model/embedding model 与维度、仓库来源规则,以及代理转录适配器。切换后端只需改一个配置块;`make up` 会分派到特定于提供商的引导脚本。更换嵌入模型会改变向量维度,因此必须更新 llm.embed_dim 并运行 `make reset`。.env 文件保存密钥和运行时覆盖项,例如 BORING_VECTOR、LLM 覆盖、提炼限制、召回结论数量与相关性度量、事件接收/缓冲设置、就绪窗口,以及写调用的所有者令牌。
运维工具包括 `make verify-llm`(提供商、模型 ID、嵌入维度)、`make doctor`(技术栈、钩子、Codex 工作器/队列、最新摄取)、`make readiness`(严格的简报前门禁)、`make peek`(只读本地页面,显示 recall 注入了哪些笔记以及检索器到达的范围),以及 `make usage`(从本地转录文本汇总的令牌和模型用量)。vault/rules/pii.yaml 中的 PII/敏感数据门禁支持 block、redact 和 flag 操作,并可按行使用豁免标记。可选集成包括 Slack 助手和用于晨报的 Hermes cron 工作器。
要求为 Docker、Python 3、jq、curl、git、make 和本地 LLM 服务器。全新克隆以空 vault 启动,因此在回填历史之前,第一天的 recall 什么也找不到。项目采用 MIT 许可证,并文档说明了按机器 RAM 选择本地模型配对的指导、基准测试命令,以及实测的提炼/嵌入行为。
评论
0 评分人数达到10人后显示
登录后参与讨论。