Skip to Content
Numinance
Concepts

Autonomy levels

The eight-level autonomy ladder, how defaults, rules and floors combine, and why autonomy is qualified and human-accepted before it is raised.

View as .mdUpdated
Available in public spec
The ladder and the AutonomyPolicy kind are public and schema-validated. Enforcement happens in the proprietary runtime.

Autonomy is a number you choose per situation, capped by floors nobody below the organization can lower. Start supervised, qualify, authorize.

The ladder

AutonomyLevel is an ordered enum. Each level includes the ones below it.

LevelMeaning
AUTONOMY_LEVEL_OBSERVERead and report. No proposals are made.
AUTONOMY_LEVEL_SUGGESTPropose changes without applying them.
AUTONOMY_LEVEL_IMPLEMENTProduce an implementation in an isolated workspace.
AUTONOMY_LEVEL_PROpen a pull request. A human merges.
AUTONOMY_LEVEL_MERGEMerge after the required checks and approvals.
AUTONOMY_LEVEL_STAGEDeploy to a staging environment.
AUTONOMY_LEVEL_RELEASERelease to production through the release pipeline.
AUTONOMY_LEVEL_OPERATEObserve and recover released changes within bounds.

Autonomy policy explorer

Given defaults, rules and floors, what is the highest level this change may reach?

Illustrative · simulated
Scenario
Playbook
Risk
Environment
Rule level (what-if)
  1. OPERATE
  2. RELEASE
  3. STAGE
  4. MERGErequestedeffective
  5. PR
  6. IMPLEMENT
  7. SUGGEST
  8. OBSERVE
Effective level AUTONOMY_LEVEL_MERGE

The dependency-upgrade rule matches and requests MERGE. No floor matches, so nothing lowers it.

  1. 1 · Default
    defaults.level = PR (overridden by the matching rule)
  2. 2 · Rule: dependency-upgrade, LOW → MERGEmatched
    playbook (resolver context): dependency-upgrade ✓ · risk (exact): LOW ✓
  3. 3a · Floor: risk HIGH or higher → max SUGGESTnot matched
    risk (resolver context): LOW; a floor matches that class and every higher one.
  4. 3b · Floor: environment production → max MERGEnot matched
    environment (resolver context): a different environment.
  5. 4 · Result
    min(requested MERGE, lowest matching floor none) = MERGE
schemas/examples/AutonomyPolicy/org-ladder.yamlreal example
apiVersion: numinance.dev/v1
kind: AutonomyPolicy
metadata: {name: org-ladder, scope: SCOPE_ORG}
spec:
defaults: {level: AUTONOMY_LEVEL_PR}
rules:
- {match: {playbook: dependency-upgrade, risk: RISK_CLASS_LOW}, level: AUTONOMY_LEVEL_MERGE} (matched)
floors:
rules:
- {match: {risk: RISK_CLASS_HIGH}, max_level: AUTONOMY_LEVEL_SUGGEST}
- {match: {environment: production}, max_level: AUTONOMY_LEVEL_MERGE}
  • Kernel floors are always on. They sit under every policy and no rule or default removes them.
  • The highest configured level never bypasses a matching floor. Floors cap; they are not suggestions.
  • Promotion is proposed, then accepted. Evaluation may propose a higher level; a human accepts it. An agent never grants itself a rung.
✓ matched■ reachable rung✕ blocked by a floor▤ real org-ladder example
Text description

The ladder is the AutonomyLevel enum, lowest to highest: OBSERVE (reads only), SUGGEST (proposes, writes nothing), IMPLEMENT (writes in a sandbox), PR (opens pull requests), MERGE (merges when policy allows), STAGE (deploys to pre-production), RELEASE (deploys to production), OPERATE (operations against production).

Resolution follows AutonomyPolicySpec: the level is the lowest level among matching rules, else defaults.level; then no level above the lowest max_level among the matching floors. The example policy is org-ladder: default PR; one rule (playbook dependency-upgrade and risk LOW sets MERGE); two floors (risk HIGH or higher caps at SUGGEST; environment production caps at MERGE).

  • In a rule, risk matches exactly and a key the change has no value for does not match.
  • In a floor, risk matches that class and every higher one, and a key the change has no value for counts as a match, which is why the toggle none for environment still matches the production floor.
  • The playbook, risk and environment values are the resolver context of the change. They are not extra fields on a rule. The what-if rule level only changes the simulation; the YAML shown is the real example text.
  • Kernel floors are always on. Promotion to a higher level is proposed by evaluation and accepted by a human, and is never self-granted.
  • An org with no floors gets the shipped floor (SUGGEST for HIGH and PRIVILEGED, PR for the rest); control-pack floors can only add caps.

Everything here is simulated in the browser from the example policy. Nothing is connected to a running engine.

Defaults, rules and floors

An AutonomyPolicy has three parts in its spec: defaults, rules and floors. This is the organization example from the spec:

schemas/examples/AutonomyPolicy/org-ladder.yaml
apiVersion: numinance.dev/v1
kind: AutonomyPolicy
metadata: {name: org-ladder, scope: SCOPE_ORG}
spec:
  defaults: {level: AUTONOMY_LEVEL_PR}
  rules:
    - {match: {playbook: dependency-upgrade, risk: RISK_CLASS_LOW}, level: AUTONOMY_LEVEL_MERGE}
  floors:
    rules:
      - {match: {risk: RISK_CLASS_HIGH}, max_level: AUTONOMY_LEVEL_SUGGEST}
      - {match: {environment: production}, max_level: AUTONOMY_LEVEL_MERGE}
  • A default is where a change lands if nothing more specific matches.
  • A rule matches on playbook, risk and environment and sets a level. Rules can raise or lower the default.
  • A floor is a ceiling in practice: it sets a max_level for matching changes. A rule cannot exceed it. In the example, high-risk changes can never go above SUGGEST, and production never above MERGE, whatever a rule says.

Floors are declared with a merge directive that forbids overriding them in lower scopes: a repository policy cannot lift what the organization capped. numi init writes a repository policy at AUTONOMY_LEVEL_PR with no floors block, because floors set below the org scope are refused.

What the open build checks

numi validate --files checks that the document is schema-valid. It does not resolve profiles or apply floors. Ordinary numi validate passes the schema checks and then exits 7, because profile resolution needs the proprietary engine.

Start supervised, qualify, authorize

A higher level is not granted because a model got better. The intended path is:

  1. Start at a supervised level, typically AUTONOMY_LEVEL_PR, where a human merges every change.
  2. Qualify: a playbook can declare qualification thresholds, such as a minimum number of runs and maximum rework, regression and rollback rates, with zero security escapes. These are measured over real runs.
  3. Authorize: a human accepts the promotion by changing policy. The agent cannot promote itself, and a failed qualification does not raise a level automatically.

If outcomes degrade, the same path works downward: lower the default or add a floor.

Failure modes

  • A rule asks for MERGE on a high-risk change: the floor wins and the change stays at SUGGEST.
  • A repository tries to set floors: the document is refused.
  • The breaker moves to a more restrictive position: the effective level drops regardless of policy.

Next steps

On this page