Seal
Concepts

Approval by exception

Let agents run freely, stop only the actions a policy flags as risky.

An agent that pauses for a human on every step is useless; one that never pauses is dangerous. Approval by exception is the middle path: the agent acts autonomously by default, and a policy decides the small subset of actions that need a human.

How it works

Every time your agent is about to do something consequential, it calls gate.require() with an action, a payload, and a policyKey. The policy engine evaluates the request and returns one of three verdicts:

VerdictWhat happens
allowThe request is auto-approved; require() resolves immediately.
require_approvalA human is notified; require() blocks until they decide.
denyThe action is refused outright.

A well-written policy lets 95% of actions through untouched and stops only the ones worth a human's attention — a wire transfer over a threshold, a production deployment, a message to a VIP customer.

Why not gate everything

Gating everything trains reviewers to rubber-stamp. The signal drowns in noise and the first genuinely dangerous action gets the same reflexive click as the hundred harmless ones before it. Approval by exception keeps the human's attention scarce and therefore valuable.

The inverse — gating nothing — is what failing closed guards against when a policy is missing or malformed.

On this page