| name | obsidian-organize |
| description | Transform and organize notes in the Obsidian vault — add frontmatter, detect note types, create relationships |
| activation | ["organize note","transform note","add frontmatter","add properties","categorize note","note type","create MOC","link notes"] |
Obsidian Note Organization
Transform existing notes to follow vault conventions. Add frontmatter, detect types, create relationships.
Workflow
- Assess — Read the note, check file size first (>100KB = sample only)
- Detect type — Tasks/dates = project, concepts = atomic, date-stamped = daily, index = moc
- Derive relationships — Check for existing MOCs, explicit mentions, content similarity
- Search first — Before creating new MOCs, search for existing ones (especially AI/ML topics)
- Add frontmatter — Use targeted edits, never rewrite the file
- Update parent — Add link to the parent MOC (always update both sides)
- Standardize links — Convert to
[[wiki-style]] in body text
Validation Scripts
Run from vault root:
uv run python .claude/skills/obsidian-organize/scripts/validate_frontmatter.py .
uv run python .claude/skills/obsidian-organize/scripts/validate_frontmatter.py . --fix-blanks
uv run python .claude/skills/obsidian-organize/scripts/validate_frontmatter.py . --fix-blanks --apply
uv run python .claude/skills/obsidian-organize/scripts/validate_links.py .
Critical Rules
- Never rewrite content — only add structure and metadata
- Never duplicate title — Obsidian shows filename, don't add matching H1
- Always use targeted edits — especially for MOCs, Home, PARA entry points
- Check file existence before any write operation
- Backup first if you must overwrite anything
Frontmatter Templates
See Templates/ for canonical examples. Quick reference:
type: atomic
created: YYYY-MM-DD
up: "[[Parent MOC]]"
related:
- "[[Related Note]]"
tags:
- concept
type: project
created: YYYY-MM-DD
status: active
up: "[[Projects]]"
due: YYYY-MM-DD
tags:
- project
type: moc
tags:
- moc
- area
Type Detection Heuristics
| Content Pattern | Likely Type |
|---|
| Tasks, deadlines, objectives | project |
| Single concept explained | atomic |
| Date-stamped journal entry | daily |
| Index of links to other notes | moc |
| Quick thought, unstructured | fleeting |
| Book/article/course summary | review or literature |
| External tool, guide, or how-to | resource |
Tag Validation
Before applying tags to any note, cross-reference against the canonical tag list:
- Read
Tag Taxonomy.md for the full canonical list with "NOT" variants
- Use only canonical forms — e.g.
machine-learning not ml, coding not programming, software-engineering not software
- Flag new tags — if a tag doesn't exist in the taxonomy, propose adding it to
Tag Taxonomy.md rather than using it ad-hoc
- 1-3 domain tags max per note — don't over-tag
Relationship Derivation
- Check explicit
[[links]] in body text → candidates for related:
- Search for parent MOC and neighbors — run these in parallel:
qmd vsearch "<note topic>" -c vault -n 5 — finds conceptually related MOCs and neighbors, especially useful when the best up: target isn't obvious from keywords alone (skip if qmd not installed)
Grep for key terms — exhaustive keyword matches to catch all mentions
Combine both: qmd for discovery, grep for completeness.
- Check if note belongs under an existing MOC → set
up:
- Check
.obsidian-assistant-notes.md for vault-specific routing patterns and common mistakes
Breadcrumbs Codeblocks & down: Property
- Don't add explicit
down: when organizing MOCs — Breadcrumbs automatically implies down: from children's up: links
- Explicit
down: is only needed when a parent claims children that lack up: back-links (rare edge case)
When to add a Breadcrumbs codeblock
Add a breadcrumbs tree codeblock (after frontmatter, before content) when:
- The note is a MOC (
type: moc) — always. The moc-note template includes it by default.
- Any non-MOC note has 5+ children pointing
up: to it — add for discoverability.
\`\`\`breadcrumbs
type: tree
dir: down
depth: -2
\`\`\`
When organizing a note, check if it's a MOC missing a codeblock and add one.
Supported Edge Fields
| Field | When to Use | Format |
|---|
up | Always — every note except PARA roots | up: "[[Parent]]" |
down | Rarely — implied from up: by Breadcrumbs | YAML list of quoted links |
related | Peer/lateral connections | YAML list of quoted links |
prev / next | Sequential content | Single quoted link |
source | Attribution (not a Breadcrumbs edge) | Single quoted link or string |
Removed properties (never use): supports, opposes, refines, implements, same