AIOS Deep Audit — gaps, efficiency & cost
Multi-agent sweep · 6 lenses · 222 live checks on Mac + VM + APIs · builds on the scripted 2026-07-17 audit
100/100
CHECKLIST (truth-adj.)
67
FINDINGS
15
HIGH-IMPACT
48
VERIFIED HEALTHY
TL;DR
The Four C's checklist has topped out — scored honestly it's 100/100, so it no longer measures anything. (Friday's scripted 90/100 was wrong in both directions: its "Google OAuth" gap is a stale signal — Google is healthy on all 3 accounts — and its "audit not scheduled" gap is a false negative about the very cron that produced it.) Underneath the perfect checklist the deep sweep found 67 real items: un-rotated leaked keys, a compact-recovery hook that silently drops 61% of the rule index, a cron failing every 5 minutes for 12 days, heavy MCP/config sprawl burning cost per session, and a documentation layer that keeps lying to agents at boot.
Verification status: 4 findings adversarially CONFIRMED (✅), 0 refuted, before the monthly Claude spend limit was hit mid-run and killed the remaining 43 verifier agents. Unmarked findings cite the sweep agents' own live command output but were not independently re-verified. The spend-limit event is itself logged as a cost finding.
Top gaps by leverage
HIGH · RISK4 leaked keys still un-rotated, 6 days after being flagged. Incl. a Supabase service_role key that bypasses RLS, plus Gemini / OpenAI / Firecrawl keys — all still marked "rotate" in a registry updated today.
Fix: execute the 2026-07-12 leak decision doc; Hamisada service_role first.
HIGH · GAPPostCompact hook truncates MEMORY.md at 8,000 of 20,489 chars. After every context compact, ~61% of the boot rule index — metered-tool gate, mockup rule, local-time rule — silently disappears from the running session.
Fix: hard-rules-first ordering in MEMORY.md, or inject a curated hard-rules subset instead of a truncated dump.
HIGH · GAPexpense_filer cron has failed every 5 minutes for ~12 days, silently. Wrong python (system vs venv), outside the AIOS-MANAGED block, so no monitor check sees it.
Fix: venv path, move into managed block, add cron-failure detection to monitor.py.
HIGH · RISKPlaintext secrets in Mac config files + TLS verification disabled. Supabase access token ×4, postgres pooler password in a process arg, n8n JWTs;
NODE_TLS_REJECT_UNAUTHORIZED=0 on 3 DB-facing MCP servers.Fix: env-var references, rotate exposed values, remove the TLS bypass.
HIGH · COSTMCP sprawl: ~60 resident node processes, duplicates, and an entire dead config block. docker-engine loads into every session with no Docker daemon; n8n registered twice against the same instance; supabase-monesys and context-mode doubled; the 8-server
settings.json block yields zero tools (wrong file — Claude Code reads ~/.claude.json); 18 dead permission allow-list entries.Fix: consolidate into ~/.claude.json / project .mcp.json; delete duplicates, dead servers, dead permissions.
HIGH · GAPOpus 4.8 transition stalled 11 days — and the boot memory now lies about it. The T2 smoke-test packet sat undelivered Jul 6→17;
feedback_opus48_operating_mode.md says "team runs on Opus 4.8" while the pin is back on Fable (2× Opus pricing, every session); ANTHROPIC_API_KEY absent, blocking the documented API-escalation path.Fix: run T2 on a real Opus session or rewrite the memory to the actual hybrid mode; decide the cost-default consciously.
HIGH · RISKGPI repo: 411 uncommitted files (state_sweep's single critical) — sales-app briefs and dated docs living outside version control. HIGH · GAPGOMO's packet drain isn't running — a handoff sat undelivered 5 days while GOMO shipped daily.
Fix: GOMO triage packet; verify GOMO boots via session_start.py --agent gomo.
✅ CONFIRMEDMED · RISKOrg-admin GitHub PAT still plaintext on the VM, unchanged since it was queued for replacement on 2026-06-10; residual copies in ~/.claude.json and Antigravity history.
Fix: fine-grained token swap + scrub — one /token-triage pass.
✅ CONFIRMED ×2MED · STALEThe audit instrument itself is broken in 3 places: checks a legacy Google token path (false-negative on VM, false-positive on Mac against a revoked token file ✅), can't see its own cron (flags itself "not scheduled" every week ✅), and counts 11 never-called webhook workflows in "17 active n8n workflows".
Fix: probe via google_auth.get_creds(), read the aios crontab, count only recently-successful workflows.
Efficiency / cost sheet
| Item | Cost today | Fix |
|---|---|---|
| Boot reads (CLAUDE.md + MEMORY.md + SKILLS.md + persona) | ~18,300 tokens burned every session before any work | 3KB auto-generated SKILLS digest at boot; detail on demand |
| ✅ gal-signup hourly WhatsApp cron (event ended Jul 16) | 24 pointless sends/day + 2 one-shots armed to refire 2027 | delete 3 crontab lines |
| root sync_routine cron | fails 100% daily (Mac path hardcoded); duplicates auto_sync | delete |
| Vercel: 7 of 17 projects stale 33–76 days (incl. duplicate pair) | clutter + quota risk | delete stale, keep source in git |
| Firebase: 12 projects vs ~3 active (duplicate Beertza pair) | legacy sprawl | archive/delete after Blaze-billing check |
| Reshima "paused": 3 MCP entries (one WRITE-mode), VM cloudflared, broken-active n8n workflow (CRIT since Jul 5, 0 lifetime successes) | every session + monitor noise | decommission or truly pause |
| ZenRows: 100% of GPI sites on premium_proxy, 2 stack js_render+antibot | max multiplier (documented as needed) | quarterly downgrade probe |
| 6 skills with zero uses in ~20k log lines; Monesys deploy+QA still manual after 5+ repeats | dead weight / repeated toil | retire-or-fix pass; build monesys-deploy skill |
| Model default: Fable 5 for every session (2× Opus price); monthly spend limit hit mid-audit | premium tier on routine work; multi-agent runs now budget-bound | conscious Fable-vs-Opus default; add ANTHROPIC_API_KEY for metered escalation |
Docs lying to agents at boot (stale-doc cluster)
- McLead persona: 4 of 5 "Known gaps" already fixed (safe_create exists, db_query works, Drive scopes OK, Mac state published) — McLead boots believing capabilities are missing that work.
- SKILLS.md: stale "broken" claim on db_query · 2 real GPI skills unregistered · duplicate copies in ~/.claude/commands/ double every picker entry · registry contradicts actual plugin enablement (4 of 6 disabled).
- SYNC_MAP.md: points at CLAUDE.md sections that no longer exist; personas + Architect never added.
- connections.md: Reshima row says Active and paused · GitHub row overstates exposure · 3 pending rows untouched 11 weeks · 5 credential families in .env with no registry row and no consumers.
- Ledger: 10 threads 25–77 days stale · 2 done-items still open · 3 Tom-owned blockers 32–35 days past due · operator_inbox item aged 72 days.
- Wiki: 69 days since last ingestion; 4 transcripts waiting, incl. a 65KB Jul-8 discovery call (revenue-relevant).
What's verifiably healthy (48 signals — highlights)
- Briefs delivered 6/6 days (AM + EOD); weekly audit cron 3-for-3 Fridays
- monitor.py green every 15 min; weekly self-test 7/7
- Google OAuth healthy on all 3 accounts, auto-refresh + daily health cron
- n8n, Evolution, Ops DB, both Neon DBs, Vercel CLI — all live
- Elestio VM right-sized: load 0.13, 36% disk, 2.4GB free
- Session-log rotation working; archive committed daily
- MEMORY.md index complete both directions (84 files, 0 orphans)
- publish_mac_state pipeline end-to-end OK; no duplicate crons
- High-traffic skills earn their keep: compact-sync 48×, onboard 23×, morning-brief 21×
- Neon: 3 projects, all with recent compute — no sprawl
Next 3 actions
- Security pass (same day): rotate 4 leaked keys + exposed Supabase/pooler secrets, remove TLS bypass, GitHub fine-grained swap + residual scrub.
- Cron + MCP hygiene pass (~30 min, mostly deletions): fix expense_filer, delete gal-signup ×3 + root sync_routine, deactivate/fix the Reshima workflow, consolidate MCP configs, prune duplicates + dead entries.
- Truth pass: fix audit.py's 3 stale signals; refresh McLead known-gaps, SKILLS.md, SYNC_MAP, connections.md rows, ledger; decide Opus-vs-Fable default and close the transition (T2 or rewrite).