browser
   │
   ▼
nginx (443) ─┐
             ├─ Supervisor (9000)  ─── static UI (dashboard, agents, teams, …)
             │                       └─ proxies /auth + /api → cores
             │
             ├─ Ambrose Core Py (8100)
             │     │
             │     ├─ Postgres (5432)
             │     ├─ Brain (8150) [federal/healthcare MCPs]
             │     ├─ PHI Gateway (8160)
             │     └─ Spoke subprocesses (per-tool)
             │
             └─ Ambrose Core Node (3300)
                   │
                   ├─ War Room (/api/warroom)
                   ├─ PHI Rail (scrub/hydrate, BAA gating)
                   ├─ Claude Agent SDK (heads + dispatch)
                   └─ Billing (Stripe)

Voice traffic goes through the SAA Voice Relay on Fly.io — Ambrose Core opens a persistent outbound WS; the relay dispatches Retell/VAPI tool invocations back. Real PHI never leaves the customer machine on voice paths.