tools field when creating or updating an Agent, you precisely control its capabilities.
What tools do
When executing a task, the Agent decides which capabilities it can call based on thetools configuration. Built-in tools are configured through { "type": "agent_toolset_20260401", "enabled_tools": [...] }, selectively enabling atomic tools in the enabled_tools array. Client-side custom tools are configured as separate { "type": "custom", ... } entries.
When enabled_tools is a non-empty allowlist, tools outside the list are not visible to the model and no invocation attempt is made. When enabled_tools is omitted or an empty array, all built-in tools are exposed to the model. When the tools field itself is omitted or set to [], the model receives no tool schema at all (see FAQ below).
Available tools
| Tool name (enabled_tools value) | Purpose | Typical use cases |
|---|---|---|
Bash | Shell command execution | Installing dependencies, running scripts, calling APIs with curl |
Read | File reading | Viewing mounted files, code reading |
Write | File writing (create/overwrite) | Generating reports, producing output |
Edit | Partial file editing | Changing configuration, editing code |
Glob | Glob pattern file listing | Finding code files |
Grep | File content search | Locating strings |
WebFetch | HTTP GET a single page | Fetching documentation/pages |
WebSearch | Web search | Looking up information |
DeliverArtifacts | Deliver files the Agent produced under /data/ to the user as downloadable artifacts. Emits agent.artifact_delivered events. | When the user asks for a file/report/export as a deliverable |
- Tool names must use the exact values in the table, and event streams use the same values
- Omitting
enabled_toolsor passing an empty array[]enables all built-in tools (includingDeliverArtifactslisted above). If you want the Agent to have no tools at all, omit the wholetoolsfield or set it to[]. - When
enabled_toolsis a non-empty allowlist, only the listed tools are visible to the model. To useDeliverArtifactsalongside a custom allowlist, you must include it explicitly (e.g.["Bash", "Write", "DeliverArtifacts"]). - Each tool name in
enabled_toolsis validated — writing an unknown name (e.g."Foo") returns 400:"unknown tool name 'Foo'" - Built-in and MCP tool permissions are configured with
configs[].permission_policy; see Permission Policies. - The old per-tool-object schema (such as
{"type": "bash_20250124"}) is no longer supported
Current format: single object
Built-in tool configuration uses a single object that toggles specific tools via theenabled_tools array:
Custom client-side tools
Custom tools let your application expose actions that the Agent can request but the platform does not execute directly. When the Agent calls a custom tool, the session pauses with arequires_action stop reason. Your client executes the tool and sends the result back with a user.custom_tool_result event.
name,description, andinput_schemaare required.input_schemamust be a JSON Schema object with"type": "object".- Custom tool names are case-insensitively unique within the Agent.
- A custom tool name must not collide with a built-in tool name such as
BashorRead. - Names starting with
mcp__are reserved for MCP tools. permission_policyis not supported on custom tools because the client executes them.
user.custom_tool_result response flow.
Configuration examples
- Minimal (CLI only)
- Full development stack
Create a new version (PUT full replacement)
Use PUT to create a new version of the Agent with updated tool configuration:PUT is a full replacement (not a patch) — fields not included will be cleared. You must include the
version field for optimistic concurrency control:- If the supplied version matches the current version: 200, version increments by 1
- If the supplied version is stale: 409
{ error: { type: "conflict_error", message: "Version conflict. Expected version N, got M." }}
Inspect current tool configuration
FAQ
Q: What if I don’t configuretools? A: The Agent has no tools available and can only have plain-text conversations. To give the Agent any tool capability, pass at least [{"type":"agent_toolset_20260401"}] (which enables all built-in tools).
Q: Can I override tools at the Session level? A: Not currently. Tool configuration is bound to the Agent, and all Sessions for that Agent share the same toolset.
Q: Does the order of tools matter? A: No. The Agent decides which tool to invoke based on the task context.
Q: Will the version suffix change over time? A: Yes. As new tool versions ship, new dated suffixes are introduced. Watch the changelog and adopt the latest suffix.
Next steps
Permission policies
Control which tool calls run, ask, or deny.
Agent Skills
Attach domain expertise to your agent.
Start a session
Run an agent against an environment.
Agent setup
Review Agent configuration.