ai-native-ui-design
Skill4 starsChanged 3 months agoApache-2.0View on GitHub
Core principles and patterns for building AI-native user interfaces where the AI output IS the interface — not a sidebar or chat panel. Covers generative UI, calm technology, output-as-interface paradigm, ambient activity indicators, and the 10 foundational principles distilled from Vercel AI SDK, Claude Artifacts, ChatGPT Canvas, Apple Intelligence, and leading AI products. Use when designing or building interfaces for AI-powered applications, agentic apps, or generative products. Triggers on terms like "AI UI", "generative UI", "agentic interface", "AI-native design", "how to show AI output".
We split this skill into the rules it gives an agent
6 rules. About 0 are common, 5 are distinctive, and 1 is very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈5
Distinctive · estimate
This author's own choices. Worth a look.
1
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 47
Put controls on hover, not permanently visible
- Distinctive: line 49
Use dots/pills for version switching, not tabs
- Distinctive: line 52
Don't surround the output with agent cards, progress bars, and dashboards
- Distinctive: line 53
Don't have multiple primary buttons (Deploy, Iterate, Export, Share)
- Distinctive: line 54
Don't use traditional sidebar + top-nav + content layout
- Very specific: line 126
Use generator functions with yield for loading states:
≈ “Common” is an estimate: at least 1 in 5 of the 308,232 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
AI-Native UI Design
Design interfaces where the AI's output IS the primary interface — not a sidebar, chat panel, or dashboard bolted onto traditional software.
The 10 Foundational Principles
- Output IS the Interface — The generated content takes 80%+ of the screen. Chrome (menus, sidebars, controls) is minimal and contextual.
- Intent Over Navigation — Users express what they want; the system decides how to show it. No complex menus or navigation hierarchies.
- Stream Everything — Content never "pops in." Always stream with visible progress. Use
yield <Loading />beforereturn <Component />. - Calm, Not Clamorous — AI activity is ambient (subtle glows, shimmers), never overwhelming (no progress bars, no dashboard cards). See references/calm-tech.md.
- Interruptibility by Default — Users can always pause, review, and redirect. Pause/veto/rollback are primary actions, not edge cases.
- Transparency Without Noise — Show what the AI is doing and why, but keep it peripheral. Hover/click for details, don't dedicate screen real estate.
- Control Transfer, Not Handoff — AI generates → human edits → AI iterates. The user never loses control. Always allow inline editing.
- Design for Failure — Every AI feature needs all 4 states: idle → loading → success → error. Graceful degradation is mandatory.
- Progressive Disclosure — Show the simple prompt input first, reveal advanced options on demand. Never overwhelm with all capabilities at once.
- Pre-AI State Must Work — The interface before AI activates must be a complete, usable design. Not a degraded "you're missing out" experience.
Core Patterns
Pattern: Generative Canvas
The generated output occupies the full viewport. Controls appear contextually.
┌─────────────────────────────────────────────┐
│ │
│ [ THE GENERATED OUTPUT IS THE UI ] │
│ │
│ Takes 80%+ of the screen. │
│ Minimal chrome. │
│ Controls on hover/gesture. │
│ │
├─────────────────────────────────────────────┤
│ ◉ v3 ○ v2 ○ v1 · 4.1% CTR │ ← versions + one metric
│ [ Approve & Deploy ] │ ← ONE primary action
│ │
└─────────────────────────────────────────────┘What to do:
- Make the AI-generated content the hero element
- Put controls on hover, not permanently visible
- Show ONE primary action, not 3+ buttons
- Use dots/pills for version switching, not tabs
What NOT to do:
- Don't surround the output with agent cards, progress bars, and dashboards
- Don't have multiple primary buttons (Deploy, Iterate, Export, Share)
- Don't use traditional sidebar + top-nav + content layout
Pattern: Ambient Activity
Show AI is working without visual noise.
| Instead of... | Use... |
| Progress bars | Subtle glow on the element being worked on |
| "Agent working..." labels | Element shimmers (hue-rotate, opacity pulse) |
| Dashboard cards | Corner pulsing dots per agent |
| Full-screen loaders | Skeleton → content morph |
CSS for ambient glow (Apple Intelligence-style):
@keyframes ai-glow {
0%, 100% { text-shadow: 0 0 0 transparent; }
50% { text-shadow: 0 0 20px rgba(251, 191, 36, 0.25); }
}
.ai-active { animation: ai-glow 1.8s ease-in-out infinite; }Pattern: Control Transfer Loop
The defining interaction pattern for AI-native apps:
1. AI GENERATES → full output appears (user watches)
2. HUMAN EDITS → user modifies inline (click to edit)
3. AI ITERATES → agent revises based on feedback (streams update)
4. HUMAN APPROVES → one tap to finalizeWhat to do:
- Make every output element editable by default
- Show "AI edited this" badges that fade after 2 seconds
- Allow "regenerate this section" on any element (right-click or long-press)
- Stream updates in real-time, never show "loading..." spinners
Pattern: Version Morphing
Let users compare versions through gesture, not tabs.
Swipe left/right → creative morphs between versions
Score animates → CTR counts up/down as you swipe
Context shown → "v1: 1.2% → v2: 2.8% → v3: 4.1%"Implementation (Framer Motion):
<AnimatePresence mode="wait">
<motion.div
key={version.id}
initial={{ opacity: 0, scale: 0.95, x: 50 }}
animate={{ opacity: 1, scale: 1, x: 0 }}
exit={{ opacity: 0, scale: 1.05, x: -50 }}
transition={{ type: "spring", stiffness: 300, damping: 30 }}
>
<GeneratedOutput data={version} />
</motion.div>
</AnimatePresence>Pattern: Contextual Trust
Safety info appears when needed, not as a permanent panel.
| Gesture | What Appears |
| Hover an element | "Confidence: 94% · 3 iterations · AI-generated" |
| Tap and hold | Trust overlay: agents, audit trail, kill switch |
| Swipe up | Minimal trust panel (one glance, dismissible) |
The streamUI Pattern (Vercel AI SDK)
Use generator functions with yield for loading states:
import { streamUI } from 'ai';
export async function generateUI(prompt: string) {
const result = await streamUI({
model: openai('gpt-4o'),
prompt,
text: ({ content }) => <div>{content}</div>,
tools: {
generateCreative: {
description: 'Generate an ad creative',
parameters: z.object({ headline: z.string(), image: z.string() }),
generate: async function* ({ headline, image }) {
yield <SkeletonCreative />; // loading state
const creative = await generateCreative(headline, image);
return <CreativeDisplay data={creative} />; // final
},
},
},
});
return result.value;
}Anti-Patterns (What to Avoid)
- The Chatbot Trap — Chat is often the wrong interface. Don't add conversation where a button suffices.
- Dashboard Fatigue — Don't show agent cards with progress bars. The output IS the progress.
- Hidden AI — Don't hide that AI is involved. Subtle badges build trust.
- Over-Decoration — Shimmer/glow should signal activity, not be a permanent style.
- No Fallback — Always work without AI. The pre-AI state must be a complete product.
References
references/calm-tech.md— Amber Case's 8 principles for calm technology, applied to AIreferences/generative-ui-examples.md— How Claude Artifacts, ChatGPT Canvas, v0, and Cursor implement generative UIreferences/animation-patterns.md— Specific Framer Motion and CSS patterns for AI UI
In this repository80 other files it gives its agents.
- a11y-accessibility-designSkill
- agentic-ui-patternsSkill
- ai-ui-anti-patternsSkill
- ai-ui-heuristicsSkill
- calm-technology-uiSkill
- conversion-growth-designSkill
- cross-platform-designSkill
- dark-mode-designSkill
- data-visualizationSkill
- design-systemsSkill
- design-thinking-processSkill
- error-empty-statesSkill
- ethical-design-patternsSkill
- form-uxSkill
- information-architectureSkill
- interaction-design-patternsSkill
- internationalization-uiSkill
- mobile-touch-designSkill
- modal-classes-lifecycleSkill
- modal-container-imagesSkill
- modal-dicts-queuesSkill
- modal-endpointsSkill
- modal-fundamentalsSkill
- modal-gpu-computeSkill
- modal-networkingSkill
- modal-observabilitySkill
- modal-parallel-executionSkill
- modal-sandboxesSkill
- modal-scaling-performanceSkill
- modal-schedulingSkill
- modal-secretsSkill
- modal-serversSkill
- modal-storageSkill
- modal-web-servingSkill
- modal-workspace-adminSkill
- motion-design-principlesSkill
- notifications-permissionsSkill
- onboarding-uxSkill
- rust-api-designSkill
- rust-async-programmingSkill
- rust-cargo-masterySkill
- rust-cli-applicationsSkill
- rust-clippy-lintsSkill
- rust-closures-iteratorsSkill
- rust-compiler-internalsSkill
- rust-concurrencySkill
- rust-design-patternsSkill
- rust-editionsSkill
- rust-embeddedSkill
- rust-error-handlingSkill
- rust-game-developmentSkill
- rust-lifetimes-borrowingSkill
- rust-macrosSkill
- rust-performanceSkill
- rust-rustdocSkill
- rust-rustup-toolchainSkill
- rust-smart-pointersSkill
- rust-testing-benchmarkingSkill
- rust-type-systemSkill
- rust-unsafe-ffiSkill
- The first 60 shown.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

