npx copilotkit@latest create
Read the Docs โย ย ย Try Copilot Cloud โย ย ย Join our Discord โ
- Install: Run a simple CLI command
- Configure: Add CopilotKit provider to your app
- Customize: Use headless UI or the customizable pre-built components
- Deploy: You're done!
Complete getting started guide โ
The v2 hook useAgent is a proper superset of useCoAgent, which gives more control over the agent connection.
Check out the useAgent docs to learn more.
CopilotKit.UseAgent.Graphic.Motion.mp4
- Minutes to integrateย - Get started quickly with our CLI
- Framework agnosticย - Works with React, Next.js, AGUI, and more
- Production-ready UIย - Use customizable components or build with headless UI
- Built-in securityย - Prompt injection protection
- Open sourceย - Full transparency and community-driven
Deploy deeply-integrated AI assistants & agents that work alongside your users inside your applications.
Drop in these building blocks and tailor them to your needs.
// Headless UI with full control
const { copilotkit } = useCopilotKit();
const { agent } = useAgent({ agentId: "my_agent" });
const { messages, addMessage, setMessages, state, ... } = agent;
copilotkit.runAgent({ agent })
// Pre-built components with deep customization options (CSS + pass custom sub-components)
<CopilotSidebar
instructions={"You are assisting the user as best as you can. Answer in the best way possible given the data you have."}
labels={{ title: "Sidebar Assistant", initial: "Need any help?" }}
/>// Programmatically access and control your agents
const { agent } = useAgent({ agentId: "my_agent" });
// Render and update your agent's state
return <div>
<h1>{agent.state.city}</h1>
<button onClick={() => agent.setState({ city: "NYC" })}>
Set City
</button>
</div>// Build generative UI based on your agent's state
useCoAgentStateRender({
name: "my_agent",
render: ({ state }) => <WeatherDisplay {...state.final_response} />,
});// Frontend actions + generative UI, with full streaming support
useFrontendTool({
name: "appendToSpreadsheet",
description: "Append rows to the current spreadsheet",
parameters: [
{ name: "rows", type: "object[]", attributes: [{ name: "cells", type: "object[]", attributes: [{ name: "value", type: "string" }] }] }
],
render: ({ status, args }) => <Spreadsheet data={canonicalSpreadsheetData(args.rows)} />,
handler: ({ rows }) => setSpreadsheet({ ...spreadsheet, rows: [...spreadsheet.rows, ...canonicalSpreadsheetData(rows)] }),
});// Human in the Loop (Approval)
useHumanInTheLoop({
name: "email_tool",
parameters: [
{
name: "email_draft",
type: "string",
description: "The email content",
required: true,
},
],
render: ({ args, status, respond }) => {
return (
<EmailConfirmation
emailContent={args.email_draft || ""}
isExecuting={status === "executing"}
onCancel={() => respond?.({ approved: false })}
onSend={() =>
respond?.({
approved: true,
metadata: { sentAt: new Date().toISOString() },
})
}
/>
);
},
});// Build generative UI on-top of your agent's tool calls
useRenderToolCall({
name: "get_weather", // tool defined in your agent
args: [{
name: "city",
type: "string",
required: true,
}],
render: ({ args, result }) => {
<WeatherCard
city={args.city}
temperature={result.temperature}
description={result.description}
/>
}
})Connect agent workflow to user-facing apps, with deep partnerships and 1st-party integrations across the agentic stackโincluding LangGraph, CrewAI, and more.
Learn more in the AG-UI README โ Join our Discord โRead the Docs โ
Try Copilot Cloud โ Follow us on LinkedIn โ
Follow us on X โ
Thanks for your interest in contributing to CopilotKit! ๐
We value all contributions, whether it's through code, documentation, creating demo apps, or just spreading the word.
Here are a few useful resources to help you get started:
-
For code contributions, CONTRIBUTING.md.
-
For documentation-related contributions, check out the documentation contributions guide.
-
Want to contribute but not sure how? Join our Discord and we'll help you out!
This repository's source code is available under the MIT License.