2 variants
Tool Call
What an agent does with its tools. A card for each call with a live timer and its input and output, and a permission prompt before anything that matters runs.
Tool call
One tool call with a status mark, a timer that counts while it runs, and the input and output folded underneath.
Input
{
"query": "next.js 16 caching changes"
}Output
[
{
"title": "Caching in Next.js",
"url": "nextjs.org/docs/app/guides/caching"
},
{
"title": "Next.js 16 release notes",
"url": "nextjs.org/blog/next-16"
}
]Input
{
"path": "app/page.tsx"
}Output
export default function Page() {\n return <Hero />;\n}Input
{
"command": "bun test"
}import { Globe } from "lucide-react";
import { ToolCall } from "@/components/registry/tool-call";
export function SearchStep() {
return (
<ToolCall
name="search_web"
icon={<Globe />}
status="done"
summary="Found 8 results"
duration={1240}
input={{ query: "next.js caching" }}
output={results}
/>
);
}162 more lines ship with an easeUI Pro license.
Buy a licenseInstall
$ bunx --bun shadcn add @easeui-pro/tool-call
Tool approval
A permission prompt that shows exactly what will run, then folds down to a one line record of the answer.
import { ToolApproval } from "@/components/registry/tool-approval";
export function ConfirmCommand() {
return (
<ToolApproval
title="Run a command in your terminal"
name="bash"
preview="bun add date-fns@4"
onDecision={(decision) => respond(decision)}
/>
);
}126 more lines ship with an easeUI Pro license.
Buy a licenseInstall
$ bunx --bun shadcn add @easeui-pro/tool-approval