Add a human approval gate
Mental model: the model proposes; infrastructure authorizes. A gate is a persisted state transition—proposed, approved, rejected, expired—not a modal dialog. Use it when an action is external, irreversible, financially consequential, permission-expanding, or regulated.
Mechanism: proposal → policy → revalidated action
Procedure
- Inventory actions and classify blast radius, reversibility, target, and authority.
- Define auto-run, sampled-audit, and approval tiers with a policy owner.
- Persist the proposal before notification: tool, arguments, evidence, policy, version, expiry, and idempotency key.
- Show a reviewer intent, target, diff, evidence, risk, and undo/appeal path.
- On approval, revalidate state and execute once; on rejection, append the reason to the agent trace.
- Measure approval latency, overrides, stale decisions, incidents, and reviewer workload.
proposal = {"status":"pending", "amount":84, "order_version":3}
def approve(p, current_version):
if p["order_version"] != current_version: return "reject: stale proposal"
p["status"] = "approved"; return "execute once"
print(approve(proposal, 4))
Run with python3; expected output is reject: stale proposal. The executor, not the model, owns that check.
Definition of done
| Requirement | Verification |
|---|---|
| No bypass path | all lower-level tools enforce the same policy |
| Useful review | reviewer sees evidence and can reject with reason |
| Safe resume | decision is idempotent and revalidates current state |
| Recovery | expiry, kill switch, rollback, and audit record exist |
Over-gating reversible actions creates fatigue; under-gating high-impact actions creates unbounded blast radius. Promote an action only after holdout evals and sampled audits demonstrate it clears safety and quality thresholds.
Failure modes
Reject stale proposals, duplicate execution, missing evidence, and any route that bypasses the same authorization policy. A reviewer without time, authority, or a rejection reason is not meaningful oversight.
Exercises
- Add expiry and a duplicate-execution test to the artifact.
- Classify five product tools and justify one sampled-audit tier.
Connects to: guardrails · least privilege · oversight
Sources
- OWASP LLM06: Excessive Agency — action-authority risks.
- NIST AI RMF — governance controls.
- OpenAI: A Practical Guide to Building Agents — layered guardrails.