Mission Control: The Command Center I Built for Managing an Autonomous AI Empire
49 services. 7 agents running 24/7. 54 monitors. One dashboard. Here's how I built the cognitive hub that makes running an autonomous AI ecosystem survivable.

At some point the ecosystem got large enough that I couldn't hold it in my head anymore.
I had a trading bot live on Polymarket. I had a content flywheel generating 50+ pieces a week. I had OpenClaw — a persistent AI agent — running 24/7 on a Mac Mini, spawning coding agents, managing conversations, executing cron jobs on a schedule I'd built up over months. I had blog autopilot, signal community management, Instagram generators, nightly enhancers, encrypted backups, advisory councils, security audits.
At some point I opened a terminal to check on a cron job and realized: I have no idea which of my 49 services are actually running right now. I have no idea what the trading bot's current P&L is. I have no idea how much content is queued. I have no idea if the monitoring system caught last night's issue.
That's when I built Mission Control.
The Problem: Cognitive Overhead at Scale
Running a 49-service ecosystem is a different problem than running 5. With 5 services, you check each one. The latency is manageable. With 49, checking each one costs you the morning. You need a different abstraction layer — not another tool, but a command center. A place where the system explains itself to you, rather than you having to go interrogate each piece.
The goal wasn't more visibility. It was zero-effort situational awareness — the system state should be legible in under 30 seconds, without querying anything.
The mental model I worked from is the bridge of a ship. The captain doesn't go below deck to check the engines. The engines report to the bridge. All navigation, all system status, all crew coordination surfaces to one place. The captain's job is to make decisions, not gather information.
Mission Control is the bridge.
What Mission Control Actually Is
A full-stack FastAPI + React 19 dashboard running on my Mac Mini, accessible locally at localhost:5174 and remotely via Cloudflare tunnel. It has 14 distinct panels, each a dedicated view into one domain of the ecosystem.
The architecture is intentionally boring. FastAPI backend with 12+ routers, bearer token auth, file-based JSON storage for operational data. React frontend with TanStack Query for data fetching, Recharts for visualizations, WebSocket connection for live agent updates. Tailwind CSS with a glass-morphism design language that matches the rest of the brand system.
The interesting part isn't the stack — it's the decisions behind each panel.
Panel 1: Dashboard — The 30-Second Situational Read
The Dashboard is the first thing I see every morning. Its job is to answer four questions before I've had coffee:
┌─────────────────────────────────────────────────────────────┐
│ // MISSION CONTROL — Dashboard │
│ │
│ ACTIVE PROJECTS MRR AGENTS ONLINE CONTENT Q │
│ 12 $18,400 7 43 │
│ │
│ Priority Queue: │
│ [1] Ship InDecision v2.1 model weights update IN PROG │
│ [2] Tesseract Intelligence Phase 2 buildout BACKLOG │
│ [3] Publish X Article: Sovereign CI piece PENDING │
│ │
│ Recent Activity: │
│ ✓ blog-autopilot generated 1 post (9:02 AM) │
│ ✓ polymarket-bot placed 3 bets (7:34 AM) │
│ ✗ morning-digest: execution time > 120s (8:01 AM) │
│ ✓ nightly-enhancer completed 14 enhancements (2:17 AM) │
└─────────────────────────────────────────────────────────────┘
The priority queue pulls from Asana. The activity feed pulls from OpenClaw's event log. The four KPI cards are computed at request time from the operational data files. The whole thing loads in under 200ms because there's no complex aggregation — just file reads and light computation.
Panel 2: Portfolio — The 49-Service Catalog
Every service I run lives in portfolio.json. Mission Control renders it as a filterable catalog across 7 categories.
| Category | Services | Color |
|---|---|---|
| Content | 12 | Blue |
| Trading & Markets | 8 | Gold |
| Tools & Integrations | 7 | Cyan |
| Infrastructure | 7 | Green |
| Security | 6 | Red |
| Communication | 5 | Pink |
| Productivity | 4 | Purple |
Each entry has a full description, architecture notes, entry point, config location, key files, and quick action links. The catalog is the canonical registry of the entire ecosystem. If it's not in portfolio.json, it doesn't exist to Mission Control.
The Portfolio panel solved something specific: I kept forgetting which cron UUID mapped to which service. Now every service entry includes its cron UUID, launchd plist path, and the exact launchctl command to restart it. Discovery to action in 10 seconds.
Panel 3: Sentinel — 54 Monitors, One View
Invictus Sentinel is the monitoring backbone. 54 monitors across 6 check types:
// Sentinel Health Summary
MONITORS: 54 active ● ALERTS: 2 ● WARNINGS: 3 ● OK: 49
Active Incidents:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
INC-0047 SEV-2 morning-digest script timeout
First seen: 08:01 AM · Duration: 1h 23m
Status: INVESTIGATING · Auto-remediation: failed
Post-mortem: AI analysis in progress...
INC-0046 SEV-3 content-stockpile file freshness
First seen: 01:45 AM · Duration: 7h 39m
Status: RESOLVED · MTTR: 22 minutes
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
SLA Compliance (30d):
Response time P50: 4.2 min · P95: 18.7 min
MTTR P50: 21 min · P95: 43 min
Uptime (critical monitors): 96.8%
The Sentinel panel shows the health gauge, active incidents with full timeline, transition history, and AI-generated post-mortems via Gemini Flash. When an incident goes ALERT, it routes to #general-tasks on Discord. When it's resolved, the post-mortem artifact surfaces here.
The insight that made this panel useful: incidents need a state machine, not just an alert. OPEN → INVESTIGATING → RESOLVED. Most monitoring tools give you the alert. Mission Control gives you the lifecycle.
Panel 4: Agents — Live WebSocket Status
Every AI agent and cron job that constitutes the "autonomous empire" has a status entry. The Agents panel connects via WebSocket and refreshes every 10 seconds.
// Agent Status — Live
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Agent Status Last Active Health
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
OpenClaw Gateway ● ONLINE 2 min ago OK
Blog Autopilot ● IDLE 47 min ago OK
Content Stockpile ● IDLE 8h ago OK
Nightly Enhancer ● IDLE 6h 43m ago OK
Polymarket Bot ● ONLINE 3 min ago OK
InDecision Engine ● IDLE 1h 12m ago OK
Signal Community ● IDLE 22 min ago WARN
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
The WebSocket connection means I can watch the trading bot's heartbeat in real time. If an agent goes dark unexpectedly, I know within 10 seconds — not the next time I happen to check a log file.
Panel 5: Polymarket — Trading Bot in Real Time
This is the panel I look at most. The bot is running live capital.
// Polymarket Bot — Account Summary
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Wallet Balance: $1,247.50
Active Positions: 6
P&L (MTD): +$184.30 (+17.3%)
Bet Size: $5.00 flat
Win Rate (90d): 68.4% (82 wins / 120 bets)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Live Positions:
BTC closes above $95K by Feb 28? YES $5.00 ⬆ 62%
ETH/BTC ratio above 0.034 by Mar? NO $5.00 ⬆ 58%
Fed rate cut in March 2026? NO $5.00 ⬇ 43%
Solana hits $250 by end of Q1? YES $5.00 ⬆ 71%
The InDecision Framework scores each market before the bot bets. If conviction is below 65%, no position. Mission Control shows the live positions and the underlying factor scores that drove each bet. I can audit the bot's reasoning at any time without touching a terminal.
Panel 6: Content — The Queue
The content flywheel generates 50+ pieces per week. The Content panel is the editorial queue.
// Content Queue — February 25, 2026
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Status Platform Title Score
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
PENDING X Building Tesseract Intel... hook: 8.4
PENDING X Thread: InDecision Framework hook: 7.9
PENDING IG Psychology of FOMO in markets hook: 8.1
DRAFTED Blog Mission Control deep-dive —
DRAFTED IG Rewired Minds: discipline post —
PUBLISHED X Bot called the BTC crash —
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
43 items in queue · 7 pending approval · 3 published today
The hook score comes from the tournament system — Claude Haiku generating 3 variants and scoring them on scroll-stopping power, emotional resonance, and clarity. The winner surfaces here with its score, so I can review before approving for publish.
The Architecture Decision I'd Make Again
The backend is file-based JSON storage. No database. This was a deliberate choice I'd make again.
Every operational data file is a simple JSON on disk. The portfolio, the projects, the revenue data, the agent status — all flat files. FastAPI reads them on request. There's nothing to migrate, nothing to back up that isn't already in the git repo, nothing that can corrupt on a bad write.
Dashboard infrastructure should be durable and boring. The interesting parts of the system are the agents and services it tracks. The command center itself should never be the point of failure.
The only real-time piece is the WebSocket for agent status. Everything else is request-response. That simplicity means Mission Control has never gone down in the two months since I built it — while the services it monitors have had 47 incidents.
What It Changed
Before Mission Control, I was operating on feel. I knew roughly what was running and roughly how things were performing, but "roughly" is not how you run a trading bot with live capital. "Roughly" is how you miss a monitoring failure that compounds into a data quality problem into an analysis error into a bad bet.
After Mission Control, I operate from ground truth. The 30-second morning read tells me if anything broke overnight. The Polymarket panel tells me if the bot's win rate is drifting. The Sentinel panel tells me if a cron job is silently failing. The Content queue tells me what's pending without me having to open six different files.
The broader principle is this: as you scale autonomous systems, the overhead of understanding their state scales with them — unless you build dedicated infrastructure to surface that state. Mission Control is that infrastructure. Every autonomous empire needs one.
The source code lives in ~/Documents/Dev/mission-control and runs as a persistent Docker service at port 5174. If you want to build something similar, the framework page for InDecision gives you the analytical layer, and this is the operational layer. Together they're the full stack for running intelligence infrastructure at this scale.
Explore the Invictus Labs Ecosystem
Follow the Signal
If this was useful, follow along. Daily intelligence across AI, crypto, and strategy — before the mainstream catches on.

Foresight v5.0: How I Rebuilt a Prediction Market Bot Around Candle Boundaries
The bot was right. The timing was wrong. v4.x had a fundamental reactive architecture problem — by the time signals scored, the CLOB asks were too expensive. v5.0 solved it with event-driven candle boundaries and predictive early-window scoring.

Hermes: A Political Oracle That Bets on Polymarket Using AI News Intelligence
Political prediction markets don't move on charts — they move on information. Hermes is a Python bot that scores political markets using Grok sentiment, Perplexity probability estimation, and calibration consensus from Metaculus and Manifold. Here's how it works.

Leverage: Porting the Foresight Signal Stack to Crypto Perpetuals
The signal stack I built for prediction markets turns out to work on perpetual futures — with modifications. Here's how a 9-factor scoring engine, conviction-scaled leverage, and six independent risk gates become a perps trading system.