A call through any front door is recorded as it completes: one history row and one event, in the same batch. A separate events server reads every instance's events from the shared store and streams each one, over plain HTTP, only to the keys allowed to see it.
What arrivesone frame per run: the record, never a row's values
id: 4182 source rest query orders_by_customer v1 status success rows 3812 ms key partner-acme
Stablecompatibility promiseExpmay change in a minor releaseOr GET /events on the main server: no extra process, up to 4 streams, its own process only, no resume.
Runs happenApps, partners, AI agents and exportsEvery run through a front door is recorded, with source set to rest, mcp or export.
↓
The governed coreIdentity → policy → execution → recordEach run is recorded as it completes: one history row and one event, in the same batch, on every instance.
↓
Shared storeThe event logKept 24 h by default. PostgreSQL wakes the events server at once; SQLite and the ClickHouse run store (experimental) are polled every second.
↓
Events server Stablequeryapigate eventsThousands of streams per process. A key sees its own runs, the admin key sees all, and filters only narrow.
↓
Who watchesOps screens, partner portals, failure boardsEach gets frames with who, which query, status, rows and timing, never a row's values.
whobrowser · key in headerdoorGET /eventsper-key feed ✓every instance, one stream ✓filter by query · kind ✓datarun history · shared store
For operations screens
A live view of what is being queried, by whom
A wall display or a client that reacts when a query runs. GET /events streams each run as it completes, per key if you want, fanned out across instances by the events server.
✓Server-sent events over plain HTTP: a fetch stream in the browser with the key in a header, no WebSocket infrastructure.
✓Per-key feeds, so a partner can watch their own calls and nobody else's.
✓Across several instances, queryapigate events reads every instance's runs from the shared store, woken by a PostgreSQL notification.
✓Stable since 0.34, under the compatibility promise. Filter by query, connection, kind or status.
The example APIs ship with a generated database and one scoped key per scenario, so you can try each of these in a few minutes without connecting anything of your own.