| name | audit-para |
| description | Read-only PARA classification audit for the Obsidian vault, followed by an optional explicit-fix flow. Use when the user asks to audit PARA, check whether notes are in the right place, find projects missing outcomes/deadlines, or runs /audit-para. |
| user-invocable | true |
Audit PARA
Hybrid workflow: Phase 1 is a read-only audit pass that produces a severity-grouped report. Phase 2
is an interactive fix flow โ nothing writes without explicit approval per AGENTS.md.
Scope this skill owns: PARA classification correctness only. Hard signals: projects without
outcome/deadline, done-but-not-archived, stalled >30 days, past due-date still Active, areas with
deadlines, resources with project tag or deadline, archives modified in last 14 days.
Scope this skill does NOT cover (delegate):
- Broken links, orphans, tag consistency โ
maintain skill
- Behavioral drift, avoidance โ
spot-drift skill
- Inbox categorization โ
process-inbox skill
Obsidian Access
Use Obsidian CLI via Bash. On failure: "Obsidian CLI isn't working โ update Obsidian with CLI
enabled."
Phase 1 โ Audit Pass (READ-ONLY)
Step 1 โ Vault rules
obsidian read path="AGENTS.md"
Step 2 โ Inventory all buckets (run in parallel)
obsidian files folder="1 - Projects/" format=json
obsidian files folder="2 - Areas/" format=json
obsidian files folder="3 - Resources/" format=json
obsidian files folder="4 - Archives/" format=json
For each Project file, pull frontmatter + body to run hard checks. Cap deep reads at the active
project count โ Areas/Resources/Archives can be inventoried by frontmatter alone unless flagged.
obsidian property:read path="1 - Projects/<file>.md" name="status"
obsidian property:read path="1 - Projects/<file>.md" name="due-date"
obsidian property:read path="1 - Projects/<file>.md" name="tags"
obsidian read path="1 - Projects/<file>.md"
Check Matrix (hard signals only)
| Folder | Check | Severity |
|---|
| Projects | due-date empty or missing | ๐ด critical |
| Projects | ## ๐ฏ Objective section body empty | ๐ด critical |
| Projects | status contains "Done" or "Complete" | ๐ด critical (archive) |
| Projects | due-date < today AND status Active | ๐ด critical (overdue) |
| Projects | Updated: marker >30 days AND retro empty | ๐ก stalled |
| Areas | due-date is set | ๐ด critical (areas don't have deadlines) |
| Areas | tagged project in frontmatter | ๐ด critical |
| Resources | due-date set OR tagged project | ๐ด critical (wrong bucket) |
| Archives | file modified time < 14 days ago | ๐ก stalled (reactivated?) |
Updated: marker: parse from body under ## ๐ Current Status\n_Updated: YYYY-MM-DD_. Use the
template marker, not filesystem mtime โ mtime gets touched by metadata changes.
Step 3 โ Report
PARA Audit โ YYYY-MM-DD
๐ด Critical (classification violations)
Projects/
- "<name>": missing due-date frontmatter
- "<name>": status โ
Done but still in 1 - Projects/
- "<name>": due-date 2026-01-15 is past, status ๐ข Active
Areas/
- "<name>": has due-date โ should be a Project
๐ก Stalled (needs review)
- "<name>": Updated 2026-04-01 (43 days), no retrospective
๐ข Healthy
- <count> Projects pass all checks
- <count> Areas pass all checks
Total: X critical, Y stalled. Want to fix the criticals now?
Phase 2 โ Batch Fix Flow (INTERACTIVE)
If 0 critical: stop with "PARA classification healthy."
If >0 critical, use AskUserQuestion:
question: 'Fix the N critical findings now?'
options:
- label: 'Yes โ walk through them'
description: 'One at a time. Propose action, ask for approval per item.'
- label: 'Fix only the archivable ones'
description: "Target 'done but not archived' only (safest batch)."
- label: "Skip โ I'll handle later"
description: 'Report stays; return via /audit-para.'
Per-Finding Action Proposals
For each critical finding, propose a specific action:
| Finding | Proposed action | Route to |
|---|
| Project missing outcome/deadline | Add fields or convert to Area | project skill (UPDATE mode) |
| Project โ
Done, not archived | Move to 4 - Archives/Projects - YYYY/<name>.md, prompt retro | Direct move + retro prompt |
| Project past due-date, Active | Extend / mark done / archive / convert to Area | AskUserQuestion โ branch |
| Area with due-date | Convert to Project or remove due-date | para-organizer agent + file move |
Resource with project tag or due-date | Re-categorize | para-organizer agent |
| Archive modified recently | Confirm: intentional edit or reactivate? | AskUserQuestion โ file move |
Per item: present proposal โ AskUserQuestion {Apply / Skip / Modify} โ apply only on explicit
approve.
Retrospective Gate (for archive moves)
Before any Project โ Archives move, check if ## ๐ Retrospective is empty. If empty:
question: "Fill the retrospective before archiving '<name>'?"
options:
- label: 'Yes โ quick 3-question prompt'
description: "What went well, what didn't, what to carry forward. ~3 min."
- label: 'Skip โ archive as-is'
description: 'OK, but you lose the durable artifact.'
If yes: ask 3 questions via AskUserQuestion, then write the retrospective. The CLI has no patch
โ append the section with obsidian append, or if it must target a specific heading, ask the user
(MCP obsidian_patch_content or recreate via read + create ... overwrite). Then move with
obsidian move path="..." to="...".
Gotchas
- Run weekly, not daily โ daily noise dulls the signal.
- Never auto-fix. Phase 2 batching is not silent batch writes.
- Don't overlap with
maintain skill โ structural issues (broken links, missing sections) belong
there.
- Avoid deep content reads for Areas/Resources โ frontmatter checks are fast; full reads at scale
are slow.
- If a user disagrees with a finding, respect it. PARA is a tool, not a law. Offer to add an
exception note in the file or skip the finding for this run.
References
| Priority | Load when | Reference |
|---|
| Optional | Need PARA theory, category edge cases, migration patterns, or troubleshooting beyond the hard-signal audit matrix | references/para-deep-dive.md |