URL: https://mkdocs.justinsforge.com/memory/general/reference_bots_dashboard/
Bots Dashboard (bots.justinsforge.com)¶
Live observability + control surface for the forge automation layer. Built 2026-07-14; plan at bots-dashboard-2026-07-14.
Pieces¶
| Piece | Path |
|---|---|
| Backend (Flask, 127.0.0.1:8110) | scripts/forge_bots_dashboard.py |
| Frontend (single file, inline CSS/JS) | scripts/forge_bots_dashboard.html |
| Unit | forge-bots-dashboard.service (repo copy infra/systemd/) |
| Tool override hook | _filter_tools / _filter_handlers in scripts/forge_telegram_brain.py |
| Override state | data/bot_tool_overrides.json (gitignored runtime state) |
Surfaces¶
- Bots view: card per bot (capture, coordinator, general-purpose, remote-bridge, notify-bot): systemd state + restarts, today's calls / median latency / fails from the quota JSONL, last action from the persona context JSONL, last log ERROR. Platform strip: brain-server
/health, watchdog last line, canary last result. Card click opens a side peek with the activity feed and the tool catalog. - Tool toggles: capture / coordinator / general personas only. Toggling POSTs
/api/tools/toggle, which atomically writesdata/bot_tool_overrides.json({"<persona>": {"disabled": [...]}}). The brain rereads it (mtime-cached) on every call, so a toggle takes effect on the bot's next message, no restart. Fail-open: missing or corrupt file means all tools enabled (logged at ERROR). remote-bridge (prompt-embedded spawn/kill/propose_kill/reply) and notify-bot (slash commands, parsed live from@cmddecorators) display read-only. - Automations view: every forge-* systemd service with state, timer last/next run, failed units flagged and sorted first; unresolved monitor alerts strip from
data/forge-monitor-state.json.
API¶
GET /api/fleet, GET /api/bot/<id>/feed?limit=N, GET /api/tools, POST /api/tools/toggle {persona, tool, enabled}, GET /api/automations, GET /api/alerts. All return {ok, ...}.
Access¶
Cloudflare: DNS CNAME + VR Alliance tunnel ingress bots.justinsforge.com -> http://127.0.0.1:8110; Access app "bots" (id 80d65baa-95b0-4fef-8874-e60fc84b78e4) with the forge-email-allowlist policy, parity with the other dashboards.
Gotchas¶
- The coordinator's proactive heartbeats record quota under invoker
heartbeat_random, notforge_telegram_brain[coordinator]; the dashboard attributes both to the coordinator card. - The bridge context log is
{ts, user, decision, executed}rather than role-tagged messages; the backend normalizes it. - Health checks reuse the bots-health conventions: watchdog
logs/bot-watchdog.log, canarylogs/canary*.log.
[Claude Code, bots dashboard build 2026-07-14]