The Contract: Gates Live in the AOP, Nowhere Else
The Agent is explicitly instructed not to ask for approval on its own judgment. It pauses only where the AOP tells it to — and when the AOP is silent, it proceeds and reports what it did. Two consequences:- An ungated risky step will run. “It’s obviously dangerous, surely it will check first” is not how it works. If sending, paying, deleting, or posting needs a human, the AOP must say so.
- Any clear phrasing works. “Get my go-ahead before sending”, “confirm with me first”, “don’t submit without approval” — all of these arm the gate. You don’t need to name a tool or say “HITL”. What doesn’t work is hoping the Agent infers it.
Which Actions Earn a Gate
Score the action, not the Agent. The risk-tier framework does this in detail; the short version is two questions:- Can it be undone? Drafting, reading, computing, writing to an internal staging sheet — reversible, no gate. Sending, posting publicly, paying, deleting — irreversible, gate candidates.
- How wide is the blast radius? One internal record vs. a customer, money, or your brand.
Know Whose Inbox It Lands In
An approval request always goes to the Run’s author — and for unattended Runs, that resolves to a specific person you chose earlier, perhaps without noticing:- A scheduled Run belongs to whoever created the schedule.
- A Case-triggered Run belongs to the owner of the previous Run on that Case, falling back to whoever created the Case.
Design for the Wait: There Is No Timeout
When a gate fires, the Run’s status becomes Needs Input and it waits — indefinitely. There is no platform timeout, no automatic escalation, and no fallback recipient. Don’t write time-based escalation into the AOP (“if not approved within 4 hours, ask the account manager”) — a paused Agent cannot act, so instructions like that are dead letters. Design with the real semantics instead:- Gate only where an indefinite wait is acceptable. If the action is time-critical and the approver might be away, an approval gate is the wrong tool — default to the safe action (skip, log, escalate the Case) and report, rather than pausing.
- A waiting Run occupies a Queue concurrency slot. On a Queue running at its concurrency limit, unanswered approvals throttle everything behind them. High-volume Queues with approval gates need approvers who clear Requests daily — or a triage design where exceptions land in a review Queue instead of pausing Runs, as described in Designing Human-in-the-Loop Workflows.
- Answer speed changes the resume, not the answer. A response within hours resumes the Run in place. After long waits the Run continues in a fresh session with your answer in hand — it still continues correctly, but anything the Agent had “on screen” is re-derived, so very stale approvals cost more time.
Rejection Is an Instruction, Not an Ending
The approver’s options are Approve, Decline, and free text — and free text is treated as a decline with guidance, which is often the most useful response (“not to this customer — send to the account on the parent order instead”). Write the AOP to make rejection productive: say what the Agent should do on a decline (fix and re-request once, or fail the Case with the reason), and stop after repeated rejection — being declined twice on the same action means the Agent has misunderstood the requirement, and the loop should end in a failed Case with a note, not a third request.Related
Human-in-the-Loop
Request types, AOP gate patterns, and response surfaces.
Designing HITL Workflows
Risk tiers, approval shapes, and exception-Queue patterns at scale.
Requests
The per-user inbox where approvals and questions land.
Guardrails for High-Risk Automations
Hard caps, allow-lists, and shadow mode around the gates.