# Run event

> Kernel-emitted lifecycle events for a specific run.

`@kindgi/specs/run-event.schema.json`, schema version 1.0.0.

Kernel-emitted lifecycle events for a specific run. Streamed over SSE to subscribers (browser via client SDK, admin UI, external observers). Distinct from the general Event type: RunEvents are always about a specific run, always emitted by the kernel, and are used by the run subscription API rather than the general subscription API.

- `eventId` (string, required): `<runId>:<sequence>`; monotonic within the run. Used as `Last-Event-Id` for SSE resumability.
- `runId` (string, required)
- `tenantId` (string, required)
- `timestamp` (string (date-time), required)
- `kind` (`"run.queued"` | `"run.started"` | `"run.step-started"` | `"run.step-completed"` | `"run.step-failed"` | `"run.step-retry-scheduled"` | `"run.iteration-started"` | `"run.iteration-completed"` | `"run.tool-invoked"` | `"run.tool-result"` | `"run.model-token"` | `"run.artifact-produced"` | `"run.guardrail-violated"` | `"run.wait-suspended"` | `"run.wait-resumed"` | `"run.approval-requested"` | `"run.approval-completed"` | `"run.completed"` | `"run.failed"` | `"run.cancelled"`, required)
- `sequence` (integer): Monotonic sequence within the run: the journal entry's `sequence` (`JournalEntry.sequence` in `@kindgi/runtime`).
- `nodeId` (string): For step-scoped events: the flow node id.
- `payload` (object): Kind-specific payload. Model tokens carry text; guardrail-violated carries the guardrail id and evidence; approval-requested carries the token id and prompt; etc.
