Built-in Tools
Every agent gets a set of built-in tools: capabilities the platform provides directly, no integration to connect. They cover memory, cross-run history, self-management, and more.
Built-in tools are not passed in the tools array. That array is for 3rd-party integrations and custom tools; passing a built-in name like "memory" returns a 422. The four configurable built-ins are toggled with dedicated enable_* fields; the rest are gated automatically by your account and agent config.
The catalog
"Multi-tenant" means the tool is available on end-user (user_id-scoped) runs. First-party only tools act on the account owner, so they are never mounted on a multi-tenant run.
The four configurable toggles
memory, history, task_setup_tools, and feedback can be set at three levels. They resolve run → task → agent → platform default (on); the most specific wins, and an omitted toggle inherits the next level up:
How the non-configurable tools are gated
- email your owner is always available on first-party runs; Slack DM your owner turns on when a Slack workspace is connected. Both are off on multi-tenant (
user_id) runs. - company is mounted only for the Company Agent.
- read-only inbox follows the agent's fetchmail setting (
agents.enable_fetchmail/disable_fetchmail); SMS appears once you provision a Twilio number; computer use follows account-level sandbox execution.
Use discovery to see each tool's resolved enabled state for a given agent or end-user.
Task setup
Task setup tools let an agent manage work in its own scope mid-run: create tasks, set schedules, start and cancel runs, answer other runs' approval prompts, connect integrations, rotate webhooks, and write memories. On by default; disable per run with task_setup_tools=False (feedback=False works the same way):
Task setup tools act within the same account and same end-user scope: an agent can manage other agents, tasks, and runs in that scope, but never cross into a different end-user scope (Users).
Permissions: the tools follow the run's permission mode, but the status-change tools (set_task_status, set_teammate_status, set_task_schedule_active, set_allowed_email_senders) always require approval, even in autonomous or yolo mode. In unattended runs they email the owner and pause until answered. See Human-in-the-Loop.
API note:
teammate_idis the wire name for the agent id in JSON bodies, and tool names likelist_teammateskeep it too. The SDK acceptsagent_id(canonical) andteammate_idalike.
Tool reference
Older current-only tool names still work for compatibility; the canonical surface is below.
Read and inspect
Create and manage: tasks, schedules, agents, integrations
Status changes (always require approval)
These carry the irreversible or trust-sensitive operations. Each one asks for approval in every permission mode; in unattended runs it emails the owner and pauses.
App triggers (Composio)
Make a task reactive: run it when a connected app emits an event (a new GitHub issue, a Stripe payment, an inbound Gmail message). The app must already be connected as a Composio integration. See Webhook Triggers for the SDK/API path to the same triggers.
Examples: self-improving and self-wiring tasks
The agent completes work, then updates the task instructions to record its approach, so the next run skips discovery entirely:
Or the agent wires its own Composio app trigger, so the task runs automatically on a GitHub event:
Discovery
List the built-in tools with their resolved state. Pass agent_id to reflect that agent's defaults, or user_id to check multi-tenant availability:
Each entry reports name, server_name, display_name, description, enabled (resolved for the requested scope), multi_tenant_safe, and configurable.
Next: Tools · Users · Memories · Computer use
