Tools extend what your agent can do. There are seven types of tools.
Tool Types
| Type | What it is | Use case |
|---|---|---|
| App | Any app from the grid | Image generation, search, transcription |
| Agent | Another agent | Delegate specialized tasks |
| Connector | MCP server tool | Linear, Slack, GitHub, Google |
| Call | HTTP API call | REST APIs, external services |
| Hook | External webhook | Connect to your own services |
| Client | Code-executed tools | Browser automation, custom logic |
| Internal | Built-in agent capabilities | Memory, planning, widgets |
All tools are managed in one place: the Tools tab.
Adding an App Tool
- Open your agent's settings
- Go to the Tools tab
- Click Add Tool → App Tool
- Search and select an app
The agent can now call this app.
What happens automatically:
- Name is extracted from the app
- Input schema becomes tool parameters
- You can customize the description shown to the agent
Configuring Setup & Default Inputs
App tools support two types of pre-configuration:
| Setting | Purpose | When it's used |
|---|---|---|
| Setup | One-time configuration values | Passed to the app on every call (e.g., API keys, model selection) |
| Default Inputs | Default parameter values | Merged with agent's call — agent can override these |
To configure:
- After adding an app tool, click Configure Setup or Configure Default Inputs
- Fill in the form fields
- Save the agent
Example: An image generation tool might have:
- Setup: API key, default model, safety settings
- Default Inputs: Default resolution, style preset
The agent only sees input parameters — setup values are hidden from the LLM.
Adding an Agent Tool
Agents can delegate to other agents:
- Go to Tools tab
- Click Add Tool → Agent Tool
- Select another agent
The main agent can now delegate tasks to it.
1Main Agent2├── Research Agent (gathers information)3├── Writing Agent (creates content)4└── Editor Agent (reviews and polishes)See Sub-Agents for more details.
Adding a Webhook Tool
Connect your agent to external services:
- Go to Tools tab
- Click Add Tool → Webhook Tool
- Enter a name and webhook URL
- Optionally add a secret and input schema
When called, the hook receives:
- Tool arguments
- A callback URL to return results
See Webhooks for implementation details.
Adding a Connector Tool
Connector tools call tools on MCP servers you've connected to — Linear, Slack, GitHub, and more.
- Go to Tools tab
- Click Add Tool → Connector Tool
- Select a connected MCP server
- Choose which tools to expose
The agent sees each tool with its name and description. Authentication is handled automatically at runtime.
1tools:2 - name: list_issues3 type: mcp4 description: List Linear issues5 mcp:6 server: "linear"7 tool_name: "list_issues"See Connectors for full documentation.
Adding a Call Tool
Call tools make HTTP requests to external APIs. Unlike webhooks, call tools execute directly — the agent sends a request and gets the response back immediately.
- Go to Tools tab
- Click Add Tool → Call Tool
- Configure the tool:
| Field | Description |
|---|---|
| Name | Tool name the agent sees (e.g. get_weather) |
| Description | What the tool does — helps the agent decide when to use it |
| URL | The endpoint to call (supports {{context.X}} templates) |
| Method | HTTP method (GET, POST, PUT, DELETE) |
| Input Schema | JSON Schema for the tool's parameters — becomes the request body |
Authentication
Call tools support multiple auth methods. Credentials are injected at runtime — never exposed to the agent.
| Auth Type | How it works |
|---|---|
| Bearer | Sends Authorization: Bearer <value> using a workspace secret |
| API Key | Sends a header with a workspace secret value |
| Credential | Uses a connected OAuth credential |
| None | No authentication |
Bearer auth is the most common. Set it up:
- Store your API key as a workspace secret:
belt secrets set my_api_key(prompts for the value; or pipe it on stdin) - In the tool config, set auth type to Bearer and reference the secret name
1auth:2 type: bearer3 secret: my_api_keyContext Templates
URLs can include {{context.X}} placeholders that resolve from per-chat context values. This lets one agent definition work across different resources.
1https://api.example.com/projects/{{context.project_id}}/tasksWhen starting a chat, pass context values:
1{2 "agent_id": "agent_abc123",3 "context": {4 "project_id": "proj_456"5 }6}Context is set once per chat and cannot change. See Context below.
Require Approval
For destructive or expensive operations, enable Require Approval. The agent pauses and waits for user confirmation before calling the tool.
Context
Context provides per-chat variables for the agent's tools. Declare the fields your agent expects, then pass values when creating a chat. The server puts the values into tool calls, call tool URLs and headers.
Declaring Context Fields
In the agent config, declare what context the agent needs:
1context:2 - name: project_id3 description: The project to operate on4 required: true5 - name: environment6 description: Target environment (staging or production)7 default: staging8 in_prompt: true| Field | Description |
|---|---|
name | Variable name, used as {{context.NAME}} |
description | Shown to the model next to the name |
required | Marks the field as expected. The server does not enforce it: a chat without the value still runs |
default | Value used when the caller does not send this key |
in_prompt | When true, the value is shown to the model too, labeled as data from the caller |
Passing Context
Context values are passed when creating a chat or running an agent:
REST API:
1{2 "agent_id": "agent_abc123",3 "context": {4 "project_id": "proj_456",5 "environment": "staging"6 }7}Belt CLI:
1belt agent run myteam/my-agent "do the thing" \2 --context project_id=proj_456 \3 --context environment=stagingContext is immutable — once set on a chat, it cannot change. This ensures all tool calls within a conversation operate on the same resource.
How the agent uses context
Context values are not written into the system prompt. The prompt lists the variables the chat has (names and declared descriptions) and tells the agent to write {{context.NAME}} in a tool call's arguments. The server substitutes the value when the tool runs:
1{ "project": "{{context.project_id}}", "status": "open" }- Substitution applies to app, http, call, MCP, hook and client tools.
- Sub-agents,
spawn, internal tools andremote_execget the placeholder as written. - A sub-agent starts with no context variables. The delegating agent passes the ones it chooses in the call's
variablesargument, for example{"customer_id": "{{context.customer_id}}"}. The server fills the value in from the parent chat and stores it as the sub-chat's context, so neither model sees it. A placeholder the parent can't fill is dropped. - The model's own history keeps the placeholder, so the value does not reach the model through its tool calls.
- A placeholder that names no variable is left as written.
- Keys the caller sends that the agent does not declare are variables too, listed by name.
{{context.X}}in http and call tool URL and header templates is resolved too.
Fields with in_prompt: true are the exception: their values appear in the system prompt under a section that labels them as the caller's data and tells the model not to follow them. Use it only for values the model needs to read, such as a customer's display name.
Client Tools
Client tools execute in your application code. They're defined with a handler function that runs when the agent calls the tool.
1import { tool, string } from '@inferencesh/sdk'23const myTool = tool('search_ui')4 .describe('Scans the UI for interactive elements')5 .param('query', string('Search query'))6 .handler(async (args) => {7 // Your code runs here8 return JSON.stringify({ results: [...] })9 })A client tool's result can also carry files, such as a screenshot: upload them first and return them as attachments. Images reach models that accept images. See Returning files.
Client tools are useful for:
- Browser automation (DOM interaction)
- Accessing local resources
- Custom business logic
- Integrating with frontend frameworks
The inference.sh browser extension follows this pattern. Its agent, infsh/browser-agent, declares client tools (read_page, get_source, fill, click, press_key, scroll, edit_dom, navigate, screenshot, list_tabs, switch_tab) that run in the extension against the user's active tab. screenshot uploads the visible tab and returns it as a tool-result attachment.
Internal Tools
Internal tools are built-in capabilities provided by the runtime. They're automatically available based on agent configuration.
Plan Tools
Task planning for complex multi-step operations:
| Tool | Description |
|---|---|
plan_create | Create a plan with steps |
plan_update | Update step status |
plan_load | View current plan |
Memory Tools
Per-chat scratch key-value notes: only this chat sees them. Use knowledge tools for facts that should reach later chats.
| Tool | Description |
|---|---|
memory_set | Save a scratch note under a key |
memory_get | Read a scratch note by key |
memory_getall | List all scratch notes in this chat |
Widget Tool
UI rendering for interactive forms (top-level agents only):
| Tool | Description |
|---|---|
widget | Create forms, buttons, cards |
Finish Tool
For agents to report structured output:
| Tool | Description |
|---|---|
finish | Report status and results |
When output_schema is set on the agent config, the finish tool validates results against the schema. See Structured Output for details.
Skills Tool
Load skill content on-demand (when agent has skills defined):
| Tool | Description |
|---|---|
skill_get | Retrieve a skill's full content |
See Skills for more details on defining and using skills.
Example App Tools
| Tool | What it does |
|---|---|
stable-diffusion | Generate images |
whisper | Transcribe audio |
summarize | Condense text |
web-search | Search the internet |
How Agents Use Tools
When you chat:
1You: Generate a sunset image23Agent: I'll create that for you.4 [Calling stable-diffusion with prompt "sunset"]56 Here's your sunset image!The agent decides when to use which tool based on your request.
Tool Descriptions
Each tool has a description that tells the agent what it does. Good descriptions help the agent choose the right tool:
Generic:
1Search the webBetter:
1Search the web for current information. Use when you need up-to-date2facts, news, or information not in your training data.