When should an AI agent pause for approval?
The moment a tool call becomes consequential, an agent needs a human gate. Here is when to pause, what to show in the approval prompt, and how to keep approval from turning into a rubber stamp.
An independent guide, grounded in official documentation from Anthropic, OpenAI and Cursor. Quotes are verbatim from the linked official pages and verified against them.
Pause at checkpoints, not every step
- The approved pattern is to pause at checkpoints or when the agent hits a blocker — never after every tool call.
- Pausing constantly turns a helpful agent into a babysitter: users start clicking Approve without reading, and the gate stops meaning anything.
- An always-visible status keeps the user oriented between gates, so the occasional pause lands as a deliberate beat instead of a surprise.
“Agents can then pause for human feedback at checkpoints or when encountering blockers.”
Source: Anthropic — Building effective agents ↗
Searching 12 sources for recent AI model releases…
Gate the sensitive class, let the rest run
- The gate is about consequences, not confidence: money, credentials, deletions, publishing — anything with a real-world side effect needs a human in the loop.
- Routine, reversible actions such as reading a file, searching or drafting should never require approval; friction that adds nothing trains users to ignore it.
- Scope the pause to the one sensitive call rather than the whole task, so the human decision stays small and specific.
“Use the human-in-the-loop (HITL) flow to pause agent execution until a person approves or rejects sensitive tool calls.”
Source: OpenAI — Agents SDK: Human in the loop ↗
Run database migration
Deploy Agent is requesting approval
Runs an irreversible migration on the production database. 4 tables, ~2 min estimated downtime.
npm run migrate -- --env=production --confirm
Show the exact action, not an intent summary
- The approval prompt must name the concrete action — the tool, its arguments, the command that will run.
- A paraphrase invites rubber-stamping; the exact proposal lets the human actually audit before they click.
- Surface the details inside the request itself: the human should not have to expand a menu to see what they are approving.
“If the approval rule requires approval and no decision for that tool call is stored, execution pauses, and RunResult.interruptions (or RunResultStreaming.interruptions) contains ToolApprovalItem entries with details such as agent.name, tool_name, and arguments.”
Source: OpenAI — Agents SDK: Human in the loop ↗
Safety overrides prior approval
- Pre-approval is a convenience, not a blank check — a sign of risk re-raises the gate even for actions the user already allowlisted.
- Suspicious commands, dangerous paths and unknown binaries should ask again no matter what the user approved before.
- The asymmetry is deliberate: err toward asking when the stakes are real, and toward trusting when they are not.
“Suspicious bash commands require manual approval even if previously allowlisted”
Source: Claude Code docs — Security ↗
Run database migration
Deploy Agent is requesting approval
Runs an irreversible migration on the production database. 4 tables, ~2 min estimated downtime.
npm run migrate -- --env=production --confirm
The human reviews the proposal itself
- Responsibility lives with the human, so what gets reviewed must be the actual code and commands — not a summary of what the agent intends.
- Make the review surface the working artifact — diff, command, payload — so approval is an informed yes.
- The approve action should feel like a decision, not a formality: one explicit control, with the consequence named.
“You’re responsible for reviewing proposed code and commands for safety before approval.”
Source: Claude Code docs — Security ↗
Run database migration
Deploy Agent is requesting approval
Runs an irreversible migration on the production database. 4 tables, ~2 min estimated downtime.
npm run migrate -- --env=production --confirm
Make the gate configurable
- When the agent interrupts you is a setting, not a fixed behavior — users should tune how often they are asked.
- A run mode that asks more or less lets each user pick the autonomy level that fits the task at hand.
- Default to asking, and let the user relax the gate for trusted, repeatable work.
“Run Modes control how the Cursor agent runs tool calls, and when Cursor interrupts you for approval.”
Source: Cursor docs — Run Modes ↗
Run database migration
Deploy Agent is requesting approval
Runs an irreversible migration on the production database. 4 tables, ~2 min estimated downtime.
npm run migrate -- --env=production --confirm
A decision rule
- Pause when the action is irreversible, has real-world side effects, or could misrepresent the user — approve everything else automatically.
- When you do pause, show the exact action, name the consequence, and keep Approve and Deny one click apart.
- Pre-approval lowers friction; risk re-raises it. When in doubt, ask.
Design takeaways
- Pause at checkpoints, not after every step — the gate is for high-consequence actions.
- Show the exact command, tool call or payload in the approval — never a paraphrase the human cannot audit.
- Make approval one explicit decision — Approve/Deny — with the consequence named.
- Default to asking; let risk and user preference relax the gate, never a false sense of safety.