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.
| Preset | Who decides | Typical interactions per ticket |
|---|---|---|
minimal | Plugin decides everything except safety floors | 0–1 |
ownership | Human owns architecture, risk, and delivery moments | 3–5 |
custom | Every gate defined explicitly by the user | varies |
# .loop/config.yaml
autonomy:
preset: ownershipPresets are self-contained. Setting
preset: minimalimplies all gate defaults — you do not need to list each gate.
Preset expansion
| Gate | minimal | ownership |
|---|---|---|
budget_gate.on_exceed | proceed | ask (only if >2x threshold) |
verifier_blocking_gate.on_blocking | auto_fix (2 retries) | auto_fix (2 retries) |
adr_conflict_gate.on_high_conflict | proceed_with_record | ask |
adr_rule_violation_gate.on_violation | ask (safety floor) | ask (safety floor) |
spec_clarification_gate.on_gaps | use_defaults_and_flag | use_defaults_and_flag |
self_healing_exhaust_gate.on_exhausted | escalate_silent | ask |
pr_creation_gate.on_ready | proceed (draft only) | ask |
notification_gate.enabled | false | false |
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: skipGate actions
| Action | Effect |
|---|---|
ask | Run pauses; user presented 2–3 options |
proceed | Continue on default safe path; decision recorded |
proceed_with_record | Continue; item added to STATE Watch List |
proceed_with_warnings | Continue; run marked status: partial |
auto_fix | Corrective worker dispatched; capped at auto_fix_max_retries |
escalate_silent | Item added to STATE High Priority; no interrupt |
abort | Run 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/78These 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:
- PRs are never auto-merged.
- Nothing is ever pushed to
main,master, or protected branches. - Denylist paths from
budget.mdare never written to. - Documented rule violations (
adr_rule_violation_gate) can only triggeraskorabort— neverproceed.