assistant-ui
Scannednpx machina-cli add skill petekp/claude-code-setup/assistant-ui --openclawassistant-ui
Always consult assistant-ui.com/llms.txt for latest API.
React library for building AI chat interfaces with composable primitives.
References
- ./references/architecture.md -- Core architecture and layered system
- ./references/packages.md -- Package overview and selection guide
When to Use
| Use Case | Best For |
|---|---|
| Chat UI from scratch | Full control over UX |
| Existing AI backend | Connects to any streaming backend |
| Custom message types | Tools, images, files, custom parts |
| Multi-thread apps | Built-in thread list management |
| Production apps | Cloud persistence, auth, analytics |
Architecture
┌─────────────────────────────────────────────────────────┐
│ UI Components (Primitives) │
│ ThreadPrimitive, MessagePrimitive, ComposerPrimitive │
└─────────────────────────┬───────────────────────────────┘
│
┌─────────────────────────▼───────────────────────────────┐
│ Context Hooks │
│ useAui, useAuiState, useAuiEvent │
└─────────────────────────┬───────────────────────────────┘
│
┌─────────────────────────▼───────────────────────────────┐
│ Runtime Layer │
│ AssistantRuntime → ThreadRuntime → MessageRuntime │
└─────────────────────────┬───────────────────────────────┘
│
┌─────────────────────────▼───────────────────────────────┐
│ Adapters/Backend │
│ AI SDK · LangGraph · Custom · Cloud Persistence │
└─────────────────────────────────────────────────────────┘
Pick a Runtime
Using AI SDK?
├─ Yes → useChatRuntime (recommended)
└─ No
├─ External state (Redux/Zustand)? → useExternalStoreRuntime
├─ LangGraph agent? → useLangGraphRuntime
├─ AG-UI protocol? → useAgUiRuntime
├─ A2A protocol? → useA2ARuntime
└─ Custom API → useLocalRuntime
Core Packages
| Package | Purpose |
|---|---|
@assistant-ui/react | UI primitives & hooks |
@assistant-ui/react-ai-sdk | Vercel AI SDK v6 adapter |
@assistant-ui/react-langgraph | LangGraph adapter |
@assistant-ui/react-markdown | Markdown rendering |
assistant-stream | Streaming protocol |
assistant-cloud | Cloud persistence |
Quick Start
import { AssistantRuntimeProvider } from "@assistant-ui/react";
import { Thread } from "@/components/assistant-ui/thread";
import { useChatRuntime, AssistantChatTransport } from "@assistant-ui/react-ai-sdk";
function App() {
const runtime = useChatRuntime({
transport: new AssistantChatTransport({ api: "/api/chat" }),
});
return (
<AssistantRuntimeProvider runtime={runtime}>
<Thread />
</AssistantRuntimeProvider>
);
}
State Access
import { useAui, useAuiState } from "@assistant-ui/react";
const api = useAui();
api.thread().append({ role: "user", content: [{ type: "text", text: "Hi" }] });
api.thread().cancelRun();
const messages = useAuiState(s => s.thread.messages);
const isRunning = useAuiState(s => s.thread.isRunning);
Related Skills
/setup- Installation and configuration/primitives- UI component customization/runtime- State management deep dive/tools- Tool registration and UI/streaming- Streaming protocols/cloud- Persistence and auth/thread-list- Multi-thread management/update- Version updates and migrations
Source
git clone https://github.com/petekp/claude-code-setup/blob/main/skills/assistant-ui/SKILL.mdView on GitHub Overview
assistant-ui is a React library for building AI chat interfaces using composable primitives. It exposes UI primitives (ThreadPrimitive, MessagePrimitive, ComposerPrimitive), context hooks (useAui, useAuiState, useAuiEvent), a layered Runtime (AssistantRuntime → ThreadRuntime → MessageRuntime), and adapters for AI SDKs, LangGraph, and cloud persistence. This enables precise UX control, backend flexibility, and scalable production apps.
How This Skill Works
Developers compose the chat UI from primitives and access state via context hooks like useAui and useAuiState. The Runtime layer orchestrates thread and message flows through ThreadRuntime and MessageRuntime, connecting to Adapters/Backends such as AI SDK, LangGraph, or custom APIs. Start by wrapping your app in AssistantRuntimeProvider with a configured runtime (e.g., useChatRuntime with AssistantChatTransport) to drive real-time AI conversations.
When to Use It
- Chat UI from scratch for full control over UX
- Existing AI backend integration with streaming capabilities
- Custom message types (tools, images, files, etc.)
- Multi-thread apps with built-in thread list management
- Production apps requiring cloud persistence, authentication, and analytics
Quick Start
- Step 1: Import required pieces from @assistant-ui/react and @assistant-ui/react-ai-sdk
- Step 2: Initialize runtime with useChatRuntime({ transport: new AssistantChatTransport({ api: '/api/chat' }) })
- Step 3: Wrap your app with <AssistantRuntimeProvider runtime={runtime}> and render <Thread />
Best Practices
- Define UI primitives first (Thread, Message, Composer) to shape UX before wiring data
- Use the context hooks (useAui, useAuiState) to keep UI in sync with runtime state
- Choose the appropriate runtime based on backend: AI SDK (recommended), LangGraph, or custom API
- Leverage built-in thread/message runtimes to manage streaming and state
- Enable cloud persistence and analytics in production for durability and insights
Example Use Cases
- Build a chat UI from scratch with full control over layout and interactions
- Connect to a streaming AI backend using useChatRuntime and AssistantChatTransport
- Extend messages with custom types such as tools, images, or files
- Create and manage multiple conversation threads with the thread list
- Deploy a production app with cloud persistence, authentication, and analytics