a2ui

Generate A2UI 0.8 protocol compliant UI code. Use when building agent-driven interfaces, generating JSONL messages for surfaceUpdate/dataModelUpdate/beginRendering, creating forms, lists, cards, or any UI components that render across web/mobile/desktop platforms.

181 stars

Best use case

a2ui is best used when you need a repeatable AI agent workflow instead of a one-off prompt.

Generate A2UI 0.8 protocol compliant UI code. Use when building agent-driven interfaces, generating JSONL messages for surfaceUpdate/dataModelUpdate/beginRendering, creating forms, lists, cards, or any UI components that render across web/mobile/desktop platforms.

Teams using a2ui should expect a more consistent output, faster repeated execution, less prompt rewriting.

When to use this skill

  • You want a reusable workflow that can be run more than once with consistent structure.

When not to use this skill

  • You only need a quick one-off answer and do not need a reusable workflow.
  • You cannot install or maintain the underlying files, dependencies, or repository context.

Installation

Claude Code / Cursor / Codex

$curl -o ~/.claude/skills/a2ui/SKILL.md --create-dirs "https://raw.githubusercontent.com/majiayu000/claude-skill-registry/main/skills/data/a2ui/SKILL.md"

Manual Installation

  1. Download SKILL.md from GitHub
  2. Place it in .claude/skills/a2ui/SKILL.md inside your project
  3. Restart your AI agent — it will auto-discover the skill

How a2ui Compares

Feature / Agenta2uiStandard Approach
Platform SupportNot specifiedLimited / Varies
Context Awareness High Baseline
Installation ComplexityUnknownN/A

Frequently Asked Questions

What does this skill do?

Generate A2UI 0.8 protocol compliant UI code. Use when building agent-driven interfaces, generating JSONL messages for surfaceUpdate/dataModelUpdate/beginRendering, creating forms, lists, cards, or any UI components that render across web/mobile/desktop platforms.

Where can I find the source code?

You can find the source code on GitHub using the link provided at the top of the page.

Related Guides

SKILL.md Source

# A2UI Development Skill

This skill helps you generate A2UI (Agent to UI) protocol compliant code for building rich, interactive user interfaces that AI agents can stream to clients.

## Protocol Version

This skill targets **A2UI Protocol v0.8** (Stable Release).

Standard Catalog ID: `https://github.com/google/A2UI/blob/main/specification/0.8/json/standard_catalog_definition.json`

## Core Concepts

### 1. Message Types

A2UI uses four message types in a JSONL stream:

| Message | Purpose |
|---------|---------|
| `surfaceUpdate` | Define or update UI components |
| `dataModelUpdate` | Populate or update application state |
| `beginRendering` | Signal client to start rendering |
| `deleteSurface` | Remove a UI surface |

### 2. Adjacency List Model

Components are defined as a **flat list** with ID references, not nested trees:

```json
{"surfaceUpdate": {"surfaceId": "main", "components": [
  {"id": "root", "component": {"Column": {"children": {"explicitList": ["header", "content"]}}}},
  {"id": "header", "component": {"Text": {"text": {"literalString": "Welcome"}, "usageHint": "h1"}}},
  {"id": "content", "component": {"Text": {"text": {"path": "/user/name"}}}}
]}}
```

### 3. Data Binding (BoundValue)

Three patterns for binding values:

```json
// Literal only - static value
{"literalString": "Hello"}

// Path only - dynamic from data model
{"path": "/user/name"}

// Both - initialization shorthand (sets default AND binds)
{"path": "/form/email", "literalString": "user@example.com"}
```

### 4. Styles Configuration

Customize appearance in `beginRendering`:

```json
{"beginRendering": {
  "surfaceId": "main",
  "root": "root",
  "styles": {
    "font": "Roboto",
    "primaryColor": "#1976D2"
  }
}}
```

| Property | Description |
|----------|-------------|
| `font` | Primary font family |
| `primaryColor` | Theme color (hex format `#RRGGBB`) |

## Standard Catalog Components

### Layout Components
- `Row` - Horizontal container with `distribution` and `alignment`
- `Column` - Vertical container with `distribution` and `alignment`
- `List` - Scrollable list with `direction` (vertical/horizontal)
- `Card` - Material card wrapper with single `child`
- `Tabs` - Tab navigation with `tabItems` array
- `Modal` - Dialog with `entryPointChild` and `contentChild`
- `Divider` - Separator with `axis` (horizontal/vertical)

### Display Components
- `Text` - Text display with `usageHint` (h1-h5, caption, body). Supports simple Markdown.
- `Image` - Image with `url`, `fit`, `usageHint`
- `Icon` - Icon from standard set (see [components reference](reference/components.md))
- `Video` - Video player with `url`
- `AudioPlayer` - Audio with `url` and `description`

### Input Components
- `Button` - Clickable with `child` and `action`
- `TextField` - Text input with `label`, `textFieldType`
- `CheckBox` - Toggle with `label` and `value`
- `DateTimeInput` - Date/time picker with `enableDate`/`enableTime`
- `MultipleChoice` - Selection with `options` and `maxAllowedSelections`
- `Slider` - Range input with `minValue`/`maxValue`

### Component Weight

Use `weight` on components inside Row/Column for flex layout:

```json
{"id": "sidebar", "weight": 1, "component": {"Column": {...}}},
{"id": "main", "weight": 3, "component": {"Column": {...}}}
```

## Generating A2UI Messages

### Basic Flow

1. **Define components** via `surfaceUpdate`
2. **Populate data** via `dataModelUpdate`
3. **Trigger render** via `beginRendering`

### Complete Example: Simple Form

```jsonl
{"surfaceUpdate": {"surfaceId": "booking", "components": [
  {"id": "root", "component": {"Column": {"children": {"explicitList": ["title", "name_field", "date_field", "submit_btn"]}}}},
  {"id": "title", "component": {"Text": {"text": {"literalString": "Book a Table"}, "usageHint": "h2"}}},
  {"id": "name_field", "component": {"TextField": {"label": {"literalString": "Your Name"}, "text": {"path": "/form/name"}}}},
  {"id": "date_field", "component": {"DateTimeInput": {"value": {"path": "/form/date"}, "enableDate": true}}},
  {"id": "submit_btn", "component": {"Button": {"child": "submit_text", "action": {"name": "submit_booking", "context": [{"key": "name", "value": {"path": "/form/name"}}, {"key": "date", "value": {"path": "/form/date"}}]}}}},
  {"id": "submit_text", "component": {"Text": {"text": {"literalString": "Confirm Booking"}}}}
]}}
{"dataModelUpdate": {"surfaceId": "booking", "contents": [{"key": "form", "valueMap": [{"key": "name", "valueString": ""}, {"key": "date", "valueString": ""}]}]}}
{"beginRendering": {"surfaceId": "booking", "root": "root"}}
```

## Event Handling

### User Actions

When a user interacts (e.g., clicks a button), the client sends `userAction`:

```json
{
  "userAction": {
    "name": "submit_booking",
    "surfaceId": "booking",
    "sourceComponentId": "submit_btn",
    "timestamp": "2025-01-01T10:00:00Z",
    "context": {"name": "John Doe", "date": "2025-01-15"}
  }
}
```

### Error Reporting

Clients report errors via `error` message:

```json
{
  "error": {
    "type": "RENDER_ERROR",
    "message": "Component 'user_card' references missing child",
    "surfaceId": "main",
    "componentId": "user_card",
    "timestamp": "2025-01-01T10:30:05Z"
  }
}
```

## Best Practices

1. **Unique IDs**: Every component needs a unique `id` within its surface
2. **Flat Structure**: Use ID references for parent-child relationships
3. **Data Separation**: Keep UI structure in `surfaceUpdate`, dynamic values in `dataModelUpdate`
4. **Path Convention**: Use JSON Pointer format for paths (e.g., `/user/profile/name`)
5. **Progressive Rendering**: Send `beginRendering` after essential components are defined
6. **Clean up surfaces**: Use `deleteSurface` when flows complete

## Reference Documentation

### Core References
- [Component Reference](reference/components.md) - All 16 components with properties
- [Data Binding Guide](reference/data-binding.md) - BoundValue patterns and templates
- [API Integration](reference/api-integration.md) - Event handling and backend connection
- [Schema Reference](reference/schema.md) - JSON Schema for validation

### Advanced Topics
- [Catalog Negotiation](reference/catalog-negotiation.md) - Multi-catalog support
- [Surface Management](reference/surfaces.md) - Multiple UI regions
- [Streaming & Performance](reference/streaming.md) - Progressive rendering
- [Agent Prompting](reference/agent-prompting.md) - LLM integration

## Examples

### Basic Patterns
- [Form Example](examples/form.md) - Registration and booking forms
- [List Example](examples/list.md) - Dynamic lists with templates
- [Modal Example](examples/modal.md) - Dialog and popup patterns

### Advanced Patterns
- [Booking Flow](examples/booking-flow.md) - End-to-end business flow
- [Multi-Surface](examples/multi-surface.md) - Multiple UI regions
- [Streaming](examples/streaming.md) - Progressive rendering

Related Skills

a2ui-v0-8

181
from majiayu000/claude-skill-registry

使用 A2UI v0.8(以 renderers/lit/src/0.8 与 specification/0.8 为准)生成服务端 JSONL UI 消息,并实现客户端事件与 A2A 扩展回传。适用于把用户需求转成 A2UI 组件树+数据模型+渲染序列,以及处理 action/userAction 与后端接口调用的场景。

thor-skills

159
from majiayu000/claude-skill-registry

An entry point and router for AI agents to manage various THOR-related cybersecurity tasks, including running scans, analyzing logs, troubleshooting, and maintenance.

SecurityClaude

ux

159
from majiayu000/claude-skill-registry

This AI agent skill provides comprehensive guidance for creating professional and insightful User Experience (UX) designs, covering user research, information architecture, interaction design, visual guidance, and usability evaluation. It aims to produce actionable, user-centered solutions that avoid generic AI aesthetics.

UX Design & StrategyClaude

vly-money

159
from majiayu000/claude-skill-registry

Generate crypto payment links for supported tokens and networks, manage access to X402 payment-protected content, and provide direct access to the vly.money wallet interface.

Fintech & CryptoClaude

ontopo

159
from majiayu000/claude-skill-registry

An AI agent skill to search for Israeli restaurants, check table availability, view menus, and retrieve booking links via the Ontopo platform, acting as an unofficial interface to its data.

General Utilities

tech-blog

159
from majiayu000/claude-skill-registry

Generates comprehensive technical blog posts, offering detailed explanations of system internals, architecture, and implementation, either through source code analysis or document-driven research.

Content & DocumentationClaude

whisper-transcribe

159
from majiayu000/claude-skill-registry

Transcribes audio and video files to text using OpenAI's Whisper CLI, enhanced with contextual grounding from local markdown files for improved accuracy.

Media Processing

chrome-debug

159
from majiayu000/claude-skill-registry

This skill empowers AI agents to debug web applications and inspect browser behavior using the Chrome DevTools Protocol (CDP), offering both collaborative (headful) and automated (headless) modes.

Coding & DevelopmentClaude

lets-go-rss

159
from majiayu000/claude-skill-registry

A lightweight, full-platform RSS subscription manager that aggregates content from YouTube, Vimeo, Behance, Twitter/X, and Chinese platforms like Bilibili, Weibo, and Douyin, featuring deduplication and AI smart classification.

Content & Documentation

astro

159
from majiayu000/claude-skill-registry

This skill provides essential Astro framework patterns, focusing on server-side rendering (SSR), static site generation (SSG), middleware, and TypeScript best practices. It helps AI agents implement secure authentication, manage API routes, and debug rendering behaviors within Astro projects.

Coding & Development

modal-deployment

159
from majiayu000/claude-skill-registry

Run Python code in the cloud with serverless containers, GPUs, and autoscaling using Modal. This skill enables agents to generate code for deploying ML models, running batch jobs, serving APIs, and scaling compute-intensive workloads.

DevOps & Infrastructure

grail-miner

159
from majiayu000/claude-skill-registry

This skill assists in setting up, managing, and optimizing Grail miners on Bittensor Subnet 81, handling tasks like environment configuration, R2 storage, model checkpoint management, and performance tuning.

DevOps & Infrastructure