Where an agent’s tools come from
delegate_agent and message_agent are reserved platform tool names: they are
published automatically when a version has delegates and are rejected inside
config.tools. A version may declare at most 64 tools with unique names and at
most 16 MCP bindings.
Add tools in the console
1
Open the latest version
Open Agents, select the agent, and stay on its latest version. Older
versions are read-only; every panel below edits a draft of the next
version.
2
Author caller and platform tools
Expand the Tools panel. It lists each tool as a collapsible row with a
syntax-highlighted preview of its input and output schema.
- Add tool opens a modal editor for one tool definition as JSON.
- Edit definition on a row opens the same modal for that tool.
- Edit JSON opens the complete tool list for authoring or pasting in bulk.
3
Select sandbox tools
Sandbox tools are not part of the Tools panel. Under Sandbox policy,
enable the sandbox and select exact capabilities:
filesystem_read adds
read; filesystem_write adds write and edit; shell adds bash,
grep, and glob; browser adds browser_navigate, browser_snapshot, and
browser_interact. See Daytona sandboxes.4
Bind MCP toolsets
Under MCP toolsets, check a published toolset and choose an exact-origin
credential policy for it. The binding pins the toolset version, the policy
version, and a namespace (the toolset key by default). Toolsets and policies
are managed under MCP connections; see Remote MCP
servers.
5
Publish
Select Publish new version. Publication appends an immutable version;
sessions created earlier keep the version and tools they started with, so
create a new session to exercise the new tools.
Add tools through the API
Publication sends the complete next configuration toPOST /projects/{projectId}/agents/{agentId}/versions — it does not patch the
previous version. Read the current config first, then republish it with the
changed tools, sandbox, or mcpBindings fields. The write requires
agent:write and an Idempotency-Key.
versions[0].config, add the tool, and publish:
mcp__<namespace>__<remote-name>. See Remote MCP servers
for publishing toolsets and policies.
Choose owner and approval
owner: "caller"creates durable work your application resolves: claim the tool call, keep the fence, and submit a result envelope that matches the publishedoutputSchema. See Resolve caller tools correctly.owner: "platform"requires a matching handler registered in the runtime worker. Without one, the invocation fails with the safeplatform_tool_failedoutcome.approval: "always"inserts a durable approval gate before either owner can execute; resolve it in Pending Work or throughPOST /approvals/{approvalId}/decision.
Verify the tools
Create a new session against the agent — existing sessions keep their pinned version. In the session detail:- Transcript shows tool invocations inline with their model-facing arguments and results.
- Pending Work lists unresolved caller tool calls and approval gates.
- Debug shows the chronological waterfall including sandbox commands and MCP calls.
GET /projects/{projectId}/tool-calls?runId={runId} and
GET /projects/{projectId}/pending-work return the durable tool ledger, and
retryable tool failures are surfaced to the model automatically (three total
attempts per tool per run).
Approval resolution before tool resumption
If an approval is denied or expires before its tool waiter resumes, the existing durable tool call returnsapproval_denied or approval_expired and the run
returns to running so the agent can explain the outcome and finish. Resuming
that same call is not a new retry and never executes a denied platform tool. A
new call attempting to repeat the denied or expired operation remains blocked
by the tool retry policy.

