Skip to content
Back to skills

System Cleanup

ASecurity

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.

  • 130 stars
  • 0 votes
  • 0 copies
  • 1 view
  • Added May 27, 2026
data-aigoshellbashgitapi

Works with

  • api

Security analysis

A100/100

Scanned May 27, 2026

npx -y skills add alivecontext/alive --skill system-cleanup --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of System Cleanup?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for System Cleanup
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/alivecontext-system-cleanup/badge)](https://www.skillsdirectory.com/skills/alivecontext-system-cleanup)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: alive:system-cleanup
description: "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."
user-invocable: true
---

# 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 parents** — `parent:` 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:

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

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.