Control what an agent can do
Permissions decide which tool calls an agent makes on its own and which ones stop and wait for you. This page covers the two places you set them, which one wins, and what an approval request looks like mid-run. For the model behind them, see Permissions.
The two places permissions are set
The agent's policy covers every tool at once. It lives in the Advanced dialog and it is the baseline.
A tool's own permission covers that one action and overrides the policy. It lives in the tool's detail dialog. Use it to carve out an exception: one action that always runs, or one action that is never allowed, while everything else follows the policy.
Set the agent's default policy
- In the playground, set Playground mode to
Build. - In the Configuration column, click Advanced.
- Open the Permissions section.
- Pick a
Policy, then clickSave.
Policy | What it does |
|---|---|
Allow reads | Reads run, writes ask. This is the default. |
Allow all | Every tool runs without asking. |
Ask | A human approves every tool call. |
Deny all | Every tool call is refused. |
Under Allow reads, a connected-app action counts as a read when it carries the READ-ONLY badge in the Add app tools dialog. Anything without that badge asks.
Override the permission for one tool
- In the Configuration column, open Tools.
- Click the tool's row.
- In the
TOOL DETAILSpane, setPermission, then clickSave.
Permission | What it does |
|---|---|
Inherit | Follows the agent's Policy. This is the default. |
Allow | This tool runs without asking, whatever the policy says. |
Ask | This tool always waits for approval, whatever the policy says. |
Deny | This tool is always refused. |
Permission is on connected-app tools (listed under CONNECTED APPS) and on tools you write with Tool definition. Built-in tools have no per-tool permission: clicking one opens a read-only view with the subtitle Provider built-in tool, and the agent's Policy governs it instead.
Which setting wins
When the agent calls a tool, the first of these that applies decides:
- The tool's own
Permission, when it is anything other thanInherit. - An entry in
Auto-approve. - The agent's
Policy.
Take a built-in tool away entirely
Permission is not the only lever on built-in tools. Below Policy, a pill names the agent's harness, and the fields under it belong to that harness. On Pi, Built-in tools lists the built-ins the agent has as multi-select tags: Read, Bash, Edit, Write. Remove a tag and the agent no longer has that tool at all, so there is nothing to approve or deny. Clearing the field leaves the agent with no built-ins.
Approve or deny a call while the agent runs
When a gated tool comes up mid-run, the conversation shows a card titled Approval needed to continue, and the run pauses. The status above it reads Waiting for your input, and the tool's row reads Awaiting approval.
- Expand
Detailsto read the arguments the agent wants to pass, as JSON. - Click
Approveand the run continues from where it paused. ClickDenyand the action does not happen. - Anything you type while the card is open is queued until you answer.
Stop being asked about a tool you keep approving
Turn on Always allow <Tool> for this agent on the approval card before you click Approve. That tool then runs without asking, on this run and on later ones, and it appears in the Auto-approve field in the Permissions section. Everything else still prompts.
Auto-approving from the card is a draft change like any other. Commit it if you want triggers to use it, since a schedule or an event trigger runs the committed version.
Limit what the sandbox can touch
The Execution environment section of the Advanced dialog sets where tools and code run.
Sandbox has two options. With Local, that is the only field. With Daytona, three more appear:
| Field | Options |
|---|---|
Network egress | Allow all egress, Block all egress, Allowlist (CIDR ranges). The allowlist option reveals an Allowlist textarea for the ranges you permit, such as 10.0.0.0/8. |
Filesystem | Read / write, Read-only, No access. |
Enforcement | Strict (fail if unenforceable), Best effort. |
Before the agent runs unattended
An automation has nobody in the chat to answer an approval request, so a run that hits one waits instead of finishing. Before you put an agent on a schedule or an event trigger, set every tool it needs to Allow (or set the policy to Allow all) and set anything it must never do to Deny.
Next
- Manage skills and Add an MCP server both add actions that these settings then govern.
- Create an automation covers running an agent with nobody watching.