Obsidian 知识点快速收藏助手。从对话上下文中提取知识点,精炼概括后保存到 Obsidian wiki 主题目录。写入后自动更新项目 CLAUDE.md 的 Obsidian 索引段。
两种模式:1) 手动触发:用户说触发词 + 知识点描述,立即收藏;2) 自动提醒:对话中识别到通用知识点时主动询问是否收藏。写入后同步更新项目 CLAUDE.md。
触发词:
- /save / /collect / 收藏 / 记录一下 / ob-topic
- 把这个收藏 / 保存到知识库 / 记录一下这个知识点
- 新增 topic / 新建 topic / 创建 topic
示例:
- "/save React Server Components 的流式渲染原理"
- "收藏一下:Tauri Sidecar 的启动流程"
- "记录一下:Node.js SEA 编译的局限性"
- "新增一个 topic hermes"
- "新建 topic crypto 关于加密货币"
- "创建 topic rust,收藏 Rust 所有权机制"
Obsidian 知识点收藏 (ob-topic)
配置检查
执行前必读:本 skill 需要使用 Obsidian 仓库路径。
【硬约束】仓库路径一律委托 ob-router skill 解析,本 skill 不自行读取路径文件。
调用 ob-router skill 获取 $OBSIDIAN_REPO:
- ob-router 内部处理优先级(ob-router.json → CLAUDE.md → 询问)
- 若 ob-router.json 不存在,ob-router 会主动提示
ob-router init 持久化
- 若存在多个仓库,ob-router 会主动询问切换目标,不静默使用默认值
将 ob-router 返回的路径保存为 $OBSIDIAN_REPO,后续全程使用此变量。
收藏流程
1. 提取内容
- 从用户触发词描述中提取知识点
- 检查当前对话上下文是否有相关讨论内容,有则一并提取
- 精炼概括,核心内容 ≤ 500 字
2. 主题分类
优先检测用户是否指定了 topic,再走自动匹配逻辑。
2a. 用户指定 topic(优先)
解析用户输入,检测以下意图模式:
- "新增 topic xxx" / "新建 topic xxx" / "创建 topic xxx"
- "新增一个 topic xxx" / "新建一个 topic xxx"
- "topic xxx 关于 yyy"
处理方式:
- 提取 topic 名称(如
hermes、crypto、rust)
- 转为英文短横线命名作为目录名(如
wiki/hermes/、wiki/crypto/)
- 标记为 新 topic,后续执行 Step 2.5 创建目录
- 如果用户同时提供了知识点内容(如"创建 topic rust,收藏 Rust 所有权机制"),继续走 Step 3 写入笔记
注意:如果用户指定的 topic 名称与已有分类表中的目录重名(如 ai、claude),直接使用已有目录,不重复创建。
2b. 自动匹配(无 topic 指定时)
根据知识点关键词自动匹配主题目录:
| 主题 |
目录 |
关键词 |
| AI 技术 |
wiki/ai/ |
AI, LLM, GPT, transformer, 机器学习, 深度学习, RAG, agent |
| Claude 生态 |
wiki/claude/ |
Claude, Claude Code, Skills, MCP, hooks, Subagents |
| Tauri |
wiki/tauri/ |
Tauri, 桌面应用, tauri-app, Sidecar, invoke |
| 开发工具 |
wiki/dev-tools/ |
VSCode, IDE, 编辑器, CLI, 终端, Git, Zed |
| 前端开发 |
wiki/front-end/ |
React, JavaScript, TypeScript, CSS, 前端, Next.js, Vue |
| 时事分析 |
wiki/current-affairs/ |
经济, 政治, 国际, 金融, 投资, 时事 |
| 职业发展 |
wiki/career/ |
职级, 面试, 求职, 职业规划, 大厂 |
| Obsidian |
wiki/obsidian/ |
Obsidian, 知识管理, 笔记, 双链 |
| 最佳实践 |
wiki/best-practice/ |
使用习惯, 效率技巧, 工具推荐, 插件体验, 工作流, 快捷键, 软件配置, 使用心得 |
无匹配时自动创建新主题目录(kebab-case 英文命名)。
匹配后直接使用,不询问用户确认(全自动模式)。
2.5 创建新 topic 目录(仅 Step 2a 触发时执行)
当确定为新 topic 时,执行以下步骤:
检查目录是否已存在:
ls "$OBSIDIAN_REPO/wiki/{topic-name}/"
如果已存在,跳过创建,直接使用。
创建目录:
mkdir -p "$OBSIDIAN_REPO/wiki/{topic-name}/"
创建 index.md,格式如下:
---
tags: [{topic-name}, index]
type: index
updated_at: {YYYY-MM-DD}
---
# {Topic 显示名}
> {一句话描述,来自用户输入或从上下文推断}
## 文章列表
<!-- 后续文章会自动追加到这里 -->
更新 wiki/index.md 全局索引,在合适位置(按字母顺序或末尾)添加:
- [[{topic-name}/index|{Topic 显示名}]] — {一句话描述}
如果 wiki/index.md 不存在,不创建(由 ob-index skill 统一管理)。
3. 写入笔记
文件名:{slug}.md,slug 用英文短横线连接。
分配 article_id:
在写入前,为新文章分配全局唯一的 article_id(格式 OBA-{8位随机小写字母数字},如 OBA-k7jm2p9q)。分配方式:
# 生成随机 ID(8位小写字母+数字)
python3 -c "import random,string; print(''.join(random.choices(string.ascii_lowercase+string.digits,k=8)))"
---
tags: [{主题标签}, {关键词}]
type: {预定义类型}
article_id: OBA-{随机8位}
created_at: {YYYY-MM-DD}
source: conversation
---
# {知识点标题}
> 从对话中整理 · {主题分类}
## 核心内容
{精炼概括,≤ 500 字}
## 关键要点
1. {要点一}
2. {要点二}
3. {要点三}
type 选择规则(必须遵循 frontmatter-schema):
| 内容性质 |
type |
| 解释技术概念/术语 |
concept |
| 教程/操作步骤 |
tutorial |
| 问题排查/踩坑 |
troubleshooting |
| 学习记录 |
learning |
| 参考/对比/速查 |
reference |
| 其他 |
note |
4. 写入后验证
遵循 frontmatter-schema 中的验证清单:
- Frontmatter:确认 tags(非空)、type(预定义值)、updated_at 存在
- Wikilink:扫描
[[xxx]] 引用,确认目标文件存在
- 索引:确认文章已出现在对应 index.md
- 交叉引用:在同目录已有文章中查找 tags 重叠的文章,添加
[[新文章名]] 反向链接
5. 更新索引
- 更新
wiki/{theme}/index.md:追加新条目到对应分类下
- 新主题目录时创建
wiki/{theme}/index.md(Step 2.5 已处理,此处验证即可)
- 新主题分类时更新
wiki/index.md 全局索引(Step 2.5 已处理,此处验证即可)
- 对新 topic:确认
wiki/{topic-name}/index.md 存在且包含新文章条目;确认 wiki/index.md 已包含该 topic 的链接
5.5 更新项目 CLAUDE.md 索引段
写入完成后,如果当前在 git 项目中,自动更新项目 CLAUDE.md 中的 Obsidian 索引段。流程参考 ob-project-log/references/claude-index-format.md 中的"共享更新流程"。
注意:ob-topic 写入的内容在主题目录(wiki/{theme}/),不一定有项目级索引。更新会静默跳过,不影响主流程。如果用户已为当前项目建立了 Obsidian 项目索引,则同步更新 CLAUDE.md。
6. 返回结果
简短返回:文件路径、主题分类、标题。
与其他 skill 的区别
| 维度 |
ob-topic |
ob-collect |
ob-project-log |
| 来源 |
对话上下文 |
外部 URL/视频/PDF |
对话上下文(项目相关) |
| 绑定 |
不绑定项目 |
不绑定项目 |
绑定 git 项目 |
| 触发 |
手动 + 自动提醒 |
手动 |
Stop hook 自动 |
| 目标 |
wiki/{theme}/ |
raw/ → wiki/{theme}/ |
wiki/projects/{project}/ |
1---2name: ob-topic3description: 对话中快速收藏通用知识点到 Obsidian 知识库。触发词:/save、/collect、收藏、记录一下、ob-topic。4---56<role>Obsidian 知识点快速收藏助手。从对话上下文中提取知识点,精炼概括后保存到 Obsidian wiki 主题目录。写入后自动更新项目 CLAUDE.md 的 Obsidian 索引段。</role>7<purpose>两种模式:1) 手动触发:用户说触发词 + 知识点描述,立即收藏;2) 自动提醒:对话中识别到通用知识点时主动询问是否收藏。写入后同步更新项目 CLAUDE.md。</purpose>8<trigger>910```text11触发词:12- /save / /collect / 收藏 / 记录一下 / ob-topic13- 把这个收藏 / 保存到知识库 / 记录一下这个知识点14- 新增 topic / 新建 topic / 创建 topic1516示例:17- "/save React Server Components 的流式渲染原理"18- "收藏一下:Tauri Sidecar 的启动流程"19- "记录一下:Node.js SEA 编译的局限性"20- "新增一个 topic hermes"21- "新建 topic crypto 关于加密货币"22- "创建 topic rust,收藏 Rust 所有权机制"23```2425</trigger>2627# Obsidian 知识点收藏 (ob-topic)2829## 配置检查3031**执行前必读**:本 skill 需要使用 Obsidian 仓库路径。3233**【硬约束】仓库路径一律委托 ob-router skill 解析,本 skill 不自行读取路径文件。**3435调用 ob-router skill 获取 `$OBSIDIAN_REPO`:36- ob-router 内部处理优先级(ob-router.json → CLAUDE.md → 询问)37- 若 ob-router.json 不存在,ob-router 会**主动提示** `ob-router init` 持久化38- 若存在多个仓库,ob-router 会**主动询问**切换目标,不静默使用默认值3940将 ob-router 返回的路径保存为 `$OBSIDIAN_REPO`,后续全程使用此变量。4142## 收藏流程4344### 1. 提取内容4546- 从用户触发词描述中提取知识点47- 检查当前对话上下文是否有相关讨论内容,有则一并提取48- 精炼概括,核心内容 ≤ 500 字4950### 2. 主题分类5152优先检测用户是否指定了 topic,再走自动匹配逻辑。5354#### 2a. 用户指定 topic(优先)5556解析用户输入,检测以下意图模式:5758- "新增 topic xxx" / "新建 topic xxx" / "创建 topic xxx"59- "新增一个 topic xxx" / "新建一个 topic xxx"60- "topic xxx 关于 yyy"6162**处理方式**:631. 提取 topic 名称(如 `hermes`、`crypto`、`rust`)642. 转为英文短横线命名作为目录名(如 `wiki/hermes/`、`wiki/crypto/`)653. 标记为 **新 topic**,后续执行 Step 2.5 创建目录664. 如果用户同时提供了知识点内容(如"创建 topic rust,收藏 Rust 所有权机制"),继续走 Step 3 写入笔记6768**注意**:如果用户指定的 topic 名称与已有分类表中的目录重名(如 `ai`、`claude`),直接使用已有目录,不重复创建。6970#### 2b. 自动匹配(无 topic 指定时)7172根据知识点关键词自动匹配主题目录:7374| 主题 | 目录 | 关键词 |75|------|------|--------|76| AI 技术 | `wiki/ai/` | AI, LLM, GPT, transformer, 机器学习, 深度学习, RAG, agent |77| Claude 生态 | `wiki/claude/` | Claude, Claude Code, Skills, MCP, hooks, Subagents |78| Tauri | `wiki/tauri/` | Tauri, 桌面应用, tauri-app, Sidecar, invoke |79| 开发工具 | `wiki/dev-tools/` | VSCode, IDE, 编辑器, CLI, 终端, Git, Zed |80| 前端开发 | `wiki/front-end/` | React, JavaScript, TypeScript, CSS, 前端, Next.js, Vue |81| 时事分析 | `wiki/current-affairs/` | 经济, 政治, 国际, 金融, 投资, 时事 |82| 职业发展 | `wiki/career/` | 职级, 面试, 求职, 职业规划, 大厂 |83| Obsidian | `wiki/obsidian/` | Obsidian, 知识管理, 笔记, 双链 |84| 最佳实践 | `wiki/best-practice/` | 使用习惯, 效率技巧, 工具推荐, 插件体验, 工作流, 快捷键, 软件配置, 使用心得 |8586无匹配时自动创建新主题目录(kebab-case 英文命名)。8788匹配后直接使用,不询问用户确认(全自动模式)。8990### 2.5 创建新 topic 目录(仅 Step 2a 触发时执行)9192当确定为新 topic 时,执行以下步骤:93941. **检查目录是否已存在**:95 ```bash96 ls "$OBSIDIAN_REPO/wiki/{topic-name}/"97 ```98 如果已存在,跳过创建,直接使用。991002. **创建目录**:101 ```bash102 mkdir -p "$OBSIDIAN_REPO/wiki/{topic-name}/"103 ```1041053. **创建 index.md**,格式如下:106 ```markdown107 ---108 tags: [{topic-name}, index]109 type: index110 updated_at: {YYYY-MM-DD}111 ---112113 # {Topic 显示名}114115 > {一句话描述,来自用户输入或从上下文推断}116117 ## 文章列表118119 <!-- 后续文章会自动追加到这里 -->120 ```1211224. **更新 wiki/index.md 全局索引**,在合适位置(按字母顺序或末尾)添加:123 ```markdown124 - [[{topic-name}/index|{Topic 显示名}]] — {一句话描述}125 ```126 如果 `wiki/index.md` 不存在,不创建(由 ob-index skill 统一管理)。127128### 3. 写入笔记129130文件名:`{slug}.md`,slug 用英文短横线连接。131132**分配 article_id**:133134在写入前,为新文章分配全局唯一的 article_id(格式 `OBA-{8位随机小写字母数字}`,如 `OBA-k7jm2p9q`)。分配方式:135136```bash137# 生成随机 ID(8位小写字母+数字)138python3 -c "import random,string; print(''.join(random.choices(string.ascii_lowercase+string.digits,k=8)))"139```140141- 生成后验证唯一性:142 ```bash143 grep -rh "OBA-{生成的ID}" "$OBSIDIAN_REPO/wiki/" --include="*.md"144 ```145 无结果则 ID 唯一,可使用;否则重新生成146147```markdown148---149tags: [{主题标签}, {关键词}]150type: {预定义类型}151article_id: OBA-{随机8位}152created_at: {YYYY-MM-DD}153source: conversation154---155156# {知识点标题}157158> 从对话中整理 · {主题分类}159160## 核心内容161162{精炼概括,≤ 500 字}163164## 关键要点1651661. {要点一}1672. {要点二}1683. {要点三}169```170171**type 选择规则**(必须遵循 [frontmatter-schema](references/frontmatter-schema.md)):172173| 内容性质 | type |174|---------|------|175| 解释技术概念/术语 | `concept` |176| 教程/操作步骤 | `tutorial` |177| 问题排查/踩坑 | `troubleshooting` |178| 学习记录 | `learning` |179| 参考/对比/速查 | `reference` |180| 其他 | `note` |181182### 4. 写入后验证183184遵循 [frontmatter-schema](references/frontmatter-schema.md) 中的验证清单:1851. **Frontmatter**:确认 tags(非空)、type(预定义值)、updated_at 存在1862. **Wikilink**:扫描 `[[xxx]]` 引用,确认目标文件存在1873. **索引**:确认文章已出现在对应 index.md1884. **交叉引用**:在同目录已有文章中查找 tags 重叠的文章,添加 `[[新文章名]]` 反向链接189190### 5. 更新索引191192- 更新 `wiki/{theme}/index.md`:追加新条目到对应分类下193- 新主题目录时创建 `wiki/{theme}/index.md`(Step 2.5 已处理,此处验证即可)194- 新主题分类时更新 `wiki/index.md` 全局索引(Step 2.5 已处理,此处验证即可)195- **对新 topic**:确认 `wiki/{topic-name}/index.md` 存在且包含新文章条目;确认 `wiki/index.md` 已包含该 topic 的链接196197### 5.5 更新项目 CLAUDE.md 索引段198199写入完成后,如果当前在 git 项目中,自动更新项目 CLAUDE.md 中的 Obsidian 索引段。流程参考 [ob-project-log/references/claude-index-format.md](../ob-project-log/references/claude-index-format.md) 中的"共享更新流程"。200201**注意**:ob-topic 写入的内容在主题目录(wiki/{theme}/),不一定有项目级索引。更新会静默跳过,不影响主流程。如果用户已为当前项目建立了 Obsidian 项目索引,则同步更新 CLAUDE.md。202203### 6. 返回结果204205简短返回:文件路径、主题分类、标题。206207## 与其他 skill 的区别208209| 维度 | ob-topic | ob-collect | ob-project-log |210|------|----------|------------|----------------|211| 来源 | 对话上下文 | 外部 URL/视频/PDF | 对话上下文(项目相关) |212| 绑定 | 不绑定项目 | 不绑定项目 | 绑定 git 项目 |213| 触发 | 手动 + 自动提醒 | 手动 | Stop hook 自动 |214| 目标 | wiki/{theme}/ | raw/ → wiki/{theme}/ | wiki/projects/{project}/ |