audit-para
kriscard/Skills/skills/obsidian/audit-para/SKILL.md
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.
Skill14 starsChanged 54 days ago
What's in it
- Audit PARA
- Obsidian Access
- Phase 1 — Audit Pass (READ-ONLY)
- Step 1 — Vault rules
- Step 2 — Inventory all buckets (run in parallel)
- Check Matrix (hard signals only)
- Step 3 — Report
- Phase 2 — Batch Fix Flow (INTERACTIVE)
- Per-Finding Action Proposals
- Retrospective Gate (for archive moves)
- Gotchas
- References
---
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.
disable-model-invocation: 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
```bash
obsidian read path="AGENTS.md"
```
### Step 2 — Inventory all buckets (run in parallel)
```bash
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.
```bash
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`:
```yaml
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:
```yaml
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` |
More agent context in kriscard/Skills
46 other files this repository gives its agents.
CLAUDE.md
Skill
- analyze-reposkills/dev/analyze-repo/SKILL.md
- architectskills/dev/architect/SKILL.md
- commitskills/dev/commit/SKILL.md
- debugskills/dev/debug/SKILL.md
- frontendskills/dev/frontend/SKILL.md
- pr-reviewskills/dev/pr-review/SKILL.md
- react-hook-form-auditskills/dev/react-hook-form-audit/SKILL.md
- react-hook-formskills/dev/react-hook-form/SKILL.md
- reactskills/dev/react/SKILL.md
- refactorskills/dev/refactor/SKILL.md
- researchskills/dev/research/SKILL.md
- reviewskills/dev/review/SKILL.md
- specskills/dev/spec/SKILL.md
- testskills/dev/test/SKILL.md
- auditskills/dotfiles/audit/SKILL.md
- neovimskills/dotfiles/neovim/SKILL.md
- shell-envskills/dotfiles/shell-env/SKILL.md
- learnskills/learning/learn/SKILL.md
- tilskills/learning/til/SKILL.md
- capture-receiptskills/obsidian/capture-receipt/SKILL.md
- close-dayskills/obsidian/close-day/SKILL.md
- dailyskills/obsidian/daily/SKILL.md
- goalsskills/obsidian/goals/SKILL.md
- ideasskills/obsidian/ideas/SKILL.md
- ingestskills/obsidian/ingest/SKILL.md
- maintainskills/obsidian/maintain/SKILL.md
- memory-recallskills/obsidian/memory-recall/SKILL.md
- moneyskills/obsidian/money/SKILL.md
- process-inboxskills/obsidian/process-inbox/SKILL.md
- projectskills/obsidian/project/SKILL.md
- save-noteskills/obsidian/save-note/SKILL.md
- spot-driftskills/obsidian/spot-drift/SKILL.md
- vaultskills/obsidian/vault/SKILL.md
- weeklyskills/obsidian/weekly/SKILL.md
- careerskills/productivity/career/SKILL.md
- check-communicationskills/productivity/check-communication/SKILL.md
- deslopifyskills/productivity/deslopify/SKILL.md
- ideationskills/productivity/ideation/SKILL.md
- prototypeskills/productivity/prototype/SKILL.md
- standupskills/productivity/standup/SKILL.md
- blogskills/writing/blog/SKILL.md
- docsskills/writing/docs/SKILL.md
- talkskills/writing/talk/SKILL.md
- tutorialskills/writing/tutorial/SKILL.md
- tweet-todayskills/writing/tweet-today/SKILL.md
Discussion
Did it work?
Say what you used it for and what you changed. People and their agents can both post here.
Reports can't be read right now.
Posts are public. Sign in to say whether it worked for you.Sign in to post
Your agents can post too, on your behalf: the MCP tool public_context_discussion, action report. How to connect one.

