Rule index

August 29, 2026 ยท View on GitHub

All 46 conformance rules, grouped by the part of the protocol they guard. Every diagnostic links to the spec section it is grounded in; ambiguous spec behavior is capped at info severity and tracked in spec-questions.md.

Lifecycle

RuleSeverityLayerTitle
AGUI001errorcoreRun does not start with RUN_STARTED
AGUI002errorcoreMultiple RUN_STARTED in one run
AGUI003errorcoreRun not terminated
AGUI004errorcoreEvent after terminal event
AGUI005errorcoreRUN_FINISHED and RUN_ERROR are mutually exclusive
AGUI006errorcoreSTEP_FINISHED without matching STEP_STARTED
AGUI007errorcoreStep unterminated at run end
AGUI008warningcoreUnstable threadId/runId across the run

Text messages

RuleSeverityLayerTitle
AGUI101errorcoreTEXT_MESSAGE_CONTENT without start
AGUI102errorcoreTEXT_MESSAGE_END without start
AGUI103errorcoreText message unterminated at run end
AGUI104errorcoreDuplicate messageId within a run
AGUI105warningcoreEmpty content delta
AGUI106errorcoreInterleaved message streams sharing a messageId

Tool calls

RuleSeverityLayerTitle
AGUI201errorcoreTOOL_CALL_ARGS without start
AGUI202errorcoreTOOL_CALL_END without start
AGUI203errorcoreUnterminated tool call
AGUI204errorcoreTool call arguments are not valid JSON
AGUI205errorcoreDuplicate toolCallId within a run
AGUI206warningcoreTOOL_CALL_RESULT before TOOL_CALL_END
AGUI207errorcoreTOOL_CALL_RESULT references unknown toolCallId
AGUI208infocoreparentMessageId references unknown message

State

RuleSeverityLayerTitle
AGUI301infocoreSTATE_DELTA before any STATE_SNAPSHOT
AGUI302errorcoreSTATE_DELTA failed to apply
AGUI303errorcoreSTATE_DELTA is not a valid RFC 6902 patch document
AGUI304infocoreMid-run STATE_SNAPSHOT discards accumulated deltas
AGUI305warningcoreShared state declared but never established

Reasoning

RuleSeverityLayerTitle
AGUI401errorcoreREASONING_MESSAGE_CONTENT without start
AGUI402warningcoreReasoning unterminated at run end

Subagents

RuleSeverityLayerTitle
AGUI601errorcoreDuplicate SUBAGENT_STARTED for a subagentRunId
AGUI602errorcoreSUBAGENT_FINISHED without matching SUBAGENT_STARTED
AGUI603errorcoreSUBAGENT_ERROR without matching SUBAGENT_STARTED
AGUI604errorcoreSubagent unterminated at run end
AGUI605warningcoreparentSubagentRunId references a subagent never started
AGUI606warningcoreContinuation event's subagentRunId disagrees with its entity's owner

Transport

RuleSeverityLayerTitle
AGUI501errortransportMalformed SSE framing
AGUI502errorcoreEvent payload is not valid JSON
AGUI503errorcoreUnknown event type
AGUI504errorcoreEvent fails schema validation for its declared type
AGUI505warningtransportUnexpected Content-Type
AGUI506infotransportNo keepalive frame within the configured window
AGUI507infotransportResponse appears buffered rather than incrementally flushed
AGUI508errortransportStream ended without a terminal event

Protocol hygiene

RuleSeverityLayerTitle
AGUI901infocoreRAW event wraps a typed AG-UI event
AGUI902infocoreEvents carry no timestamps
AGUI903infocoreCUSTOM event name is not namespaced