Tools & function calling
Tools let an agent do things, not just talk: look up an order, create a ticket, hit your API. The agent decides when to call a tool based on the conversation, and you control how it runs.
What a tool is
A tool is a configured capability the agent can invoke. Tools come in types: built-in actions, credentialed integrations, and custom HTTP calls to your own endpoints. Browse the available types and any presets from the tool catalog, then create a configuration for the ones you want.
Assign tools to a bot
When you create a bot from scratch, it starts with a set of built-in tools already assigned, so it can do useful things right away without any setup. You can keep, adjust, or remove any of them, and add more of your own on top. Each assignment can carry per-bot guidance and execution behavior:
- Tool instructions: extra guidance for when and how to use it.
- Speak during / after execution: whether a voice agent narrates the call.
- Error handling:
passthrough(let the agent see and react to the error) orhide. - Approval: whether an agent run pauses for a human before this tool runs. Never (default), Always, or When destructive (only for tools that delete data or send it externally). See approvals for what happens when a tool pauses.
Assigning replaces a bot's full tool set, so send the complete list you want. See the Tools API.
When a tool keeps failing
Tools fail now and then. A service is down, a key has expired, or a request was wrong. An agent doesn't keep hammering a tool that isn't working: if the same tool fails twice in one reply, with no successful call in between, the agent stops using tools for that reply. It then tells the person plainly what failed, what it did manage to finish, and what they can do next. Several failed calls made at the same moment count as one.
This works the same way on every channel, in live chats and in unattended runs. An autonomous run that ends like this shows as stopped early, with the reason the '<tool name>' tool kept failing.
For a custom HTTP tool, a response with an error status (400 or above) counts as a failed call, and its card in the conversation shows the error. The agent still sees the status and what the service sent back, so it can explain what went wrong.
Build a tool from your API docs
Don't want to hand-write a configuration? Tool discovery reads an API's documentation and drafts the configuration for you; review and save. It's available in the dashboard and over the API.
Test before you ship
Run a tool with sample parameters to confirm it works and returns what you expect, before you assign it to a live agent. The Test dialog fills in the parameters the tool accepts, and it really runs the tool against the live system, so start with a harmless call. Credentials and presets are covered next in Tool presets & credentials.
Classify what a tool can do
Each tool carries three safety flags that govern how it behaves in unattended runs: read-only (on by default; turn it off for a tool that writes, creates, or sends), destructive, and sends data externally. Destructive only applies when the tool isn't read-only. Classify a tool by what its credential can actually do (an SSH tool wired to a read-only account can be left non-destructive). These flags only restrict autonomous runs; interactive chat is never affected. (Tools imported from an MCP server may also carry an idempotent "safe to retry" annotation. It is informational only and has no behavioral effect today.)