llm-wiki-obsidian
Personal knowledge base management skill based on Karpathy's LLM Wiki pattern. Build and maintain a persistent wiki through Obsidian CLI or direct file operations. **Triggers**: knowledge base, wiki, organize knowledge, Obsidian, ingest sources, query knowledge, personal knowledge management, Karpathy wiki pattern, cross-link, auto link, link wiki, add links.
Personal Knowledge Base Skill — llm-wiki-obsidian
Based on Karpathy's LLM Wiki pattern. Build and maintain a persistent wiki through Obsidian CLI or direct file operations.
Agent Compatibility
| Agent | Support | Interface |
|---|---|---|
| Claude Code | ✅ Full | Native tools + Obsidian CLI |
| Cursor | ✅ Full | Bash + File operations |
| Windsurf | ✅ Full | Bash + File operations |
| Cline | ✅ Full | Bash + File operations |
| Aider | ✅ Full | Bash + File operations |
| MCP-compatible | ✅ Full | MCP tools |
See AGENT.md for detailed agent-specific instructions.
Core Concept
不是 RAG,是持久 Wiki!
| RAG | 持久 Wiki |
|---|---|
| 每次查询从原始文档重新发现知识 | 知识被编译并持续保持最新 |
| 无积累,问5个文档的综合问题每次都要重新拼凑 | 交叉引用已存在,矛盾已标注,综合已形成 |
| NotebookLM、ChatGPT 文件上传 | Obsidian + LLM = IDE + 程序员 |
关键洞察:Wiki 是一个持久、复利的产物。每添加一份资料,Wiki 就变得更丰富。
人类的工作:策划来源、引导分析、提出好问题、思考意义。 LLM 的工作:其他一切(bookkeeping 工作:更新交叉引用、保持摘要最新、标注矛盾)。
何时使用此技能
当用户进行以下操作时激活此技能:
- 构建知识库:要求建立或整理个人知识管理系统
- Ingest(摄入):提供新资料(文章、论文、文档)要求整理到知识库
- Query(查询):向知识库提问,寻求综合分析
- Lint(体检):要求检查知识库的健康状况
- 维护 Wiki:更新、修订、补充交叉引用
- 讨论知识管理:关于如何组织知识、构建 Zettelkasten、卡片盒等方法论
架构(四层)
知识库/
├── clippings/ # 待处理剪藏(临时存放,处理后移走)
│ └── *.md # Web Clipper 保存的网页剪藏
├── raw/ # 原始资料(不可变,只读)
│ ├── minimind/ # 按主题/项目分类
│ ├── articles/ # 文章
│ ├── papers/ # 论文
│ └── assets/ # 图片、附件
├── wiki/ # LLM 生成的 Wiki(AI 全权维护)
│ ├── entities/ # 实体页(人物、组织、项目、产品)
│ ├── concepts/ # 概念页(技术概念、理论、方法论)
│ ├── sources/ # 来源摘要页
│ └── synthesis/ # 综合分析页
├── index.md # 内容目录
├── log.md # 操作日志
└── AGENTS.md # 规则文件
目录说明:
clippings/— 临时存放区,存放待处理的网页剪藏raw/— 已归档的原始资料,按主题分类,只读wiki/— LLM 维护的结构化知识,包含实体、概念、来源摘要和综合分析
核心操作
0. Sync(同步 Clippings)
每次整理时首先执行:将 Clippings 内容移动到 raw/
1. 检查 clippings/ 目录是否有待处理文件
2. 对每个文件:
a. 读取内容,判断主题分类
b. 生成合适的文件名(日期前缀 + 标题)
c. 移动到 raw/ 对应子目录(articles/ 或按主题)
d. 记录移动操作
3. 清空 clippings/ 目录
4. 继续执行 Ingest 流程
移动命令:
# 使用文件系统命令移动
mv "clippings/剪藏标题.md" "raw/articles/2026-04-17-标题.md"
1. Ingest(摄入新资料)
当用户要求整理知识库或同步 Clippings 后:
1. 扫描 raw/ 目录,识别新增/未处理的文件
2. 对每个新文件:
a. 阅读资料,提取关键信息
b. 使用 obsidian create 创建来源摘要页 → wiki/sources/
c. 更新相关实体/概念页(obsidian append)
d. 标记文件已处理(在 frontmatter 添加 processed: true)
3. 更新 index.md
4. obsidian daily:append 记录到日志
5. 执行 Synthesize 流程
2. Synthesize(生成综合分析)
Ingest 完成后自动执行:根据知识库内容生成 synthesis
1. 读取 index.md,了解当前知识库全貌
2. 识别可以综合的主题:
- 多个来源讨论同一概念
- 相关实体之间的关联
- 跨领域的话题连接
3. 对每个值得综合的主题:
a. 读取相关页面(sources、entities、concepts)
b. 综合分析,提取共同点、差异、洞察
c. 创建 wiki/synthesis/综合分析页
d. 更新相关页面的交叉引用
4. 更新 index.md 的 synthesis 部分
5. 记录到日志
Synthesis 页面内容:
- 核心发现(从多个来源提炼)
- 观点对比(不同来源的异同)
- 洞察与结论(LLM 的综合分析)
- 来源引用(链接到相关页面)
3. Query(查询知识)
通过 Obsidian CLI 查询:
# 搜索相关页面
obsidian search query="关键词" limit=10
# 读取页面内容
obsidian read file="页面名"
# 查看反向链接(谁引用了这个页面)
obsidian backlinks file="页面名"
回答流程:
1. obsidian search 搜索相关页面
2. obsidian read 读取匹配页面
3. 综合回答(带引用)
4. 有价值的新洞察 → obsidian create 创建 synthesis 页
5. obsidian daily:append 记录查询
重要:好的答案应该沉淀回 Wiki!
4. Lint(知识库体检)
定期检查:
- 矛盾:不同页面的信息是否冲突
- 过时:是否有被新资料推翻的旧结论
- 孤立:是否有页面没有被其他页面引用(用
obsidian backlinks检查) - 缺失:是否有重要概念没有独立页面
- 交叉引用:补充缺失的双向链接
[[]]
Obsidian CLI 命令参考
Vault 名称从 obsidian.json 获取,Obsidian 应用必须正在运行。
读取与搜索
# 读取笔记
obsidian read file="页面名"
# 搜索 vault
obsidian search query="搜索词" limit=10
# 查看反向链接(谁引用了此页面)
obsidian backlinks file="页面名"
# 标签统计
obsidian tags sort=count counts
# 获取每日笔记
obsidian daily:read
创建与更新
# 创建新笔记(多行用 \n)
obsidian create name="新页面" content="# 标题\n\n内容" silent
# 追加内容到现有笔记
obsidian append file="页面名" content="新段落"
# 设置属性
obsidian property:set name="status" value="done" file="我的笔记"
# 追加到每日笔记
obsidian daily:append content="- [ ] 新任务"
Vault 定位
# 指定 vault(当多 vault 时)
obsidian vault="个人知识库" search query="关键词"
实用标志
silent— 不打开文件--copy— 复制输出到剪贴板overwrite— 覆盖已存在的文件
Wiki 页面模板
Entity 页(wiki/entities/)
---
type: entity
category: person|project|organization
tags: [tag1]
date: 2026-04-17
---
# 实体名称
## 基本信息
- 属性1
- 属性2
## 关联
- [[相关实体]]
- [[相关概念]]
## 来源
- [[来源页]]
Concept 页(wiki/concepts/)
---
type: concept
tags: [tag1]
date: 2026-04-17
sources: [raw/原始文件.md]
---
# 概念名称
> 一句话定义
## 核心要点
- 要点1
- 要点2
## 相关概念
- [[相关概念]]
## 来源
- [[来源文件]]
Source 页(wiki/sources/)
---
type: source
date: 2026-04-17
url: https://...
tags: [LLM, RAG]
---
# 资料标题
## 摘要
2-3 句话概括
## 关键信息
- 要点1
- 要点2
## 关联
- [[相关实体]]
- [[相关概念]]
Synthesis 页(wiki/synthesis/)
---
type: synthesis
tags: [分析]
date: 2026-04-17
---
# 综合分析:XXX
## 核心发现
- 发现1
- 发现2
## 分析
[综合分析内容]
## 来源
- [[来源1]]
- [[来源2]]
Obsidian 语法规范
本技能专为 Obsidian 设计,必须遵循 Obsidian 语法规范。
Obsidian 链接语法
# 正确格式
[[页面名]] - 内部链接
[[页面名|显示文本]] - 带显示文本的链接(不推荐)
# 错误格式
[[文件名|路径]] - ❌ 错误格式
Obsidian Mermaid 流程图
Obsidian 内置支持 Mermaid 流程图渲染。使用方法:
基础语法
```mermaid
flowchart LR
A[节点名称] --> B[目标节点]
B --> C{判断节点}
C -->|是| D[结果1]
C -->|否| E[结果2]
### 关键规则
1. **必须使用 ` ```mermaid `** 三个反引号,不能是普通代码块
2. **节点名称避免特殊字符**:不要用中文在节点 ID 中,用 `A[中文]` 格式
3. **方向指示**:`LR`(左到右)、`TB`(上到下)、`RL`(右到左)
4. **避免连续箭头**:`A --> B --> C` 可能有问题,改为 `A --> B` 然后 `B --> C`
5. **子图谨慎使用**:Obsidian 对 `subgraph` 支持不稳定
### 正确示例
```mermaid
flowchart TD
A[开始] --> B{判断}
B -->|是| C[结果1]
B -->|否| D[结果2]
C --> E[结束]
D --> E
错误示例(不要这样写)
```mermaid
flowchart TD
A[开始] --> B[中间] --> C[结束] <!-- 连续箭头可能不渲染 -->
代码块格式选择
| 内容类型 | 推荐格式 | 示例 |
|---|---|---|
| 流程图、架构图 | ```mermaid | 流程图、系统架构 |
| 目录树、树形结构 | 普通代码块 ``` | 目录结构 |
| 代码示例 | 普通代码块 ```python | Python、JavaScript |
| 配置、列表 | 无序列表 - | 部署建议、理由清单 |
| 对比信息 | 表格 ` | col |
常见错误:
- ❌ 用普通代码块画流程图 → 改为
```mermaid - ❌ 用代码块写简单列表 → 改为无序列表
- ❌ 用代码块写部署建议 → 改为无序列表
- ❌ 链接格式
[[文件名|路径]]→ 改为直接文件路径 - ❌ 表格前没有空行 → 标题和表格之间需要空行
Markdown 表格格式
表格标题和表格之间必须有空行:
## 示例标题
| 列1 | 列2 |
|-----|-----|
| 内容1 | 内容2 |
错误示例(没有空行):
## 示例标题
| 列1 | 列2 |
|-----|-----|
来源引用格式
优先使用:链接到来源页 [[来源-xxx]]
## 来源
- [[来源-Continuous Batching LLM推理]]
- [[来源-Quantization Aware Training]]
如果没有来源页:直接写原始文件路径
## 来源
- 原始文件:raw/articles/2026-04-17-xxx.md
- 参考:[外部链接](https://...)
错误格式:
- ❌
[[文件名|路径]]— 错误的链接格式 - ❌ 直接写 raw 路径没有标注 — 应该加 "原始文件:" 前缀
- Clippings → Raw — 每次整理先移动 clippings/ 到 raw/
- Raw sources immutable —
raw/是只读的,绝不修改 - LLM owns wiki — 自动创建、更新、维护 Wiki
- Cross-reference everything — 双向
[[wikilinks]] - Flag contradictions — 发现矛盾时标注
⚠️ 与 [[X]] 矛盾 - Synthesize after ingest — 每次摄入后自动生成综合分析
- Keep index current — 每次变更后更新 index.md
- Append to log — 每次操作记录到 log.md
- Use Mermaid for diagrams — 流程图用
```mermaid,不用普通代码块
index.md 格式
# 📚 个人知识库索引
## 最近更新
- [[页面名]] - 一句话描述 (2026-04-17)
## 实体
| 页面 | 摘要 | 来源 | 更新 |
|------|------|------|------|
## 概念
| 页面 | 摘要 | 来源 | 更新 |
|------|------|------|------|
## 来源
| 页面 | 摘要 | 日期 |
|------|------|------|
log.md 格式(追加到每日笔记)
## [2026-04-17] ingest | 资料标题
- 创建 wiki/sources/页面.md
- 更新 3 个实体页、2 个概念页
- 更新 index.md
## [2026-04-17] query | 用户问题
简要回答,涉及的页面
## [2026-04-17] lint
发现的问题,解决的孤立页面
实用技巧
Obsidian Web Clipper
浏览器扩展,将网页文章转 Markdown,快速获取资料到 raw/。
插件推荐
- Dataview:查询页面 frontmatter,生成动态表格
- graph view:查看 Wiki 结构,发现孤立页面
- Marp:从 Markdown 生成幻灯片
- Obsidian CLI:内置 CLI(1.9+),需在 obsidian.json 启用
Git 版本控制
Wiki 就是 Git 仓库,可以获得版本历史、分支和协作能力。
为什么有效
维护知识库最繁琐的部分不是阅读或思考,而是** bookkeeping(记账工作)**:更新交叉引用、保持摘要最新、标注矛盾、保持一致性。人类放弃 Wiki 是因为维护负担增长比价值快。LLM 不会厌倦、不会忘记更新交叉引用、可以一次触及 15 个文件。
快速开始
当用户要求整理知识库时(完整流程):
1. Sync:检查 clippings/,移动文件到 raw/
2. Ingest:处理 raw/ 新文件,创建 wiki 页面
3. Synthesize:识别综合主题,生成 synthesis 页面
4. Lint:检查知识库健康(可选)
当用户提供新资料要摄入时:
1. 请用户提供资料内容或 URL
2. 分析资料,提取关键信息
3. 确定放 raw/ 哪个子目录
4. obsidian create 创建 wiki/sources/ 来源摘要页
5. obsidian append 更新相关实体/概念页
6. 更新 index.md
7. obsidian daily:append 记录
8. 执行 Synthesize 生成综合分析
当用户向知识库提问时:
1. obsidian search 搜索相关页面
2. obsidian read 读取匹配页面
3. 综合回答并标注来源
4. 有价值的新洞察 → 创建 synthesis 页面
扩展与规模化
搜索增强
- 小型 Wiki(<100 页):
index.md+obsidian search足够 - 增长中的 Wiki:使用 qmd CLI
- BM25 + 向量搜索 + LLM 重排
- 更快的语义检索
- LLM 可以帮助编写搜索脚本
性能优化
随着 Wiki 增长,可以考虑:
- 分离高频访问的页面到独立索引
- 使用 Dataview 插件生成动态索引
- 定期 Lint 保持知识库健康
何时阅读参考资料
以下情况应查阅 references 目录:
- 完整理解 Karpathy 模式:阅读
references/karpathy-kb-pattern.md - Obsidian CLI 完整命令参考:阅读
references/obsidian-cli.md - 遇到 CLI 问题:检查 Obsidian 是否运行、CLI 是否启用