ToolFallback

Default UI component for tools without dedicated custom renderers.

Getting Started

Add tool-fallback

npx shadcn@latest add https://r.assistant-ui.com/tool-fallback.json

This adds a /components/assistant-ui/tool-fallback.tsx file to your project, which you can adjust as needed.

Use it in your application

Pass the ToolFallback component to the MessagePrimitive.Parts component

/components/assistant-ui/thread.tsx
import { ToolFallback } from "@/components/assistant-ui/tool-fallback";

const AssistantMessage = () => {
  return (
    <MessagePrimitive.Root>
      <MessagePrimitive.Parts
        components={{
          tools: { 
            Fallback: ToolFallback 
          },
        }}
      />
    </MessagePrimitive.Root>
  );
};

Examples

Streaming Demo

Interactive demo showing the full tool call lifecycle: running → complete.

Running State

Shows a loading spinner and shimmer animation while the tool is executing.

Cancelled State

Shows a muted appearance when a tool call was cancelled.

Composable API

All sub-components are exported for custom layouts:

ComponentDescription
ToolFallback.RootCollapsible container with scroll lock
ToolFallback.TriggerHeader with tool name, status icon, and shimmer
ToolFallback.ContentAnimated collapsible content wrapper
ToolFallback.ArgsDisplays tool arguments
ToolFallback.ResultDisplays tool execution result
ToolFallback.ErrorDisplays error or cancellation messages
import {
  ToolFallback,
  ToolFallbackRoot,
  ToolFallbackTrigger,
  ToolFallbackContent,
  ToolFallbackArgs,
  ToolFallbackResult,
  ToolFallbackError,
} from "@/components/assistant-ui/tool-fallback";

// Compound component syntax
<ToolFallback.Root>
  <ToolFallback.Trigger toolName="get_weather" status={status} />
  <ToolFallback.Content>
    <ToolFallback.Error status={status} />
    <ToolFallback.Args argsText={argsText} />
    <ToolFallback.Result result={result} />
  </ToolFallback.Content>
</ToolFallback.Root>
  • ToolGroup - Group consecutive tool calls together