- User types in the War Room (browser).
- POST
/api/warroomto Supervisor (9000). Supervisor proxies to Node Core (3300). - Node Core authenticates the session, sources the agency_id, applies the PHI Rail.
- Node Core spawns a Claude Agent SDK session for Ambrose (Chief of Staff). System prompt = Ambrose's CANONICAL.md + tool catalog (MCP bridges: ghl, vault, brain, admin-ops, plus any native-spoke bridges + skills).
- Ambrose decides which head(s) to dispatch. Each head runs in its own SDK session — same shape, different prompt + allowed_spokes.
- Heads call tools. Each tool call routes through the appropriate bridge:
ghl_*→ ghl bridge → GHL v2 API (with PHI scrub if not BAA).vault_*→ vault bridge → local index, returns answer (not PHI).- brain MCPs → Brain (8150) → upstream federal API.
- admin-ops stages → Python core internal endpoint → Postgres.
- Each head returns its contribution. Ambrose synthesizes.
- Response streams back to the browser via SSE.
- Every LLM call is recorded to
llm_calls.db(provider, model, tokens, cost, latency — never bodies).
Architecture
Data flow
A typical "ask the war room" request, traced end to end.