ai agent approvals
Design risk-based human approval for AI agent actions
Risk-based approval maps explicit, sourced action facts to allow, deny, or require approval. Human review covers the cases policy routes to require_approval.
- For
- Developers and platform teams deciding which AI agent actions need human review
- Reviewed
- Jul 14, 2026
- Length
- 1,353 words

Start with observable consequences
Treat the first pass as an architecture exercise. List the facts that change the consequence of an operation, then mark where each fact comes from and whether the system can trust it. That list can be broader than ActionProxy's current YAML: tool, operation, destination, amount, data class, scope, reversibility, requester, environment, and recent frequency may all matter to a design.
Turn the combinations you can actually establish into explicit outcomes. A bounded call may fit an allow lane, another may need human context, and a prohibited action belongs in deny. Any signal that lacks a trusted mapping should remain a documented gap rather than an optimistic condition.
Architecture signals worth inventorying
- Effect type: read, create, update, send, delete, transfer, or execute.
- Scope: one record, a bounded batch, or an open-ended target set.
- Destination: an internal system, a known customer, or an unverified external recipient.
- Data sensitivity: public information, routine business data, credentials, or regulated personal data.
- Reversibility: easy correction, compensating action, or an effect that cannot reliably be undone.
- Value and frequency: amount, rate, cumulative exposure, and unusual bursts.
- Identity and environment: which authenticated principal requested the call and whether it targets test or live systems.
The current YAML recognizes a smaller condition set
ActionProxy's evaluator recognizes actionId, appId, workflowId, operationKind, risk, customerVisible, recipientDomain, amount, currency, and approverGroup. Amount can be an exact number or use gt, gte, lt, lte, and eq thresholds. Every condition listed on a rule must match; an unknown condition key does not match.
Trust mappings narrow that list further on canonical HTTP. workflowId and approverGroup are absent until a trusted resolver supplies them, and caller risk metadata is not authoritative. Recipient-domain derivation is coarse, while customer visibility is available only for explicit known-tool mappings. Putting a desired signal in ordinary metadata does not make it trusted policy context.
Give each rule one of three clear outcomes
- Allow when the action is bounded, expected, and within a rule the team is willing to automate.
- Require approval when a legitimate operation needs human context or carries a consequence worth reviewing.
- Use deny for an explicit policy prohibition. When data required by a conditional rule is missing, that rule does not match; evaluation continues to the wildcard or default rather than choosing deny automatically.
An illustrative first matrix
For a support assistant, searching public documentation might be allowed. Sending a reply to a known customer could require approval when the message includes an attachment or a new recipient. Bulk outbound email could be denied until a separate campaign process exists. These are examples, not universal defaults; the right boundary depends on the business process and the facts your gateway can trust.
For refunds, a team might allow a narrow amount to the original payment method, review a higher band, and deny requests beyond an explicit ceiling. Amount alone is not enough: order identity, currency, requester, prior refund state, and destination can matter just as much.
Build the policy in six passes
- Inventory the actual tool calls that can create external effects. Use observed names and argument shapes, not a list of imagined future integrations.
- Group operations by effect and reversibility, then separate architecture signals from fields the current evaluator can derive and trust.
- Add explicit exact deny rules for prohibited tools, and test how their conditions interact with any matching wildcard and the configured default.
- Choose the wildcard and default posture deliberately, then add narrow allow rules with conditions whose provenance is understood.
- Add approval rules for the legitimate middle and state who is eligible to decide, what they must see, and when the review expires.
- Test boundary values, missing context, payload edits, policy changes, duplicate submissions, timeouts, and unknown execution outcomes before expanding the allow lane.
Show enough context to make a decision
A review card should name the action, meaningful arguments, requester, reason for review, applicable bounds, and the effect expected after approval. Raw JSON alone can hide the important difference between two calls. A friendly summary alone can omit the field that changes the risk. Present both a concise explanation and the structured values that authorization will bind.
Measure what each rule sends to review
Track why calls enter review, how often they are rejected or edited, which rules dominate the queue, and where outcomes are unknown. A high approval rate may mean the rule is correctly catching rare-but-valid work, or it may mean the lane is too broad. Read samples before changing policy.
Move a pattern into the allow lane only after its inputs are reliably bounded and the team accepts the residual consequence. Move recurring prohibited patterns into explicit deny rules. Keep a change record so a queue improvement does not become an invisible expansion of authority.
Common questions
Questions developers ask
What is risk-based human approval for AI agents?
It is a routing policy for proposed actions. Explicit, trusted facts select an allow, deny, or require-approval outcome, leaving human review for the cases where a person's decision is part of the rule.
Do I need an AI risk-scoring model?
No. ActionProxy does not implement risk scoring. Its current evaluator applies deterministic rules over a small condition vocabulary, and unsupported or unsourced signals need upstream design work before policy can rely on them.
How do I reduce approval fatigue?
Inspect which rules create the most reviews and sample their outcomes. Move a pattern only when its inputs are reliably bounded: accepted routine work can become allow, prohibited work can become deny, and uncertain cases can stay in review.
Can a reviewer change an ActionProxy tool call?
One authorized reviewer can use the edit path; the new payload is evaluated again and both identities remain in evidence. An approval that requires several decision makers rejects edited input in the current model.


