tools-ui

Tool lifecycle UI components for React/Next.js from ui.inference.sh. Display tool calls: pending, progress, approval required, results. Capabilities: tool…

INSTALLATION
npx skills add https://github.com/inference-sh/skills --skill tools-ui
Run in your project or agent environment. Adjust flags if your CLI version differs.

SKILL.md

Install the belt CLI skill: npx skills add belt-sh/cli

Tool UI Components

Tool lifecycle components from ui.inference.sh.

Quick Start

npx shadcn@latest add https://ui.inference.sh/r/tools.json

Tool States

State

Description

pending

Tool call requested, waiting to execute

running

Tool is currently executing

approval

Requires human approval before execution

success

Tool completed successfully

error

Tool execution failed

Components

Tool Call Display

import { ToolCall } from "@/registry/blocks/tools/tool-call"

<ToolCall

  name="search_web"

  args={{ query: "latest AI news" }}

  status="running"

/>

Tool Result

import { ToolResult } from "@/registry/blocks/tools/tool-result"

<ToolResult

  name="search_web"

  result={{ results: [...] }}

  status="success"

/>

Tool Approval

import { ToolApproval } from "@/registry/blocks/tools/tool-approval"

<ToolApproval

  name="send_email"

  args={{ to: "user@example.com", subject: "Hello" }}

  onApprove={() => executeTool()}

  onDeny={() => cancelTool()}

/>

Full Example

import { ToolCall, ToolResult, ToolApproval } from "@/registry/blocks/tools"

function ToolDisplay({ tool }) {

  if (tool.status === 'approval') {

    return (

      <ToolApproval

        name={tool.name}

        args={tool.args}

        onApprove={tool.approve}

        onDeny={tool.deny}

      />

    )

  }

  if (tool.result) {

    return (

      <ToolResult

        name={tool.name}

        result={tool.result}

        status={tool.status}

      />

    )

  }

  return (

    <ToolCall

      name={tool.name}

      args={tool.args}

      status={tool.status}

    />

  )

}

Styling Tool Cards

<ToolCall

  name="read_file"

  args={{ path: "/src/index.ts" }}

  status="running"

  className="border-blue-500"

/>

Tool Icons

Tools automatically get icons based on their name:

Pattern

Icon

search*, find*

Search

read*, get*

File

write*, create*

Pencil

delete*, remove*

Trash

send*, email*

Mail

Default

Wrench

With Agent Component

The Agent component handles tool lifecycle automatically:

import { Agent } from "@/registry/blocks/agent/agent"

<Agent

  proxyUrl="/api/inference/proxy"

  config={{

    core_app: { ref: 'openrouter/claude-sonnet-45@0fkg6xwb' },

    tools: [

      {

        name: 'search_web',

        description: 'Search the web',

        parameters: { query: { type: 'string' } },

        requiresApproval: true, // Enable approval flow

      },

    ],

  }}

/>

Related Skills

# Full agent component (recommended)

npx skills add inference-sh/skills@agent-ui

# Chat UI blocks

npx skills add inference-sh/skills@chat-ui

# Widgets for tool results

npx skills add inference-sh/skills@widgets-ui

Documentation

Component docs: ui.inference.sh/blocks/tools

BrowserAct

Let your agent run on any real-world website

Bypass CAPTCHA & anti-bot for free. Start local, scale to cloud.

Explore BrowserAct Skills →

Stop writing automation&scrapers

Install the CLI. Run your first Skill in 30 seconds. Scale when you're ready.

Start free
free · no credit card