Skip to main content
Some actions should wait for a person: a large charge, a public announcement, an email to a CEO. A workspace policy marks them. Invoke holds the action, and it runs once only when a reviewer approves it.

How approvals work

1

A policy says which actions need a human

Match on the tool, the agent or the action, and add conditions on its arguments:
approvers is optional. It restricts who may decide. Each entry is a user id, a role or a key name, and it’s checked against the deciding key, not a name typed into a form.
2

The agent's call is held

Nothing runs. call() throws ApprovalRequiredError, or it waits if you pass waitForApproval:
The held action appears in the console with the tool, its arguments, and the agent that asked.
3

A reviewer decides

  • Approved. The action runs once, and the waiting call resolves with its receipt. The receipt records who approved it and when, and it flags approvals made with the same key that asked.
  • Rejected. The action never runs. A waiting call throws DeniedError.
  • No decision in time. The approval expires, and the action never runs.
Only an admin can decide an approval. An agent’s own key can never approve its own action.

Approved means run as approved

Invoke runs the action exactly as the reviewer saw it. It doesn’t re-check the outside world after approval. If what the action depends on can change while it waits, such as a deploy status or an account owner, give the reviewer what they need to judge it, and check it with POST /state/verify before the agent sends the call.

Approval outcomes

Next steps