Which Hook for Which Job
Choose the right CopilotKit v2 hook for tools, rendering, human review, and custom chat surfaces.
Open your coding agent in your project's folder, or in an empty folder for a new app.This runs in a coding agent on your computer.
CopilotKit v2 has a focused set of hooks for letting the agent do things in your app and for rendering what it does. They split into two groups: hooks that register behavior, and hooks that register how a tool call looks in the chat. Use this page as the quick map, then follow each hook to its full reference.
The 30-second version#
| Hook | Use it when you want to |
|---|---|
useFrontendTool | Give the agent a client-side tool to call (run logic in the browser), with optional inline UI. |
useRenderTool | Render the UI for a specific tool call by name (typed), without defining the tool's handler. |
useDefaultRenderTool | Provide one wildcard renderer for any tool call that has no specific renderer. |
useComponent | Register a React component as a named tool renderer (component-first generative UI). |
useHumanInTheLoop | Pause the agent on a tool call and wait for the user to approve, edit, or supply input. |
useInterrupt | Handle an agent-initiated interrupt and resume execution once the user responds. |
useRenderToolCall | Get a render function for tool calls to drive your own custom chat surface (headless). |
How to choose#
Start with the verb.
- "The agent should run something in my app." Use
useFrontendTool. You define the tool's schema and handler; the agent calls it. Add arenderto also show inline UI for the call. - "The agent's tool call should look like something." Use a render hook.
Use
useRenderToolto render one named tool,useComponentto bind a React component to a tool name, oruseDefaultRenderToolas the catch-all for anything you didn't render explicitly. - "The agent should stop and ask me before continuing." Use
useHumanInTheLoopfor tool-level approval/edit gates, oruseInterruptfor agent-driven interrupts you resume with user input. - "I'm building my own chat UI." Use
useRenderToolCall. It returns the renderer function so you can place tool-call output anywhere in a headless layout.
Tool vs. renderer#
Two hooks in this set register a tool the agent can call: useFrontendTool
(schema and handler) and useComponent (a component-first
shorthand that wraps useFrontendTool internally, registering a tool whose
"handler" is rendering your component). The render-only hooks, useRenderTool,
useDefaultRenderTool, and useRenderToolCall, don't define a tool; they
only render tool calls, which can come from your frontend (useFrontendTool /
useComponent) or from the agent/backend. That's why you can pair a backend
tool with useRenderTool and never write a handler on the client.
Related#
- Frontend Tools: the full guide to
useFrontendTool. - Generative UI: rendering tool calls as rich UI.
- Human in the Loop: approval and interrupt patterns.
- Hooks reference: every v2 hook in detail.