` **(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