Skip to main content
Draft — not yet ratified. This document is published for review. It describes the intended 1.0 behaviour, its wording is not final, and nothing here is covered by a compatibility promise until a version is frozen. Do not cite it as a stable reference.
This page defines the event patterns of the core protocol: the ways a producer composes events into a stream. Every transport carries all of these patterns; transports differ only in how events are framed and delivered. The direction of the protocol is fixed. Events flow from producer to consumer; the consumer speaks exactly once per exchange, by sending the run input that opens it. A producer MUST NOT require any mid-run message from the consumer — a run that needs outside input ends, and the answer arrives on the next run: through an interrupt and its resume entries, or through a frontend tool call left unanswered and answered in the next input’s messages.

Streaming

Long values arrive a piece at a time: a *_START opens an item, content events extend it, a *_END closes it — or a chunked shorthand compresses the three. Text messages, tool calls and reasoning messages all stream this way. See Streaming Messages.

Snapshot and delta

Values that evolve — agent state, activities, the conversation itself — are carried as a snapshot that replaces and deltas that amend, with deltas expressed as RFC 6902 JSON Patch. See Snapshots and Deltas.

Interrupt and resume

A run that needs something from outside — an approval, a missing value — ends with an interrupt outcome, and the run that continues from it carries the answers in its input. See Interrupts and Resume.

Adding patterns

All protocol features are built from these patterns. A protocol revision that adds a pattern defines it on this page. Transports carry new patterns without changes, because patterns are expressed entirely in terms of events and the run input.