Skip to content

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:

  1. 2 broken relative links in MEMORY.md, both use ../forge/memory/handoffs/... which from ~/.claude/projects/-home-justinwieb-forge/memory/MEMORY.md resolves to ~/.claude/projects/-home-justinwieb-forge/forge/memory/handoffs/... (does not exist). The real files are at /home/justinwieb/forge/memory/handoffs/. Affected:
  2. [Fleet Version Audit 2026-04-27](../forge/memory/handoffs/version-audit-2026-04-27.md)
  3. [Building The Brain — Life-OS Inbox](../forge/memory/handoffs/building-the-brain-life-os-inbox-2026-04-27.md)
  4. 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.)

  5. 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 no MEMORY.md index entry. Either link it under "Storage Policy" or move into memory/general/ in forge proper.

  6. No memory files >60 days untouched. Oldest is workspace-drive.md itself (Mar 5).


11. Empty dirs (excluding .git, venvs, node_modules)

  • comms/broadcasts/, active dir, leave
  • tasks/pending/, active queue, leave
  • brands/gus-outdoor-co/shopify/, placeholder
  • brands/gus-outdoor-co/self-hosted-setup/justinkrystal-media/landing/, placeholder
  • infra/context-api/schemas/, placeholder
  • infra/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.md instances, one per directory, expected
  • CLAUDE.md exists 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]