Skip to main content
The agent runs in a different container than the thing talking to the browser, so output flows through a shared broker — redis:
Agent (container) ──XADD unit:<id>:out──▶ redis Stream ──XREAD──▶ agent-api/gateway ──ws──▶ terminal
Because it is a Stream (not pub/sub) it is durable + replayable — live for chat and cards, and after-the-fact for background dispatches. This reuses the exact mechanism Vexa already runs for meeting transcripts.