--- title: CopilotKitProvider description: "CopilotKitProvider API Reference" --- `CopilotKitProvider` is the React context provider that initializes and manages `CopilotKitCore` for your React application. It provides all child components with access to agents, tools, and copilot functionality through React's context API. ## What is CopilotKitProvider? The CopilotKitProvider is the root component that: - Creates and manages a `CopilotKitCore` instance - Provides React-specific features like hooks and render components - Manages tool rendering and human-in-the-loop interactions - Handles state synchronization between your React app and AI agents ## Basic Usage Typically you would wrap your application with `CopilotKitProvider` at the root level: ```tsx import { CopilotKitProvider } from "@copilotkit/react-core"; function App() { return ( {/* Your app components */} ); } ``` ## Props ### runtimeUrl `string` **(optional)** The URL of your CopilotRuntime server. The provider will automatically connect to the runtime and discover available agents. ```tsx {children} ``` ### headers `Record` **(optional)** Custom HTTP headers to include with every request to the runtime. Useful for authentication and custom metadata. ```tsx {children} ``` ### properties `Record` **(optional)** Application-specific data that gets forwarded to agents as additional context. Agents receive these as `forwardedProps`. ```tsx {children} ``` ### agents\_\_unsafe_dev_only `Record` **(optional, development only)** This property is intended solely for rapid prototyping during development. Production deployments require the security, reliability, and performance guarantees that only the CopilotRuntime can provide. Local agents for development testing. The key becomes the agent's identifier. ```tsx import { HttpAgent } from "@ag-ui/client"; const devAgent = new HttpAgent({ url: "http://localhost:8000", }); {children} ; ``` ### useSingleEndpoint `boolean` **(optional, default: `false`)** When set to `true`, the provider connects to runtimes that expose the **single-route** transport (a single POST endpoint that multiplexes all runtime actions). Leave this `false` for the default REST-style transport. Pair this flag with the matching server endpoint helper: ```tsx {children} ``` On the server, mount one of the single-route runtimes (`createCopilotEndpointSingleRoute` for Hono or `createCopilotEndpointSingleRouteExpress` for Express). ### renderToolCalls `ReactToolCallRenderer[]` **(optional)** A static list of components to render when specific tools are called. Enables visual feedback for tool execution. ```tsx const renderToolCalls = [ { name: "searchProducts", args: z.object({ query: z.string(), }), render: ({ args }) =>
Searching for: {args.query}
, }, ]; {children} ; ``` The `renderToolCalls` array must be stable across renders. Define it outside your component or use `useMemo`. For dynamic tool rendering, use the `useRenderToolCall` hook instead. ### frontendTools `ReactFrontendTool[]` **(optional)** A static list of frontend tools that agents can invoke. These are React-specific wrappers around the base `FrontendTool` type with additional rendering capabilities. ```tsx const tools = [ { name: "showNotification", description: "Display a notification to the user", parameters: z.object({ message: z.string(), type: z.enum(["info", "success", "warning", "error"]), }), handler: async ({ message, type }) => { toast[type](message); return "Notification displayed"; }, }, ]; {children}; ``` The `frontendTools` array must be stable across renders. For dynamically adding/removing tools, use the `useFrontendTool` hook. ### humanInTheLoop `ReactHumanInTheLoop[]` **(optional)** Tools that require human interaction or approval before execution. These tools pause agent execution until the user responds. ```tsx const humanInTheLoop = [ { name: "confirmAction", description: "Request user confirmation for an action", parameters: z.object({ action: z.string(), details: z.string(), }), render: ({ args, resolve }) => ( resolve({ confirmed: true })} onCancel={() => resolve({ confirmed: false })} /> ), }, ]; {children} ; ``` ### a2ui `{ theme?: Theme; catalog?: any; loadingComponent?: React.ComponentType; includeSchema?: boolean }` **(optional)** Configuration for the A2UI (Agent-to-UI) renderer. The built-in renderer activates automatically when the runtime reports that `a2ui` is configured in `CopilotRuntime`. This prop is only needed to override defaults. | Option | Type | Description | | ------------------ | --------------------- | ------------------------------------------------------------------------------------------------------------ | | `theme` | `Theme` | Override the default A2UI viewer theme. | | `catalog` | `any` | Custom component catalog. Defaults to `basicCatalog`. | | `loadingComponent` | `React.ComponentType` | Custom loading component shown while a surface is generating. | | `includeSchema` | `boolean` | When `true` (default), full component schemas are sent as agent context so the agent knows what's available. | ```tsx {children} ``` ### children `ReactNode` **(required)** The React components that will have access to the CopilotKit context. ## Context Value The provider makes a `CopilotKitContextValue` available to child components through React context: ```typescript interface CopilotKitContextValue { copilotkit: CopilotKitCore; renderToolCalls: ReactToolCallRenderer[]; currentRenderToolCalls: ReactToolCallRenderer[]; setCurrentRenderToolCalls: React.Dispatch< React.SetStateAction[]> >; } ``` Access this context using the `useCopilotKit` hook: ```tsx import { useCopilotKit } from "@copilotkit/react-core"; function MyComponent() { const { copilotkit } = useCopilotKit(); // Access CopilotKitCore instance const agent = copilotkit.getAgent("assistant"); } ``` ## Considerations ### Server-Side Rendering (SSR) The provider is compatible with SSR but won't fetch runtime information during server-side rendering. The runtime connection is established only on the client side to prevent blocking SSR. ### Dynamic Updates You can dynamically update the following props: - `runtimeUrl`: Changing this will disconnect from the current runtime and connect to the new one - `headers`: Updates are applied to all future requests - `properties`: Changes are immediately available to agents