How to manage AI agent permissions
On this page
- Define a permission around an action
- Start with a permission matrix
- Use allow, deny and review deliberately
- Enforce the decision in the tool path
- Separate one-time approval from standing rules
- Test the boundary, including the route around it
- Record decisions without confusing them with outcomes
- Put the first policy into practice
AI agent permissions define which actions an agent may take, on which resources and under what conditions. Manage them at the point where a tool call can create an effect: identify the caller, resolve the resource, evaluate the request and enforce the result before the tool runs.
A useful starting point is a small permission matrix. List the operations your agent needs, make the scope explicit and decide which requests can proceed automatically, which need human review and which must stop.
This guide develops that model for a support agent. The policy and examples are illustrative; they are not an available Nodrail SDK or evidence of a deployed integration.
Define a permission around an action
“Can use the ticketing tool” is too broad for our example. The same tool can read a ticket, post a reply or delete a record. Those operations have different consequences, even when they share one API credential.
Describe each request using five pieces of context:
| Field | Example | Where it comes from |
|---|---|---|
| Caller | support-agent | Authenticated installation or workload identity |
| Tool | tickets | The registered tool implementation |
| Operation | ticket.read | The operation about to run |
| Resource | Ticket SUP-42 in project Support | A resource lookup your application trusts |
| Conditions | Read only, within this organization and environment | The applicable policy |
Do not accept the agent's claim that it belongs to another organization or that a ticket is in an allowed project. Resolve those facts from trusted application context. When an agent acts for a person, check the authority being delegated as well as the agent's own restrictions.
Permit's AI security framework distinguishes permission checks at several boundaries, including access to external tools. This article focuses on that boundary: the moment a proposed operation becomes a tool invocation.
Start with a permission matrix
Suppose your team has a support agent that reads tickets and drafts responses. Here is a deliberately narrow policy for the first deployment:
| Request | Decision | Reason |
|---|---|---|
Read SUP-42 in Support | Allow | An explicit read rule covers this agent and project |
Update a ticket in Finance | Deny | The resource is outside the permitted project |
Delete SUP-42 | Deny | Deletion is explicitly prohibited |
Post a reply to SUP-42 | Require approval | This write operation is eligible for review but has no standing permission |
The last row does not mean every unknown action should be approvable. An unknown resource, an unauthenticated caller or an explicit prohibition may require denial. Establish the boundary within which a reviewer is allowed to grant access.
Reading also deserves scrutiny. A read can expose personal information or export many records. The allow decision above applies to this specific example; it is not a general rule that all read operations are safe.
Use allow, deny and review deliberately
Allow means an applicable rule authorizes the current request. It should be possible to explain which agent, operation, resource scope and conditions matched.
Deny means the request cannot proceed. In this example, an explicit prohibition takes precedence over an allow rule or a human approval. Asking another reviewer must not become a way to bypass that prohibition.
Require approval means the tool has not run. The application records a pending request and waits for an authorized person to review it. If nobody approves before the deadline, the operation remains unauthorized.
Keep these states separate in the interface. “Pending” should not look like “Allowed,” and a failed notification must not change the decision. See how to add human approval to an agent workflow for the request lifecycle.
Enforce the decision in the tool path
A policy service can return a decision, but the component that invokes the tool has to honor it. For the support agent, place the check immediately before the ticket API operation and keep the proposed arguments stable through that check.
The following is architectural pseudocode, not executable SDK code:
request = resolve_and_normalize_proposed_call(trusted_context, proposed_call)
decision = evaluate_current_policy(request)
if decision is unavailable or invalid:
stop_without_invoking_tool()
else if decision is DENY:
record_denial_and_stop()
else if decision is REQUIRE_APPROVAL:
store_pending_request_and_pause_without_invoking_tool()
else if decision is ALLOW:
invoke_registered_tool_with_the_checked_request()
The final branch must use the checked request. If the agent changes the project, target ticket or reply body after authorization, treat it as a different request.
A hook or SDK can provide this checkpoint in an existing runtime. Its actual behavior matters: confirm which calls it intercepts, what happens when it fails and whether the agent can edit or bypass it. A prompt instruction to “ask first” does not establish that execution boundary.
Separate one-time approval from standing rules
For the reply operation, the reviewer might approve one exact message to one ticket. That decision should not authorize a different recipient, changed text or a later reply.
A standing rule is a separate policy change. For example, a team might eventually allow a specific agent to post an approved class of internal updates within Support. Review the full scope and make it revocable. A button labelled “Always allow” should show what “always” includes.
Even with a standing rule, a new covered call still needs a valid authorization decision under the current conditions. Document how quickly revocation takes effect and what happens to work already authorized or in progress. Revocation cannot undo a message that has already been sent.
Test the boundary, including the route around it
Before trusting the example integration, check its intended behavior with a simulated ticket tool:
| Scenario | Expected result in this model |
|---|---|
| A matching read rule | One permitted tool invocation |
| An explicitly denied deletion | No tool invocation |
| A reply waiting for review | No tool invocation until valid approval |
| Policy timeout or malformed response | No tool invocation |
| Resource or parameters changed after review | A new decision is required |
| Revoked standing rule | The next online check no longer permits through that rule |
These are acceptance criteria, not results from a test we have already run. Count actual calls to the simulated tool; a denial in a log is insufficient evidence if execution continues elsewhere.
Also try calling the ticket API outside the hook or SDK. If the runtime retains broad credentials and another network route, that call may avoid your checkpoint. Stronger guarantees require control over those alternative paths, such as constrained credentials and enforced execution or network boundaries. State that coverage clearly.
Record decisions without confusing them with outcomes
Keep enough context to investigate a decision: organization, agent identity, request ID, normalized action, resource, policy version, decision and any approval reference. Redact sensitive arguments according to what reviewers and operators need to see.
Record execution results separately. A permission record says an action was authorized; a result reported by the client says what that client observed. Neither should silently become a claim that the provider's state was independently verified.
Put the first policy into practice
Start with one agent, one tool and a short list of operations. Build the matrix, identify the enforcement point and verify allow, deny, pending and error paths before broadening access.
Nodrail is developing a headless permissions and human approvals layer for agents your team already runs. Supported integrations and installation instructions will be published when they have been tested. Explore Nodrail and join the waitlist, or continue with the human approval workflow guide.