AI Elements

Tool

A tool call in the chat, collapsed to its name and status. Opens to show the input and the result as JSON.

packages/design-system/components/ai-elements/tool.tsx

Examples

searchProjects: Completed
Completed, open
Running
The calendar is not connected.
Error

Anatomy

  1. 01Tool, bordered
  2. 02Header: wrench, name, status badge, chevron
  3. 03Content
  4. 04Parameters
  5. 05Result or error

Usage

import { Tool, ToolContent, ToolHeader, ToolInput, ToolOutput } from "@repo/design-system/components/ai-elements/tool";

<Tool key={part.toolCallId}>
  <ToolHeader type={part.type} state={part.state} />
  <ToolContent>
    <ToolInput input={part.input} />
    <ToolOutput output={part.output} errorText={part.errorText} />
  </ToolContent>
</Tool>

Props

PropTypeDefaultDescription
ToolHeader type*"tool-" + name | "dynamic-tool"noneThe part's type. The name after tool- is shown unless title is set.
ToolHeader state*"input-streaming" | "input-available" | "output-available" | "output-error" | ...nonePending, Running, Completed, Error, plus the approval states. Sets the badge.
ToolHeader title / toolNamestringnoneA display name; toolName is required for dynamic tools.
ToolInput inputunknownnoneShown as JSON under Parameters.
ToolOutput output / errorTextunknown / stringnoneObjects become JSON, strings a code block. errorText turns it red.
open / defaultOpenbooleannoneOn Tool, a Collapsible.

Guidance

Do

  • Keep it collapsed by default; people open it when they wonder.

Don't

  • Show tool calls people never need to know about.

Where it's used