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 integration_id: "integ_abc123"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 team secret |
| API Key | Sends a header with a team secret value |
| Integration | Uses a configured OAuth integration |
| None | No authentication |
Bearer auth is the most common. Set it up:
- Store your API key as a team secret:
belt secrets set my_api_key sk-xxx - 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 that get resolved in call tool URLs. Declare the fields your agent expects, then pass values when creating a chat.
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 required: falsePassing 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.
Context values also appear in the agent's system prompt as a ## Context section, so the agent knows what it's working with.
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 })Client tools are useful for:
- Browser automation (DOM interaction)
- Accessing local resources
- Custom business logic
- Integrating with frontend frameworks
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
Key-value storage that persists across messages:
| Tool | Description |
|---|---|
memory_set | Store a value |
memory_get | Retrieve a value |
memory_getall | Get all stored memories |
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.