Skip to content

Event catalog reference ​

Every run is two-plus append-only streams in the agent's schema: run (written by the orchestrator holding the run lease) and task:<taskId> (written by that task's lease holder). Sequence numbers are per-stream and gapless; every append is a compare-and-append.

run stream ​

EventMeaning
RunCreated / RunStartedRun exists / first tick began
SideEffectRecordedctx.now() / ctx.random() value, recorded once
TimerSet / TimerFiredctx.sleep began / wake consumed
WavePlannedWave dispatched: tasks, inputs, and the plan digest
WaveDispatchedTask hints enqueued
WaveTaskSettledOne task's terminal outcome absorbed
WaveSettledSettle policy met; coverage summary
StreamInvalidatedVerified replay diverged (workflow edit); effects from fromSeq re-derive
RunCompleted / RunFailed / RunCancelledTerminal

task:<id> stream ​

EventMeaning
TaskStartedLoop (re)entered, attempt counts retries
LlmCallStarted / LlmCallCompletedModel request (with digest) / durable response + token usage
ToolCallStarted / ToolCallCompletedHandler about to run (idempotency key recorded) / result
ApprovalRequested / ApprovalResolvedTask parked for a human / their decision
InputRequested / UserMessageSession turn boundary: the agent yields the floor / the user's next turn (with channel)
ContextCompactedContext fold recorded by value: kind: "elide" stubs old tool results, kind: "summary" replaces history before keepFrom with a recorded summary. Replay applies the payload, never recomputes
StreamInvalidatedPrompt/tool edit detected on replay; steps from fromSeq re-run
TaskCompleted / TaskFailedTerminal for the task (willRetry marks retryable failures)

Payloads are versioned JSONB ({ v: 1, ... }). The log is the source of truth; runs table columns (status, output, error) are rebuildable projections. Full semantics: Durability.