Obsidian 笔记助手
基于当前对话内容,在 /mnt/e/StudyNotes 中创建或更新笔记。一次对话可能产出多篇——操作过程记成项目日记,提炼的理解合并到已有笔记或新建永久笔记,二者通过双向链接关联。
仓库结构
/mnt/e/StudyNotes/
├── 00_收件箱/ # 临时草稿,每周整理归类
├── 10_项目/ # 有终点的项目
│ ├── 任务总控.md # 全局仪表盘,所有项目状态一览
│ └── 项目名/ # 一个项目一个文件夹
│ ├── 任务清单.md # 该项目的详细任务待办
│ ├── 2026-05-10_xxx.md # 项目日记
│ └── ...
├── 20_笔记/ # 永久知识,按领域分
│ ├── 工具与环境/
│ ├── Python/
│ ├── OpenCV/
│ ├── PyTorch/
│ ├── 深度学习/
│ ├── ROS2/
│ └── 数学基础/
├── 30_资源/ # 速查表、命令集、模板、外部链接
└── 90_归档/ # 已完成的项目
文件夹只做大类区分,细节靠 Properties 中的 tags、aliases 组织。
执行步骤
第 1 步:扫描对话,拆成两类内容
回顾本轮对话,从中提取:
| 类型 | 是什么 | 判断标准 |
|---|---|---|
| 操作过程 | 今天做了什么、踩了什么坑、怎么解决的 | 有时序、有具体操作命令、有踩坑记录 |
| 理解收获 | 概念理解了、原理想通了、能一句话说清 | 脱离时间也有价值、以后能反复翻看和延伸 |
一次对话两种都可能有,也可能只有一种。如实提取即可。
第 1.5 步:检查学习工作文档
检查 40_中间产物/当前学习.md 是否存在:
- 存在且未完成(frontmatter 中
current_point未指向最后一个知识点) → 将已完成的知识点(✅标记的)内容纳入本次归档素材,在文档末尾已归档部分加上> 📝 以上学习部分已归档于 YYYY-MM-DD,不删除文档 - 存在且已完成(所有知识点 ✅) → 将全部内容纳入本次归档素材,归档完成后提示用户:
📂 学习工作文档已归档完毕 40_中间产物/当前学习.md 可删除。 [1] 删除 [2] 保留 - 不存在 → 跳过,正常流程
第 2 步:检查已有笔记,决定新建还是更新
这一步最关键。 对于每个「理解收获」,先搜索再决定操作,不要直接建新笔记。
- 在
20_笔记/中用 Glob + Grep 搜索相同主题的已有笔记(按主题关键词搜文件名和标题) - 对每个理解收获,判断属于以下哪种情况:
| 情况 | 判断标准 | 操作 |
|---|---|---|
| 同一概念的新理解 | 已有笔记讲了这个概念,本次有新角度、新深度、新踩坑 | 更新已有笔记:追加关键点、补充怎么用、添加踩坑经验、新增关联链接 |
| 全新的独立概念 | 仓库中没有这个主题的笔记 | 新建笔记 |
| 内容已被覆盖 | 已有笔记已经包含了本次的理解,没有新东西 | 跳过,只在日记中链接已有笔记 |
日记不受此限制——每次对话一定新建一篇日记(日期不同,记录不同)。
第 3 步:落成笔记
操作过程 → 项目日记(10_项目/项目名/YYYY-MM-DD_做了什么.md)
文件名严格使用 ISO 8601 日期格式 YYYY-MM-DD。每次对话一篇。
理解收获 → 永久笔记(20_笔记/领域/主题.md)
- 新建:文件名用主题命名,不加数字前缀、不加日期
- 更新:在已有笔记中追加内容,保持原有结构不变
如果对话中出现了新的可复用命令/模板/链接 → 问用户要不要在 30_资源/ 下额外建一篇速查笔记。
拿不准分类 → 00_收件箱/。
第 4 步:写笔记内容
新建永久笔记(第 5 步会应用 [未看] 前缀 + 00_收件箱/ 路径,此处只需写入正文内容):
模板(遵循 Obsidian Properties 官方文档):
---
aliases:
- 别名1
- 别名2
created: YYYY-MM-DD
tags:
- 领域标签
- 类型标签
---
# 主题(一句话概括)
(正文第一句直接说清这个概念是什么。)
## 关键点
- 第一点
- 第二点
- 第三点
## 怎么用
(贴最小可运行代码。没有则省略整个段落。)
## 关联
- [[相关笔记A]]
- [[相关笔记B]]
更新已有笔记的方法:
- 保持原有 frontmatter(
created不动,aliases如有新别名则追加) - 在「关键点」末尾追加新要点(前面加
(更新于 YYYY-MM-DD)或直接混入列表) - 在「怎么用」补充新代码示例
- 在「关联」追加新链接
- 不删原有内容,不重写——知识笔记是生长的,不是替换的
模板规范:
tags用 YAML list,不加#,用复数tags而非tag(单数已废弃)aliases放中文别名、简称、英文原名created用YYYY-MM-DD格式- 属性值中的内部链接必须加引号:
"[[链接]]" - 属性名用小写英文,值用中文或英文
- 标签不超过 3 个
项目日记模板:
---
tags:
- diary
- 项目标签
created: YYYY-MM-DD
---
# YYYY-MM-DD 做了什么
## 操作步骤
- 步骤 1
- 步骤 2
## 踩坑记录
- 遇到的问题和解决方法
## 关联
- [[永久笔记A]]
- [[永久笔记B]]
第 5 步:应用阅读状态追踪
所有永久笔记应用三态追踪,文件名前缀 + 正文勾选框双重标识。
勾选框位置:
---
aliases: ...
tags: ...
---
- [ ] 开头已确认
# 笔记标题
...正文...
- [ ] 结尾已确认
状态判定:
| 文件名 | 开头 | 结尾 | 状态 | 位置 |
|---|---|---|---|---|
[未看] 主题.md |
[ ] |
[ ] |
未看 | 00_收件箱/ |
[待看] 主题.md |
[x] |
[ ] |
待看 | 00_收件箱/ |
主题.md |
无 | 无 | 已看 | 20_笔记/领域/ |
规则:
- 新建永久笔记 → 文件名
[未看] 主题.md,正文两个[ ],放入00_收件箱/ - 更新已有永久笔记 → 统一操作:
- 保留第一个(开头)勾选框状态不变(若笔记原无勾选框则在开头插入
[ ]) - 重置第二个(结尾)勾选框为
[ ] - 根据第一个勾选框状态重命名文件:
[ ] [ ]→[未看][x] [ ]→[待看]
- 确保文件在
00_收件箱/(在20_笔记/的移回收件箱)
- 保留第一个(开头)勾选框状态不变(若笔记原无勾选框则在开头插入
- 用户升级未看→待看 → 勾选开头
[ ]为[x],重命名[未看] 主题.md→[待看] 主题.md,文件留在00_收件箱/ - 用户确认已看 → 去除文件名前缀、去除两个勾选框,移动到
20_笔记/对应领域 - 更新日记 → 不受此规则影响,日记直接存入
10_项目/对应位置 - 归档完成后 → 在汇总确认中询问用户:
👁️ 阅读状态 以下笔记在 00_收件箱/,可升级状态: - [未看] Python变量.md → 勾选开头 → 变 [待看] - [待看] Git核心概念.md → 勾选结尾 → 移入 20_笔记/ [回复笔记名升级状态,或回复"跳过"]
第 6 步:双向链接
- 用 Glob 搜索仓库中已有的相关笔记
- 日记必须链接到本次产出的 / 更新的所有永久笔记,以及之前的相关笔记
- 永久笔记之间互相链接
- 大胆使用空链接——
[[一个还不存在的笔记]]完全合法,以后补建即可
第 7 步:维护任务清单
如果用户正在执行某个项目的任务,建完日记后要同步更新 10_项目/项目名/任务清单.md:
- 检查
10_项目/项目名/任务清单.md是否存在 - 如果存在,将本次完成的任务勾选为
[x],补上日记和笔记的链接 - 如果不存在但用户有任务列表,问用户"要不要先把任务清单生成出来?"
同时更新 10_项目/任务总控.md 中的项目进度,并同步更新 > 🎯 下一任务 为当前阶段第一个未完成的任务。
第 8 步:维护技能清单
仅当本轮对话涉及创建或修改了 Claude 技能时触发。 检查 30_资源/Claude技能清单.md 是否存在:
- 不存在 → 新建该笔记,将所有已有技能都扫描一遍写入
- 存在 → 更新对应技能的条目,无变化则跳过
每个技能条目格式:
## 技能名
- **触发**:仅主动调用 / 对话中关键词触发
- **功能**:一句话描述做什么
- **流程**:2-3 句话说明怎么工作
- **建议场景**:什么时候用
示例条目:
## obsidian-note
- **触发**:`/obsidian-note`(仅主动调用)
- **功能**:将对话内容自动拆分为项目日记和永久笔记,先搜再建避免重复,更新任务清单进度
- **流程**:扫描对话 → 拆分操作过程和理解收获 → 检查已有笔记决定新建或更新 → 写笔记 → 双向链接 → 维护任务清单
- **建议场景**:完成一个学习任务后整理产出、讨论出重要结论后沉淀知识、踩坑后保存经验
如果 Claude技能清单.md 中已有该技能的条目,对比新旧内容,有变化才更新,无变化跳过。
第 9 步:汇总确认
一次性展示所有操作,区分「新建」「更新」「跳过」:
📔 项目日记(1 篇)
新建:10_项目/视觉工程学习/2026-05-12_阈值分割调试.md
📝 永久笔记
新建:00_收件箱/[未看] Otsu算法.md
更新:00_收件箱/[待看] 阈值分割.md — 追加踩坑经验
⏭️ 跳过
OpenCV图像读取 — 现有笔记已覆盖,无新内容
👁️ 阅读状态
以下笔记在 00_收件箱/,是否有已确认阅读的?
- 未看:Otsu算法.md
- 待看:阈值分割.md
📋 任务清单
更新:任务清单.md — 勾选任务 16
📄 学习工作文档
40_中间产物/当前学习.md — 未完成,已归档部分加标记
或
40_中间产物/当前学习.md — 已完成,归档后可删除
🔗 交叉链接
日记 → 阈值分割、Otsu算法
阈值分割 → Otsu算法
📋 README
更新:README.md — 进度同步
📦 Git
已提交并推送:3 个文件变更
或
push 失败:网络超时,笔记已本地保存
🔧 技能
已推送:learn/SKILL.md, obsidian-note/SKILL.md
或
技能目录无变更,跳过
等用户确认后逐篇写入。
第 10 步:同步任务总控到 README
如果本次更新了任务总控,将其「进行中」「等待中」「已完成」和 🎯 下一任务 同步到 README.md:
- 读取
10_项目/任务总控.md,提取「进行中」区块的所有条目 - 读取
/mnt/e/StudyNotes/README.md,如果不存在则跳过 - 将 README 中
## 当前进度下的### 进行中条目替换为任务总控中对应的条目(保持 Obsidian[[链接|显示名]]格式) ### 等待中和### 已完成同理从任务总控同步- 更新
> 🎯 下一任务为当前阶段第一个未完成的任务
只替换进度条目和下一任务,不动 README 的其他结构(目录结构、工具说明等)。
第 11 步:Git 自动提交
所有笔记写入完成后,自动将变更提交到 StudyNotes 仓库:
- 检查
/mnt/e/StudyNotes是否是一个 git 仓库(git status) - 如果不是仓库,跳过本步骤
- 执行提交:
cd /mnt/e/StudyNotes
git add -A
git commit -m "笔记: YYYY-MM-DD — 简要描述本次变更"
git push
提交信息格式:笔记: 日期 — 做了什么,例如:
笔记: 2026-05-10 — 搭建 WSL2 环境笔记: 2026-05-10 — 学习 Git 核心概念笔记: 2026-05-10 — 新建 Otsu 算法,更新 阈值分割
- 如果 push 失败(网络问题等),告知用户但不阻塞流程,笔记已经本地保存。
第 12 步:自动推送技能变更
如果本次笔记涉及技能文件的创建或修改(/home/rainz/.claude/skills/ 下有变更),自动执行 /push-skills:
- 检查技能目录的 git 状态
- 有未推送的变更 → 执行 push-skills 流程
- 无变更 → 跳过
在汇总确认中追加:
🔧 技能
已推送:learn/SKILL.md, obsidian-note/SKILL.md
或
技能目录无变更,跳过
- 在汇总确认的展示中加入 Git 状态:
📦 Git
已提交并推送:3 个文件变更
或
push 失败:网络超时,笔记已本地保存
原则
| 原则 | 说明 |
|---|---|
| 先搜再建 | 每个永久笔记创建前先搜索有无相同主题的已有笔记;已有则更新,不重复建 |
| 知识笔记是生长的 | 更新已有笔记时追加不覆盖,同一个概念随学习深入越来越厚 |
| 日记每次新建 | 日记记录过程,日期不同就是不同篇,不受合并规则影响 |
| 一次对话 = 一套笔记 | 日记 + 永久笔记 + 任务清单更新,不同性质的内容不混在一篇里 |
| 一篇笔记只讲清一件事 | 不写成教科书章节 |
| 任务清单是唯一真相源 | 任务进度、产出链接全在清单里;日记是任务和笔记的桥梁 |
| 两层任务管理 | 任务总控.md 看全局仪表盘,各项目文件夹内的 任务清单.md 看单项目细节 |
| 属性辅助组织,文件夹只做大类 | 文件夹划分领域,细节靠 tags 和 aliases |
| 大胆链出去 | 每篇永久笔记至少一个 [[]];空链接完全合法 |
| 一致性减少决策负担 | 日期统一 YYYY-MM-DD、标签统一小写英文复数、命名统一格式 |
| 文件优于应用 | 笔记就是本地 .md 文件,不依赖任何特定插件才能阅读 |
| 拿不准往收件箱放 | 宁可选错分类也不丢内容 |
| 新建文件夹前先确认 | 不随意扩张目录结构 |