Just-in-Time GUI Expert
Use this skill when designing interfaces for AI-native products, voice-first assistants, or any system where UI should be generated dynamically rather than pre-designed statically.
1. What Is Just-in-Time GUI?
Definition: A UX paradigm where interfaces are generated dynamically, on-demand, and ephemerally — existing only as long as needed. AI/LLMs assemble UI in real-time based on user context and intent, rather than using pre-designed static screens.
Coined by: Andrew Sims (Signal Path) — "emerging UX patterns for AI-native products that trade static screens and flows for UI assembled on the fly."
Core philosophy: The interface is invisible by default and surfaces only when context demands it — then disappears when its purpose is served.
Traditional GUI vs JIT GUI
| Aspect |
Traditional GUI |
Just-in-Time GUI |
| Design |
Static wireframes designed upfront |
Dynamic, assembled per-interaction |
| Persistence |
Persists across sessions |
Ephemeral — exists for immediate context only |
| Adaptation |
User navigates fixed menus |
Interface adapts to user intent |
| Component selection |
Designer pre-selects |
AI agent dynamically decides |
| Content |
Hardcoded text/layouts |
LLM generates content AND layout |
| Time to value |
Multiple clicks through menus |
Direct, contextual interface appears immediately |
2. Core Principles
- Context-Dependency — UI depends on accurate context (what user is doing, history, priorities)
- Ambiguity & Adaptation — Design for uncertainty, not fixed flows
- Character-Based Design — AI agents as "characters with personalities and logic," not just backends
- Outcome-Oriented — Define user goals/constraints for AI to operate within (not discrete design elements)
- Stateless Paradigm — All interface state derives from external context (user intent, app state, environment)
- Calm Technology — Interface moves between periphery and center of attention naturally (Weiser & Brown, 1995)
- Zero Inventory — No unused features sitting in the codebase; generate what's needed, discard the rest
3. Related Paradigms
Ambient Computing / Zero UI
- Eliminates traditional screens/buttons; relies on voice, gesture, predictive automation
- Technology complements the human environment seamlessly, not the other way around
Calm Technology (Weiser & Brown, 1995)
- Technology should serve, not demand attention
- Interfaces fade to background while remaining available
- Move between periphery and center of attention naturally
Ephemeral Interfaces
- Generated on-the-fly, exist temporarily, auto-dismiss when purpose is served
- Voice interfaces are naturally ephemeral (audio is fleeting)
- "Ephemeral apps": AI field-codes a tiny temporary tool for the task, then it disappears
AX (Agentic Experience) — Replacing UX
- Jakob Nielsen 2026: Agentic design becomes default expectation
- Interface disappears when not needed; reappears contextually
- AI acts as silent co-designer adjusting based on user behavior
- Success metric: "tasks completed autonomously" not "tokens generated"
4. Three Implementation Patterns
Pattern 1: Static Generative UI (High Control, Low Freedom)
Pre-built component library → Agent selects which + passes data → Frontend renders
- Safest (security), most consistent
- Agent only controls when/which, not how
- Best for: production approval flows, dashboards, forms with fixed layouts
Pattern 2: Declarative Generative UI (Shared Control) — RECOMMENDED
Agent returns structured spec (JSON/JSONL) → Frontend interprets → Renders consistently
- Pre-approved components only — security by design
- Cross-platform: SwiftUI, Flutter, React from same spec
- LLM-friendly: flat, incrementally streamable
- Best for: most production use cases
- Protocols: A2UI, Open-JSON-UI
Pattern 3: Open-Ended Generative UI (Low Control, High Freedom)
Agent returns complete HTML/iframe → Frontend acts as container
- Maximum flexibility, highest risk (XSS, performance, inconsistency)
- Best for: experimental features, sandboxed tools only
Data Flow (All Patterns)
User Input → LLM → JSON/Spec Generation → Frontend Rendering → User Interaction
↓
Tool Calls → Data Context
5. 2026 Protocol Stack
| Protocol |
Layer |
Purpose |
Origin |
| A2A |
Agent ↔ Agent |
Agent coordination |
Industry standard |
| MCP |
Agent ↔ Tools |
Backend actions, resources |
Anthropic |
| AG-UI |
Agent ↔ Frontend |
Real-time bidirectional communication |
CopilotKit/community |
| A2UI |
UI Payload |
Declarative UI spec (JSONL) |
Google |
| Open-JSON-UI |
UI Payload |
JSON-based UI spec |
Community/OpenAI |
| MCP-UI |
UI Payload |
HTML content via MCP tools |
Anthropic extension |
Full stack: A2A → MCP (tools) → AG-UI (runtime) → A2UI/Open-JSON-UI (payload)
A2UI (Google's Standard) — Deep Dive
Format: JSON Lines (JSONL) — each line is a complete message.
Why A2UI wins for voice-first:
- Security-first: declarative data, NOT executable code
- Framework-agnostic: SwiftUI, Flutter, React, Angular from same spec
- LLM-friendly: flat list of components with ID references = easy for LLMs to generate incrementally
- Streaming: each JSONL line can be processed as it arrives
Adopted by: Google, LangChain, AWS, Microsoft, Mastra, PydanticAI
Example:
{"component": "card", "id": "c1", "title": "Meeting in 15 min"}
{"component": "text", "id": "t1", "content": "Team standup with 4 attendees"}
{"component": "button", "id": "b1", "label": "Join", "onclick": "action:join_meeting"}
{"component": "button", "id": "b2", "label": "Snooze 5m", "onclick": "action:snooze"}
Client implements:
- Maintains a "catalog" of pre-approved components (Card, Button, TextField, etc.)
- Agent can only request rendering of trusted, predefined components
- Client maps abstract descriptions to native widgets (SwiftUI views, React components)
- Unknown components are safely ignored
6. Voice-First JIT GUI Patterns
Architecture for Voice + Ephemeral UI
User speaks → Whisper transcribes → Manager LLM reasons
↓
┌─────────────────────────┐
│ LLM decides output mode: │
├─────────────────────────┤
│ Voice only → TTS │
│ Voice + Card → TTS + UI │
│ Approval → Button card │
│ Data → Visual widget │
└─────────────────────────┘
↓
SSE → Client renders ephemerally
Auto-dismiss after timeout/action
Notification-as-Interface
Instead of opening windows/apps, use cards as the primary visual surface:
| Context |
UI Generated |
| Calendar alert |
Compact card with snooze/dismiss/join buttons |
| Email summary |
Expandable card with sender, subject, actions |
| Approval request |
Two-button card (approve/defer) |
| Task list |
Checklist widget with checkboxes |
| Calendar query |
Compact timeline widget (not text) |
Ephemeral Lifecycle
- Appear on SSE event from server
- Live for duration of interaction
- Auto-dismiss after: task completion | user swipe | timeout (30s) | voice command ("dismiss")
- Never persist — no saved state, no history
Multimodal Seamlessness
- Voice triggers request (fast, natural)
- Visual confirms action (reassurance, data display)
- Click/tap for fine control (precision, selection)
- No modality treated as separate — best one naturally emerges per context
7. Key Design Rules
| DO |
DON'T |
| Voice-first, UI-second |
Build elaborate pre-designed screens |
| Declarative specs (A2UI JSONL) |
Generate raw HTML from LLM |
| Pre-approved component catalog |
Allow arbitrary component creation |
| Auto-dismiss ephemeral UI |
Keep UI elements persistent |
| LLM decides what UI to show |
Hardcode UI selection logic |
| Start invisible, surface contextually |
Show UI by default |
| Single-task focused cards |
Multi-purpose complex layouts |
| Stream components as they arrive |
Wait for full response before rendering |
The Calm Technology Test
Before adding any visual UI, ask:
- Can this be voice-only? If yes, don't add UI.
- Does the user need to SEE something? (data, options, confirmation)
- Will this demand attention or complement it?
- Does it auto-dismiss, or does user need to manage it?
8. Thought Leaders (Quick Reference)
- Andrew Sims (Signal Path) — Coined "Just-in-Time Interfaces"; AI agents as characters, not services
- Linus Lee (Thrive Capital) — Moving from "language space" to "meaning space"; pinch-to-summarize, dial-for-formality
- Amelia Wattenberger — Chatbots lack flow state & sensory richness; JIT GUI needs multimodal feedback
- Jakob Nielsen — 2026: agentic design default; interface disappears when unneeded, reappears contextually
- Yaniv Leviathan (Google) — Proved LLMs generate high-quality UIs; released PAGEN dataset
9. For Extended Reference
See reference.md in this skill directory for:
- Full frameworks & libraries table (Vercel AI SDK, CopilotKit, assistant-ui, etc.)
- Academic papers with citations (5 key papers)
- All source URLs organized by category
- Real-world implementation details (Dynamic Island, Google GenUI, MCP Apps)
- Code examples (A2UI JSONL, Vercel streamUI, JSON Schema forms)
1---2name: jit-gui-expert3description: Expert reference for Just-in-Time GUI, generative UI, and ephemeral interfaces for AI-native products. Use when designing UI for voice-first assistants, implementing generative UI, working with A2UI/AG-UI/MCP-UI protocols, or building ephemeral/contextual interfaces.4---56# Just-in-Time GUI Expert78Use this skill when designing interfaces for AI-native products, voice-first assistants, or any system where UI should be generated dynamically rather than pre-designed statically.910---1112## 1. What Is Just-in-Time GUI?1314**Definition**: A UX paradigm where interfaces are generated dynamically, on-demand, and ephemerally — existing only as long as needed. AI/LLMs assemble UI in real-time based on user context and intent, rather than using pre-designed static screens.1516**Coined by**: Andrew Sims (Signal Path) — "emerging UX patterns for AI-native products that trade static screens and flows for UI assembled on the fly."1718**Core philosophy**: The interface is **invisible by default** and surfaces only when context demands it — then disappears when its purpose is served.1920### Traditional GUI vs JIT GUI2122| Aspect | Traditional GUI | Just-in-Time GUI |23|--------|----------------|-------------------|24| Design | Static wireframes designed upfront | Dynamic, assembled per-interaction |25| Persistence | Persists across sessions | Ephemeral — exists for immediate context only |26| Adaptation | User navigates fixed menus | Interface adapts to user intent |27| Component selection | Designer pre-selects | AI agent dynamically decides |28| Content | Hardcoded text/layouts | LLM generates content AND layout |29| Time to value | Multiple clicks through menus | Direct, contextual interface appears immediately |3031---3233## 2. Core Principles34351. **Context-Dependency** — UI depends on accurate context (what user is doing, history, priorities)362. **Ambiguity & Adaptation** — Design for uncertainty, not fixed flows373. **Character-Based Design** — AI agents as "characters with personalities and logic," not just backends384. **Outcome-Oriented** — Define user goals/constraints for AI to operate within (not discrete design elements)395. **Stateless Paradigm** — All interface state derives from external context (user intent, app state, environment)406. **Calm Technology** — Interface moves between periphery and center of attention naturally (Weiser & Brown, 1995)417. **Zero Inventory** — No unused features sitting in the codebase; generate what's needed, discard the rest4243---4445## 3. Related Paradigms4647### Ambient Computing / Zero UI48- Eliminates traditional screens/buttons; relies on voice, gesture, predictive automation49- Technology complements the human environment seamlessly, not the other way around5051### Calm Technology (Weiser & Brown, 1995)52- Technology should serve, not demand attention53- Interfaces fade to background while remaining available54- Move between periphery and center of attention naturally5556### Ephemeral Interfaces57- Generated on-the-fly, exist temporarily, auto-dismiss when purpose is served58- Voice interfaces are naturally ephemeral (audio is fleeting)59- "Ephemeral apps": AI field-codes a tiny temporary tool for the task, then it disappears6061### AX (Agentic Experience) — Replacing UX62- Jakob Nielsen 2026: Agentic design becomes default expectation63- Interface disappears when not needed; reappears contextually64- AI acts as silent co-designer adjusting based on user behavior65- Success metric: "tasks completed autonomously" not "tokens generated"6667---6869## 4. Three Implementation Patterns7071### Pattern 1: Static Generative UI (High Control, Low Freedom)72```73Pre-built component library → Agent selects which + passes data → Frontend renders74```75- Safest (security), most consistent76- Agent only controls **when/which**, not **how**77- Best for: production approval flows, dashboards, forms with fixed layouts7879### Pattern 2: Declarative Generative UI (Shared Control) — RECOMMENDED80```81Agent returns structured spec (JSON/JSONL) → Frontend interprets → Renders consistently82```83- Pre-approved components only — security by design84- Cross-platform: SwiftUI, Flutter, React from same spec85- LLM-friendly: flat, incrementally streamable86- Best for: most production use cases87- Protocols: A2UI, Open-JSON-UI8889### Pattern 3: Open-Ended Generative UI (Low Control, High Freedom)90```91Agent returns complete HTML/iframe → Frontend acts as container92```93- Maximum flexibility, highest risk (XSS, performance, inconsistency)94- Best for: experimental features, sandboxed tools only9596### Data Flow (All Patterns)97```98User Input → LLM → JSON/Spec Generation → Frontend Rendering → User Interaction99 ↓100 Tool Calls → Data Context101```102103---104105## 5. 2026 Protocol Stack106107| Protocol | Layer | Purpose | Origin |108|----------|-------|---------|--------|109| **A2A** | Agent ↔ Agent | Agent coordination | Industry standard |110| **MCP** | Agent ↔ Tools | Backend actions, resources | Anthropic |111| **AG-UI** | Agent ↔ Frontend | Real-time bidirectional communication | CopilotKit/community |112| **A2UI** | UI Payload | Declarative UI spec (JSONL) | Google |113| **Open-JSON-UI** | UI Payload | JSON-based UI spec | Community/OpenAI |114| **MCP-UI** | UI Payload | HTML content via MCP tools | Anthropic extension |115116**Full stack**: A2A → MCP (tools) → AG-UI (runtime) → A2UI/Open-JSON-UI (payload)117118### A2UI (Google's Standard) — Deep Dive119120**Format**: JSON Lines (JSONL) — each line is a complete message.121122**Why A2UI wins for voice-first**:123- Security-first: declarative data, NOT executable code124- Framework-agnostic: SwiftUI, Flutter, React, Angular from same spec125- LLM-friendly: flat list of components with ID references = easy for LLMs to generate incrementally126- Streaming: each JSONL line can be processed as it arrives127128**Adopted by**: Google, LangChain, AWS, Microsoft, Mastra, PydanticAI129130**Example**:131```jsonl132{"component": "card", "id": "c1", "title": "Meeting in 15 min"}133{"component": "text", "id": "t1", "content": "Team standup with 4 attendees"}134{"component": "button", "id": "b1", "label": "Join", "onclick": "action:join_meeting"}135{"component": "button", "id": "b2", "label": "Snooze 5m", "onclick": "action:snooze"}136```137138**Client implements**:1391. Maintains a "catalog" of pre-approved components (Card, Button, TextField, etc.)1402. Agent can only request rendering of trusted, predefined components1413. Client maps abstract descriptions to native widgets (SwiftUI views, React components)1424. Unknown components are safely ignored143144---145146## 6. Voice-First JIT GUI Patterns147148### Architecture for Voice + Ephemeral UI149```150User speaks → Whisper transcribes → Manager LLM reasons151 ↓152 ┌─────────────────────────┐153 │ LLM decides output mode: │154 ├─────────────────────────┤155 │ Voice only → TTS │156 │ Voice + Card → TTS + UI │157 │ Approval → Button card │158 │ Data → Visual widget │159 └─────────────────────────┘160 ↓161 SSE → Client renders ephemerally162 Auto-dismiss after timeout/action163```164165### Notification-as-Interface166Instead of opening windows/apps, use cards as the primary visual surface:167168| Context | UI Generated |169|---------|-------------|170| Calendar alert | Compact card with snooze/dismiss/join buttons |171| Email summary | Expandable card with sender, subject, actions |172| Approval request | Two-button card (approve/defer) |173| Task list | Checklist widget with checkboxes |174| Calendar query | Compact timeline widget (not text) |175176### Ephemeral Lifecycle1771. **Appear** on SSE event from server1782. **Live** for duration of interaction1793. **Auto-dismiss** after: task completion | user swipe | timeout (30s) | voice command ("dismiss")1804. **Never persist** — no saved state, no history181182### Multimodal Seamlessness183- **Voice** triggers request (fast, natural)184- **Visual** confirms action (reassurance, data display)185- **Click/tap** for fine control (precision, selection)186- No modality treated as separate — best one naturally emerges per context187188---189190## 7. Key Design Rules191192| DO | DON'T |193|----|-------|194| Voice-first, UI-second | Build elaborate pre-designed screens |195| Declarative specs (A2UI JSONL) | Generate raw HTML from LLM |196| Pre-approved component catalog | Allow arbitrary component creation |197| Auto-dismiss ephemeral UI | Keep UI elements persistent |198| LLM decides what UI to show | Hardcode UI selection logic |199| Start invisible, surface contextually | Show UI by default |200| Single-task focused cards | Multi-purpose complex layouts |201| Stream components as they arrive | Wait for full response before rendering |202203### The Calm Technology Test204Before adding any visual UI, ask:2051. Can this be voice-only? If yes, don't add UI.2062. Does the user need to SEE something? (data, options, confirmation)2073. Will this demand attention or complement it?2084. Does it auto-dismiss, or does user need to manage it?209210---211212## 8. Thought Leaders (Quick Reference)213214- **Andrew Sims** (Signal Path) — Coined "Just-in-Time Interfaces"; AI agents as characters, not services215- **Linus Lee** (Thrive Capital) — Moving from "language space" to "meaning space"; pinch-to-summarize, dial-for-formality216- **Amelia Wattenberger** — Chatbots lack flow state & sensory richness; JIT GUI needs multimodal feedback217- **Jakob Nielsen** — 2026: agentic design default; interface disappears when unneeded, reappears contextually218- **Yaniv Leviathan** (Google) — Proved LLMs generate high-quality UIs; released PAGEN dataset219220---221222## 9. For Extended Reference223224See `reference.md` in this skill directory for:225- Full frameworks & libraries table (Vercel AI SDK, CopilotKit, assistant-ui, etc.)226- Academic papers with citations (5 key papers)227- All source URLs organized by category228- Real-world implementation details (Dynamic Island, Google GenUI, MCP Apps)229- Code examples (A2UI JSONL, Vercel streamUI, JSON Schema forms)