| name | ob-topic |
| description | 对话中快速收藏通用知识点到 Obsidian 知识库。触发词:/save、/collect、收藏、记录一下、ob-topic。 |
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 仓库路径。
- 首先检查全局 CLAUDE.md 中是否定义了
OBSIDIAN_REPO 配置变量
- 如果未定义,使用 AskUserQuestion 询问用户
- 将用户提供的路径保存为
$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)。分配方式:
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}/ |