Skip to main content
AI/MLalivecontext

alive:system-cleanup

The world feels messy. Stale tasks, orphan folders, v2 remnants, unsaved sessions — entropy is accumulating and needs to be addressed before it compounds. Scans across all walnuts, then surfaces issues one at a time.

Stars
101
Source
alivecontext/alive
Updated
2026-05-11
Slug
alivecontext--alive--system-cleanup
View on GitHubRaw SKILL.md

// install — copy + paste into any project

mkdir -p .claude/skills && curl -fsSL https://raw.githubusercontent.com/alivecontext/alive/HEAD/plugins/alive/skills/system-cleanup/SKILL.md -o .claude/skills/system-cleanup.md

Drops the SKILL.md into .claude/skills/system-cleanup.md. Works with Claude Code, Cursor, and any agent that loads SKILL.md files from .claude/skills/.

Tidy

System maintenance. Root health first, then one walnut at a time. Surfaces issues with recommended fixes — the human picks.

Not a dashboard (that's world). Not a search (that's find). Not session history (that's alive:session-history). Pure maintenance.


v3 Architecture Reference

Walnut structure is flat under _kernel/:

walnut-name/
  _kernel/
    key.md
    log.md
    insights.md
    tasks.json
    now.json
    completed.json
  bundle-a/
    context.manifest.yaml
    raw/
  bundle-b/
    context.manifest.yaml

There is NO _kernel/_generated/ subdirectory. There is NO bundles/ container directory. Bundles sit as direct children of the walnut root alongside _kernel/.

Task operations go through tasks.py, never by reading/writing task files directly:

  • tasks.py list --walnut {path} — all active tasks as JSON
  • tasks.py list --walnut {path} --status active — filter by status
  • tasks.py summary --walnut {path} — structured summary with counts

Projection rebuilds go through project.py:

  • project.py --walnut {path} — rebuilds _kernel/now.json

Three-Phase Flow

Phase 1: Root Audit (system-level, 7 checks — parallel subagents)
    |
Phase 2: Walnut Summary (single subagent scans frontmatter, human picks)
    |
Phase 3: Deep Audit (one walnut, 12 checks — parallel subagents)

Subagent Strategy (non-negotiable)

Tidy is read-heavy. Every phase uses subagents to keep the main context clean.

Discovery subagents MUST use subagent_type: "Explore" — Explore agents have direct file read access without needing Bash. Use Explore for all Phase 1, Phase 2, and Phase 3 discovery checks.

Fix-execution subagents MUST use subagent_type: "general-purpose" — only general-purpose agents have Write/Edit access. Dispatch one general-purpose agent per approved fix.

  • Phase 1: Dispatch all 7 root checks as parallel subagents. Wait for all. Present results together — one line per passing check, expand on failures only.
  • Phase 2: Single subagent reads all walnut frontmatter, returns the health table.
  • Phase 3: Dispatch all 12 checks as parallel subagents (one check per subagent). Wait for all. Present results together — passing checks collapsed, failures expanded one at a time.

Each subagent gets: the subagent brief (read $ALIVE_PLUGIN_ROOT/templates/subagent-brief.md once, prepend to every agent prompt), the check description, what to scan, what constitutes a pass/fail, and instructions to return a structured result (pass/fail + details if fail). Without the brief, subagents will not understand walnut/bundle structure, tasks.py, or v3 conventions.

Never read walnut files in the main context. All file reading happens inside subagents. The main context only sees results.


Presentation Rules

  • Passing checks: Collapse to one line. ✓ 3a. now.json zero-context — pass. No details.
  • Failing checks: Expand with bordered block, recommended fix, and options. One at a time.
  • After presenting all results: Walk through failures one at a time for the human to resolve or skip.

Phase 1 — Root Audit

Dispatch 7 subagents in parallel. Each checks one thing across the whole world.

1a. ALIVE Structure

Verify all 5 ALIVE folders exist at the world root (01_Archive/ through 05_Experiments/).

Pass: all 5 exist. Fail: any missing.

1b. Inputs Buffer

Scan 03_Inbox/ for items older than 48 hours. Unrouted inputs may contain decisions or context affecting active walnuts.

Pass: empty or nothing older than 48h. Fail: items found.

╭─ 🐿️ tidy — unrouted inputs
│  03_Inbox/ has 3 items older than 48 hours:
│   - vendor-brochure.pdf (3 days)
│   - meeting-notes-feb20.md (4 days)
│
│  ▸ route via alive:capture-context / skip
╰─

1c. Cross-Walnut Links

Scan ALL walnuts' _kernel/key.md frontmatter (links: and parent: fields) AND body text for [[wikilinks]]. Check for:

  • Broken wikilinks — links pointing to walnut names that don't exist as folders
  • Orphan parentsparent: pointing to a non-existent walnut
  • Undeclared connections[[wikilinks]] used in body text or log entries but NOT in the frontmatter links: field. These are invisible to alive:search-world traversal.
  • Structureless folders — folders in ALIVE domains (02-05) that have no _kernel/ but look like they should be walnuts

1d. Walnut Structural Integrity

Quick scan that every walnut has the full v3 flat _kernel/ skeleton:

  • 3 narrative files: _kernel/key.md, _kernel/log.md, _kernel/insights.md
  • 2 data files: _kernel/tasks.json, _kernel/now.json
  • 1 archive file: _kernel/completed.json

There is NO _kernel/_generated/ subdirectory expected. There is NO bundles/ container directory expected. If either is found, that is a separate check (see 1d does not flag these — checks 3k and 3l handle v2 remnant detection during deep audit).

Pass: all walnuts have all 6 files in flat _kernel/. Fail: list what's missing where.

1e. Unsaved Squirrel Entries

Scan .alive/_squirrels/ (world-level) for YAML files where saves: 0 (never saved). Flag entries that have stash items — those contain unrouted decisions/tasks. For entries with saves: 0 and empty stash, check transcript file size to distinguish "opened and closed" from "real work, never saved."

Separate entries with stash (need review) from empty shells (safe to clear).

╭─ 🐿️ tidy — unsaved sessions
│  3 sessions with unrouted stash:
│   - stellarforge / squirrel:67b1e464 — 4 stash items
│   - glass-cathedral / squirrel:45dcf404 — 6 stash items
│  13 empty shells (no walnut, no stash) — safe to clear.
│
│  ▸ review stellarforge stash / review glass-cathedral stash / clear empty shells / skip
╰─

1f. Orphan Files at World Root

Flag anything at the world root that isn't an ALIVE folder (01_Archive/ through 05_Experiments/), .alive/, .claude/, or dotfiles. Nothing should live loose at root.

1g. Index Staleness

Check if .alive/_index.yaml exists and when it was last generated. If it doesn't exist or is older than 7 days, offer to regenerate by running generate-index.py.

Pass: index exists and is recent. Fail: missing or stale — offer to regenerate.

Phase 1 Results

Present all 7 results together. Passing checks get one line. Failures expand.

╭─ 🐿️ root audit — 7 checks
│
│  ✓ 1a. ALIVE structure — intact
│  ✓ 1b. Inputs buffer — clean
│  ⚠ 1c. Cross-walnut links — 2 undeclared connections
│  ✓ 1d. Walnut integrity — all complete
│  ⚠ 1e. Unsaved entries — 3 with stash, 13 empty
│  ⚠ 1f. Orphan files — 2 at root
│  ✓ 1g. Index — current
│
│  3 issues to resolve.
╰─

Then ask which to fix:

╭─ 🐿️ root audit — which to fix?
│
│  1. 2 undeclared cross-walnut connections
│  2. 3 unsaved sessions with stash (11 items total)
│  3. 2 orphan files at world root
│
│  ▸ which ones? (numbers, "all", or "skip")
╰─

For each the human picks, propose the specific fix:

╭─ 🐿️ proposed fixes
│
│  1. Add [[ryn-okata]], [[jax-stellara]] to stellarforge key.md links:
│  3. Move AGENTS.md → glass-cathedral/raw/,
│     delete disaster-recovery-extraction.md
│
│  ▸ go / change something / skip
╰─

On "go": dispatch parallel general-purpose subagents to execute — one per fix. Each subagent reads the file, makes the edit, returns confirmation. Main context does not touch files.

╭─ 🐿️ root audit complete
│  7 checks. 3 issues, 2 fixed, 1 skipped.
│  ▸ continue to walnut audit / done
╰─

Phase 2 — Walnut Summary

Single subagent scans all walnuts. For each walnut, read ONLY _kernel/now.json (v3 flat path) and _kernel/key.md frontmatter (rhythm, type). Frontmatter only. Do not read full files.

Return a health table. The main context presents it:

╭─ 🐿️ walnut health summary
│
│   #  Walnut               Type         Health    Updated         Rhythm
│   1. glass-cathedral             experiment   active    2 hours ago     weekly
│   2. stellarforge              venture      active    2 days ago      weekly
│   3. nova-station         venture      quiet     12 days ago     weekly    ⚠
│   4. glass-cathedral      experiment   waiting   34 days ago     monthly   ⚠
│
│  Which walnut to audit? (number, or "done" to finish)
╰─

Health thresholds (from rhythm):

Rhythm Quiet at Waiting at
daily 2 days 4+ days
weekly 2 weeks 4+ weeks
fortnightly 3 weeks 6+ weeks
monthly 6 weeks 3+ months

Post-migration note: If many walnuts show today's date with "active" health, the data may reflect migration timestamps rather than genuine recent work. Flag this to the human if detected (e.g., 5+ walnuts all updated on the same day).


Phase 3 — Deep Audit (single walnut)

Dispatch 12 subagents in parallel — one per check. Each subagent reads only the files it needs from the walnut's _kernel/ and its bundle directories. Do not read the brief pack in the main context.

The main context receives pass/fail results from all 12 subagents, presents them together, then walks through failures one at a time.

3a. Malformed Files (runs first conceptually — other checks depend on frontmatter)

Scan ALL .md files in _kernel/ and in bundle directories (directories at the walnut root that contain context.manifest.yaml). Check each .md file starts with --- followed by valid YAML and a closing ---.

Pass: all files have frontmatter. Fail: list files without it.

Fix guidance: When the human picks "add frontmatter now", read the file body to determine:

  • System file → use the schema from conventions (type-specific required fields)
  • Bundle manifest → add: type, description, date, squirrel, tags + type-specific fields

3b. Walnut Skeleton

Check that all 6 v3 kernel files exist in the flat _kernel/ directory:

  • _kernel/key.md
  • _kernel/log.md
  • _kernel/insights.md
  • _kernel/tasks.json
  • _kernel/now.json
  • _kernel/completed.json

Pass: all present. Fail: list what's missing.

If _kernel/now.json is missing, suggest running project.py --walnut {path} to generate it.

3c. key.md Completeness

Read _kernel/key.md frontmatter and body. Check:

  • Required frontmatter fields filled: type, goal, created, rhythm, tags
  • people: populated (especially for ventures — empty people on a venture with collaborators is a gap)
  • links: matches body references — if body text uses [[wikilinks]] not declared in links:, flag them
  • tags: not empty

Pass: all fields filled, links match body. Fail: list gaps.

3d. now.json Zero-Context

Read _kernel/now.json (v3 flat path) and _kernel/log.md (frontmatter + first ~100 lines). Apply the zero-context test: "If a brand new agent loaded this walnut with no prior context, would it have everything it needs to continue the work?"

Fail conditions:

  • Context paragraph is empty or just a template comment
  • Context is one sentence when log shows 3+ recent sessions of substantial work
  • Context references things not in the log (hallucinated or outdated)
  • updated: timestamp is more than 2 weeks old

Fix guidance: When the human picks "rewrite now", suggest running project.py --walnut {path} to regenerate now.json from current sources. If the log itself is stale, note that project.py will produce a stale projection and suggest a manual log entry first.

3e. Urgent task validation

Use tasks.py list --walnut {path} --priority urgent to get urgent tasks. Check:

  • At least one urgent or active task exists, OR the walnut is in a phase that doesn't need open work (e.g. paused, archived, published).
  • No urgent task has been sitting untouched longer than the walnut's rhythm window (flag stale urgent items).

Pass: there is a credible top-of-mind action, or the walnut is legitimately at rest. Fail: nothing urgent, nothing active, and the walnut is not paused or archived.

3f. Log Health

Read _kernel/log.md frontmatter and first ~150 lines. Check:

  • Entries are prepend-ordered (newest at top, dates descending)
  • Recent entries are signed (signed: squirrel:[session_id])
  • entry-count: in frontmatter is roughly accurate (within +/-5 of actual)
  • last-entry: in frontmatter matches the top entry's date

Pass: ordered, signed, counts match. Fail: list specific issues.

3g. Stale Walnut Past Rhythm

Compare _kernel/key.md rhythm against _kernel/now.json updated timestamp using the Phase 2 thresholds.

Pass: within rhythm. Fail: quiet or waiting.

╭─ 🐿️ tidy — stale walnut
│  nova-station has been quiet for 18 days (rhythm: weekly)
│  Last entry: Feb 5 — "locked episode 11 structure"
│
│  ▸ open it / archive it / change rhythm / skip
╰─

3h. Bundles and Manifests

Scan bundle directories (direct children of walnut root that contain context.manifest.yaml). Check:

  • Orphan raw files — files in raw/ subdirectories with no corresponding context.manifest.yaml in the parent bundle
  • Manifest schema — manifests that exist but are missing required fields (type:, description:, date:). A manifest without description: is almost as invisible as no manifest.

Pass: all raw files have manifests, all manifests have required fields. Fail: list gaps.

3i. Stale Bundle Drafts

Check bundle directories for bundles with status: draft in their context.manifest.yaml that are older than 30 days (by date: field or file modification time).

Pass: nothing older than 30 days in draft. Fail: list stale bundles.

╭─ 🐿️ tidy — stale draft
│  submission-draft/ — 39 days in draft status
│  ▸ promote to prototype / archive / delete / skip
╰─

3j. Completed Bundles Needing Cleanup

Scan bundle directories for bundles whose context.manifest.yaml has status: done or status: published. These bundles have completed their lifecycle and may contain working files, draft iterations, or temporary artefacts that can be cleaned up or archived.

Check each done/published bundle for:

  • Temporary or working files (e.g., *-draft-*.md, *.tmp, *.bak)
  • Multiple version files where only the final matters (e.g., proposal-v1.md, proposal-v2.md alongside proposal-v3.md)
  • Large raw files that could be archived

Pass: no cleanup candidates found. Fail: list bundles with cleanup opportunities.

╭─ 🐿️ tidy — completed bundle cleanup
│  shielding-review/ (status: published) has 3 draft iterations
│  ▸ archive drafts / delete drafts / skip
╰─

3k. v2 Remnant Detection

Check for v2 architecture remnants that need migration:

  1. bundles/ container directory — In v3, bundles sit as direct children of the walnut root. A bundles/ directory at the walnut root is a v2 remnant. Suggest moving its contents up one level.
  2. _kernel/_generated/ subdirectory — In v3, now.json lives directly in _kernel/. A _generated/ subdirectory inside _kernel/ is a v2 remnant. Suggest moving now.json up and removing the directory.
  3. tasks.md without tasks.json — Scan the walnut recursively for tasks.md files. If a tasks.md exists in a directory that has no corresponding tasks.json, flag it as a v2 remnant needing migration. The tasks.md format is no longer read by tasks.py.

Pass: no v2 remnants found. Fail: list each remnant with migration instruction.

╭─ 🐿️ tidy — v2 remnants
│  bundles/ container directory found — 4 bundles inside
│  _kernel/_generated/ directory found — contains now.json
│  2 tasks.md files found without tasks.json counterpart
│
│  ▸ migrate all / review individually / skip
╰─

Migration instructions per remnant type:

  • bundles/ — move each child directory up to walnut root, then remove empty bundles/
  • _kernel/_generated/ — move now.json to _kernel/now.json, then remove _generated/
  • tasks.md without tasks.json — parse tasks.md and create corresponding tasks.json using tasks.py add

3l. Orphan Folder Detection

Scan all direct child directories of the walnut root. Flag any directory that:

  • Is NOT _kernel/
  • Is NOT raw/
  • Does NOT contain a context.manifest.yaml

These are orphan folders — they exist in the walnut but have no manifest, so they are invisible to the context system. They may be leftover working directories, unmigrated content, or directories that need a manifest added.

Pass: all non-system child directories have manifests. Fail: list orphan folders.

╭─ 🐿️ tidy — orphan folders
│  3 folders with no context.manifest.yaml:
│   - scratch-notes/
│   - old-research/
│   - meeting-prep/
│
│  ▸ add manifests / archive / delete / skip
╰─

3m. Stale Tasks via tasks.py

Use tasks.py list --walnut {path} --status active to get all active tasks as structured JSON. Each task includes a created date field.

Stale task detection: Filter tasks where created date is more than 14 days ago and status is still active or todo. These tasks may be stuck, forgotten, or no longer relevant.

Also check:

  • Tasks with status: blocked that have no recent log entries mentioning them
  • Tasks with a due date that has passed
╭─ 🐿️ tidy — stale tasks
│  3 tasks older than 14 days with no progress:
│   - t012: "Send post-launch message to Ryn" (created 2026-03-10)
│   - t015: "Review shielding spec" (created 2026-03-05, due: 2026-03-20 — OVERDUE)
│   - t018: "Update API docs" (created 2026-03-01)
│
│  ▸ still relevant / remove / reprioritise / blocked (note why) / skip
╰─

Phase 3 Results

Present all 12 results together. Passing checks collapsed, failures listed.

╭─ 🐿️ stellarforge audit — 12 checks
│
│  ✓ 3a. malformed files       — all 34 .md files have frontmatter
│  ✓ 3b. walnut skeleton       — complete (6/6 kernel files)
│  ⚠ 3c. key.md completeness   — links: [] but body references 4 people
│  ✓ 3d. now.json zero-context — pass
│  ✓ 3e. urgent task           — top urgent task fresh, aligns with phase
│  ✓ 3f. log health            — ordered, signed, counts match
│  ✓ 3g. stale rhythm          — active
│  ✓ 3h. bundles               — all manifests valid
│  ✓ 3i. stale drafts          — none
│  ✓ 3j. completed bundles     — clean
│  ⚠ 3k. v2 remnants           — bundles/ container found, 1 tasks.md without tasks.json
│  ⚠ 3l. orphan folders        — 2 folders without manifests
│  ⚠ 3m. stale tasks           — 3 tasks older than 14 days
│
│  4 issues to resolve.
╰─

Ask which to fix:

╭─ 🐿️ stellarforge — which to fix?
│
│  1. key.md links: [] but body references 4 person walnuts
│  2. bundles/ container + 1 tasks.md needing migration
│  3. 2 orphan folders without manifests
│  4. 3 stale tasks older than 14 days
│
│  ▸ which ones? (numbers, "all", or "skip")
╰─

For each the human picks, propose the specific fix:

╭─ 🐿️ proposed fixes
│
│  1. Add [[ryn-okata]], [[jax-stellara]], [[mira-solaris]],
│     [[orion-vex]] to stellarforge `_kernel/key.md` frontmatter links: field
│  2. Move 4 bundle directories from bundles/ to walnut root,
│     migrate tasks.md in submission-draft/ to tasks.json
│  3. Add context.manifest.yaml to scratch-notes/ and old-research/
│
│  ▸ go / change something / skip
╰─

On "go": dispatch parallel general-purpose subagents to execute — one per fix. Each subagent reads the file, makes the edit, returns confirmation. Main context does not touch files.

╭─ 🐿️ stellarforge — fixes applied
│
│  ✓ `_kernel/key.md` links updated — 4 person walnuts added
│  ✓ bundles/ migrated — 4 directories moved, tasks.md converted
│  ✓ manifests added — 2 orphan folders now have context.manifest.yaml
│  ✗ stale tasks — skipped
│
│  ▸ audit another walnut / done
╰─

If "audit another walnut" — return to Phase 2 summary with updated health flags. If "done" — Final Summary.


Final Summary

╭─ 🐿️ tidy complete
│
│  Root: 7 checks, 3 issues, 2 resolved
│  stellarforge: 12 checks, 4 issues, 3 resolved
│
│  9 resolved, 2 skipped. World is healthy.
╰─

After presenting the final summary, write the current date to .alive/.last_tidy so the session hook can track when tidy was last run:

date -u +"%Y-%m-%d" > "$WORLD_ROOT/.alive/.last_tidy"