A2UI
Agent-to-User Interface — エージェントが「UI を話す」ためのオープン標準。宣言的 JSON で安全かつ表現力のある UI を実現する。
A2UI は、エージェント(LLM 等)が生成する UI を宣言的 JSONで表現するオープン標準と、そのレンダラー・Agent SDK・開発ツール群。エージェントは実行可能コードではなく UI の意図を JSON で送り、クライアント側が信頼済みカタログのコンポーネント(Card, Button, TextField 等)だけをネイティブに描画する。データのように安全で、コードのように表現力がある UI を実現する。
- セキュリティ第一: LLM 生成の任意コード実行は危険。A2UI は宣言的データ形式。クライアントがカタログで許可したコンポーネントだけをレンダリングする。
- LLM 向け・増分更新: フラットなコンポーネントリストと ID 参照で表現し、LLM が増分的に出力しやすい。プログレッシブレンダリングや会話進行に合わせた更新が可能。
- フレームワーク非依存: UI 構造と実装を分離。同じ A2UI ペイロードを Web(Lit / React / Angular)や Flutter 等で描画できる。
- 柔軟性: オープンなレジストリでサーバー側型を Smart Wrapper にマッピング。サンドボックスや trust ladder を開発者が制御できる。
会話文脈に合わせた動的フォーム生成、リモートサブエージェントが返す UI をメインチャット内に表示、企業向けエージェントによる承認ダッシュボードや可視化のオンザフライ生成、MCP アプリを A2UI サーフェス内に埋め込む統合など。
UI の「生成」と「実行」を分離する。
| 段階 | 説明 |
|---|---|
| Generation | エージェント(Gemini 等)が A2UI Response(JSONL)を生成。Agent SDK がカタログに基づくプロンプト生成・ストリーミング解析・検証を担う。 |
| Transport | メッセージをクライアントへ送る(A2A, AG-UI, REST, WebSocket, MCP 等)。 |
| Resolution | クライアントの A2UI Renderer(web_core 等)が JSON をパース・検証。 |
| Rendering | 抽象コンポーネント(例: type: 'text-field')をクライアントのネイティブ実装にマッピングして描画。 |
| 方式 | 状態 | 備考 |
|---|---|---|
| A2A Protocol | Complete | ネイティブ A2A トランスポート。A2A 拡張仕様あり。 |
| AG-UI | Complete | CopilotKit 等との day-zero 互換。 |
| REST API | Complete | HTTP リクエスト/レスポンス。 |
| WebSockets | Complete | 双方向通信。 |
| MCP | Complete | Model Context Protocol 経由のコンテキスト共有・MCP Apps 統合。 |
| バージョン | 状態 | 備考 |
|---|---|---|
| v0.8 | Prior(レガシー) | 初回パブリックリリース。メッセージ名は beginRendering / surfaceUpdate / dataModelUpdate 等。 |
| v0.9 | Prior | 機能完成版。メッセージ名を createSurface / updateComponents / updateDataModel に整理。 |
| v0.9.1 | Current | v0.9 系の安定パッチリリース。新規開発の推奨起点。 |
| v1.0 | Candidate | リリース候補。basic catalog・conformance・eval が拡充。 |
サーバーからクライアントへ、1 行 1 メッセージの JSONL ストリームで通信。v0.9 系の主な 4 種類は次のとおり(各メッセージに "version": "v0.9" を含む)。
| メッセージ | 役割 |
|---|---|
createSurface | 新しいサーフェスを作成し、使用するカタログを指定。描画開始の合図。 |
updateComponents | 指定サーフェスに追加・更新するコンポーネント定義のリストを送る。 |
updateDataModel | サーフェスのデータモデルにデータを挿入または置換。 |
deleteSurface | サーフェスとその内容を UI から明示的に削除。 |
トランスポートはプロトコルから分離。順序保証・メッセージ区切り・メタデータ(データモデル同期や capability 交換)を満たす必要がある。双方向(action の返送)はオプション。
web_core は Web レンダラー共通のコアライブラリ。Lit / Angular / React がこれを共有する。
| レンダラー | プラットフォーム | v0.8 | v0.9.1 | v1.0 |
|---|---|---|---|---|
| Lit(Web Components) | Web | Stable | Stable | Planned |
| React | Web | Stable | Stable | Planned |
| Angular | Web | Stable | Stable | Planned |
| Flutter(GenUI SDK) | Mobile / Web / Desktop | Stable | Stable | Planned |
| Markdown-it | Web | — | — | — |
Markdown-it レンダラーは Lit 等と組み合わせて利用。Roadmap では SwiftUI(Q2 2026 予定)、Jetpack Compose、Vue 等の追加が掲げられている。コミュニティ製 Lynx A2UI、json-render、A2UI-Android 等もエコシステムに存在する。
- トランスポートから A2UI メッセージを受信
- JSON をパースしスキーマで検証
- プラットフォームネイティブコンポーネントで描画
- アプリのテーマに従ってスタイル適用
- ユーザー action をエージェントへルーティング
agent_sdks/python/ 配下に a2ui_core(コア処理・検証・レンダリング基盤)と a2ui_agent(プロンプト生成・ストリーミングパーサ・ADK 連携)がある。エージェント側の責務は capability 管理、プロンプトエンジニアリング、A2UI ペイロード検証。
| レイヤ | 役割 |
|---|---|
| CatalogConfig / A2uiCatalog | コンポーネントスキーマをカタログとして読み込み、LLM 向け指示文を生成。 |
| InferenceStrategy | ロール・ワークフロー・UI 説明を組み合わせた system prompt を組み立て。 |
| Streaming Parser | LLM 出力をストリーム解析し、部分的/完全な UI メッセージを逐次 yield。 |
| Validator | 生成 JSON をスキーマで検証し、A2A DataPart 等のトランスポートエンベロープへ包む。 |
| ADK 連携 | send_a2ui_to_client_toolset 等で Google ADK エージェントからクライアントへ A2UI を送信。 |
Experimental として A2UI Express DSL(コンパイラ・デコンパイラ)も含まれる。agent_sdks/conformance/ で言語横断の適合性テストスイートが提供される。
| ツール | URL | 用途 |
|---|---|---|
| A2UI Composer | a2ui-composer.ag-ui.com | ビジュアルエディタで A2UI JSON を生成し、エージェントプロンプトへ貼り付け。 |
| A2UI Theater | theater | Lit / React / Angular レンダラー向けのストリーミングシナリオをステップ再生。 |
| Widget Builder | CopilotKit | 公開デモでウィジェットを試作。 |
- Composer(
tools/composer)— CopilotKit ベースのウィジェットビルダー。ローカル実行可。 - Editor / Inspector(
tools/editor,tools/inspector)— A2UI ペイロードの編集・デバッグ。 - build_catalog(
tools/build_catalog)— カタログ JSON の組み立て。 - eval(
eval/)— LLM 生成品質の評価フレームワーク。
| パス | 内容 | 目安時間 |
|---|---|---|
| Quickstart Restaurant Finder | Gemini ADK エージェント + Lit レンダラーのフルスタックデモ | 約 5 分 |
| A2UI + AG-UI | npx copilotkit@latest init 後、任意フレームワークで A2UI レンダリングを有効化 | 約 5 分 |
| Composer / Theater | インストール不要。ブラウザで JSON 生成・ストリーミング確認 | 約 1 分 |
前提: Node.js 18+(Corepack 有効)、uv、Gemini API Key。
git clone https://github.com/a2ui-project/a2ui.git
cd a2ui
export GEMINI_API_KEY="your_gemini_api_key"
corepack enable
yarn install
cd samples/client/lit
yarn demo:restaurant
yarn demo:restaurant が依存関係のビルド、Python エージェント起動、クライアント(http://localhost:5173)起動まで一括で行う。Flutter 利用時は GenUI SDK を参照。
- GitHub: a2ui-project/a2ui — 本体リポジトリ(Apache 2.0)
- a2ui.org — 公式ドキュメント(MkDocs)
- GenUI SDK — Flutter で A2UI を利用
- A2UI Composer — ビジュアルウィジェットビルダー
- A2UI Widget Builder (CopilotKit) — ブラウザデモ
- CONTRIBUTING.md — コントリビューション手順