AI agents

Keeping a human in the loop where it matters

Approval on every step is not oversight, it is a queue with a rubber stamp at the end. This is how to spend a fixed amount of human attention where it changes an outcome.

On this page
  1. The short answer
  2. The three shapes of oversight
  3. Why approval on everything decays into a rubber stamp
  4. The Interrupt Budget
  5. Put the gate at the irreversible step
  6. The decision packet
  7. Choosing what reaches a human
  8. Retiring a gate without losing control
  9. The vocabulary, used precisely

The short answer

The short answer

Put a human at the point where an action becomes irreversible and the cost of being wrong exceeds the cost of waiting. Everywhere else, let the system act and make the action undoable, sampled and logged. Human attention is a fixed daily quantity. Spend it on the handful of decisions where a person genuinely changes the outcome, because a gate on every step does not produce review, it produces approval by reflex.

  • 3shapes of oversight: blocking gate, staged review queue, post-hoc sample
  • Irreversiblethe property that decides where the gate goes, not model confidence
  • 1 in 50a workable starting rate for seeded probes that measure whether reviewers still look
  • Neverhow often a timeout should auto-approve an irreversible action

Oversight designs fail in one of two directions. Either every action needs a signature, the queue backs up, and people approve in batches without reading. Or nothing does, and the first anyone hears of a problem is a customer. Both come from treating oversight as a moral stance rather than a budget to allocate.

The three shapes of oversight

There are three real shapes, plus a fourth that is a filter over the others. Most systems need two at once, on different slices of traffic.

ShapeWhen it fitsWhat it catchesWhat it misses
Blocking gateIrreversible action, high per item cost, low volumeAny error in the item, if the reviewer actually reads itEverything, once volume rises and reading stops
Staged review queueReversible within a window, moderate volumeErrors caught before the effect flushes, without holding up the runWhatever sits in the queue when the window expires
Post-hoc samplingHigh volume, low per item cost, an undo path existsDrift and systematic error across the populationThe individual bad action, which will have landed
Exception routingA filter over any of the aboveThe classes your rules flagEverything the rules do not flag, which is your blind spot
Exception routing is not a fourth kind of oversight. It is a policy that decides which items reach one of the first three.

The important cell is the last one. Your routing rules define what you can see: if a human only ever reviews flagged items, every quality number you have describes the flagged population and you know nothing about the rest. The fix is boring. Route a random one or two percent of unflagged traffic to review as well, forever, and keep the two streams separate in the data.

Why approval on everything decays into a rubber stamp

A gate that sees a high volume of mostly correct items stops functioning as a check, and the mechanism is well understood outside AI. Three forces push the same way.

  • Low base rates. When almost everything in the queue is fine, careful reading rarely changes an outcome, so attention drifts to the default action. This is the vigilance decrement seen in any monitoring task where signals are rare.
  • Automation bias. A confident, well formatted proposal is read as evidence of correctness. Fluent output gets approved faster than clumsy output of the same quality, which is exactly backwards.
  • Queue pressure. Approve is one click and reject requires a reason and a conversation. When the queue is 200 deep at 5pm, the asymmetry decides the outcome.
Measure the gate, or you do not have one

Inject known-bad items into the review queue at a low, fixed rate, one in fifty is a reasonable place to start, and record how many are caught. This is the only number that tells you whether the gate is real. If catch rate on seeded probes is low, adding more items to the queue makes things worse, not better. Tell reviewers that probes exist, keep the rate steady, and never use the result to discipline an individual, or they will start optimising for the probes instead of the work.

The countermeasures that work are structural, not motivational. Cut queue volume so each item gets attention, show the difference rather than the whole record, require a closed set of reject reasons, and audit a sample of approvals rather than only rejections. An unaudited approve is the cheapest way for a mistake to become permanent.

The Interrupt Budget

Treat human attention as a fixed daily quantity and gates as a portfolio competing for it. This reframes the argument from whether a human should approve something to whether this gate is worth more than the gate it displaces.

Framework

The Interrupt Budget

Five steps, run on a whiteboard in under an hour, repeated monthly as the system changes.

01
Count the budget

Reviewers times shift minutes times the fraction genuinely available, which is rarely above half once their other work is counted. Write it down in minutes per day. It is almost always smaller than the queue somebody is proposing to create.

02
Price every gate in interrupts

Items routed per day times minutes per item, including the context switch cost. A gate firing forty times a day at three minutes each is two hours, which for a two person team is a large share of the budget.

03
Score each gate by loss prevented per interrupt

Rate of genuinely bad actions in that slice, times the cost of one getting through, times the probability a reviewer catches it. That last term is not one, and seeded probes are how you learn what it is. Divide by interrupts spent.

04
Fund down the list until the budget is gone

Gates above the line get human review. Below the line gets a different control: an undo window, a sampled audit, a hard limit in code, or a rule that refuses the action outright. Below the line means managed without a person in the path, not unmanaged.

05
Re-price monthly and retire what has stopped paying

As the system improves, bad action rates fall and gates drop below the line on their own. A gate that has rejected nothing in a month is spending attention you could put somewhere it still matters.

Interrupt budget and value per review

Your numbers, not ours. Cost of a bad action is whatever a wrong one costs your business, including the time to unwind it.

0Items to a human per day
0Review capacity used (%)
0Loss prevented per day
0Loss prevented per review

Two things fall out of this every time. Capacity used passes 100 percent sooner than anyone expects, and value per review is independent of volume, so a gate is either worth the interruption for each item or not worth it at all. Above roughly 70 percent utilisation, queue latency stops being linear and items start expiring, which looks like a backlog and is a design error.

Put the gate at the irreversible step

The gate belongs immediately before the effect leaves your control, not before the model call. Approving a plan is close to worthless, because the plan is not what executes. Approve the tool call, with its exact arguments, at the moment it would run.

Better still, move the irreversibility. Most actions people gate can be made reversible with an hour of engineering, and a reversible action needs a smaller gate or none.

  • Draft state. The agent writes the reply, the record, the invoice into a draft that exists but does nothing. A human promotes it. Nothing is at stake until promotion.
  • Delayed effect. Sends go out after a hold, commonly thirty minutes, during which anyone can pull them back. It costs almost nothing and removes most of the queue.
  • Compensating action. Every side effecting tool ships with its inverse: refund reverses charge, credit note reverses invoice. Store the compensating call alongside the action so undo is one operation rather than an investigation.
  • Limits in code. A ceiling that refuses the action beats a gate that asks about it. If nobody should refund above a number without finance, the tool should reject it, not route it.
  • Canary slices. New behaviour runs on a small slice with tighter gating and widens only once the slice is clean. This is where a gate earns its cost, because error rates are highest when behaviour is new.
Gate before the actionAct, with an undo window
Latency to the customerQueue time, unbounded in practiceImmediate
Reviewer loadScales with volumeScales with the sample rate you choose
Cost of a missContained, if the reviewer read itReal but recoverable inside the window
Fits whenMoney, legal, external comms, deletionInternal records, drafts, routing, tagging
Fails whenVolume rises and reading stopsThe undo path was never rehearsed
Data you getApprove and reject labelsOutcomes, which are better labels

The decision packet

A reviewer should decide in well under a minute from one screen, which needs a packet built for the decision rather than a dump of the run. The highest value field is the one naming why this item was routed here, because it teaches the policy to the person applying it.

Approval packet, lift and adaptjson
{
  "packet_version": "3",
  "run_id": "run_2b91f7",
  "routed_because": "amount 420.00 exceeds auto-approve ceiling 250.00",
  "proposed_action": {
    "tool": "issue_refund",
    "args": {"invoice_id": "INV-88213", "amount": 420.00, "currency": "GBP", "reason_code": "late_delivery"},
    "reversible": false,
    "undo_path": "manual credit note, finance, about two days"
  },
  "diff": {
    "before": {"invoice_status": "paid", "balance": 0.00},
    "after":  {"invoice_status": "partially_refunded", "balance": -420.00}
  },
  "evidence": [
    {"kind": "email", "id": "msg_7712", "quote": "parcel arrived 9 days late", "received_at": "2026-08-22T11:04:00Z"},
    {"kind": "policy", "id": "policy/refunds#4.2", "version": "2026-03", "quote": "full refund where delivery exceeds 7 days"},
    {"kind": "record", "id": "orders/88213", "fetched_at": "2026-08-26T08:02:11Z"}
  ],
  "model_view": {
    "summary": "Policy 4.2 applies. Delay was 9 days. Customer has no prior refunds.",
    "self_reported_confidence": 0.86,
    "caution": "self reported, not calibrated, do not threshold on this"
  },
  "cost_if_wrong": {"money": "420.00", "who": "cust_1099", "detectable_within": "one billing cycle"},
  "options": [
    {"id": "approve"},
    {"id": "approve_with_edit", "editable_fields": ["amount", "reason_code"]},
    {"id": "reject", "reason_required": true,
     "reasons": ["policy_does_not_apply", "wrong_customer", "amount_wrong",
                 "evidence_insufficient", "needs_human_owner", "should_never_be_automated"]}
  ],
  "deadline": "2026-08-26T17:00:00Z",
  "on_timeout": "hold_and_alert"
}
  1. Show the diff, not the record. Before and after, on the fields that change. Reviewers cannot audit a whole object at speed and will stop trying.
  2. Quote the evidence with ids. A pasted sentence with a document id and a version is checkable. A summary of the evidence is another model output to trust.
  3. Print the model's confidence and label it. Self reported scores correlate with fluency more than correctness, so display it as context and never as a threshold.
  4. Closed enum reject reasons. They become the labels for your eval set. Free text becomes archaeology nobody performs.
  5. on_timeout is hold_and_alert. Auto-approve on timeout converts your gate into a delay. Whoever chose that default did it to keep the queue moving, and it is the quiet way irreversible actions ship unread.
  6. Every decision writes a record. Who, when, which packet version, what they saw. That is the same record your auditors want, described in making an agent's decisions auditable.

Choosing what reaches a human

Route on properties of the action, not on the model's opinion of itself. Rules are legible, testable and stable across model versions, which self reported confidence is not.

  • Money above a ceiling, or any action touching a payment method.
  • First interaction with a counterparty, or a customer flagged as sensitive.
  • Bulk actions above a record count, because blast radius scales while attention does not.
  • Anything irreversible with no compensating action registered.
  • Retrieval returned nothing above your similarity floor, the classic setup for a confident wrong answer.
  • A tool errored and the agent retried its way to a different plan.
  • The verifier disagreed with the author, which is the cheapest high value signal you will find.
  • A random sample of everything else, so you can measure the population you are not worried about.
If you must threshold on a score

Use quantiles from your own held out data, not an absolute number that sounds cautious. A threshold tuned on one model version is meaningless after an upgrade, because the score distribution moves even when accuracy does not. Re-derive the cut point on every model change and store the version it was fitted against beside it.

Retiring a gate without losing control

Gates should be removable, with a bar agreed in advance. Otherwise every gate is permanent and the budget only shrinks.

  1. Run silent shadowTwo to four weeks

    The agent proposes, the proposal is stored without being shown, and the human decides as usual. Comparing afterwards gives an uncontaminated agreement rate, which showing the proposal would destroy.

  2. Write the bar before you lookThirty minutes

    Agreement rate on that slice, a minimum item count, and zero severe misses, with severe defined in advance. Setting the bar after seeing the data is how every gate gets approved for removal.

  3. Open the narrowest safe bandWeek one

    Auto-approve only the safest slice, for example amounts under a ceiling with a known counterparty and a policy match, rather than the whole class. Bands can widen later.

  4. Keep sampling and probes at the new levelOngoing

    The newly ungated band still gets a sampled audit and seeded probes. Removing a gate removes the interruption, not the measurement.

  5. Rehearse the undo once, for realOne afternoon

    Reverse a real action in production using the documented path, with a stopwatch. An undo path nobody has run is a story, and you learn on the worst day whether it was true.

  6. Make the band close itselfIn code

    If override rate or probe catch rate crosses the bar, the band narrows automatically and pages someone. A rollback that needs a meeting is not a rollback.

Human in the loop review, before you ship
0 of 10 done

The vocabulary, used precisely

Terms worth pinning down
Human in the loop
A design in which a person must act before the system's action takes effect. The person is inside the execution path, so the action does not happen without them, and system throughput is bounded by their availability.
Human on the loop
A design in which the system acts and a person monitors, samples and intervenes afterwards. Throughput is not bounded by the person, so it requires an undo path and a sampling regime to be a real control rather than a label.
Seeded probe
A known-bad item deliberately inserted into a review queue at a fixed rate to measure the share of defects reviewers actually catch. It is the only direct measurement of whether an approval step is still functioning as a check.
Compensating action
The registered inverse of a side effecting operation, such as a credit note against an invoice. Its existence turns an irreversible action into a reversible one, which usually removes the need for a blocking gate.
Override rate
The share of proposed actions a human rejects or edits before they execute. A rising rate means the system got worse or the population shifted. A rate near zero means either the system is very good or nobody is reading, and only seeded probes distinguish the two.
Undo window
The interval between an action being taken and it becoming irreversible, during which a person can pull it back. Deliberately introducing one is often cheaper and more effective than approving each action in advance.

The gates, the probe harness and the eval set that grows out of reject reasons are evaluation and guardrails. What an agent may attempt at all is a separate control, in controlling what an agent is allowed to do, and the failures these gates catch are in how agents fail.

Cite this

ChatGPTalker, "Keeping a Human in the Loop Where It Matters" (2026). Put the human immediately before the irreversible effect, price every gate against a fixed daily interrupt budget, and measure whether the gate is still working with seeded probes.

Questions readers ask next

Does a human in the loop make an AI system safe?
Only if the human has the information, the time and the authority to change the outcome. A reviewer facing a long queue of mostly correct items, with an approve button and no evidence on screen, is a formality rather than a control. Safety comes from fewer items reaching people, better packets, measured catch rates and an undo path.
Where should the approval step go in an agent workflow?
Immediately before the irreversible side effect, on the exact tool call with its exact arguments. Approving a plan is weak, because the plan is not what executes and the arguments can change between planning and execution. If you can stage a draft or add a hold instead, the approval often becomes unnecessary.
How do I know if my reviewers are actually reviewing?
Seed the queue with known-bad items at a fixed low rate and measure how many are caught. Nothing else tells you. Time on item is a weak proxy and override rate is confounded by system quality. Tell reviewers probes exist, keep the rate steady, and treat a falling catch rate as a queue design problem.
Should I route based on the model's confidence score?
Not as your primary signal. Self reported confidence tracks fluency more closely than correctness and is not calibrated. Route on properties of the action instead: amount, reversibility, blast radius, novelty of the counterparty, and whether retrieval returned anything usable. If you do use a score, refit the cut point on your own data at every model change.
When should a human never be removed from the loop?
When the action is irreversible, one bad instance is expensive, and no compensating action exists. Payments to new recipients, deletion of records with no backup, legally binding communications and anything affecting employment or credit belong in that set. For these, pair a hard limit in code with the gate, so the system cannot attempt the action outside the approved band.
Cite this

ChatGPTalker. "Keeping a Human in the Loop Where It Actually Matters." chatgptalker.com, 2026-08-26. https://chatgptalker.com/guides/human-in-the-loop-design/

Rather have it built than read about it?

Send the process you want automated. You get a scoped plan back, with the build shape, the stack and a realistic timeline.

Start a project