ReferencesAutonomy Config

Autonomy Config

The .loop/config.yaml file is the single control surface for how much autonomy the plugin exercises. It is read at every Phase -1 before any agent is dispatched.

Presets

Set autonomy.preset to one of three values. That is usually the only line you need.

PresetWho decidesTypical interactions per ticket
minimalPlugin decides everything except safety floors0–1
ownershipHuman owns architecture, risk, and delivery moments3–5
customEvery gate defined explicitly by the uservaries
# .loop/config.yaml
autonomy:
  preset: ownership

Presets are self-contained. Setting preset: minimal implies all gate defaults — you do not need to list each gate.

Preset expansion

Gateminimalownership
budget_gate.on_exceedproceedask (only if >2x threshold)
verifier_blocking_gate.on_blockingauto_fix (2 retries)auto_fix (2 retries)
adr_conflict_gate.on_high_conflictproceed_with_recordask
adr_rule_violation_gate.on_violationask (safety floor)ask (safety floor)
spec_clarification_gate.on_gapsuse_defaults_and_flaguse_defaults_and_flag
self_healing_exhaust_gate.on_exhaustedescalate_silentask
pr_creation_gate.on_readyproceed (draft only)ask
notification_gate.enabledfalsefalse

Custom preset

If you set preset: custom, every gate must be defined explicitly. Partial configs are rejected at Phase -1.

autonomy:
  preset: custom
 
gates:
  budget_gate:
    enabled: true
    threshold_usd: 2.00
    on_exceed: ask           # ask | proceed | abort
 
  verifier_blocking_gate:
    enabled: true
    on_blocking: auto_fix
    auto_fix_max_retries: 2  # max 5; higher values rejected
 
  adr_conflict_gate:
    enabled: true
    on_high_conflict: ask    # ask | proceed_with_record | abort
 
  adr_rule_violation_gate:
    enabled: true
    on_violation: ask        # ask | abort — "proceed" is REJECTED
 
  spec_clarification_gate:
    enabled: true
    on_gaps: use_defaults_and_flag
    max_questions: 0         # max 20
 
  self_healing_exhaust_gate:
    enabled: true
    on_exhausted: escalate_silent
 
  ticket_status_update_gate:
    enabled: true
    on_complete: proceed
 
  pr_creation_gate:
    enabled: true
    on_ready: ask
 
  notification_gate:
    enabled: false
    on_complete: skip

Gate actions

ActionEffect
askRun pauses; user presented 2–3 options
proceedContinue on default safe path; decision recorded
proceed_with_recordContinue; item added to STATE Watch List
proceed_with_warningsContinue; run marked status: partial
auto_fixCorrective worker dispatched; capped at auto_fix_max_retries
escalate_silentItem added to STATE High Priority; no interrupt
abortRun stops; status set to aborted

Continuous feedback in minimal preset

When the preset is minimal, all gates are set to proceed. The plugin never asks questions — which means feedback emissions are the only visibility mechanism during the run.

At each phase checkpoint the plugin emits a line in the chat following this format:

<emoji>  <Phase> — <descriptor> · <metric 1> · <metric 2>

Example of what you see during a minimal run:

🔍  Phase -1 — spine OK · preset: minimal · MCP: jira ✓  github ✓
🧠  Triage — 2 phases · 4 workers total · ~$0.45 est.
    generate-spec (1) → self-healing (3)
💰  Budget — $0.45 est. ≤ $2.00 → proceeding
⚙️   Wave 1/2 — dispatching 1 worker (generate-spec)
    └─ w1: spec MH-204
⚙️   Wave 1/2 — done · 1/1 OK · 0 retries · 42s · 38K tok
⚙️   Wave 2/2 — dispatching 3 workers (self-healing)
    ├─ w1: EmailVerificationService.ts
    ├─ w2: EmailVerificationService.test.ts
    └─ w3: email.types.ts
⚙️   Wave 2/2 — done · 3/3 OK · 1 retry · 94s · 112K tok
🔎  Verifier — BLOCKING: 0 · WARNINGS: 1
🔎  Verifier — all clear → proceeding
📝  Synthesis — spec-writer (opus) · doc ticket
🎫  Ticket MH-204: In Progress → In Review
🌿  PR: https://github.com/org/repo/pull/78

These checkpoints replace gate interactions as the user’s progress signal — or appear in the CI log when the plugin runs in headless mode.

Per-run override

Append --autonomy=<preset> to any ticket invocation. The override applies to that run only; the config file is not modified.

do "Migrate auth to Riverpod --autonomy=minimal"

Safety floors

These four rules apply regardless of preset and cannot be configured away:

  1. PRs are never auto-merged.
  2. Nothing is ever pushed to main, master, or protected branches.
  3. Denylist paths from budget.md are never written to.
  4. Documented rule violations (adr_rule_violation_gate) can only trigger ask or abort — never proceed.