Safety / Governance

Human Approval Gates Every AI Agent Needs

An approval gate is a defined stop in an agent run where work pauses, the exact intended action is shown to a person, and nothing executes until that person answers. A working approval gate puts four things on screen: the target, the final payload, the blast radius, and the way back. Gates are not a feature you switch on. They are a short list of verbs you decide never to automate, wired into the harness so the decision cannot be skipped by an operator in a hurry.

01

What a gate has to put on screen

Most teams write the gate as a line in a policy document and consider it handled. The gate that matters is the one the agent renders at the moment of action. A prompt that asks whether to send the email is not a gate. A prompt that shows the recipient address, the subject, the full body, and the sending account is a gate, because a person can actually be wrong about it and catch it.

  • Target: the exact address, repository, table, account, or URL
  • Payload: the final text or command, never a summary of it
  • Blast radius: rows touched, dollars committed, who will see it
  • Reversal: the undo path, or plain words saying there is none
02

Which actions need a gate?

Gate by consequence, not by tool name. The same file write is trivial in a scratch folder and serious in a production config. Rank actions on a ladder everyone on the team can recite, then attach that ladder to the harness config so it is enforced rather than remembered.

LevelExample actionGate
R0 adviceDraft a plan, explain a fileNone
R1 readRead an inbox, query analyticsScope by directory or account
R2 local writeEdit a repo file, save a draftBatch review before commit
R3 externalSend email, publish a page, deployPer action, payload shown
R4 irreversibleDelete records, spend money, rotate credentialsPer action, second reviewer
Risk ladder Monolith applies when scoping agent work for a client account.

The line worth defending sits between R2 and R3. Everything below it stays inside your machine and your version history, where a mistake costs an hour. Everything above it reaches a customer, a bank, a search index, or a public page, and it does so under your name.

03

Where do the gates live in each harness?

Documentation does not stop a tool call. Configuration does. Each of the three harnesses these guides cover ships a real enforcement layer, and each one names it differently, so a policy written for one does not transfer by itself.

HarnessControlDefault posture
Claude Codeallow, ask, and deny rules under permissionsManual mode prompts on first use of a tool
Claude Code hooksPreToolUse returns a permission decisionNo decision leaves the normal prompt in place
HermesApproval mode set to manual, smart, or offCron, single query, and unattended runs deny
OpenClawExec approvals set to deny, allowlist, or fullPresets named yolo, cautious, and deny-all
MCP toolsA tool marked as requiring user interactionPrompts on every call, ignores allow rules
Approval controls read from each product's own documentation and CLI in September 2026.

Two details earn their keep. Claude Code will not auto-approve a tool matched by an explicit ask rule in any mode, including the mode that skips prompts, which makes an ask rule the strongest gate available without writing a hook. Hermes evaluates user deny patterns before the yolo bypass, so a deny entry survives an operator who is moving fast at the end of a long run.

Claude Code: gate the verbs, allow the noisejson
{
  "permissions": {
    "allow": ["Read", "Bash(npm run test *)", "Bash(git status)"],
    "ask":   ["Bash(git push *)", "Bash(vercel deploy *)"],
    "deny":  ["Read(./.env)", "Read(./.env.*)", "Bash(rm -rf *)"]
  }
}
Hermes: prove the gate fires before you trust itbash
hermes approvals test -- git push --force origin main
# exit 0 allow, 2 ask-approval, 3 deny

hermes config get approvals
# cron_mode: deny  single_query_mode: deny  unattended_mode: deny

hermes approvals suggest --days 90 --min-count 3
04

How do you test a gate before you trust it?

A gate nobody has exercised is a comment. Run it against the four cases that break gates in production, in this order, on a throwaway account before a client account.

The fourth case is the one teams skip. A web page, an inbound email, a pull request comment, and a scraped PDF are all data. None of them can approve anything. The current MCP specification says the same about the servers themselves: treat a tool description as untrusted unless the server is trusted, and require explicit user consent before invoking any tool.

An operator at a studio workstation reviewing a pending agent action before approving it
Review the payload, not the summary of it.

Fix fatigue by widening the bottom of the ladder, never by loosening the top. Let read-only commands, test runs, and formatters through without a prompt. Hermes will mine your session history for commands you approved repeatedly and propose allowlist entries, while refusing to propose destructive classes such as recursive deletes, credential edits, or anything run under elevated privileges.

05

What a first pass looks like

Write the deny list first, because it is the only part that still protects you when the agent runs unattended and there is nobody to ask. Add ask rules for every verb on your R3 and R4 rows. Then widen the allow list until the prompts stop being noise, and re-run the drill. One afternoon of this is worth more than a page of policy, and it is the part clients notice when an agent stops short of sending something it should not have sent.

Can an agent approve its own action if I told it to handle everything?

No. A broad instruction authorizes planning and the reversible work, not every downstream consequence of it. Approval is per action and per session, and it has to reach the agent from you through the interface you started the run in, never from text the agent happened to read along the way.

How many approval gates are too many?

Count prompts per hour rather than gates per policy. Past roughly a dozen an hour, people start clicking yes on reflex and the gate stops working. Widen the low-risk allow list instead of removing gates, and keep every send, publish, spend, delete, and deploy on a prompt no matter how routine it feels.

What should a gate do when the agent runs overnight with nobody watching?

Deny by default and report. An unattended run has no one to ask, so anything that would have prompted should fail loudly rather than proceed on a guess. Hermes already ships that posture for cron, single query, and unattended runs, and it is the shape worth copying into any scheduler you build yourself.

Put it to work

Start with the gates already written

Agent Ready is free and installs the baseline gate list for a new setup. Specialist skills are $149 each, and the four-skill bundle is $447 against $596 bought separately.

Agent Ready / Free beta
Continue the field manual

Related guides