showcase/shell-docs/src/content/docs/generative-ui/tool-based.mdx
Tool-based Generative UI is the simplest form of Generative UI: you register
a React component with useComponent, and CopilotKit exposes it to the
agent as a tool. When the agent calls the tool, CopilotKit renders your
component inline in the chat, passing the tool's arguments straight through
as typed props.
Unlike tool rendering, which wraps a real backend tool in a custom UI, tool-based GenUI is the component. There is no handler, no user interaction, no server-side execution. The agent decides when to show it, populates the data, and CopilotKit paints it.
<InlineDemo demo="gen-ui-tool-based" />Use useComponent when you want to:
For components that need user interaction, see Human-in-the-loop. For operational transparency around a real backend tool, see Tool rendering.
useComponent takes a name, a Zod schema for its props, and the component
to render. The runtime registers it as a frontend tool so the agent can
discover it, and Zod validates the LLM's arguments before they reach your
component.
The component itself is ordinary React: it reads only its props and can stream in as the agent fills the payload. The example above uses Recharts for the bar chart; it doesn't know anything about CopilotKit.
<Callout type="info"> The `name` you pass to `useComponent` is what the agent sees as the tool name. Make it a verb like `render_bar_chart` or `show_weather` so the LLM reliably picks it when the user asks for that visualization. </Callout> <FeatureIntegrations feature="gen-ui-tool-based" /> <IntegrationGrid path="generative-ui/tool-based" />