Forge Cleanup: Phase 0 Inventory¶
Date: 2026-04-28
Owner: forge-cleanup_Opus47
Mode: Inventory only, no deletions, no moves
Decision bar: each row should let you say "prune", "leave", or "ask more" in 30s
Summary¶
| # | Category | Verdict | Disk impact |
|---|---|---|---|
| 1 | macOS ._* cruft |
Safe prune | ~28 KB, 7 files |
| 2 | __pycache__/ (in tracked code) |
Safe prune | trivial; regenerable |
| 3 | *.bak.* |
Hold ~1 week per your own note | 17 KB, 1 file |
| 4 | .openclaw/ (Greg-era) |
Likely safe prune | 1 file (state json) |
| 5 | node_modules/ checked-out |
Safe prune | 95 MB, 4 trees |
| 6 | Stray top-level data files | Mostly archive | ~33 KB |
| 7 | Greg-era persona md files (root) | Ask, consolidate or leave | ~120 lines total |
| 8 | Greg-era skills/ subtree |
Ask, archive candidate | ~32 MB (mostly venv) |
| 9 | Old agents/ subtree |
Ask, verify still in use | 48 KB |
| 10 | Handoffs | Leave (all referenced) | , |
| 11 | Logs | Add rotation policy | 4.2 MB total |
| 12 | tasks/ + comms/ ephemera | Add retention policy | <1 MB |
| 13 | MEMORY.md drift | 2 broken relative links + 1 orphan | , |
| 14 | Empty dirs | Mostly intentional placeholders | , |
| 15 | Duplicate / shadow content | None significant | , |
Biggest single win: ~95 MB by deleting checked-out node_modules/ (already in .gitignore, all have package.json).
1. macOS ._* cruft + __pycache__ + .DS_Store/Thumbs.db¶
Findings:
- ._* files (7): ./._AGENTS.md, ./system-map/._fleet.md, ./system-map/._architecture.md, ./system-map/._lm-studio-setup.md, ./brands/gus-the-bass/._README.md, ./memory/daily/._2026-03-04.md, ./clients/sip-n-serve/._server.js, note: 3 of them sit inside system-map/ so a delete sweep there is the one place I need explicit go-ahead even on this otherwise no-brainer category.
- __pycache__ in tracked code (5 dirs): dashboard/, scripts/assets/lib/, skills/home-assistant/scripts+api/, infra/context-api/app/ (+ routes/, normalizers/), scripts/integrations/{_lib,telegram,garmin,eight-sleep/pyEight}/. Plus many under .venv/, those are inside ignored dirs and only relevant if we kill the venvs.
- .DS_Store, Thumbs.db: zero.
Verdict: safe Phase 1 prune. Verify against system-map/ carefully (those ._fleet.md etc. are macOS metadata for the real files, not the files themselves, content is intact).
2. Stray top-level files¶
| File | Size | Refs | Recommendation |
|---|---|---|---|
CLAUDE.md.bak.1777298035 |
17 KB | only 2026-04-27 daily log | Hold, your own checkpoint says "kept ~1 week". Earliest prune ~2026-05-04. |
Data Organization Master Plan.txt |
25 KB / 507 lines | 2026-03-05 daily log | Archive (sprint artifact from data-org sprint Mar 5–16). Not referenced by any live tool. |
JustinWiebVR-Projects.csv |
8 KB / 276 lines | 2026-03-18 daily log | Archive (JWVR project intake snapshot, not consumed by anything live). |
smart_router_costs.json |
25 lines | skills/smart-router/scripts/cost_tracker.py |
Ask: Greg-era smart-router. Per MEMORY.md "OpenClaw / Greg FULLY WIPED 2026-03-15". Whole skills/smart-router/ ecosystem. |
smart-router.skill |
34 lines | nowhere | Ask, same Greg-era ecosystem. |
.openclaw/workspace-state.json |
1 file | none | Per MEMORY.md, OpenClaw fully wiped 2026-03-15. .openclaw/ is in .gitignore. Safe to delete the dir; it's a 70-byte bootstrap timestamp from 2026-03-02. |
3. Greg-era persona files at forge root¶
CLAUDE.md is now the single bootstrap. The Greg ecosystem (AGENTS.md, BOOTSTRAP.md, IDENTITY.md, SOUL.md, HEARTBEAT.md, USER.md, TOOLS.md) was Greg's persona scaffold from before the wipe. Per MEMORY.md: "OpenClaw / Greg (FULLY WIPED 2026-03-15)".
| File | Lines | Refs (excl. self) |
|---|---|---|
AGENTS.md |
237 | BOOTSTRAP.md, SOUL.md, HEARTBEAT.md, USER.md, TOOLS.md, .vscode/settings.json, docs/fleet-docs/05-udev-command-center.md, memory/daily/2026-03-02.md |
BOOTSTRAP.md |
55 | IDENTITY.md, AGENTS.md, .vscode/settings.json, fleet doc |
IDENTITY.md |
22 | BOOTSTRAP.md, .vscode/settings.json, fleet doc |
SOUL.md |
46 | BOOTSTRAP.md, AGENTS.md, README.md, fleet docs |
HEARTBEAT.md |
33 | AGENTS.md, .vscode/settings.json, fleet doc |
USER.md |
31 | AGENTS.md, BOOTSTRAP.md, .vscode/settings.json, fleet doc |
TOOLS.md |
40 | AGENTS.md, .vscode/settings.json, fleet doc |
README.md |
48 | AGENTS.md, SOUL.md, brand READMEs |
.vscode/settings.json references them only for file-nesting cosmetics (collapses them under AGENTS.md in the explorer). docs/fleet-docs/05-udev-command-center.md describes them as historical structure. Everything else is internal cross-reference.
Verdict, ask: three reasonable options:
- Archive to memory/_greg-archive/ (preserve history, declutter root, update fleet doc + .vscode/settings.json refs)
- Leave (root looks busy but does no harm; CLAUDE.md takes precedence)
- Update README.md to reflect the post-wipe Forge Platform reality (currently lists only clients/, brands/, personal/, infra/, assets/, no mention of system-map/, agents/, comms/, tasks/, dashboard/, data/, skills/).
4. Greg-era skills/ subtree¶
skills/ (top-level, distinct from .claude/skills/) contains:
- skills/smart-router/ (Mar 3, ~12 KB code): Greg's cost-routing skill
- skills/nova-email/ (Mar 2, ~4 KB): Greg's Nova email skill
- skills/home-assistant/ (Mar 3 + venv), has its own .venv (~32 MB Python deps), SKILL.md, api/server.py, scripts/
- skills/dist/nova-email.skill: Greg's compiled skill artifact
Inbound refs: 2 fleet-docs files + Greg-era memory entries. Nothing live calls these.
/recall and .claude/skills/* replaced this entire pattern. Verdict, ask: archive to memory/_greg-archive/skills/ (and reclaim the 32 MB venv) or leave as-is.
5. agents/ (top-level, distinct from .claude/agents/)¶
| Path | Files | Live? |
|---|---|---|
agents/manager/CLAUDE.md + startup.sh |
2 | Referenced in docs/forge-operations-center.md, docs/fleet-docs/{05,07}-*.md. Not invoked by any live systemd unit, cron, or hook. |
agents/monitors/{business,code,infra,security}-monitor.md + start-all.sh |
5 | Live monitors run via cron (scripts/monitors/{business,infra,security}-check.sh), not these *.md agent definitions. The .md files are 2026-04-13 era prompt templates that pre-dated the cron migration. |
Verdict, ask: the cron-driven scripts/monitors/*.sh is what's actually running. These .md files are doc/prompt artifacts. Either archive or update fleet-docs to point to the cron entries instead.
6. node_modules/ checked out (not tracked, but on disk)¶
| Path | Size | package.json? |
Tracked? |
|---|---|---|---|
brands/gus-the-bass/node_modules |
9.8 MB | yes | no |
brands/wiebelhaus-enterprises/self-hosted-setup/timetrack/node_modules |
19 MB | yes | no |
sites/gizmo/node_modules |
63 MB | yes | no |
clients/sip-n-serve/node_modules |
4.4 MB | yes | no |
| Total | ~95 MB | , | , |
.gitignore already excludes node_modules/. None of these are tracked. All regenerable via npm install. Verdict, safe Phase 1 prune.
7. Handoffs (memory/handoffs/, 23 files)¶
Every handoff has ≥1 inbound reference. cleanup.md has 20 (it's the canonical pre-cleanup brief for forge cleanup work, from Apr 14). The Apr 21 master plans (arch-optimization, decorator-crab, frigate-reolink, jwvr-brand-travel-ops, security-audit, trading-bot-plan, device-energy-storage) are 7 days old and live drivers of work. The Apr 14 setup handoffs (git-setup, monitors-setup, n8n-setup, cleanup) get refs from each other and dailies, historical but linked.
| File | Date | Refs | Status |
|---|---|---|---|
| arch-optimization-2026-04-21 | Apr 21 | 2 | live |
| building-the-brain-life-os-inbox-2026-04-27 | Apr 27 | 6 | active master plan |
| business-inbox-triage-2026-04-27 | Apr 27 | 1 | active |
| chief-director-briefing-2026-04-23 | Apr 23 | 2 | active |
| cleanup | Apr 14 | 20 | meta, references this whole effort |
| decorator-crab-master-plan-2026-04-21 | Apr 21 | 5 | active master plan |
| device-energy-storage-2026-04-21 | Apr 21 | 1 | reference |
| forge-cleanup-2026-04-28 | Apr 28 | , | this effort |
| frigate-reolink-optimization-2026-04-21 | Apr 21 | 4 | reference |
| garmin-fix-2026-04-24 | Apr 24 | 1 | reference |
| git-setup | Apr 14 | 2 | reference |
| jwvr-brand-travel-ops-2026-04-21 | Apr 21 | 1 | reference |
| minecraft-server-2026-04-24 | Apr 24 | 1 | reference |
| mkdocs-build-2026-04-28 | Apr 28 | 4 | active |
| monitors-setup | Apr 14 | 2 | reference |
| n8n-setup | Apr 14 | 5 | reference |
| notion-scaffold-life-os-jwvr-2026-04-28 | Apr 28 | 1 | active |
| security-audit-2026-04-21 | Apr 21 | 3 | reference |
| telegram-3bot-fleet-plan-2026-04-23 | Apr 23 | 1 | reference |
| trading-bot-plan-2026-04-21 | Apr 21 | 2 | reference |
| version-audit-2026-04-27 | Apr 27 | 1 | active (4-wave update plan in flight) |
| web-builder-asset-grabber-2026-04-22 | Apr 22 | 1 | reference |
| worker-builder-playbook-2026-04-23 | Apr 23 | 2 | active playbook |
Verdict, leave. Nothing >30 days, all referenced. Revisit in late May.
8. Logs (4.2 MB total)¶
Active writers:
- monitor-security.log (768 KB, security-check /5min, biggest)
- cron-errors.log (415 KB)
- monitor-infra.log (173 KB, infra-check /10min)
- monitor-business.log (78 KB, business-check */15min)
- dispatcher.log (12 KB), home-base.log (1 KB), inbox-webhook.log (6 KB), monitor-mounts.log (4 KB), telegram-bot.log (267 KB), telegram-inbox.log (36 KB)
- logs/integrations/{context-poller,cron,eight-sleep,garmin,morning-check}.log, all active
Frozen:
- dashboard.log (44 KB, last write Apr 23, service stopped?)
- supervisor.log (41 KB, last write Apr 14)
- search-index.log (0 bytes, last touched Apr 24 03:30, empty cron output)
- 8× worker-*.log in logs/ root, all 2026-04-14 (exactly 14 days old), orphan one-shot worker outputs
Archivable subdir:
- logs/site-screenshots/ (2 PNGs from Apr 22, demo-scaffold)
- logs/workers/ (132 KB, 27 alert-worker logs Apr 21–28, all small), actively written
Proposed rotation policy (Phase 2):
- logrotate.d/forge-monitors: rotate logs/monitor-*.log weekly, keep 8, compress
- logrotate.d/forge-services: rotate dispatcher.log, telegram-*.log, inbox-webhook.log, home-base.log weekly, keep 4, compress
- cron-errors.log: rotate weekly, keep 4
- One-shot worker-*.log in logs/ root: move to logs/workers/_archive/ after 14 days
- logs/integrations/*.log: rotate weekly, keep 4
- Keep logs/workers/ flat for now (dashboard reads it)
9. tasks/ + comms/ ephemera¶
tasks/:
- tasks/active/, 1 file (tg-sonnet-1776973453.json from Apr 23, looks orphaned)
- tasks/pending/, empty
- tasks/completed/, 18 files Apr 21–28
- tasks/failed/, 4 files Apr 23
comms/:
- comms/broadcasts/, empty
- comms/inbox/, 2 active status files (mkdocs, notion-scaffold)
- comms/results/, 32 files, oldest Apr 14 (booktracker / games / draw / maze)
Nothing >30 days. Proposed retention:
- tasks/{completed,failed}/: auto-prune entries older than 30 days (or move to _archive/YYYY-MM/)
- comms/results/: same
- tasks/active/tg-sonnet-1776973453.json, likely stranded, ask before deleting
10. MEMORY.md drift¶
Walked all 32 Tools & Pipelines + External Service Access link targets. All 32 reference/feedback md files exist; all referenced tool paths exist (scripts/dispatcher.sh, scripts/cloudflare/cf.py, scripts/n8n/decrypt-cred.sh, scripts/monitors/mount-watchdog.sh, scripts/checkpoint.sh, scripts/search/{index,query}.py, scripts/hooks/{since-last.sh,auto-context.py}, scripts/gdoc/to-drive.sh, scripts/integrations/{eight-sleep,garmin}/poll.py, scripts/sites/{new-page,preview,screenshot,deploy}.sh, scripts/assets/{grab,search,optimize,catalog}.py, infra/n8n/task-creator.sh, scripts/n8n/call.sh, scripts/notify.sh, infra/mkdocs/mkdocs.yml, infra/context-api/, scripts/home-base-session.sh, scripts/integrations/telegram/push.sh).
Issues:
- 2 broken relative links in MEMORY.md, both use
../forge/memory/handoffs/...which from~/.claude/projects/-home-justinwieb-forge/memory/MEMORY.mdresolves to~/.claude/projects/-home-justinwieb-forge/forge/memory/handoffs/...(does not exist). The real files are at/home/justinwieb/forge/memory/handoffs/. Affected: [Fleet Version Audit 2026-04-27](../forge/memory/handoffs/version-audit-2026-04-27.md)[Building The Brain — Life-OS Inbox](../forge/memory/handoffs/building-the-brain-life-os-inbox-2026-04-27.md)-
Fix: swap to MkDocs URLs per your own feedback rule,
https://markdown.justinsforge.com/memory/handoffs/version-audit-2026-04-27/and.../building-the-brain-life-os-inbox-2026-04-27/. (Per cleanup hard-limits I won't touch MEMORY.md myself, flagging only.) -
Orphan memory file:
~/.claude/projects/-home-justinwieb-forge/memory/workspace-drive.md(2026-03-05, 2 KB), useful Finn workspace-state snapshot from the data-org sprint, but noMEMORY.mdindex entry. Either link it under "Storage Policy" or move intomemory/general/in forge proper. -
No memory files >60 days untouched. Oldest is
workspace-drive.mditself (Mar 5).
11. Empty dirs (excluding .git, venvs, node_modules)¶
comms/broadcasts/, active dir, leavetasks/pending/, active queue, leavebrands/gus-outdoor-co/shopify/, placeholderbrands/gus-outdoor-co/self-hosted-setup/justinkrystal-media/landing/, placeholderinfra/context-api/schemas/, placeholderinfra/context-api/app/normalizers/, placeholder (Decorator Crab roadmap)infra/self-hosted/invoice-ninja/, placeholder (was planned, never built?)data/search/models/.locks/models--qdrant--bge-small-en-v1.5-onnx-q/, fastembed lock dir, runtime artifact
Verdict, leave. All either active or intentional placeholder. Could .gitkeep them if desired.
12. Duplicate / shadow content¶
- 17
README.mdinstances, one per directory, expected CLAUDE.mdexists at root +agents/manager/CLAUDE.md(md5 differ, agents/manager has its own role-specific instructions, not a duplicate)- No suspicious >80% identical files surfaced
Verdict, none.
Hard-limits respected¶
I did not touch system-map/, ~/.forge-secrets/, any .env, MEMORY.md, CLAUDE.md, files referenced by active systemd units (forge-context-api, forge-dispatcher, forge-home-base, forge-inbox-webhook, forge-mkdocs, forge-telegram-bot, forge-telegram-inbox), files referenced by active cron entries (monitors, integrations, search-index, nudge-fire, mount-watchdog, minecraft backup, context-api-poller), or memory/daily/*.md. No deletes, no moves.
Phase 1 ask¶
When you're ready, the categories I'd execute first (highest signal, lowest risk):
1. macOS ._* files (7), safe everywhere, but flagging the 3 inside system-map/ for explicit go-ahead
2. __pycache__/ in tracked dirs (~5 dirs), safe
3. node_modules/ checked out (95 MB, 4 trees), safe, all have package.json
4. .openclaw/, safe per your own MEMORY.md note
Then Phase 2 candidates:
5. Archive Greg-era root persona files + skills/ Greg subtree → memory/_greg-archive/
6. Stranded tasks/active/tg-sonnet-1776973453.json (Apr 23)
7. Stale dashboard.log + supervisor.log + 8× worker-*.log Apr 14, move to _archive/
8. Add logrotate rules per category 8
Then Phase 3:
9. Update root README.md to reflect Forge Platform reality
10. Have you fix the 2 broken MEMORY.md links + decide on workspace-drive.md orphan
11. Decide fate of agents/manager/ + agents/monitors/ (active or doc-only?)
12. Decide fate of CLAUDE.md.bak.1777298035 (~2026-05-04)
Awaiting your category-by-category greenlight.
, [forge-cleanup_Opus47]