Back to blog

Human-in-the-loop · Draft date pending

Confidence Thresholds and Escalation: When to Let the Agent Run and When to Ask for Human Review

"0.85" means nothing without knowing which action it applies to. A confidence threshold isn't a setting — it's a routing policy with a number attached. Here's how to build one that actually works.

HITLConfidence ThresholdsEscalationAgent ArchitectureHuman Oversight

Confidence Thresholds and Escalation: When to Let the Agent Run and When to Ask for Human Review

Every agent team eventually hits the same tension: if we review everything, humans become the bottleneck. If we review nothing, a single bad decision ships to production. The answer is a confidence threshold — a number between 0 and 1 that decides whether an agent action auto-approves or escalates for human review.

And that number, on its own, is useless.

"0.85" means nothing without knowing which action it applies to, how it was computed, and what happens when it's wrong. A confidence threshold isn't a setting — it's a routing policy with a number attached. And getting it right is the difference between a HITL system that adds value and one that adds latency.

Why "One Threshold" Fails

The first mistake teams make is a single confidence threshold applied to every agent action. The logic seems reasonable: "If the agent is above 85% confident, auto-approve. Below that, ask a human."

Here's why that breaks in production:

A refund agent at 80% confidence on a $12 transaction: The worst case is $12. The review cost exceeds the transaction. This should auto-approve even at moderate confidence.

A deploy agent at 80% confidence on a production database migration: The worst case is a weekend of recovery. This should require human review even above 90% confidence.

Same number. Completely different risk profiles. A single threshold treats them identically. The result: either you drown humans in low-stakes reviews, or you wave through high-stakes changes on shaky ground.

The fix is a two-axis model: classify each action by severity and each decision by confidence. The threshold isn't a single number — it's a matrix of per-action confidence bands paired with business rules.

The Two-Axis Routing Model

Axis 1: Action Classification (Before Runtime)

Every action the agent can take is tagged in its action manifest, not in the system prompt. The model doesn't decide what's risky — the developer does, before the agent ever runs.

SeverityReversible?Default modeExample actions
HighNoDefault-to-reviewSending customer email, processing refunds, deleting data, deploying code
HighYesHOTL + rollback windowProvisioning cloud resources, creating draft content, opening support tickets
MediumNoConfidence-gated reviewUpdating CRM records, scheduling meetings, posting internal messages
MediumYesAuto-approve + sampling auditModifying draft documents, updating tags, renaming resources
LowEitherFully autonomousRead-only queries, content summarization, draft generation

This classification is manifest-driven, version-controlled, and auditable. A non-technical reviewer can read it and understand exactly which actions require approval and why. It's the foundation that confidence thresholds build on.

Axis 2: Confidence Score (At Runtime)

For actions that are confidence-gated, the agent must produce a calibrated confidence score alongside its proposed action. And this is where the engineering gets interesting.

Raw model logprob is not a confidence score. On single-token classification tasks it's approximately calibrated. On multi-step reasoning tasks — the kind agents perform — it's systematically overconfident. A model that reasons through five steps and selects a final action has spent most of its compute on reasoning, and the probability of the final token says nothing about whether the reasoning chain was sound.

A better approach is structured uncertainty extraction: have the agent explicitly list what it's unsure about, then score itself.

class AgentDecision:
    action: str
    parameters: dict
    confidence: float          # 0.0–1.0
    confidence_basis: str       # Why high or low
    uncertainty_factors: list   # What the agent is unsure about
    recommended_review: bool    # Agent's own judgment

The uncertainty_factors field is as important as the score itself. If the agent reports three or more uncertainty factors, the action should escalate regardless of the numeric score. This explicit reasoning step makes the confidence signal more trustworthy than a raw probability.

The Four-Zone Routing Model

With action severity and agent confidence, you define four routing zones:

Auto-approve   → above the upper threshold, zero uncertainty flags
Human review   → between upper and lower threshold, or flagged by agent
Escalate       → below the lower threshold, or >2 uncertainty factors
Block          → unknown actions, or actions outside agent's defined scope

The specific thresholds are per-action. For a refund agent:

ConditionThresholdRouting
Refund < $50Auto-approve (dollar threshold)
Refund $50–$500, confidence ≥ 0.92UpperAuto-approve
Refund $50–$500, confidence 0.70–0.91MidHuman review
Refund $50–$500, confidence < 0.70LowerEscalate to finance lead
Refund > $500Always human review
Any refund, uncertainty_factors ≥ 3Escalate (regardless of score)

Notice that dollar thresholds take priority over confidence thresholds. Business rules are clearer and more auditable. Confidence thresholds fill the gap where business rules don't apply — they're the second layer, not the first.

The Escalation Ladder

"Escalate" doesn't mean "send to a generic queue." Escalation is a ladder with defined rungs:

  1. Auto-approve: The action proceeds without human intervention
  2. Peer review: Goes to any qualified reviewer in the team
  3. Specialist review: Routes to a specific person or role (finance lead, security engineer, compliance officer)
  4. Multi-party approval: Requires two or more humans to sign off, typically for changes above a dollar threshold or affecting customer data
  5. Block: The action is denied with a logged reason; the workflow must be redesigned to handle this case

Each rung in the ladder has a timeout. If the peer reviewer doesn't respond within the SLA, the request auto-escalates to the next rung. If the specialist doesn't respond, it escalates to the team lead. The system doesn't wait indefinitely — it either gets a human decision or reaches a safe-default outcome (usually "deny").

Calibrating Thresholds Over Time

No team sets the right thresholds on day one. The good news: confidence thresholds are a feedback loop, not a guess.

Every routing decision produces a data point: the agent's confidence, the routing outcome, and — when a human reviews — the correctness of the agent's proposed action. From this, you can compute two metrics that drive calibration:

False auto-approvals (escapes): The agent was above threshold, auto-approved, and was later found to be wrong. These are the most expensive errors. Track them by action type. If send_customer_email has a 2% escape rate and query_crm has a 0.1% escape rate, you know which threshold needs tightening.

False escalations (unnecessary reviews): The agent was below threshold, escalated, and the human approved as-is. This is waste — the review consumed human time without adding value. Track the ratio. If 70% of escalated update_crm_record actions are approved unchanged, raise the lower threshold.

The calibration cadence works like this:

  1. Start conservative: default-to-review for high-severity actions, high thresholds for medium-severity, auto-approve for low-severity
  2. Run for 1–2 weeks, collect routing data
  3. Identify the action type with the highest false-escalation rate
  4. Raise its lower threshold by 0.05
  5. Monitor for one week for escapes
  6. Repeat

This is essentially A/B testing an operational parameter. The threshold isn't set once — it's continuously tuned against production outcomes.

Where Confidence Thresholds Break

Even a well-tuned system has failure modes worth planning for:

Calibration drift: When you change the model (version update, prompt change, new tools), the calibration of the old thresholds breaks. Every model change should trigger a recalibration window where thresholds temporarily default to "human review" while new distributions are collected.

The silent high-confidence error: The agent is 95% confident and completely wrong. This is the hardest case to catch because it never reaches a human. Mitigation: sampling audit — auto-approve 95% of the time, but route 5% of auto-approved actions to human review for quality measurement. The sample rate is the safety net that catches calibration failures before they become incidents.

The threshold arms race: As reviewers approve more actions, the temptation is to keep raising thresholds until nothing reaches a human. This is the goal — but only if escape rates stay flat or decline. Monitor both metrics. If auto-approval rate rises but escape rate rises faster, you've over-tuned.

From Policy to Production

The two-axis model — action severity + decision confidence — is a policy that maps directly to runtime behavior. The agent's action manifest defines the severity. The agent's structured output carries the confidence signal. The approval router reads both and decides: auto-approve, review, escalate, or block.

In Facio, this routing lives at the checkpoint layer: when an agent action requires approval, Facio evaluates the policy, reads the confidence score and uncertainty factors, and routes accordingly — all recorded in the immutable audit trail.

Placet.io handles the human side: delivering the review request to the right person in their working channel, tracking SLA timers, managing escalation ladders, and capturing structured approve/reject decisions that feed back into the confidence calibration loop.

Together, they turn "0.85" from a number into a production control — one that gets smarter every time a human makes a decision.

Key Takeaways

  • One threshold doesn't fit all actions: a refund and a production deploy have different risk profiles — treat them differently
  • Use a two-axis model: action severity (defined in the manifest) × decision confidence (computed at runtime) = routing decision
  • Raw logprob is not a confidence score on multi-step agent tasks: use structured uncertainty extraction instead — have the agent list what it doesn't know
  • Dollar thresholds and business rules take priority over confidence thresholds: they're more auditable and less fragile
  • The escalation ladder needs timeouts: if the primary reviewer doesn't respond, auto-escalate — don't let the workflow stall
  • Thresholds are tuned, not set: track escapes and unnecessary reviews per action type, adjust thresholds in small increments, and recalibrate after every model change
  • Sampling audit catches silent failures: route 5% of auto-approved high-severity actions to human review — it's the safety net for high-confidence errors

Sources: Omnithium — HITL Patterns for High-Stakes AI Agent Decisions, All Days Tech — HITL AI Review Queues (2026), Future AGI — AI Agent Compliance and Governance 2026