
Least privilege for agent tools: a practical checklist
When an AI agent can call tools, least privilege is the difference between a safe product and a future incident. What to scope, what to deny, when to require approval, and how to keep automation usable.
When an AI agent can call tools, "least privilege" stops being a nice security principle and becomes the difference between a safe product and a future incident.
Most teams fail here in predictable ways:
- one shared bot token
- broad tool scopes "so it works"
- no field-level boundaries
- no approval gates
- logs that cannot answer "why was this allowed?"
This checklist is the practical version of least privilege for agent tooling: what to scope, what to deny, when to require approval, and how to keep automation usable.
The goal
Least privilege for agent tools means:
An agent should only be able to perform the minimum set of actions necessary, on the minimum set of resources, under the minimum set of conditions, with higher-risk actions gated and provable.
The "agent" here includes:
- the model-driven agent runtime
- any tool connector credentials it uses
- any delegated user authority it may receive
1) Inventory and classify your agent actions
Start by listing the actions your agent can perform. Do not list "tools." List verbs.
Examples:
- create_ticket
- update_ticket_status
- update_deal_stage
- add_crm_note
- create_issue
- merge_pull_request
- provision_user_access
Then classify each action by risk:
- Low risk: reversible, limited impact, internal-only
- Medium risk: affects workflow state, touches customer data
- High risk: money, access, production config, irreversible state transitions
If you cannot classify actions, you will over-approve or over-deny.
2) Scope by action first, not by tool
Tool-wide scopes ("crm.write", "jira.edit") are too broad for agents.
Least privilege for agents should start with:
- allowed actions (what verbs)
- mapped to tool operations behind the scenes
This makes policy stable even if your tool integration changes.
3) Scope by resource with explicit boundaries
For every action, define what resources it can touch.
Good scoping:
- "Deals assigned to this team"
- "Tickets in project X"
- "Repos in org Y, excluding production repos"
- "Users in tenant Z"
Bad scoping:
- "All deals"
- "All tickets"
- "Any repo"
Practical patterns:
- by project, team, tenant, or namespace
- by tags/labels (e.g., only tickets labeled "agent-managed")
- by environment (staging-only by default)
4) Restrict fields and state transitions
This is where most agent deployments either become unsafe or unusable.
Field-level controls
Define:
- writable fields (allowlist)
- sensitive fields (denylist)
- validation rules (format, length, allowed values)
Examples:
- allow update to status, priority, notes
- deny update to billing_email, discount_rate, role, permissions
State transition controls
Some changes are high risk because they carry business meaning:
- "Closed Won"
- "Resolved"
- "Refunded"
- "Provisioned"
For these, require:
- approval, or
- additional conditions (ticket reference, manager role, etc.)
5) Add thresholds and guardrails that preserve automation
Approvals should be the exception, not the default.
Use guardrails that keep routine work automatic:
- max value changes (e.g., amount change limit)
- rate limits (per hour/day)
- batch limits (max items per run)
- time windows (only during business hours)
- anomaly flags (spike in changes triggers approval mode)
These reduce risk without creating approval bottlenecks.
6) Separate "prepare" from "commit"
A powerful least-privilege tactic is making agents do prep work automatically, but gate the irreversible write.
Pattern:
- prepare: gather info, draft changes, propose diff
- commit: execute write after approval (or tighter policy)
Examples:
- draft customer email → human sends
- propose incident resolution summary → commander closes
- create PR with changes → reviewer merges
This keeps the agent useful while containing blast radius.
7) Require approvals only for truly high-impact writes
Approvals should trigger when:
- the action is irreversible or expensive to undo
- it crosses a trust boundary (access, money, production)
- it changes business-critical state
- it touches sensitive data fields
- it deviates from normal behavior (anomaly)
Also ensure approvals are:
- routed to the right owner group
- presented with clear context and a diff-like summary
- recorded as evidence
If approvals are noisy, they will be bypassed.
8) Make identity and delegation explicit
Least privilege collapses if you cannot say who the agent is and what authority it is using.
At minimum, be able to answer:
- which agent performed this action
- which run/instance
- whether it was acting for a user or as itself
- who owns the agent
Even if your product does not support full delegation, your audit trail should clearly show whether the agent operated under user context or system context.
9) Centralize tool credentials and minimize their scope
A common failure is giving the agent a powerful tool token because it is convenient.
Practical guardrails:
- store tool credentials centrally (not in the agent runtime)
- rotate credentials
- limit tokens to the smallest tool permissions possible
- separate tokens by environment and by action class if needed
You want the agent runtime to be unable to bypass your controls by calling the tool directly.
10) Make every decision provable
Least privilege is not only about preventing actions. It is about showing evidence that controls were applied.
You should have a record for:
- denied actions (and why)
- approved actions (and who approved)
- executed actions (and whether they succeeded)
This turns "we think we are safe" into "we can prove it."
A practical checklist you can use in reviews
Action scope
- List all agent actions as verbs (not tools)
- Categorize each action by risk
Resource scope
- Define explicit resource boundaries (tenant/project/team)
- Default to staging-only unless justified
Payload constraints
- Allowlist writable fields
- Denylist sensitive fields
- Restrict state transitions
Guardrails
- Threshold limits for amounts and counts
- Rate limits per run/day
- Prepare vs commit separation
Approvals
- Approval required only for high-risk actions
- Approval routing to correct owners
- Approval prompt includes context and diffs
Identity and credentials
- Clear agent identity and ownership
- Centralized tool credentials
- Tool tokens are scoped and rotatable
Evidence
- Every attempt is recorded (allow/deny/approval)
- Investigation can answer who/what/why quickly
If you can check these boxes, you will pass most enterprise "agent safety" scrutiny—and you will avoid the trap of shipping an agent that only works in demo environments.
Closing
Agents are powerful because they can take action. Least privilege is how you let them take action without turning your systems into an experiment.
Start with action-level scope, narrow the resource surface, constrain payloads, add guardrails, and reserve approvals for true exceptions.
That's how you keep automation alive while keeping risk bounded.