⚑ Forge Commander Overhaul

πŸ“… Started Mar 13, 2026 πŸ”„ Updated Mar 13, 2026 β€” Smoke Test Complete πŸ’° $0/month additional cost 🎯 All 4 phases shipped
Phases Done
4 / 4
Smoke Tests
11 / 11
Pending
1
Known Issues
2
1

Context + Persona Rewrite

Expanded system prompt β€” CASCADE, soul, principles now loaded
βœ… DONE
  • βœ…soul.md rewritten β€” 6 cognitive rules (DOMINO FIRST, CASCADE MAP, ASYMMETRIC FLAG, FILTER NOISE, CONTEXT BEFORE SUGGESTING, ALWAYS END WITH NEXT STEP). 200-word response cap.
  • βœ…Context expanded β€” CASCADE.md, SESSION-QUEUE.md, JASON-DEPS.md (open items only), core-principles.md (60 lines), roadmap.md (30 lines) all loaded. Task Board 15β†’30 lines.
  • βœ…task_type fixed β€” heartbeatβ†’chat so ClawdRouter routes conversations to stronger model
  • βœ…forge-commander.service installed β€” bot now has managed systemd restart
Smoke Test (031326)
6 context references in fast-reply.tsβœ… PASS
soul.md, CASCADE.md, SESSION-QUEUE.md, core-principles.md presentβœ… PASS
2

Session Persistence

Supabase-backed history β€” survives bot restarts, 50 messages retained
βœ… DONE
  • βœ…history-supabase.ts β€” replaces in-memory Map with Supabase persistence. In-memory write-through cache keeps reads fast.
  • βœ…history.ts β€” thin re-export (drop-in replacement, zero breaking changes)
  • βœ…bot.ts updated β€” runClaude() async, all addMessage/getMessagesForAPI calls awaited
  • βœ…bot_sessions table β€” Supabase table created with RLS + auto-updated_at trigger
  • βœ…Message limit β€” 20 β†’ 50 messages retained per chat
  • βœ…@supabase/supabase-js β€” installed in commander package
Smoke Test (031326)
bot_sessions table reachable via service keyβœ… PASS
1 row written after first message (history persisting live)βœ… PASS
Bot process running since 17:50 UTCβœ… PASS
3

Smart Notification Router

CRITICAL / HIGH / INFO priority routing with DND (22:00–07:00 CT)
βœ… DONE
  • βœ…smart-notify.sh β€” priority-aware wrapper. CRITICAL=always immediate. HIGH=immediate outside DND, queues during DND. INFO=always batched.
  • βœ…smart-notify-flush.sh β€” delivers digest every 5 min. HIGH messages held during DND, delivered at 07:00.
  • βœ…forge-smart-notify-flush.timer β€” systemd timer installed and active (OnUnitActiveSec=5min)
  • βœ…notify.sh untouched β€” fully backward compatible fallback
Script Before After
ralph.sh β€” UAT approvalnotify_telegram (woke at 3am)CRITICAL βœ“
ralph.sh β€” task done/failnotify_telegram (woke at 3am)HIGH (DND-aware)
ralph.sh β€” progress/drainnotify_telegram (spam)INFO (5-min batch)
reconcile.sh β€” RED statusnotify_telegramHIGH
reconcile.sh β€” GREEN/AMBERnotify_telegram (spam)INFO (batched)
sentinel β€” new CRITICALnotify_telegramCRITICAL
sentinel β€” warningsnotify_telegramHIGH
morning-brief.shnotify_telegramHIGH
Smoke Test (031326)
smart_notify function loads and exports correctlyβœ… PASS
INFO queue β†’ flush β†’ deliver β†’ clear cycle tested end-to-endβœ… PASS
Timer installed (forge-smart-notify-flush.timer)βœ… PASS
4

Voice Unblock

ffmpeg + ElevenLabs TTS/STT β€” infrastructure ready, awaiting live test
⚠️ PENDING LIVE TEST
  • βœ…ffmpeg installed β€” confirmed via apt (7:6.1.1-3ubuntu5). Available to systemd services.
  • βœ…ELEVENLABS_API_KEY β€” present in .env.llm
  • βœ…OPENAI_API_KEY β€” present in .env.llm (Whisper fallback)
  • βœ…Python venv β€” httpx + faster-whisper installed at commander/voice/.venv
  • βœ…transcribe.py β€” STT cascade: ElevenLabs β†’ OpenAI Whisper β†’ local faster-whisper
  • ⚠️Live test pending β€” send a voice message to the bot to verify end-to-end. Should receive text reply + voice reply (Rachel voice).
Smoke Test (031326)
ffmpeg installed (apt confirmed)βœ… PASS
ELEVENLABS_API_KEY in .env.llmβœ… PASS
OPENAI_API_KEY in .env.llmβœ… PASS
Python deps (httpx, faster-whisper)βœ… PASS
End-to-end voice message test⚠️ NOT YET TESTED

⚠️ Known Issues (031326)

πŸ”Έ Competing bot on Windows β€” Multiple node.exe processes running on Windows machine. One is a competing bot instance causing duplicate responses. Fix: BotFather token revoke β†’ update .env on VPS. Added to Task Board (Later).
πŸ”Έ allowlist gap: systemctl is-active blocked β€” privileged-exec allowlist doesn't include read-only systemctl commands (is-active, status). Only affects monitoring visibility β€” no operational impact. Fix: add read patterns to ALLOWED_PATTERNS in privileged-exec.sh.

πŸ“‹ Next Up

P1 Voice live test β€” Send a Telegram voice message. Confirm transcription + text reply + voice reply (Rachel voice). If fails, check bot logs for ffmpeg path issue.
P1 Fix competing Windows bot β€” BotFather revoke token β†’ update .env.system + .env.llm on VPS β†’ restart forge-commander. Eliminates duplicate responses.
P2 Add read-only systemctl to allowlist β€” Add ^systemctl (is-active|status|is-enabled) to ALLOWED_PATTERNS in privileged-exec.sh so health checks can run without queuing.
P3 Dashboard Files page β€” Recent Files β€” Pinned section at top of files page showing last 5–10 files Claude touched. Auto-surfaces any file shared during a session. See Task Board.