Axon is available through the object-oriented SDK surface in both TypeScript
and Python. The examples on this page use
RunloopSDK in TypeScript and
AsyncRunloopSDK in Python.Overview
Axon is Runloop’s real-time, distributed event bus for agent workflows. It stores interaction events in an append-only stream, assigns each event a monotonic sequence number, and exposes that stream to publishers, subscribers, and brokers.Shared Journal
Coordinates work across users, agents, and external systems via an ordered
event stream.
SQL Database
Embedded SQLite for structured state such as configuration, task queues, or
key-value pairs.
Broker
Bridges Axons to agents running in devboxes, forwarding events one turn at a
time.
- A source identifying where it came from (e.g.
github,slack,my-agent) - An event type describing what happened (e.g.
push,task_complete,review_requested) - An origin classifying who produced it (
EXTERNAL_EVENT,AGENT_EVENT,USER_EVENT) - A payload containing the event data as a JSON string
- A monotonic sequence number for ordering
How It Works
- Create an Axon — each Axon is a named event stream scoped to your account.
- Publish input events — users, orchestrators, webhooks, and other systems append structured events to the stream.
- Bridge through Broker — Broker reads incoming events and forwards them to the agent one turn at a time.
- Record agent output — broker-emitted events such as
turn.message_chunkandturn.completedare appended back to the same Axon. - Subscribe via SSE — clients observe the stream in order using sequence numbers.
Quick Start
Step 1: Create an Axon
name parameter is optional. If omitted, an unnamed axon is created.
Step 2: Publish Events
PublishResultView with the assigned sequence number and timestamp_ms. Sequence numbers are monotonically increasing, so you can use them to track ordering.
Step 3: Subscribe to Events
AxonEventView objects in sequence order. The stream stays open until you break out of the loop or the connection is closed.
Event Structure
Each event delivered via SSE includes the full event metadata stored in the Axon stream:| Field | Type | Description |
|---|---|---|
sequence | number | Monotonically increasing sequence number |
axon_id | string | The axon this event belongs to |
timestamp_ms | number | Timestamp in milliseconds since epoch |
origin | string | Event origin classification (see below) |
source | string | Event source identifier (e.g. github, slack, my-agent) |
event_type | string | Event type identifier (e.g. push, task_complete) |
payload | string | JSON-encoded event payload |
Event Origins
Origins classify who produced the event. When publishing, you can use three origin types:| Origin | Description | Example |
|---|---|---|
EXTERNAL_EVENT | Events from external systems (webhooks, CI, third-party services) | GitHub push, Slack message |
AGENT_EVENT | Events produced on behalf of an agent | Broker-published agent output such as turn.message_chunk |
USER_EVENT | Events produced by a human user or user-facing application | user.message, manual approval |
| Origin | Description |
|---|---|
SYSTEM_EVENT | Events generated by the Runloop platform or broker lifecycle |
SYSTEM_EVENT is a receive-only origin. You cannot publish events with this
origin. In brokered flows, events such as turn.started, turn.completed,
turn.cancelled, and turn.failed are typically emitted as system events.Use Cases
User-To-Agent Turns
Publish user input into an Axon, then subscribe for broker-published turn output from the attached agent.Webhook And Automation Fan-In
Use a single Axon as the shared journal for events coming from external systems, then let downstream subscribers and brokers react in order.Reconnecting to an Existing Axon
If you already have an axon ID (e.g. stored from a previous session), you can reconnect without creating a new one.Managing Axons
List Active Axons
Retrieve an Axon
Limitations, Nuances, and Constraints
Axons are a powerful tool for building real-time, distributed agent workflows. However, there are some limitations and constraints to be aware of:- Axon events are immutable. Once an event is published, it cannot be modified or deleted.
- Axons are currently limited to 10GB of event data.
Related Documentation
- SQL Database — Embedded SQLite for structured state within an Axon
- Broker — Learn how Runloop bridges Axons to agents running in devboxes
- Devbox Overview — Learn about Runloop’s sandbox environments
- Tunnels — Expose services running in a devbox
- Agent Gateways — Securely proxy API requests
- SDKs — TypeScript and Python SDK installation
