跳到主要内容

obsidian-second-brain 全解: 一个会自我重写的 AI 知识库

Note

你的笔记库在半年后会比今天更聪明吗? 大多数"第二大脑"的答案是不会 —— 它们只是一个更整齐的文件柜: 放进去的东西原样躺着, 三个月前的决策和昨天的决策互相矛盾, 而没有任何人知道. obsidian-second-brain 想换掉这个前提: 知识库不是往里面加东西, 而是围绕新信息重写自己. 那么, 一个不靠增长、只靠进化的知识库, 究竟由哪些机制拼出来?

0x00 它要解决什么问题

两个各自都很强、却完全断开的工具:

Claude CodeObsidian vault
强在哪推理、写作、联网抓取长期保存、可检索、可 diff
弱在哪每次会话从零开始, 关掉就忘只是文件堆, 没人连接线索

结果是重复决策、想法烂在 daily note 里、没有人反驳你. 这个项目从 2026 年 4 月起就在做一件事: 让 Claude 直接以 vault 为工作区读写, 并把"vault 该怎么被写"变成一套可机械检查的规则, 而不是一段靠自觉遵守的约定.

它把自己定位为 Karpathy 的 LLM Wiki 模式的演进版:

维度Karpathy 的 LLM Wikiobsidian-second-brain
新来源追加新页面并交叉引用重写已有页面, 替换陈旧主张
矛盾标出来, 人工解决/obsidian-reconcile 自动调和
模式发现用户问才浮现/obsidian-synthesize 自己找
运行时机按需4 个定时 agent 在夜里维护
笔记格式人类可读的 wiki 页AI-first: 为未来 AI 检索而写

一句话: 如果说 Karpathy 的 wiki 是你用 LLM 维护的知识库, 那这个项目想做的是自己维护自己的知识库.

它不是 Obsidian 插件

一个常见误会值得先澄清, 因为它决定了能力边界:

Obsidian 插件obsidian-second-brain
运行位置Obsidian 进程内部Claude Code 等 CLI 内部
能力上限受 Obsidian API 限制受"shell 能做什么"限制
典型能力UI、编辑器扩展、面板联网研究、定时任务、跨年综合
对 vault 的认知通过 Vault API就是一堆普通 Markdown 文件

vault 对它而言只是普通 Markdown, 这正是它能用同一套规则同时跑在 Claude Code、Codex CLI、Gemini CLI、OpenCode、Hermes、Pi 六个平台上的原因.

0x01 七条 AI-first 笔记规则

这是整套东西的地基, 也是唯一被每个命令、每个 hook、每个定时 agent 共同引用的文档. 它的前提是反直觉的:

vault 是写给未来的 AI 读的, 不是给人逐页读的.

你很少直接打开笔记; 你调用 Claude 在多年积累里检索、综合、连接. 所以笔记格式要优先服务"被检索", 而不是"被阅读".

#规则落地形式
1自包含上下文单条笔记被单独拉出来也能读懂, 不依赖反向链接
2## For future Claude 前言frontmatter 之后立即写 2~3 句摘要
3丰富且一致的 frontmatterdate / type / tags / ai-first: true
4外部主张带时效标记(as of 2026-04, mem0.ai/blog/series-a)
5原样保留来源 URL不改写成抽象描述, 方便多年后重验
6强制交叉链接人 / 项目 / 概念一律写成 [[wikilinks]]
7标注置信度stated / high / medium / speculation

每条笔记的固定开头长这样:

## For future Claude
This note is a [type] about [topic] saved on [date]. It [main purpose].
[Optional caveat about staleness, confidence, or scope.]
markdown

三条反幻觉铁律

写规则之外还有读规则, 因为下面三种失败会静默毁掉 vault 的记忆价值 —— 页面照样打开, 只是内容开始骗人:

  • 错误地宣称不存在: 没有穷尽搜索就说"没有这条笔记". 原文明确指出, 这是比编造更常见的失败模式. 结论必须是列目录 + grep + 遍历所有别名之后才得出的.
  • 搜索完备性: 扫描必须穷举, 不能采样. 把部分扫描汇报成完整扫描, 比诚实说"我只检查了 X"更糟.
  • 不编造: 未知就写 TBD; 没有决策时, 一个空的 ## Decisions 章节不是缺陷, 而是正确答案.

类型 schema 是可增长的

type: 决定这条笔记带哪些 frontmatter 字段. 原文定义了十余种: daily / project / person / idea / task / decision / devlog / review / research / podcast / adr / synthesis / distillation / meeting / recurring-task / architecture-overview. 唯一的共同约束是: 通用字段只能增加, 不能删除.

0x02 写入不是保存, 是传播

这是整个项目里最有迁移价值的一条: 不要孤立地创建笔记.

每次写入都要追问"这件事还属于哪里", 然后把变更铺开.

事件还要更新
新项目创建kanban board 的 Backlog + 今天的 daily note
任务完成board 移到 Done + 项目笔记 + daily note
人物互动daily note + 人物笔记 (不存在就建 stub)
决策产生项目笔记的 Key Decisions + daily note
dev log 创建项目笔记 Recent Activity + daily note
任意 vault 写入操作日志 + index.md 目录

写入前先搜索

创建任何笔记之前必须先搜一遍. 命中同一概念就更新, 不新建; 名字相似但概念不同才允许新建, 而且要换一个更清楚的名字. 重复笔记被原文称为 "vault rot".

章节注入与 sentinel

更新已有笔记时不要粗暴追加或覆盖, 而是走固定动作: 读取完整文件 -> 定位目标章节 -> 插到该章节最后一项之后.

会被重复生成的页面 (架构文档、dashboard、状态页), 则用 sentinel 把机器区和人工区隔开:

<!-- @generated:start -->
...下次刷新时可以安全覆盖...
<!-- @generated:end -->

<!-- @user:start -->
...人工补充, 任何刷新永不触碰...
<!-- @user:end -->
markdown

刷新时只替换 @generated 区间; 标记之外的一切都视为人工所有. 这条让"可重复运行的生成器"第一次变得安全, 也是 Agent Memory 选型指南 里反复强调的"可重建 / 不可重建"分界线在写入侧的落地.

双时间事实

当事实变化时 —— 角色、公司、状态、位置 —— 不要删掉旧值:

timeline:
- fact: "CTO at Acme Corp"
from: 2024-01-01
until: 2026-04-07
learned: 2026-02-23
source: "[[2026-02-23]]"
- fact: "Architect at Acme Corp"
from: 2026-04-07
until: present
learned: 2026-04-07
yaml

from / until 是事实在现实中为真的时间 (event time), learned 是 vault 得知它的时间 (transaction time). 顶层字段永远反映当前状态, timeline: 保留完整历史 —— 于是"一月时谁是 CTO"和"你周三之后看法为什么会变"都变得可查.

0x03 一次摄入的完整数据流

一个 URL 进来, vault 里发生了什么:

用户运行 /obsidian-ingest <来源>
|
v
命令正文 (由 commands/ 编译到 dist/<platform>/)
|
|-- 引用 references/ai-first-rules.md
|-- 把确定性工作交给 scripts/* (解析 / 抓取 / 扫描)
v
写出 AI-first Markdown 到 vault
|
|-- Claude Code 下由 validate-ai-first.sh 校验
|-- 传播到 index.md / 操作日志 / 相关笔记 / daily note
v
后续 /obsidian-world 与 load_vault_context.py 再读回状态
text

它的评价标准值得原样抄下来:

摄入后 vault 应该变得不同, 而不只是变大.

旧页面如果没有变得更聪明、更互联、更当前, 这次摄入就不够深.

一次摄入的传播路径: 从原文到综合页打开

0x04 vault 的结构与两种布局

布局主要读者适用场景
Wiki-style / LLM-firstLLMClaude 承担几乎全部写作
Obsidian-style / Human-first每天自己在 Obsidian 里浏览

LLM-first 的骨架:

vault/
├── _CLAUDE.md # 操作手册, 所有规则里优先级最高
├── index.md # 全页面目录, Claude 优先读它而不是搜
├── log.md # 追加式操作日志
├── SOUL.md # 身份与价值观
├── CRITICAL_FACTS.md # 约 120 tokens, 每次会话必加载
├── raw/ # 不可变原始来源, 只读不改
├── wiki/ # Claude 工作区
│ ├── entities/ concepts/ projects/ daily/
│ └── logs/ reviews/ tasks/ decisions/
├── boards/ # kanban
├── templates/ # 模板
└── _trash/ # 软删除
text

三条关键原则:

  • raw/ 不可变: wiki 页面损坏时, 可以从 raw 重新推导 —— 这是"派生内容可全量重建"的前提.
  • index.md 是入口: Claude 先读索引来导航, 比搜索更便宜也更快.
  • 扁平优先于嵌套: wiki/entities/ 是扁平列表, 不适合人浏览, 但适合 grep 与索引.

_CLAUDE.md: 整个项目最重要的一个概念

它放在 vault 根目录, 是 Claude 进入这个 vault 前第一个要读的文件. 没有它, 每次对话都要重新学一遍 vault 的惯例; 有了它, Desktop、Code、VS Code、terminal 所有 surface 共享同一份操作上下文.

优先级规则很硬: _CLAUDE.md 覆盖 skill 默认规则, skill 默认值只在它沉默时才生效. 它记录的东西包括: 文件夹地图、每种笔记类型的 frontmatter schema、命名约定、哪些内容可以自动保存、哪些必须先问 (财务数据、私密文件夹、删除或归档).

0x05 44 个命令与四层能力

命令按 frontmatter 的 category: 分四类; 43 个跨平台, /obsidian-calendar 依赖 Google Calendar MCP, 只在 Claude Code 和 Pi 上完整可用.

分类数量干什么
vault16保存、捕获、查找、任务板、项目状态
thinking13反驳、浮现模式、综合、决策、回顾
research8X / Web / YouTube / podcast 研究并落库
meta7初始化、健康检查、导出、可视化、架构文档

它们按四层能力组织, 外加一个常驻层:

LAYER 1  Operations       Claude 记住一切
LAYER 2 Thinking Tools Claude 和你一起想
LAYER 3 Context Engine Claude 知道你是谁
LAYER 4 Research Claude 把外部知识拉进来
ALWAYS background + scheduled agents
text

挑几个最能说明设计意图的:

命令一句话
/obsidian-save从整段对话里抽取决策 / 人物 / 任务 / 想法, 保存到正确的笔记, 不问你该放哪
/obsidian-ingest让 vault 围绕新知识重写自己, 一个来源通常触达 5~15 个页面
/obsidian-challenge用你自己的历史反驳你: 找过往失败与反转过的决策
/obsidian-world按 L0~L3 分级加载身份与当前状态, 控制 token 预算
/obsidian-architect扫代码库写架构笔记, 重跑只刷新 generated 区
/obsidian-retrieval-eval用问题集衡量搜索质量: recall@k、MRR、失败案例

/obsidian-challenge 的实际形态最能说明问题. 你说"我想用 Rust 重写 API", 它翻出 2025 年 Rust rewrite 失败的 post-mortem, 再翻出一份"未来两年继续用 TypeScript"的决策记录, 然后问:

你的笔记说这失败过. 还要继续吗?

0x06 适配器模式: 一个源, 六个平台

核心思想: commands/ 是唯一真相源, 构建系统把它编译到各平台, 而不是维护多套命令.

  • commands/<name>.md 沿用 Claude Code slash command 的形状, 并声明 description: / category: / triggers_en: / 可选 exclude:.
  • scripts/build.sh 编排 adapters/: 全量构建, 或 --platform <name> 只构建一个平台.
  • Claude Code 适配器基本是原样复制; 其他平台生成 dispatcher (AGENTS.md / GEMINI.md) 与自动路由表.
  • 面向非 Claude CLI 时, 会把 Claude 特有说法中和成平台无关表达, 例如 Read tool 改成 read files.
  • 产物落在 dist/<platform>/ 并被 gitignore —— 任何时候都应该重新生成, 而不是手写修改.

对贡献者的结论只有一句: 增加或修改命令时只改 commands/<name>.md, 下一次构建由适配器自动拾取.

一个命令源如何编译到六个 CLI打开

0x07 自动化与它给自己设的边界

定时 agent

Agent时间工作
morning08:00建当天 daily note, 拉入今天到期或逾期的任务
nightly22:00关闭当天 / 调和矛盾 / 综合模式 / 修复孤立笔记 / 重建索引
weekly周五 18:00生成周回顾
health周日 21:00vault 健康检查, 只报告不修复

再加一个 PostCompact hook: 上下文压缩之后启动 headless claude -p, 把这次会话里值得留的东西传播进 vault.

安全被写进了默认值

这部分比功能列表更值得学, 因为它承认了"自动写入是危险的":

  • 后台 agent 默认关闭, 需要双开关 (OBSIDIAN_VAULT_PATH OBSIDIAN_BG_AGENT_ENABLED=1) 才启用.
  • 无人值守运行只增不删: 不删除、不归档、不合并.
  • 健康检查里破坏性的修复动作 (归档、合并、解决矛盾) 必须显式确认.
  • 写入时还有一道非阻塞 validator: 检查 frontmatter delimiter、是否混入 tab、四个必备字段、有没有 ## For future Claude 前言; 失败只在 stderr 报警告, 不回滚写入.

0x08 生态边界: upstream 给原语, fork 给领域

ECOSYSTEM.md 定义的契约很清楚:

  • upstream 拥有核心原语: vault 管理、AI-first 规则、rewrite engine、多平台适配层、通用研究工具形状 (Phase 1 vault scan / Phase 2-3 external research / Phase 4 synthesis), 以及一个可插拔的 Phase 3 backend 协议.
  • fork 拥有全部领域知识: PubMed routing 属于学术 fork, 案例法检索属于法律 fork.

理由是关于维护成本的: 把每个领域都吸进 upstream, 结果会是一个无人能维护的庞大 skill, 而且上游维护者不可能真正理解自己不用的受控词表. 回流标准也只有一个: 非领域用户是否也会受益.

已知的第一个证明案例是学术方向的 scholarbrain. 不收的同样明确: 只换主题色的 fork、除 README 外没有领域功能的 fork、以及在自己的 vault 写入中违反 AI-first 规则的 fork.

0x09 这份复盘里最值得抄的四件事

上游对 166 个 fork 做过一次很诚实的分析, 结论比功能列表更有参考价值:

  • 其中 156 个是从未改动的镜像 (0 commits ahead), 11 个有自己的提交, 而真正做了实质工作的只有 3 个.
  • 归纳出的强信号是: 付费 API 是采用门槛; 日历集成被多个 fork 独立要求; 上游没有测试; Codex / Windows 支持被反复验证; 缺少反幻觉 guard.

于是它们把研究工具全部补上免费无 key 模式, 把反幻觉与搜索完备性提到 P0, 并补了 smoke test 与 CI. 留下的可迁移条目是这四条:

  1. 把"想学的机制"和"想抄的代码"分开 —— 抄设计, 不抄代码.
  2. 写入规则必须机器可检查 —— 否则 AI 生成的内容很快会退化成不可审计的散文.
  3. 可重复生成的页面必须带 sentinel —— 否则第一次刷新就会擦掉人工补充.
  4. 没有穷尽搜索, 就没有资格说"不存在" —— 这一条同时是反幻觉规则与检索质量的前提.

顺着看这套东西与已有沉淀的关系, 可以对照 对话记忆与知识库增量沉淀 里"追加 / 覆盖 / 快照"的三种策略分野, 以及 自维护可插拔记忆层设计 里"文件即记忆 + 索引前门"的取舍.

0x0A 这类知识库还能往哪走

把上面这些机制放在一起看, 它们其实在回答一个比"怎么存笔记"更靠前的问题: 一个知识库凭什么认为自己比昨天更对? 文件柜的答案是"没变", 增量 wiki 的答案是"变多了", 而这个项目的答案是"被重写过了" —— 记忆的价值因此从存量转向了演化轨迹.

事实层面: 它已经在做的三件事都有可实现形态 —— 用 sentinel 划出机器区与人工区, 从而让生成器可重复运行; 用不可变的原始层保证派生内容永远可重建; 用双时态字段同时记录"事实何时为真"与"系统何时得知". 同时它也明确暴露了自己的短板: 上游没有测试, 166 个 fork 里 156 个是从未改动的镜像, 反幻觉 guard 是后期才补上的.

个人判断: 接下来这类系统的分水岭不在写入能力, 而在读侧的自我约束 —— 一个会自动重写自己的知识库, 最大的风险不是写得少, 而是自信地写错. 因此"如何证明某条结论已经过时"会比"如何更快地摄入新来源"更决定它的上限. 若把视角再放宽一层, 这套机制真正的迁移价值可能不在知识管理: 任何由 AI 长期维护、又必须被人审计的状态载体 (运维手册、合规文档、架构决策记录) 都面对同一个问题, 而 sentinel 区间、不可变原始层与双时间事实, 恰好是可以直接搬走的三块砖.

0x0B 全局速览

obsidian-second-brain 全解

主题加载中…
打开

0x0C 参考来源

给 AI 买点 Token:
Alipay IconQR Code
Wechat IconQR Code
本文遵循 CC CC 4.0 BY-SA 版权协议, 转载请标明出处
Loading Comments...