ALX Protocol uses two distinct event systems that serve different purposes. Run events report real-time execution progress as a solve runs — step by step, in order, as work happens. Session timeline events are the historical record of what happened across all runs in a session, written after the fact and queryable by clients inspecting session history. Both use closed vocabularies enforced by wire-level guarantees.Documentation Index
Fetch the complete documentation index at: https://docs.xandrlabs.ai/llms.txt
Use this file to discover all available pages before exploring further.
The difference between run events and session timeline events
| Dimension | Run events | Session timeline events |
|---|---|---|
| When emitted | During live execution, in real time | After execution, as historical record |
| Granularity | Fine-grained step progress | Coarser execution milestones |
| Vocabulary type | RunEventType (closed) | SessionTimelineEventType (closed) |
| Wire guarantee | WG-04 | WG-03 |
| Timestamps | ISO-8601 strings | Epoch milliseconds |
| Queryable after run? | Not guaranteed | Yes, via session timeline endpoint |
Wire-level guarantees
| Guarantee | Rule |
|---|---|
| WG-03 | Session timeline events MUST use the closed SessionTimelineEventType vocabulary |
| WG-04 | Run events MUST use the closed RunEventType vocabulary |
Types
RunEventType
The closed vocabulary of run event types. Implementations MUST NOT emit types outside this list (WG-04).
| Type | Meaning |
|---|---|
run.started | Execution of the run has begun |
step.started | A plan step has begun execution |
step.completed | A plan step completed successfully |
step.failed | A plan step failed |
step.skipped | A plan step was intentionally skipped |
artifact.created | An artifact was produced during execution |
approval.required | Execution is paused waiting for human approval |
run.completed | The run finished successfully (ok: true, WG-10) |
run.failed | The run finished with an error (ok: false, WG-09) |
RunEvent
A single event emitted during live execution of a solve run.
The event type. Must be one of the values in the
RunEventType closed vocabulary above.Type-specific event payload. Shape varies by
type. For example, step.completed may carry { stepId, durationMs } while artifact.created carries { artifactId }. Clients MUST tolerate unknown payload fields (WG-07).RunState
Represents the current state of an in-progress or completed run. Carries accumulated context as the run progresses through steps.
RunState is a protocol-level shape. Do not confuse it with SessionStatus, which tracks lifecycle state across all runs in a session.SessionTimelineEventType
The closed vocabulary of session timeline event types. Implementations MUST NOT emit types outside this list (WG-03).
| Type | Meaning |
|---|---|
execution | A full solve run was recorded in the session |
step | A single step within a run was recorded |
fallback | A fallback artifact or strategy was used |
error | An error occurred during the run or step |
reset | The session state was reset |
fork | The session branched into a new sub-context |
SessionTimelineEvent
A single entry in a session’s historical timeline.
The event type. Must be one of the values in the
SessionTimelineEventType closed vocabulary above.ID of the artifact associated with this event. May be omitted for events that do not involve an artifact (e.g.
reset).ID of the step associated with this event. Present for
step events; omitted for execution, reset, and fork events.Whether the event represents a successful outcome.
Epoch milliseconds when the event occurred. Session timeline timestamps always use epoch milliseconds — not ISO-8601 strings (see PROTOCOL-SPEC §5).
Arbitrary key-value metadata specific to the event type. For example, an
execution event may include { improvement: 0.24 } and a step event may include { reason: "execute plan" }.Extension rule
New event types MAY be added in minor releases only when existing clients can ignore them without breaking correctness. This applies to bothRunEventType and SessionTimelineEventType.
Your client MUST be written to tolerate unknown event types gracefully. Do not error or abort a run event stream when you encounter an unrecognized type — log and skip it.