Here's how to handle each risk class.
**read_only** โ free use, but always logged. Looking is fine; leaving a trace is required.
**reversible-write** (adding labels, creating drafts, adding negatives) โ dry-run first, show the diff, get human approval, then execute and log. The diff is the approval UI.
**financial** (budget changes, bid adjustments) โ requires explicit approval plus hard caps enforced in code: both a percentage limit and an absolute monetary ceiling. These limits live in the gateway, not in the prompt.
**destructive** (delete campaign, delete audience) โ not exposed to agents at all. Human-only, ever. There is no careful way to give an agent a delete button.
**external-comms** (send email, publish post) โ approve per item at lower rungs; per batch with sampled review at higher autonomy levels.