Obsidian Vault Curator
Bring structure to a messy Obsidian vault without flattening its history. Start with read-only analysis. Then propose one small, reviewable write slice.
Runtime requirement
This skill declares python3 on PATH as a host requirement.
- The requirement is surfaced in metadata as
requires.bins: ["python3"]. - On macOS, the metadata includes a Homebrew install hint.
- On Linux, install Python 3 with your distro package manager, for example
sudo apt install python3, then verifypython3 --version. - On Windows, install Python from the official Python Install Manager or with
winget install Python.Python.3.14, then open a new terminal and verify thatpython3 --versionworks. If onlypythonworks, add apython3alias or shim onPATHbefore using this skill. - The bundled helper scripts in
scripts/use only the Python standard library. - No extra Python packages are required.
- No exact minor version is currently pinned. The helpers were validated with Python 3.11+ and tested locally on macOS against Python
3.14.4. - Windows support is documented, but the full workflow has not yet been live-validated on Windows.
Core rules
- Default to read-only.
- Never delete notes unless the user explicitly asks.
- Never rewrite more than one write slice at a time. A write slice should stay within 3-10 related notes. Multiple-slice content rewrites in one pass count as mass-rewrite and require explicit user approval.
- Never run parallel write agents.
- Treat findings of possible secrets, credentials, tokens, or live identifiers as hypotheses until the main agent verifies the exact note content.
- Prefer
superseded_byover overwrite. - Preserve historical context.
- Treat
doc_kindandstatusas separate concerns. - Prefer controlled YAML frontmatter over ad-hoc tags for lifecycle state.
- Verify links and metadata after each write slice.
Workflow
- Always read
references/status-schema.mdandreferences/classification-rubric.mdbefore classifying any note, including a single-note task. - If the task touches more than a few notes or spans more than one folder, read
references/workflow.md. - If the user wants dashboards or views, read
references/bases-views.md. - If the target area is too large for one context-bounded pass, read
references/subagents.md. Keep subagents read-only by default. Keep writes in the main agent unless the user has explicitly approved writes from one specific named subagent for this task. - If findings need to be merged across slices or reviewed by a human, read
references/output-format.md. - For larger areas, split the work into context-bounded slices by folder, topic cluster, or review queue instead of loading the whole vault at once.
- Inventory the target area before proposing edits. Use
scripts/inventory_slice.pywhen repeated folder scans would otherwise waste context. - Suggest canonical pages, status changes, supersession links, and the smallest safe write slice. Use
scripts/generate_migration_plan.pywith the JSON output ofscripts/inventory_slice.pywhen the user wants a structured migration slice proposal. - Before structural writes and after every write slice, verify metadata with
scripts/validate_frontmatter.py, verify links withscripts/check_links.py, and reassess whether the chosen canonical pages still make sense.
Output shape
When curating a vault area, return these sections unless the user asks for a different format:
Use this shape for a single-pass curation reply. Use the subagent shape from references/output-format.md when running as a subagent. Use the final main-agent summary shape from references/output-format.md only when merging results from multiple subagent slices.
Current state— what exists now, including ambiguity or conflicts.Classification recommendations— suggestedstatus,doc_kind, and canonical candidates.Risks and contradictions— what could be damaged, misclassified, contradictory, or is still unverified.Next write slice— the smallest safe set of edits.Verification— what to check after changes.
Decision rules
- If a note is still useful but no longer leading, mark it
historicaland point to a successor. - If a note describes a desired future state, mark
status: conceptand choosedoc_kindseparately. - If validity is unclear, mark it
needs-reviewfirst instead of guessing. - If an old note may become useful again, prefer
reactivatableover burying it. - If multiple notes cover the same topic, nominate one canonical page and propose the rest as supporting or historical pages.
- If the vault already has a schema, adapt to it instead of forcing a new one.
- If a subagent flags possible secrets, credentials, tokens, or live identifiers, verify the exact text in the main agent before escalating or editing.
Safe operating mode
Use small, reviewable steps:
- classify before moving or merging
- move before rewriting when structure is the real problem
- create indexes and canonical pages before cleanup
- keep historical pages reachable
- ask before touching attachments,
.obsidian/, or folder restructures that touch more than one folder or more than 10 notes
Built-in helpers (require installed python3)
If python3 is unavailable, the bundled helper scripts cannot run. Continue with the manual workflow and do not pretend a helper script ran.
scripts/inventory_slice.py— scan one vault slice and summarize note counts, missing metadata, status/doc_kind coverage, title duplicates, exact-content duplicate clusters, and high-signal sensitive candidates that still require main-agent verification.scripts/validate_frontmatter.py— verify the controlled frontmatter shape on one slice before or after edits.scripts/generate_migration_plan.py— turn the JSON output ofscripts/inventory_slice.pyinto a small, reviewable migration plan.scripts/check_links.py— inspect wikilinks in one slice and flag unresolved targets before or after moves. Treat results as slice-local unless the checked slice includes every possible target note.
Large-section strategy
When the user wants work on a broader vault area:
- keep one main agent as orchestrator
- split the area into bounded slices
- use read-only subagents for inventory, classification, contradiction checks, and link review
- merge findings in the main agent
- execute one write slice at a time in the main agent
Prefer this over giving one agent the whole vault context at once.
References
references/status-schema.md— controlled fields, values, and examplesreferences/classification-rubric.md— note-by-note classification heuristicsreferences/workflow.md— end-to-end curation and migration flowreferences/bases-views.md— suggested Bases views and review queuesreferences/subagents.md— safe delegation model for larger vault jobsreferences/output-format.md— standard subagent return shape, merge rules, and human-review gates