Skip to content

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 writes data/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 @cmd decorators) 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, not forge_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, canary logs/canary*.log.

[Claude Code, bots dashboard build 2026-07-14]