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.