---
title: "Controls"
description: "What becomes enforceable once Anlyon owns the production call: approvals and policies, environments and the kill switch, pinned versions and rollback, budgets."
---

A capable model is still a liability the moment it can act. It can call your Stripe account, point at the wrong database, or loop on a retry until the bill is four figures.

These pages are what Anlyon can do about that. They are not a separate product bolted alongside your agent: **each one is a consequence of Anlyon making the production call instead of your agent making it.** You cannot hold a request you never touched, pin a version of a call somebody else assembled, or attribute a side effect you only heard about afterwards. Read [the execution model](/execution) first if you have not.

Four controls, each enforced in the API:

**[Approvals & policies](/trust-control/approvals)**

Pause a call until a human decides. The requester cannot approve its own request, and every decision is recorded.

**[Environments & the kill switch](/trust-control/environments)**

A staging key can't reach production data. One switch stops an environment acting and stops anything leaving it. A request another server already accepted is not recalled.

**[Immutable versions & rollback](/trust-control/promotion)**

Promote to a protected environment with explicit confirmation. Roll back with a pointer move that keeps every version.

**[EU AI Act mapping](/trust-control/compliance)**

Engineering support for the record-keeping (Article 12) and human-oversight (Article 14) obligations, which apply to high-risk systems from December 2, 2027, as of 2026-09-07. Anlyon does not make a system compliant.

## The four principles

If you read nothing else, read these.

- **The agent can't approve itself.** Deciding an approval requires the separate `approvals:decide` scope and a distinct credential. The requesting key, or the OAuth app that made the request for a user, cannot decide its own request.
- **Blocked means blocked.** A capped key returns a clear `429 BUDGET_EXCEEDED` your code can catch. A denied approval does not run the call. Neither is a silent drop. The cap is on Anlyon operations. It is not a limit on model tokens or on the money an approved action moves. A budget belongs to the key that asked, and it is charged on the request that starts the work, not again on each step that follows: a delivery's retries, its callback, and the deliveries an event fan-out or a cron schedule produces have no key behind them and are bounded by your **plan's** monthly limits instead.
- **Halted means halted.** One switch stops new dispatch in an environment. An already-approved call will not run while it is halted, and the block is recorded. A request an external server already accepted is not recalled. Halt stops what has not left yet.
- **Rollback is a pointer move.** Versions are immutable and append-only, and nothing is destroyed to go back. A rollback restores the definitions later calls run. It does not undo an effect already dispatched.

## How the pieces fit

Anlyon holds the credentials ([Actions](/execution/actions) and [Secrets](/execution/secrets)), so the model calls a tool by name and never sees a key. Risky calls pause for a human (**Approvals**), routed by deterministic **policies**. Every resource lives in an **environment**, and a key reaches its own environment and no other. An operator can **halt** that environment. Agent configuration ships as **immutable versions** you promote and roll back by pointer. A **budget** per key caps the Anlyon operations that key may perform in a month. It does not cap model tokens or the money an action moves. An [impact limit](/execution/impact-limits) caps what governed actions change, and every key in the environment draws from it.

When a call carries a `runId`, the approval wait and the decision emit spans into that run's [trace](/execution/outcomes), so they sit on one timeline with the invocation and can be exported as OpenTelemetry.

## Start here

- New to it? Start with the [quickstart](/quickstart). For a function that cannot move into Anlyon, see [Local approval gates](/guides/approval-gates).
- Shipping to production? Read [Environments & the kill switch](/trust-control/environments) before you create a production key.
- Under a compliance mandate? [EU AI Act mapping](/trust-control/compliance).
