# Autonomy Levels & Approval Gates Every agent spec declares an `autonomy` level (L0–L2). L3 (full autonomy) is **not used** initially — the cost of an autonomous mistake is higher than the cost of a human click. ## Levels | Level | Meaning | Examples | |-------|---------|----------| | **L0** | Read/analyze only. Produces a report/draft, changes no state. | Audits, research, reports, estimates | | **L1** | Drafts inside the system; a human approves before anything leaves. | Client emails, social posts, invoices, ad campaigns, outreach | | **L2** | Acts alone within caps and reversible scope. Internal-only side effects. | Ticket triage, internal task creation, low-risk support replies, internal notes | ## Hard rules — always human-approved regardless of level These are enforced by the `aos-policy` Rust crate (not the prompt). An agent attempting one pauses the task and emits an `ApprovalRequest` (see `schemas/approval.json`). - **Spending money** (ads, API fees, paid tools) - **Publishing publicly** (website go-live, social post, blog article) - **Sending invoices** - **First client/prospect contact** (email, message, call) - **Sending outreach** (cold B2B — UWG §7, draft-only by default) - **Revoking licenses** - **Deleting data / instances / DNS records** - **Production deploys** - **DB migrations on live data** - **Anything filed with authorities** (UStVA, EÜR, ELSTER) - **Contract changes** (new, amended, terminated) - **Budget changes** (raising a campaign cap, approving extra spend) ## How approvals surface - An `ApprovalRequest` lands in the AOS approval inbox. - A notification goes to the human approver (phone/Slack/email — channel TBD, see open questions). - The approver sees: action, risk, rationale, diff summary, estimated cost, the originating task + agent, and the full structured payload. - Approving resumes the task; rejecting fails it with a reason logged. ## Budget enforcement Each agent spec declares `budget.max_eur_per_task` and `budget.max_tokens`. The policy crate tracks cumulative spend per task_id and hard-stops when the cap is reached — no agent can spend past its declared ceiling, even with approval, without an explicit budget-increase approval.