Use case · Agent Permissions

The approver defines the boundary. The agent doesn’t get to interpret it.

Declare what each agent may do for each person — and enforce it at the tool-call boundary, not in the prompt.

The problem

“This agent can use Slack” is not a permission model — a service account gives an agent everything, for everyone.

01

Service accounts grant everything to everyone

02

Prompts ask; they can’t enforce

03

Permissions set once, reviewed never

04

The only boundary that holds sits outside the model

How a boundary gets enforced

Declare
The approver sets the rules

Default-deny grants at org, team, and member level — scope sets make it reusable.

Request
The agent asks for a call

The acting user's identity travels with every request.

Decide
The gate rules per call

Allowed, held for approval, or denied — enforced outside the model.

Apply
Changes bite on the next call

Policy reads live per request — no redeploys, no stale rules.

See it

support-bot · for: maya@same agent · for: raj@
POLICY · PER USER, PER ACTION
read_tickets · allowedissue_refund · needs_approvaledit_tickets · denied
Zendesk✕ never reached

THE POLICY GATE DECIDES PER CALL — THE MODEL NEVER HOLDS THE RULES

Capabilities

What you get

01
Default-deny, additive grants.
Nothing is reachable until granted — org, then team, then member.
02
Reusable scope sets.
Define “support tools, read-only” once; apply it everywhere.
03
Per-user overrides on shared agents.
Read-only for one person, read-write for another — same agent.
04
Off-limits tools don’t exist.
Agents see only the intersection of their permissions and the user’s.
05
Down to single actions.
Grant or deny specific actions per user — not just whole tools.
06
Changes apply on the next call.
Policy reads live per request — at most a token refresh, never a redeploy.

The payoff

One permission model for every agent — set by the people accountable for it.

Questions

Common questions

Related solutions