# AG-UI 1.0 Is Stable: Developer Guide to the New Spec

> Source: <https://byteiota.com/ag-ui-1-stable-spec/>
> Published: 2026-09-30 22:07:05+00:00

AG-UI 1.0 landed on September 30, 2026, and it closes the last open seam in the AI agent protocol stack. The [Agent-User Interaction Protocol](https://www.copilotkit.ai/blog/ag-ui-1.0) — which defines how backend agents stream structured events to frontend UIs — is now schema-locked, SDK-generated, and adopted by Google, Microsoft, Amazon, and Oracle. If you are building any user-facing layer on top of an AI agent, you now have a stable contract to build against.

The protocol stack for AI agents has been sorting itself out for most of 2026. MCP handles agent-to-tool connections. A2A handles agent-to-agent communication. AG-UI fills the third slot: agent-to-user-interface. With AG-UI 1.0 stable, all three layers now have versioned, production-grade specs. The question of how to build a real-time, streaming UI for a running agent no longer requires inventing your own event format.

## What Flipped at 1.0

The core architectural change is schema-first generation. Every one of the 31 event types is now defined by a JSON Schema. The TypeScript, Python, and .NET SDKs are generated directly from that schema — not maintained by hand alongside it. That distinction matters: it eliminates the entire class of “spec says X, SDK does Y” inconsistencies that made 0.x adoption risky for production systems.

The 31 events span 8 categories: run and step lifecycle, text messages, tool calls, reasoning traces, state synchronization, activity signals, subagents, and custom events. The breadth is intentional — the protocol covers what a frontend legitimately needs to know about a running agent, nothing more.

## Human-in-the-Loop Is Now a Spec Feature

The most production-significant addition in 1.0 is first-class interrupt support. An agent can pause mid-run, push a structured prompt to the frontend — a choice, form, or approval request — and block until the user responds. The resume payload carries the decision back to the agent and execution continues. This is not a CopilotKit abstraction; it is part of the AG-UI 1.0 spec itself.

``` js
// Agent side — pause for user approval
const result = await ctx.interrupt({
  type: "choice",
  prompt: "Deploy to production?",
  choices: ["confirm", "cancel"]
});
```

The resume call carries `interruptId`, `status` (resolved or cancelled), and an optional `payload`. Enterprise teams shipping agents into workflows involving sensitive operations — deploys, financial actions, data mutations — now have a standardized pattern for gating execution on human approval, rather than retrofitting it on top of a polling loop.

## Subagents: The Multi-Agent UI Problem Is Solved

1.0 ships a dedicated event category for subagents. When a parent agent delegates work to a child agent, the frontend receives the full event tree and can render per-subagent progress. Prior to 1.0, developers building multi-agent UIs had to improvise — emit custom events, maintain side-state, or surrender real-time visibility entirely. The spec now handles the delegation model directly.

Mastra’s September 30 release of `@ag-ui/mastra@1.1.5` surfaces native tool approvals as AG-UI interrupts automatically. [LangChain, Google ADK, OpenAI Agents SDK, AWS Strands, Microsoft Agent Framework, Pydantic AI, Agno, AG2, and TanStack AI](https://docs.ag-ui.com/integrations) all support AG-UI as of the 1.0 release. The protocol is not CopilotKit’s proprietary layer — it is the de facto standard for agent-to-UI communication across the industry.

## Migration Is Mechanical, Not Painful

AG-UI 1.0 is backwards compatible. A 0.x agent works with a 1.0 client and vice versa, so you can upgrade one side at a time. The breaking changes are minor. In TypeScript, optional protocol fields must be absent rather than null — no more passing `rawEvent: null`. Custom fields on events move into `metadata`. `SubAgentInfo` becomes `SubagentInfo` (lowercase A). In Python, JSON Patch entries are typed objects instead of dicts, so `patch["path"]` becomes `patch.path`.

```
# 0.x — dict access
patch["path"]

# 1.0 — typed object
patch.path
```

The [official migration guide](https://docs.ag-ui.com/migrating-to-1-0) covers every SDK — TypeScript, Python, and .NET. Most existing codebases need fewer than ten targeted changes. The .NET SDK, contributed by Microsoft, reached 1.0 on NuGet alongside the protocol itself, so .NET teams get a fully supported path from day one.

## What to Do Today

If you are on 0.x, the path is clear: pin `ag-ui-protocol >= 1.0.0` in your dependencies, run the migration guide, swap custom event fields for `metadata`, and add interrupt handlers for any tool that touches something you want a human to review before execution. The [GitHub repository](https://github.com/ag-ui-protocol/ag-ui) has working examples across all supported frameworks.

If you have been waiting for AG-UI to stabilize before adopting it — the wait is over. You now have a versioned, schema-backed spec with major cloud providers committed to it. Build the UI layer.
