GET ones, and block it from managing agents for
good.
1. Find the tool names
A permission names both the tool and who owns it. Built-ins start withtool:builtin: and are listed in Built-in tools.
Tools your workspace registered start with tool:workspace: and sit under
their toolset namespace, which you can list:
billing namespace publishes billing.lookup_invoice, so you
grant tool:workspace:billing.lookup_invoice. Managed provider toolsets (Gmail,
Calendar, Linear) ship with Matrices, so they never show up in that list. You
still grant them by name, like tool:managed:gmail.*.
2. Write the allows
http.request makes one HTTP call, using whatever method the model picked.
Put a condition on the entry and you pin that field, so this role can read from
an API but never write to one:
where is checked against the tool input exactly as the model wrote it. The
operators and paths are in Permissions.
3. Deny a whole family
An allow only ever adds tools. To take one away no matter what the other roles grant, deny it:tool:* can’t let this agent create or
delete agents. Denies only work on built-in tools, never on a toolset
namespace.
4. Select the role in the profile
Roles attach to the profile, not the agent. The patch replaces the whole list instead of adding to it, so send every role you want, including the one from the first guide:Check it worked
builtIns lists the exact tools the agent can call. http.request is there,
and nothing from agents.* is. conditional shows the GET-only grant. Ask the
agent to POST something and the call is refused before it runs.
Allows add up, conditions narrow one entry, denies win. The full stacking
table is in Permissions.
Where next
Approve a tool call
Let the write through, but only after a human says yes.
Connect a service
Give it a login to go with the permission.