AI agents
Key points

Key points

  1. 1Route every agent action on three separate axes, reversibility, blast radius and calibrated confidence, and let the combination decide where it goes.
  2. 2Reversible actions with small blast radius belong in auto-approve no matter what the model's confidence score says, because a rollback is cheaper than a review.
  3. 3Irreversible or security-sensitive actions belong behind a hard block or a two-approver gate that the agent cannot argue its way past.
  4. 4Encode the rules as policy at the tool boundary with explicit numeric thresholds, then measure the queue's review rate and tighten or loosen the numbers from evidence.

Why the routing problem comes before the gate

Most teams building agent oversight start by picking a gate: LangGraph interrupts, a request port in the Microsoft Agent Framework, an approval-required wrapper around a function tool. Those are mature and well documented. The Microsoft Agent Framework lets you wrap any function in an ApprovalRequiredAIFunction and the agent run returns a ToolApprovalRequestContent instead of executing it, so the caller can approve or reject and resume the session 6. LangChain's Deep Agents exposes an interrupt_on map per tool with an allowed_decisions list, and a checkpointer is required so the run can resume 8.

The gate is the easy part. The hard part is the decision that precedes it: for this specific invocation, with these arguments, right now, does anyone need to look before it runs. That question is not answered by OAuth scope. Scope is a grant-time primitive that says the agent may call a category of operation; it cannot distinguish a single-field update in a sandbox from a bulk update of ten thousand production records, which share identical scope 5. Every agent action therefore needs an invocation-level classification, and that classification is what your routing policy encodes.

The second reason to start with routing is economic. Review capacity is finite and human attention is the scarcest resource in the system. Human-in-the-loop designs earn their keep only when review is reserved for high-impact, uncertain or regulated decisions; applied everywhere, they become a bottleneck that teams route around 4. A routing policy is how you decide which actions deserve a person.

The three questions to ask of every proposed action

Ask the same three questions of every action the agent proposes, before it runs. The answers are properties of the action and its arguments, not of the agent's prose rationale.

Can it be undone without residue

Reversibility is the primary axis, and the useful definition is strict. Undoable means you can restore the prior state completely: no notification already delivered, no external party already acted on it, no third-party system already acknowledged it. Sending a draft into a review folder is reversible. Sending an email to a customer is not. Writing to a staging table is reversible. Writing to a production ledger is not. Anthropic's framework for trustworthy agents treats irreversibility as a distinct risk axis and recommends preferring reversible actions and requesting narrower scope when reversibility is unclear, as cited in the Scalekit analysis 5.

A practical test: if the action executes and you discover it was wrong ten minutes later, what does recovery cost? If the answer is "delete a row" or "git revert", it is reversible. If the answer is "call the customer and apologize" or "reconcile the ledger by hand", it is not.

How far does the damage spread

Blast radius is the count and reach of what one invocation touches: records, systems, people, money. A tool that updates "a customer record" should accept exactly one record per call, not a batch parameter that lets one invocation fan out across a table because batching was convenient to implement 18. Scope creep in tool design is the quietest way blast radius grows, because nobody decided to let the agent touch the whole table, it simply was not prevented.

Blast radius also has a rate dimension. One bad refund is a data point; fifty in an hour is an incident. Cap the number of actions of a given type per minute, hour or session regardless of whether each one individually looks fine, and cap the aggregate value moved in a window, with the cap requiring a manual reset rather than a silent cooldown 18.

How confident is the model, discounted for calibration

Treat the model's stated confidence as a weak signal, discounted by how well it has been calibrated on your traffic. LLM confidence reflects token probability, not factual accuracy, and an agent can be highly confident about an action that turns out wrong; one production team recorded an average confidence of 0.87 on actions later judged incorrect, which made confidence-only thresholds useless 20. Calibration is achievable but needs labeled data for your specific domain and degrades as the input distribution shifts 20.

So compute a calibrated score: bucket historical actions by the model's raw confidence, count what fraction in each bucket were actually approved or correct, and use the observed rate, not the raw number. If the model says 0.9 and your bucket data says actions in that range were right 0.72 of the time, 0.72 is the number that enters the policy.

How the answers map to auto-approve, queue or block

Route on the combination, in a fixed order, because some combinations must dominate others. Irreversibility overrides confidence: a confident irreversible action is still irreversible. Blast radius overrides reversibility: a reversible action that touches ten thousand records can be undone, but the rollback itself may be an incident.

ReversibilityBlast radiusCalibrated confidenceRouteWhy
ReversibleLow (1 record, 1 system)AnyAuto-approveWrong call costs a rollback, not attention
ReversibleMedium (bounded batch, under caps)Any, within rate capAuto-approve, then sample-auditCaps bound the worst case
ReversibleHigh (crosses caps or shared infrastructure)AnyReview queue, with predicted blast radius attachedRollback is itself disruptive
IrreversibleLowHigh and calibratedReview queue, one approverOne-way door, small stakes
IrreversibleLowLow or uncalibratedReview queue, two approvers or a restore planOne-way door plus uncertainty
IrreversibleHighAnyHard block by default, escalation requires an out-of-band changeNo safe autonomous path
Security-sensitive (IAM, audit logs, prod access from staging)AnyAnyHard blockOutside the agent's authority entirely

The table above mirrors the tiering that runtime policy guides converge on: reads allow and record, sensitive reads refuse or redact, reversible narrow-reach changes allow under a bound, reversible wide-reach changes hold for one named approver, irreversible changes hold and require a restore plan, and security-sensitive changes are refused outright 17.

The decision rule in prose: if the action is reversible and its blast radius is under the tier's numeric bound, send it to auto-approve even when confidence is mediocre, because the cost of a wrong call is a rollback and the cost of a review is a person's scarce attention. If it is irreversible or over the bound, it goes to a human, and the number of required approvers scales with uncertainty. If it falls in the security-sensitive class, it is blocked no matter how confident or how reversible it claims to be.

Worked example: a support agent that issues refunds

Take a support agent that can issue refunds. Make the numbers explicit and inspect what they do to routing.

Define the tool so one invocation processes exactly one refund, with a cap of three refunds per account per rolling 24 hours, an approval trigger for any single refund above a fixed dollar threshold, and an aggregate cap on dollars processed per hour that requires manual reset 18. Assume your history shows the agent's refunds are approved by reviewers without edits in most cases and the reversibility is genuinely high (a refund can be reversed by a compensating charge, though the customer sees the fluctuation).

Now classify three proposals:

  • A $12 refund on a single order, first refund for that account today. Reversible, low blast radius, under every cap. Route: auto-approve. Nobody looks, and if it was wrong, a compensating charge fixes it.
  • A $900 refund, the second for the account today. Reversible, single record, but above the dollar threshold. Route: review queue with the order, the customer history and the proposed amount attached. One approver.
  • A batch adjustment crediting 4,000 accounts after a pricing error. Over the rate cap and the aggregate cap in one invocation, touching many records across a shared system. Route: review queue with predicted blast radius attached, and two approvers, because rolling it back would itself be disruptive. If the tool had no batch parameter and the agent proposed 4,000 sequential single-record calls, the rate gate refuses the fourth and asks for a human.

The useful insight here is that the batch case and the single case differ in policy outcome for reasons that have nothing to do with the model's confidence. Two proposals the model rates at 0.95 land in different routes because one is a one-way door across a wide surface and the other is a small reversible change.

Encoding the policy with explicit thresholds

Put the policy at the tool boundary, outside the model. A rule in the system prompt is text the model reads, and a prompt injection can override it; a rule at the gate is outside the model's reach 17. Runtime guardrails compare each live action against policy and either let it through, hold it, escalate to a human or shut it down 12.

A minimal policy as data, evaluated on the tool call and its parsed arguments:

# policy.yaml, evaluated before every tool execution
defaults:
  on_unknown_tool: block
  require_agent_identity: true
  log_decision: always

tiers:
  read_logs:
    class: read
    route: auto_approve
  read_customer_record:
    class: read_sensitive
    route: block            # return redacted result instead
  update_ticket_status:
    class: reversible_narrow
    max_records: 1
    max_calls_per_hour: 60
    route: auto_approve
  issue_refund:
    class: reversible_narrow
    max_records: 1
    max_amount_usd: 250
    max_per_account_24h: 3
    aggregate_cap_usd_per_hour: 2000
    over_cap_route: review_queue
    approvers: 1
  bulk_price_adjust:
    class: reversible_wide
    max_records: 50
    over_cap_route: review_queue_with_blast_radius
    approvers: 2
  schema_migration:
    class: irreversible
    requires_restore_plan: true
    over_cap_route: review_queue
    approvers: 2
  rotate_credentials:
    class: security_sensitive
    route: hard_block

Three details make this work in practice. First, the policy evaluates arguments, not just tool names: a restart in a staging namespace and a restart in the payments namespace are different actions and belong in different tiers 17. Second, every grant is scoped to one task and expires, because a grant that outlives its task becomes a standing permission 17. Third, the credential valid at pause time is not guaranteed to be valid at resume time, which is the failure most approval-gate implementations skip; the queue-then-execute model holds credential state across the pause window and the agent references an identity and connection name rather than a raw token 5.

Layer the enforcement. Framework hooks (approval flags, interrupts) run inside the agent's process; a policy engine at the tool boundary intercepts each action before execution; infrastructure backstops such as cloud IAM and admission control refuse the request at the API even when the agent-side check is skipped 17. You need at least two of the three, because each covers a gap in the others.

Review queue mechanics: what the reviewer needs to decide in under a minute

A queue is only as good as the packet attached to each item. The reviewer needs the proposed action, the exact arguments, the agent's stated intent, the relevant context (customer history, recent similar actions), the predicted blast radius with the numbers that produced it, and a one-click approve or reject that records the decision. MLflow's review queues frame this as turning a spreadsheet of traces into a support-ticketing workflow: you define a queue with a name and an evaluation question, and flagged traces are assigned automatically or by rule 9. The Chevrolet dealer case, where a chatbot agreed to sell a vehicle for one dollar and called it legally binding, is the canonical reminder of what happens when a plausible but catastrophic action has no checkpoint 9.

Make the queue produce data, not just decisions. Every approve, edit and reject is a labeled example of what a human deems acceptable, and enough of them let you train a judge to pre-screen the queue or to tighten the thresholds that feed it 9. This is the mechanism by which routing improves: the thresholds are hypotheses, and queue outcomes are the test.

Two design choices matter more than the UI. Do not let an agent assess its own risk and set its own route; the gate's job is to route differently based on which side of the reversibility line an action falls on, not to trust the agent's estimate of its own danger 18. And separate autonomy from authority: autonomy is how many steps the agent takes unprompted, authority is which of those steps can finish without a human, and conflating them forces the false choice between a useless agent and a dangerous one 16.

Tuning the thresholds and closing the loop

Track four numbers per tier and review them weekly. The auto-approve error rate, meaning approved autonomously and later reversed or corrected, should stay below the cost you assigned to a rollback. The queue approval rate, meaning items a reviewer approved without edits, tells you whether the tier is over-gated. The queue latency, from enqueue to decision, tells you whether agents are stalling on human attention. And the block rate, which should be near zero for legitimate work and non-zero for attack attempts, because a hard block that never fires in production is untested.

Route from the data. If a queued tier is approved without edits in the large majority of cases over a sustained window, consider narrowing its blast radius in the tool design and moving it to auto-approve with sampling. If an auto-approved tier shows reversals above your tolerance, the blast-radius bound is too loose, not the confidence threshold. Confidence rarely needs to be the binding constraint for reversible actions, and it is usually the wrong lever for irreversible ones, where the question is whether any autonomous path should exist at all.

This is also where governance pressure shows up. Databricks notes that many AI regulations require meaningful human oversight for higher-risk systems, citing Article 14 of the EU AI Act on human monitoring and intervention and the NIST AI Risk Management Framework's emphasis on oversight in high-consequence applications 4. A routing policy with explicit thresholds is the artifact you show an auditor: it demonstrates that high-risk actions were designed to pause, and it records which named person approved which invocation.

Two failure modes to watch. A hard block that the agent can route around by calling a different tool is not a block, so every protocol (shell, cloud API, Kubernetes, MCP) should pass the same gate 17. And a queue that grows faster than review capacity will be abandoned, so the thresholds must be tuned to the team's real throughput, not to an ideal of total oversight.

If you are running several models behind one agent stack and want the routing logic to apply uniformly across them, Quanta Inference (https://quantaintelligence.ai/inference) puts text, image, video, audio and embedding models behind one OpenAI-compatible API key, which keeps the policy layer independent of which model proposed the action. For teams that want the whole gate built and tuned with them rather than assembled from parts, describing the workflow to a specialist at Quanta (https://quantaintelligence.ai/) is the shorter path.

FAQ

FAQ

Is a confidence threshold enough to decide what needs approval?

No. Confidence scores reflect token probability rather than factual accuracy, and agents can be highly confident on actions that are wrong, which makes confidence-only gating unreliable 20. Use confidence only as a discounted input for irreversible, low-blast-radius actions, and let reversibility and blast radius drive the rest.

What stops the agent from working around a blocked tool?

Enforce the policy at a layer the model cannot reach, and route every protocol through the same gate so a blocked action cannot be attempted through a different tool or transport 17. Infrastructure backstops such as cloud IAM and admission control refuse the request even if the agent-side check is skipped 17.

How do we know the reviewer can decide quickly enough?

Attach the proposed arguments, the agent's intent, relevant context and the predicted blast radius with the numbers behind it, and give the reviewer one-click approve, edit and reject 9. If latency stays high, the tier is probably over-gated or the packet is missing context, not the reviewer being slow.

Should every irreversible action go to a human?

Almost, but the number of approvers should scale with uncertainty and stakes. Irreversible low-stakes actions can go to one approver; irreversible actions with low confidence or a wide surface should require two approvers or a restore plan 17. Security-sensitive actions such as IAM changes belong outside the agent's authority entirely.

What do we do with the decisions the queue accumulates?

Treat them as a labeled dataset of acceptable and unacceptable actions and use it to pre-screen the queue and retune the routing thresholds 9. Human feedback that is captured, governed and fed back improves agent behavior over time; left in disconnected review tools, it does not 4.

Sources

Sources

  1. Using function tools with human in the loop approvals - Microsoft Learn
  2. Human-in-the-loop - Docs by LangChain
  3. Human-in-the-Loop Tool Calling: Approval Gates for AI Agents
  4. What is Human-in-the-Loop (HITL)? | Databricks Blog
  5. Blast-Radius Gates: Limiting What a Single Agent Action ...
  6. Human-in-the-Loop (HITL) for AI Agents: Patterns and Best ...
  7. How to implement runtime policy enforcement for AI agents
  8. Guardrails for AI Agents: Types, Benefits & How to Implement
  9. Review Queues: The Human Step Towards Better AI - MLflow
  10. AI agent guardrails: approval gates and blast-radius limits
About the author

About the author

Antonio Evans
Antonio Evans

Antonio Evans is the founder of Quanta Intelligence and a fractional CTO who builds HIPAA-ready AI systems for health and life-science companies. Before that he was technical co-founder of FriendsEAT for twenty years, CEO of Socialdraft, and a data engineer at IBM. Antonio lives with his dog Santino in Lisbon, Portugal.

All articles