Events
The journal and the stream carry one shape. On the stream, id is the journal seq, event is the type below, and data is a { delivery, seq, payload } frame; resume with Last-Event-ID or ?cursor=.
run.started— Opens a new run: the engine admitted it and is about to process the input, whether an ordinary turn or an automation firing. Emitted once, at admission — a run resumed after an approval does not get a second one.run.endedcloses what this event opened.run.ended— The run stopped occupying its execution slot:completedorfailedonce the model finished,abortedwhen stopped early, orpausedwhile an approval is pending. Carries token usage and cost once known, and the failure message when it failed. A paused run resumes without a freshrun.started.agent.entry— One durable message in the conversation: the user's message, the assistant's completed reply, or a tool's display text once it resolves. Streaming assistant text arrives first asagent.text_deltaand lands here only when the turn completes.agent.text_delta— A chunk of the assistant's reply while it is still generating. Delivered live only — never written to the durable journal or replayed on reconnect — and superseded by the complete text in theagent.entrythat follows.tool.call— The assistant asked to call a tool. Emitted once the call is committed to the conversation, before it runs;approval.openedfollows if a human must decide first, otherwise the call proceeds straight totool.result.tool.result— One tool call resolved:outcomesays what happened (completed, denied, parked for approval, or failed). Immediately followed by anagent.entry(roletool) carrying that outcome's own display text.approval.opened— A tool call is parked, waiting on a human decision. Carries the terms the approval card renders: the call's input, a summary, and the authorization contract in effect, if any.approval.decidedorapproval.expiredcloses it.approval.decided— The user, or a partner integration, approved or denied a parked approval.approvesays which way; a denial may carryreason. Consuming the decision to execute the tool follows asapproval.consumed, but only when the decision was an approval — a denial never reaches consumption.approval.consumed— The approval was spent to authorize its tool call, immediately before that call runs. This is when the call is authorized, not when it finishes: the call can still fail after this event lands, and nothing here rolls it back. Marks the approval used; it cannot authorize a second execution.approval.expired— A parked approval lapsed before anyone decided: its deadline passed, or the run it belongs to stopped while it was still pending.automation.fired— An automation triggered this conversation's run. Emitted once, immediately before therun.startedit precedes, naming the automation and its name at fire time.intents.settlement— A later, independently verified financial fact about one leg of an authorized swap — settled, refunded, or never executed — never inferred from the model's own tool result. Appended whenever the provider confirms the outcome, independent of the run that requested it;legIdandoperationIdjoin it back to its financial request, progress and authorizing approval. Archived receipts retain their originaloccurrenceId.intents.progress— Best-effort, display-only progress for an authorized swap, between approval and its settlement receipt: freezing the plan (planning), the frozen legs (planned), then each leg's own stage (stage). Never gates execution and may arrive out of order or not at all; anintents.settlementreceipt always takes precedence, and a terminal outcome is never reported here.