8 min read
Human-in-the-loop AI agents: approval steps that don't kill the return on investment
Approval steps protect trust in an agent, but applied to everything they erase the time it was meant to save. Here is how to gate only the actions that need a person, and how to design the approval itself.
Human-in-the-loop AI agents keep a person in the decision only where a mistake is expensive or irreversible: payments, outbound messages, deletions, and changes to important records. Everything else runs automatically. Designed that way, approval is a narrow control that protects trust instead of a queue that erases the time the agent was supposed to save.
This guide covers why approval steps so often cancel out an agent's value, how to decide which actions need a person, how to build approvals that survive restarts and retries, and how to loosen control as evidence accumulates. The goal is a system where the reviewer's attention goes to the few decisions that deserve it.
Why approval steps kill the return on investment
An agent saves time by removing work from people. An approval step puts some of that work back. If every action needs a click, and each click requires the reviewer to open three systems to check what the agent did, the agent has become a slower way to do the original job.
The problem is rarely the idea of approval. It is where approval is placed and how it is presented. Teams add a blanket confirmation because they do not yet trust the agent, then never remove it because they never collect the evidence that would justify removing it. The approval queue grows, reviewers start clicking through without reading, and the control stops protecting anything.
What teams often get wrong
- Approving everything. Reading a record and changing a record carry very different risks, yet many first versions gate both.
- Approvals without context. A prompt that says "Approve this update?" without the proposed change, the current value, and the evidence forces the reviewer to redo the agent's work.
- Approvals as chat messages. Asking for confirmation inside the conversation is not a durable control. If the process restarts, the pending decision is lost or, worse, replayed.
- No expiry. An approval granted on Monday for data that changed on Tuesday should not still be valid.
- No path to autonomy. Without tracking how often reviewers accept drafts unchanged, there is no evidence to remove the gate later.
- Retrying after approval without a ledger. If the approved write times out, an automatic retry can apply it twice.
A practical approach: gate by risk, not by nervousness
Sort every tool the agent can call into risk tiers, and attach a default policy to each tier. Revisit the policy with data, not feelings.
- Read and analyze: searching, summarizing, classifying. Runs automatically, with logging.
- Reversible internal writes: drafting a reply, adding an internal note, tagging a record. Usually automatic, with an easy undo and sampling review.
- External or hard-to-reverse actions: sending a customer message, updating a deal amount, creating an order. Approval required until the agent has a track record on that action.
- Irreversible or high-value actions: payments, refunds, deletions, permission changes. Approval required permanently, or not offered to the agent at all.
Make the approval a durable record
When the agent proposes a gated action, store it as its own record: which run, which tool, the exact arguments, who can approve, its status, and when it expires. Pause the run, not the process. The run resumes only when the record says approved, and the executing code checks that status again immediately before acting.
Show the change, the evidence, and an edit option
The reviewer should see the proposed change as a difference from the current state, the sources the agent used, and a way to edit before approving. An edited approval is valuable data: it tells you exactly where the agent falls short.
Batch and route
Group similar approvals so a reviewer can process ten related drafts in one pass. Route approvals to the person who owns the outcome, and escalate when an approval waits too long rather than letting the run hang silently.
An illustrative example
Consider a hypothetical support agent that handles order questions. Looking up the order, checking shipping status, and summarizing the customer's history are reads, so they run without review. Drafting the reply is a reversible internal write: the draft lands in the help desk as an internal note. Sending that reply to the customer is external, so it waits for a one-click approval that shows the draft next to the order details it relied on. Issuing a refund is irreversible and involves money, so the agent can only prepare a refund request with the amount and reason; a person with refund rights executes it in the existing billing tool.
In this design the reviewer handles one decision per ticket, sees everything needed to make it on one screen, and never has to reconstruct the agent's research. The refund path stays exactly as controlled as it was before the agent existed.
Graduate autonomy with evidence
Approval data is the cheapest evaluation data you will ever get. Track, per action type, how often drafts are approved unchanged, edited, or rejected, and why. When an action type has a long record of unchanged approvals and a bounded worst case, move it to automatic execution inside limits such as value thresholds, record types, or working hours, and keep escalating anything outside them.
This is the same staged path described in migrating existing systems to agents: shadow mode first, then draft and approve, then bounded autonomy. Each stage produces the evidence for the next.
Implementation considerations
- Run states: model the run explicitly, for example queued, running, awaiting approval, completed, failed, and cancelled. Workers must never pick up a run that is awaiting approval.
- Resume semantics: use a framework interrupt or a workflow engine that can pause for days and resume on another worker, rather than holding a process open.
- Idempotency after approval: record the write in a ledger before executing it. If the outcome is uncertain, stop and ask a person to verify instead of retrying.
- Who may approve: decide whether the requester can approve their own agent's actions, or whether some actions need a second person.
- Field and value limits: even an approved write should only touch allowlisted fields within allowed ranges, so a manipulated proposal cannot slip an extra change past a hurried reviewer.
- Notification channel: deliver approval requests where reviewers already work, such as the product interface, email, or a team chat, with a link to the full context.
Trade-offs
Every gate trades speed for safety. Gating too little risks a visible mistake that ends the project; gating too much makes the agent pointless. The right balance differs by action, which is why policy should be per tool rather than per agent.
Edit-before-approve raises review time per item and produces far better improvement data than a simple approve or reject button. Batching raises throughput and can encourage rubber-stamping, so sample batched approvals for quality.
Synchronous approval, where the user confirms inside the same session, feels natural in a chat interface and suits actions the user is requesting for themselves. Asynchronous approval, where a separate owner reviews later, suits actions on shared business records but leaves runs waiting, so it needs expiry, escalation, and clear status in the interface.
Permanent gates on irreversible actions cost reviewer time forever. For payments, deletions, and permission changes, that cost is usually worth paying.
Lessons from ImadDhin work
These are code-level observations from the Agent workspace in this portal, not client outcomes.
- Staged CRM writes. The CRM write tool is described to the model as staging a change for approval. When called, it creates an approval record with the exact arguments, sets the run to awaiting approval, and pauses the graph with an interrupt. After resuming, the code checks the approval record again and refuses to proceed unless it is approved.
- Allowlisted fields. Even approved CRM writes can only set a short list of contact and deal fields; anything else is rejected before the request leaves the server.
- Uncertain means stop. If a write was marked as executing but never completed, the next attempt raises an "action uncertain" error that asks for verification rather than repeating the write. Provider session setup for the commerce agent follows the same rule.
- Some actions stay text. The commerce agent prepares return and cancellation requests as text for the merchant to review; it has no tool that executes them, and it never charges a card.
- Workers respect the pause. The background worker skips runs that are awaiting approval, so a queued retry cannot bypass the gate.
Common mistakes to test for
- Approve, restart the service before the run resumes, and confirm the action executes exactly once.
- Reject a proposal and confirm the run ends or replans without applying it.
- Let an approval expire and confirm it cannot be used afterward.
- Try to approve with an account that should not have permission.
- Craft an input that makes the agent propose extra fields and confirm the allowlist blocks them.
- Make the approved write time out and confirm the system asks for verification instead of retrying.
When a simpler solution is better
If every output needs review anyway, you may not need an agent to take actions at all. Let it draft into the tool your team already uses, such as an internal note in the help desk or a draft email, and let the person send it. That keeps the time savings of drafting without building an approval system. When the drafts are reliably accepted, you have the evidence to add bounded autonomy. The AI automation consulting work often starts exactly there.
Put people where their judgment matters
Gate by risk, make approvals durable and fast, and let evidence decide when to loosen control. If you want an approval design for your own agent or workflow, see AI agent development or walk through the actions it takes in a 30-minute call.
Frequently asked questions
Which agent actions should require human approval?
Actions that are external, hard to reverse, or high value: customer messages, record changes that affect money or commitments, orders, refunds, deletions, and permission changes. Reads and reversible internal drafts usually do not need approval.
How do I keep approvals from slowing everything down?
Gate only risky actions, show the proposed change with its evidence, allow edits, batch similar items, route to the right owner, and remove gates for action types that have a strong record of unchanged approvals.
What happens if the system restarts while waiting for approval?
If the approval is a durable record and the run is paused through a checkpointed interrupt, nothing is lost. The run resumes when the record is approved, and the code re-checks the status before acting.
When can an agent act without approval?
When approval data shows drafts for that action type are consistently accepted unchanged, and the worst case is bounded by limits such as value thresholds, record types, or working hours, with escalation for anything outside them.
Can approval data be used to evaluate the agent?
Yes. Approved, edited, and rejected drafts, with reasons, show exactly where the agent is reliable and where it is not, and they make good cases for a regression test set.
Design approvals that keep the savings
List the actions your agent takes and decide which ones need a person.
Book a 30-minute callDurable approval gates, field allowlists, audit trails, and staged autonomy.
See AI agent developmentStart with draft-only automation and add autonomy as evidence builds.
Explore AI automation consultingKeep reading
AI agent permissions, tool scopes and audit trails
An agent's blast radius is the sum of everything it is allowed to call. Here is how to scope permissions per tool, keep credentials narrow and short-lived, and record an audit trail that answers who asked, what ran, and what changed.
AI agent evaluation before production: a practical evaluation harness
An agent that looked good in five demo conversations can still fail on the sixth real one. A small, repeatable evaluation harness turns quality from an impression into a report you can rerun on every change.
Migrating your existing business system to agents — without a rewrite
You do not replace a working system with an agent. You put agents in front of it, one workflow at a time, and only move the parts where the numbers hold.
How much does an AI agent cost to build and run?
AI agent cost splits into a one-time build and a recurring run bill. Here is what drives each, illustrative ranges with their assumptions stated, and how to keep cost per task visible.