Skip to content

Approvals without rubber-stamping

Asking a person to approve every agent action turns oversight into clicking yes. Effect classes, escrow and saved rules keep approvals rare and meaningful.

Heighliner team · · 2 min read

A person approving 400 agent actions a day is not overseeing anything. They are clicking yes. Approval only works as a safety mechanism when it is rare enough that each one gets real attention.

Why does approving everything fail?

The obvious way to make agents safe is to put a human in front of every action. It fails in a predictable way: the queue grows, every item looks like the last one, and the reviewer starts approving on reflex. The one action that should have been stopped goes through with the other 399.

The fix is not fewer approvals at random. It is approving the right things, and letting policy handle the rest.

What is an effect class?

Every tool call an agent makes in Heighliner carries an effect class that says how bad it is if the call was a mistake:

Effect classExampleWho decides
PureRead metrics, run a queryThe agent, freely
ReversibleOpen a pull request, flip a feature flagThe agent, within policy
CompensatableCharge a card (undo is a refund)Policy, often a person
IrreversibleEmail customers, delete dataAlways a person

Most agent work is pure or reversible: reading, drafting, opening a pull request someone will review anyway. That work runs without interrupting anyone. The approval queue only sees the small set of actions that cannot be taken back.

What happens while an action waits?

An irreversible action is not just blocked. It is held in escrow: staged in an outbox and released only when a person approves and the run commits. If the request is rejected, the effect is cancelled and nothing is sent.

While it waits, the agent is paused, so a two-day wait for an answer does not burn two days of compute. You can approve or reject in Slack, in ChatGPT or Claude through the MCP connector, or in the console.

How do approvals get rarer over time?

Three habits keep the queue short:

  1. Approve policies, not actions. Any approval can be saved as a rule, such as "always allow pull requests under 50 lines". The next similar action never reaches the queue.
  2. Sample the safe ones. Low-risk actions are applied automatically, with a small share surfaced for review so trust stays calibrated.
  3. Show precedent. A request can say how it differs from similar ones you approved before, so you judge the difference, not the whole action.

The number that matters is approvals per thousand dollars of agent work. It should fall every month.

Where do budgets come in?

Approvals and budgets cover different failures. An approval stops one bad action. A budget stops a thousand cheap ones adding up. You want both, plus a record of everything: every run ends with a receipt in a tamper-evident audit trail.

Questions

Which agent actions need a human approval?
In Heighliner, irreversible actions such as emailing customers or deleting data always need a person. Compensatable actions, like a charge that can be refunded, are decided by policy and often go to a person. Pure and reversible actions run within policy.
Where do I approve an action?
In Slack, in ChatGPT or Claude through the MCP connector, or in the console. The approval state lives in Heighliner, so losing a Slack message never loses an approval.
Does a waiting agent cost money?
An agent waiting on approval is paused and does not burn compute. Its snapshot still counts as storage.

A new home for autonomous work.

Big ambitions. Steady hands.

Bring your first agent aboard. Heighliner is in early access, and we’re building with our first crews.