Get the FREE Ultimate OpenClaw Setup Guide →

vault-cleanup-auditor

Scanned
npx machina-cli add skill BrianRWagner/ai-marketing-claude-code-skills/vault-cleanup-auditor --openclaw
Files (1)
SKILL.md
6.0 KB

Vault Cleanup Auditor

Runs 4 targeted checks against your Obsidian vault and saves a prioritized audit report to vault-audit/YYYY-MM-DD-audit.md. Takes under 30 seconds. No APIs, no paid services.

Run it monthly or whenever the vault starts feeling messy.


How to Use

Open Claude Code and say:

Run the Vault Cleanup Auditor skill against my vault at /path/to/vault.

Skill Instructions (for Claude Code)

When this skill is invoked, follow these phases exactly.


PHASE 1: INTAKE

Check whether the user has provided:

  • vault_path — absolute path to their Obsidian vault root

If missing, ask:

What's the absolute path to your Obsidian vault? (e.g. /root/obsidian-vault)

Do not proceed until confirmed.


PHASE 2: ANALYZE

Run all 4 checks. Capture raw output from each before writing the report.

Check 1 — Stale drafts (30+ days, unposted):

VAULT="VAULT_PATH_HERE"
echo "=== CHECK 1: STALE DRAFTS ==="
find "$VAULT/content/ready-to-post" -name "*.md" -mtime +30 2>/dev/null | while read f; do
  if grep -q '\*\*Posted:\*\* ❌' "$f" 2>/dev/null; then
    days=$(( ($(date +%s) - $(stat -c %Y "$f")) / 86400 ))
    echo "${days}d|${f##$VAULT/}"
  fi
done
echo "=== END CHECK 1 ==="

Check 2 — Incomplete files (no headings, 5+ lines):

VAULT="VAULT_PATH_HERE"
echo "=== CHECK 2: INCOMPLETE FILES ==="
find "$VAULT" -name "*.md" \
  -not -path "*/.git/*" \
  -not -path "*/.obsidian/*" \
  -not -path "*/.openclaw/*" | while read f; do
  if ! grep -qE '^#{1,6} ' "$f" 2>/dev/null; then
    lines=$(wc -l < "$f")
    if [ "$lines" -gt 5 ]; then
      echo "${lines}lines|${f##$VAULT/}"
    fi
  fi
done
echo "=== END CHECK 2 ==="

Check 3 — Duplicate filenames:

VAULT="VAULT_PATH_HERE"
echo "=== CHECK 3: DUPLICATE FILENAMES ==="
find "$VAULT" -name "*.md" \
  -not -path "*/.git/*" \
  -not -path "*/.obsidian/*" \
  -not -path "*/.openclaw/*" \
  -printf "%f\n" | sort | uniq -d | while read name; do
  echo "DUPE:$name"
  find "$VAULT" -name "$name" \
    -not -path "*/.git/*" \
    -not -path "*/.obsidian/*" | while read f; do
    echo "  PATH:${f##$VAULT/}"
  done
done
echo "=== END CHECK 3 ==="

Check 4 — Empty folders:

VAULT="VAULT_PATH_HERE"
echo "=== CHECK 4: EMPTY FOLDERS ==="
find "$VAULT" -type d -empty \
  -not -path "*/.git/*" \
  -not -path "*/.obsidian/*" \
  -not -path "*/.openclaw/*" | while read d; do
  echo "${d##$VAULT/}/"
done
echo "=== END CHECK 4 ==="

PHASE 3: OUTPUT

3a. Create the report directory and file:

VAULT="VAULT_PATH_HERE"
DATE=$(date +%Y-%m-%d)
mkdir -p "$VAULT/vault-audit"
REPORT="$VAULT/vault-audit/${DATE}-audit.md"
echo "Report path: $REPORT"

3b. Write the report using this exact structure:

# Vault Cleanup Audit — YYYY-MM-DD

Generated: YYYY-MM-DD HH:MM

**Summary:** 🔴 [N] stale | 🟡 [N] incomplete | 🟡 [N] dupes | 🟢 [N] empty

---

## 🔴 Stale Drafts (30+ days, unposted)

- [Nd old] path/to/file.md
[cap at 15 items — add "...and N more" if over]

## 🟡 Incomplete Files (no headings, 5+ lines)

- path/to/file.md (N lines)
[cap at 15]

## 🟡 Duplicate Filenames

- **filename.md**
  - path/one/filename.md
  - path/two/filename.md
[cap at 15 duplicate names]

## 🟢 Empty Folders

- path/to/folder/
[cap at 15]

---

**What to do:**
- 🔴 Stale drafts: post them, delete them, or archive to `content/posted/`
- 🟡 Incomplete files: finish or trash
- 🟡 Duplicates: merge or rename the less important one
- 🟢 Empty folders: safe to delete (or keep if you're about to use them)

3c. Print the summary to terminal:

✅ Audit saved to: vault-audit/YYYY-MM-DD-audit.md

Summary:
🔴 [N] stale drafts
🟡 [N] incomplete files
🟡 [N] duplicate filenames
🟢 [N] empty folders

PHASE 4: SELF-CRITIQUE

Before finalizing, check:

  1. All 4 checks ran — Confirm output exists between each === CHECK N === / === END CHECK N === marker. If a check produced no output, note "0 issues found" in the report — do not skip the section.
  2. Counts are accurate — The summary line counts must match the actual items listed in each section. Re-count if unsure.
  3. Report saved correctly — Confirm the file exists at vault-audit/YYYY-MM-DD-audit.md. If the write failed, report the error and provide the report content inline.
  4. No blank sections — Every section must either list items OR say "No issues found." Never leave a section header with nothing below it.

Fix any failures before delivering the final output.


Example Report

# Vault Cleanup Audit — 2026-03-01

Generated: 2026-03-01 08:14

**Summary:** 🔴 3 stale | 🟡 2 incomplete | 🟡 1 dupe | 🟢 2 empty

---

## 🔴 Stale Drafts (30+ days, unposted)

- [47d old] content/ready-to-post/linkedin/2026-01-12-ai-systems-post.md
- [38d old] content/ready-to-post/twitter/2026-01-21-founder-ops.md
- [31d old] content/ready-to-post/newsletter/2026-01-28-tools-roundup.md

## 🟡 Incomplete Files (no headings, 5+ lines)

- bambf/research/untitled-notes.md (23 lines)
- thinking/random-thoughts.md (11 lines)

## 🟡 Duplicate Filenames

- **README.md**
  - bambf/brand/README.md
  - bambf/tracking/README.md

## 🟢 Empty Folders

- content/queue/rejected/
- bambf/clients/archived/

---

**What to do:**
- 🔴 Stale drafts: post them, delete them, or archive to `content/posted/`
- 🟡 Incomplete files: finish or trash
- 🟡 Duplicates: merge or rename the less important one
- 🟢 Empty folders: safe to delete (or keep if you're about to use them)

Requirements

  • Claude Code with bash tool access
  • Bash + standard Unix tools: find, grep, wc, stat, date, awk
  • Read access to vault directory
  • Write access to vault-audit/ inside the vault (auto-created)
  • No APIs, no paid services, no external dependencies

Source

git clone https://github.com/BrianRWagner/ai-marketing-claude-code-skills/blob/main/vault-cleanup-auditor/SKILL.mdView on GitHub

Overview

Audit your Obsidian vault with Claude Code using four targeted checks: stale drafts (30+ days, unposted), incomplete files (no headings and 5+ lines), duplicate filenames, and empty folders. It saves a dated audit report to vault-audit/YYYY-MM-DD-audit.md and runs in under 30 seconds, with no APIs or paid services.

How This Skill Works

When invoked, the skill follows three phases: Phase 1 intake collects the absolute vault_path; Phase 2 analyzes by running four shell-based checks and capturing their raw outputs; Phase 3 writes a Markdown report to vault-audit/YYYY-MM-DD-audit.md and provides a summary.

When to Use It

  • When the vault feels messy and you want a quick cleanup.
  • During monthly maintenance to keep notes organized.
  • After bulk imports or migrations to catch duplicates and empty folders.
  • Before publishing or sharing notes to ensure quality.
  • When you want an auditable log of vault state for compliance.

Quick Start

  1. Step 1: Open Claude Code and say: Run the Vault Cleanup Auditor skill against my vault at /path/to/vault.
  2. Step 2: The skill runs intake, analysis, and report generation for the four checks.
  3. Step 3: Open the report at vault-audit/YYYY-MM-DD-audit.md to review findings.

Best Practices

  • Provide an absolute vault_path and confirm it before scanning.
  • Run monthly or after big reorganizations.
  • Review the generated report vault-audit/YYYY-MM-DD-audit.md and act on findings.
  • Archive stale drafts by moving them to content/posted or deleting.
  • Store audit results in version control to track changes.

Example Use Cases

  • A vault with many stale drafts older than 60 days flagged for review.
  • Duplicate filenames created after duplicating notes across folders.
  • Empty folders left behind after template removal or cleanup.
  • Incomplete files with no headings and more than 5 lines detected.
  • Migrating notes from another vault and needing a cleanup pass.

Frequently Asked Questions

Add this skill to your agents
Sponsor this space

Reach thousands of developers