Awesome-omni-skill copilotkit
Build AI copilots, chatbots, and agentic UIs in React and Next.js using CopilotKit. Use this skill when the user wants to add an AI assistant, copilot, chat interface, AI-powered textarea, or agentic UI to their app. Covers setup, hooks (useCopilotAction, useCopilotReadable, useCoAgent, useAgent), chat components (CopilotPopup, CopilotSidebar, CopilotChat), generative UI, human-in-the-loop, CoAgents with LangGraph, AG-UI protocol, MCP Apps, and Python SDK integration. Triggers on CopilotKit, copilotkit, useCopilotAction, useCopilotReadable, useCoAgent, useAgent, CopilotRuntime, CopilotChat, CopilotSidebar, CopilotPopup, CopilotTextarea, AG-UI, agentic frontend, in-app AI copilot, AI assistant React, chatbot React, useFrontendTool, useRenderToolCall, useDefaultTool, useCoAgentStateRender, useLangGraphInterrupt, useCopilotChat, useCopilotAdditionalInstructions, useCopilotChatSuggestions, useHumanInTheLoop, CopilotTask, copilot runtime, LangGraphAgent, BasicAgent, BuiltInAgent, CopilotKitRemoteEndpoint, A2UI, MCP Apps, AI textarea, AI form completion, add AI to React app.
git clone https://github.com/diegosouzapw/awesome-omni-skill
T=$(mktemp -d) && git clone --depth=1 https://github.com/diegosouzapw/awesome-omni-skill "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/development/copilotkit" ~/.claude/skills/diegosouzapw-awesome-omni-skill-copilotkit && rm -rf "$T"
skills/development/copilotkit/SKILL.mdCopilotKit
Full-stack open-source framework (MIT, v1.51.3, Python SDK v0.1.78) for building agentic applications with AI copilots embedded directly in React and Angular UIs. Angular support via
@copilotkitnext/angular (Angular 18+19). 28k+ GitHub stars.
When to Use This Skill
- User wants to add an AI copilot, assistant, or chatbot to a React/Next.js app
- User is working with CopilotKit hooks, components, or runtime
- User asks about AI-powered text areas or form completion
- User needs to connect a Python agent (LangGraph/CrewAI) to a React frontend
- User is implementing human-in-the-loop or generative UI patterns
- User asks about AG-UI protocol or MCP Apps
- User wants to sync state between a UI and an AI agent
Architecture
┌─────────────────────────────────────────────────────────────────┐ │ │ │ F R O N T E N D @copilotkit/react-core + react-ui │ │ │ │ ┌──────────────────┐ ┌──────────────────┐ ┌──────────────┐ │ │ │ <CopilotPopup> │ │ <CopilotSidebar> │ │ <CopilotChat>│ │ │ │ <CopilotTextarea>│ │ Headless UI │ │ Custom UI │ │ │ └────────┬─────────┘ └────────┬─────────┘ └──────┬───────┘ │ │ └──────────────┬──────┘ │ │ │ ▼ │ │ │ ┌───────────────────────────────────────────────────┘ │ │ │ React Hooks │ │ │ ├─ useCopilotAction() → Define callable tools │ │ │ ├─ useCopilotReadable() → Expose app state to LLM │ │ │ ├─ useAgent() → Bidirectional state (v2) │ │ │ ├─ useFrontendTool() → Generative UI rendering │ │ │ ├─ useCopilotChat() → Headless chat control │ │ │ └─ useLangGraphInterrupt() → Human-in-the-loop │ │ └─────────────────────────┬───────────────────────────────────│ │ │ │ └─────────────────────────────┼───────────────────────────────────┘ │ ┌─────────▼─────────┐ │ AG-UI Protocol │ │ (HTTP event stream│ │ 17 event types) │ └─────────┬─────────┘ │ ┌─────────────────────────────┼───────────────────────────────────┐ │ │ │ │ B A C K E N D @copilotkit/runtime │ │ ▼ │ │ ┌─────────────────────────────────────────────────────────┐ │ │ │ CopilotRuntime │ │ │ │ ┌──────────────┐ ┌───────────────┐ ┌────────────────┐ │ │ │ │ │ LLM Adapters │ │ Backend │ │ Thread │ │ │ │ │ │ OpenAI │ │ Actions │ │ Persistence │ │ │ │ │ │ Anthropic │ │ (server-side │ │ InMemory / │ │ │ │ │ │ Google │ │ tools) │ │ SQLite │ │ │ │ │ │ Groq │ │ │ │ │ │ │ │ │ └──────────────┘ └───────────────┘ └────────────────┘ │ │ │ │ ┌──────────────────────────────────────────────────┐ │ │ │ │ │ Agent Router │ │ │ │ │ │ ├─ BuiltInAgent (direct LLM + middleware) │ │ │ │ │ │ ├─ BasicAgent (lightweight, no middleware) │ │ │ │ │ │ └─ CustomHttpAgent (remote Python/JS agents) ────┼───┼─┐ │ │ │ └──────────────────────────────────────────────────┘ │ │ │ │ └─────────────────────────────────────────────────────────┘ │ │ │ │ │ └───────────────────────────────────────────────────────────────┼─┘ │ ┌───────────────────┐ │ │ AG-UI / HTTP │◄──────────────────────┘ └─────────┬─────────┘ │ ┌─────────────────────────────┼───────────────────────────────────┐ │ ▼ │ │ A G E N T L A Y E R (optional, any AG-UI framework) │ │ │ │ Python: copilotkit SDK v0.1.78 + FastAPI / Flask │ │ │ │ ┌────────────┐ ┌────────────┐ ┌────────────┐ ┌────────────┐ │ │ │ LangGraph │ │ CrewAI │ │ Google ADK │ │ AWS Strands│ │ │ └────────────┘ └────────────┘ └────────────┘ └────────────┘ │ │ ┌────────────┐ ┌────────────┐ ┌────────────┐ ┌────────────┐ │ │ │ Mastra │ │ PydanticAI │ │ AG2 │ │ LlamaIndex │ │ │ └────────────┘ └────────────┘ └────────────┘ └────────────┘ │ │ │ │ Protocols: AG-UI (↔ user) · MCP (↔ tools) · A2A (↔ agents)│ │ │ └─────────────────────────────────────────────────────────────────┘
Quick Start
New project
npx copilotkit@latest create -f next
Existing project
npm install @copilotkit/react-core @copilotkit/react-ui @copilotkit/runtime
Environment
# .env.local OPENAI_API_KEY="sk-..." # or ANTHROPIC_API_KEY, GOOGLE_API_KEY, GROQ_API_KEY
Backend API route (app/api/copilotkit/route.ts
)
app/api/copilotkit/route.tsimport { CopilotRuntime, OpenAIAdapter, // or AnthropicAdapter, GoogleGenerativeAIAdapter, GroqAdapter, LangChainAdapter copilotRuntimeNextJSAppRouterEndpoint, } from "@copilotkit/runtime"; import { NextRequest } from "next/server"; const serviceAdapter = new OpenAIAdapter({ model: "gpt-4o" }); const runtime = new CopilotRuntime(); export const POST = async (req: NextRequest) => { const { handleRequest } = copilotRuntimeNextJSAppRouterEndpoint({ runtime, serviceAdapter, endpoint: "/api/copilotkit", }); return handleRequest(req); };
Frontend provider (layout.tsx
)
layout.tsximport { CopilotKit } from "@copilotkit/react-core"; import "@copilotkit/react-ui/styles.css"; export default function RootLayout({ children }: { children: React.ReactNode }) { return ( <html lang="en"> <body> <CopilotKit runtimeUrl="/api/copilotkit"> {children} </CopilotKit> </body> </html> ); }
Chat UI (page.tsx
)
page.tsximport { CopilotPopup } from "@copilotkit/react-ui"; // or CopilotSidebar, CopilotChat export default function Home() { return ( <> <YourApp /> <CopilotPopup instructions="You are an AI assistant for this app." labels={{ title: "Assistant", initial: "How can I help?" }} /> </> ); }
Core Hooks
useCopilotReadable
-- Expose app state to LLM
useCopilotReadableuseCopilotReadable({ description: "Current user profile and preferences", value: { name: user.name, role: user.role, preferences }, });
useCopilotAction
-- Define executable actions
useCopilotActionuseCopilotAction({ name: "addItem", description: "Add a new item to the list", parameters: [ { name: "title", type: "string", required: true }, { name: "priority", type: "string", description: "low, medium, or high" }, ], handler: async ({ title, priority = "medium" }) => { setItems(prev => [...prev, { id: Date.now().toString(), title, priority }]); return `Added "${title}" with ${priority} priority`; }, });
useCopilotChat
-- Programmatic chat control
useCopilotChatconst { appendMessage, stopGeneration, reset, reloadMessages } = useCopilotChat();
useCopilotAdditionalInstructions
-- Dynamic context-aware prompts
useCopilotAdditionalInstructionsuseCopilotAdditionalInstructions({ instructions: "User is on the settings page. Help them configure preferences.", });
useCopilotChatSuggestions
-- Auto-generate suggestions from app state
useCopilotChatSuggestionsuseCopilotChatSuggestions({ instructions: "Suggest actions based on the current app state.", });
useAgent
-- v2 agent state sync (superset of useCoAgent)
useAgentconst { state, setState, run, stop } = useAgent({ name: "my_agent" });
useAgent is the v2 replacement for useCoAgent. It includes all useCoAgent functionality plus time-travel debugging and improved state management. Prefer useAgent for new projects.
CopilotTask
-- Run one-off programmatic tasks
CopilotTaskimport { CopilotTask } from "@copilotkit/react-core"; const task = new CopilotTask({ instructions: "Summarize the data" }); await task.run(context);
Advanced Patterns
Detailed guides organized by topic -- load only what's needed:
- Generative UI (static AG-UI, declarative A2UI, open-ended MCP Apps): See references/generative-ui.md
- Shared State & CoAgents (useCoAgent, useAgent, bidirectional sync, LangGraph): See references/coagents-shared-state.md
- Human-in-the-Loop (buildtime/runtime HITL, approval flows, agent steering): See references/human-in-the-loop.md
- Runtime & Adapters (all LLM adapters, framework endpoints, backend actions): See references/runtime-adapters.md
- Python SDK (LangGraphAgent, FastAPI, actions, state, events): See references/python-sdk.md
- Styling & Customization (CSS, custom components, headless mode): See references/styling-customization.md
- Troubleshooting (common issues, CORS, env vars, Docker): See references/troubleshooting.md
- AG-UI Protocol (events, architecture, CLI scaffolding): See references/ag-ui-protocol.md
UI Components
| Component | Import | Use case |
|---|---|---|
| | Embedded inline chat panel |
| | Collapsible sidebar chat |
| | Floating popup chat |
| | AI-powered textarea drop-in |
All accept
instructions, labels, suggestions, custom message/input components, and observabilityHooks.
CopilotKit Provider Props
| Prop | Type | Purpose |
|---|---|---|
| | Self-hosted runtime endpoint |
| | Copilot Cloud API key |
| | Custom auth headers |
| | Cookie handling ( for cross-origin) |
| | Default agent name |
| | Thread metadata, authorization |
| | Error handler callback |
| | Dev error banners |
| | Debugging inspector tool |
| | Custom renderers (A2UI, etc.) |
Agent Protocols
| Protocol | Purpose | Package |
|---|---|---|
| AG-UI | Agent <-> User interaction, event streaming | , |
| MCP | Agent <-> External tools | MCP server integration |
| A2A | Agent <-> Agent communication | A2A protocol support |
Supported Agent Frameworks
LangGraph, CrewAI, Google ADK, AWS Strands, Microsoft Agent Framework, Mastra, PydanticAI, AG2, LlamaIndex, Agno, VoltAgent, Blaxel.
LLM Adapters
OpenAIAdapter, AnthropicAdapter, GoogleGenerativeAIAdapter, GroqAdapter, LangChainAdapter, OpenAIAssistantAdapter.
Key Packages
| Package | Purpose |
|---|---|
| Provider + all hooks |
| Chat UI components + styles |
| Backend runtime + LLM adapters + framework endpoints |
(Python) | Python SDK for LangGraph/CrewAI agents |
| Angular SDK (Angular 18+19) |
| AG-UI protocol types/events |
| AG-UI client implementation |
Error Handling
Frontend onError
callback
onError<CopilotKit runtimeUrl="/api/copilotkit" onError={(error) => { console.error("CopilotKit error:", error); toast.error("AI assistant encountered an error"); }} >
Tool render "failed"
status
"failed"All render functions receive
status === "failed" when a tool errors. Always handle this:
render: ({ status, args, result }) => { if (status === "failed") return <ErrorCard message="Tool execution failed" />; // ... }
Python SDK exception types
| Exception | Meaning |
|---|---|
| Requested action not registered |
| Requested agent not found in endpoint |
Versioning
Current version: v1.51.3 (Python SDK v0.1.78). The v2 runtime interface is available at the
/v2 path. Next-generation packages use the @copilotkitnext/* namespace (e.g., @copilotkitnext/angular).
Common Anti-Patterns
| Don't | Do Instead |
|---|---|
| Put API keys in client-side code | Use server-side env vars + runtime endpoint |
| Create a new CopilotRuntime per request | Instantiate once, reuse across requests |
Skip checks in render functions | Always handle "inProgress", "complete", "failed" |
Use for new projects | Prefer (v2 superset with time travel) |
| Hardcode instructions in every component | Use for page-specific context |
| Forget to import styles | Add in layout |
Mix and without reason | Pick one deployment mode unless you need hybrid |
| Put heavy computation in action handlers | Return data from handlers, compute in render |
Common Patterns Cheat Sheet
| Want to... | Use |
|---|---|
| Show a chat bubble | |
| Give LLM app context | |
| Let LLM call functions | |
| Render UI from tool calls | or |
| Default fallback tool renderer | |
| Sync state bidirectionally | |
| Use v2 agent state sync | (superset of useCoAgent) |
| Show agent progress | |
| Ask user for approval | |
| Handle LangGraph interrupts | |
| Control chat programmatically | |
| Run one-off tasks | |
| Connect Python agent | + |
| Scaffold AG-UI app | |
| Persist conversations | Thread model + StorageRunners |