vault-note-factory
Unified note-creation router — detects what kind of note the content wants, runs pre-checks (duplicates, location, naming), and routes to the right skill or template. Use when the user says "create a
SKILL.mdskills/vault-note-factory/SKILL.md
GitHubNote Factory
Unified entry point for creating any type of note in the vault. Handles detection, pre-checks, and routing.
Quick Reference
| User Says | Note Type | Routes To |
|---|---|---|
| "create note for X" | Auto-detect | (this skill decides) |
| "new person X" | Person | → people-manager |
| "new book X" | Book | → media-library |
| "new movie X" | Movie | → media-library |
| "new place X" | Place | → (this skill) |
| "new project X" | Project | → project-builder |
| "journal today" | Daily | → daily-journal |
| "save / file / digest this conversation" + pasted AI chat | AI transcript | → ai-conversation-digest |
| "I'll paste conversations and you note them properly" | AI transcript | → ai-conversation-digest |
Pre-Creation Checklist
ALWAYS run before creating any note:
1. Search First (必须先搜索)
Before creating, search:
1. Exact name match
2. Partial/fuzzy match
3. Chinese/English equivalent
4. Related notes that might contain this info
If found:
- Existing note → Ask: "已有 [[X]],要打开还是新建?"
- Related note → Ask: "在 [[Y]] 中有相关内容,要扩展还是新建?"
2. Determine Note Type
| Clues | Type |
|---|---|
| Name of person, "met", "talked to" | Person |
| "went to", "visited", address, venue | Place |
| "reading", "book by", author mention | Book |
| "watched", "movie", "show", "series" | Movie/TV |
| "listening to", "album", "song" | Music |
| Goal + deadline, actionable | Project |
| Ongoing responsibility | Area note |
| Reference material, how-to | Resource |
3. Ask for Minimum Info
| Type | Required | Optional |
|---|---|---|
| Person | Name, Relationship | Location, Company |
| Place | Name, Type | Address, Why I go |
| Book | Title, Author | Status, Rating |
| Movie | Title | Year, Status |
| Project | Name, Goal | Deadline |
4. Create with Template
Route to appropriate skill:
- Person →
people-manager - Book/Movie/Music →
media-library - Daily/Weekly/Monthly →
daily-journal - Project →
project-builder - Place → (create directly, template below)
5. Link Strategy (必须执行)
重要:创建笔记后 立即 执行 Post-Creation Auto-Linking。
详细流程参考 CLAUDE.md 中的 "4. Post-Creation Auto-Linking" 部分。
快速检查清单:
✅ Step 0: 搜索是否已存在 (Obsidian CLI 优先)
- bash obs.sh search "query=NoteName" limit=5
- FALLBACK: Grep for 'NoteName' across *.md
✅ Step 1: 查找相关 MOC
- 参考 CLAUDE.md 中的 MOC 路由表
- 或用 Glob 搜索: _*MOC*.md
✅ Step 2: 更新 MOC
- MOC 中添加新笔记链接
- 新笔记 frontmatter 后添加 [[MOC名]] 回链
✅ Step 3: 建立双向链接
- bash obs.sh backlinks file="Related Note" (查找相关笔记)
- FALLBACK: Grep for '\[\[Related Note' across *.md
- 在相关笔记中添加链接到新笔记
- 在新笔记中添加链接到相关笔记
✅ Step 4: 报告
- 告诉用户完成了哪些链接操作
不要跳过这一步! 链接是笔记价值的核心。
Note Type Templates
Place Template
---
tags:
- place/<type> # library, cafe, restaurant, park, etc.
- place/<city> # sydney, adelaide, etc.
type: place
location: City, State
address:
website:
hours:
---
[[_places MOC]]
---
## About
Brief description.
## Why I Go Here
-
## Practical Info
| | |
|---|---|
| **Location** | |
| **Transport** | |
| **Cost** | |
| **WiFi** | |
## Visits
- YYYY-MM-DD: What I did
## Notes
-
Type Detection Logic
When user says "create note for X" without specifying type:
1. Check context:
- Recent conversation mentions (person? place? media?)
- Nearby keywords ("met", "went to", "watched")
2. Check name patterns:
- Capitalized words → likely Person or Place
- "The X" → likely Movie/Show/Book
- Contains "Library/Cafe/Park" → Place
3. If ambiguous, ask:
"X 是什么类型?"
1. 人物 (Person)
2. 地点 (Place)
3. 书籍 (Book)
4. 电影/剧集 (Movie/TV)
5. 其他 (Other)
Workflows
Universal Create
User says: "create note" / "new note" / "建立笔记"
Workflow:
- Ask: "What/who is it?"
- Detect type from response
- If ambiguous, ask for type
- Run pre-creation search
- If no conflict, gather minimum info
- Route to appropriate skill/template
- Create note
- Run post-creation linking
Batch Create
User says: "create notes for A, B, C"
Workflow:
- Parse entity list
- Detect type for each
- Group by type
- Show summary: "将创建: 2个人物, 1个地点"
- Confirm
- Create all, show results
Create from Journal
Triggered by: daily-journal entity detection
Workflow:
- Receive entities from daily-journal
- For each: run pre-creation check
- Group new entities by type
- Ask once for all
- Create selected
- Update journal with links
Routing Table
| Type | Skill | Folder | Naming |
|---|---|---|---|
| Person | people-manager | 30_Resources/People/ |
@Name.md |
| Place | (direct) | 30_Resources/Places/ |
Name.md |
| Book | media-library | 30_Resources/Books/ |
Title - Author.md |
| Movie/TV | media-library | 30_Resources/Entertainment/ |
Title (Year).md |
| Music | media-library | 30_Resources/Entertainment/Music/ |
Album - Artist.md |
| Paper | media-library | 30_Resources/Electrical-Engineering/Papers/ |
Title.md |
| Project | project-builder | 10_Projects/ |
Project Name.md |
| Daily | daily-journal | 50_Journal/YYYY/ |
YYYY-MM-DD.md |
| MOC | moc-manager | (varies) | _name MOC.md |
Integration
This skill coordinates with:
- obsidian-format: Formatting rules (frontmatter, tags, links, dates) - always follow
- daily-journal: Receives detected entities, returns created notes
- people-manager: Delegates person creation
- media-library: Delegates book/movie/music creation
- project-builder: Delegates project creation
- moc-manager: Updates MOCs after creation
Example Session
User: create note for Sarah
Claude: 搜索中... 未找到 "Sarah" 相关笔记。
Sarah 是什么类型?
1. 人物 (Person)
2. 其他
User: 1
Claude: 好的,创建人物笔记。
几个问题:
- 关系?(朋友/同事/家人)
- 在哪?(城市)
User: 朋友,Sydney
Claude: ✅ 已创建 30_Resources/People/@Sarah.md
- 已添加到 [[_300 people MOC]]
- 今天的日志已更新链接
Verify after writing
After creating a note, confirm it landed correctly instead of assuming:
- Re-read the created file. Frontmatter tags must be block-style (
tags:then- person), not inline[a, b], and the type-defining tag must be present. - The note must sit in the folder its type implies, with the naming convention applied (
@Name.mdfor people,YYYY-MM-DD.mdfor dailies). - If you added
[[wikilinks]](e.g. to a MOC or today's journal), runpython "80_Code/scripts/generate-link-index.py" --brokenand fix any link you introduced.
Report what you created with its path. If any check fails, fix it before reporting done.