Skip to content

ADR-003: Autonomy is a Three-Position Spectrum, Not a Fixed Level

Source identity (from 02-design/adr/ADR-003-autonomy-spectrum.md):

ddx:
  id: ADR-003
  depends_on:
    - helix.prd
    - FEAT-011

ADR-003: Autonomy is a Three-Position Spectrum, Not a Fixed Level

DateStatusDecidersRelatedConfidence
2026-05-24ProposedHELIX maintainersFEAT-011, TD-011, PRDHigh

Context

AspectDescription
ProblemA max-autonomy “one-shot a working app” build showed HELIX needs a governed way to say how much a runtime should pause for human confirmation. The low/medium/high vocabulary already existed in workflows/actions/input.md, but the governing feature (FEAT-011) and design (TD-011) were removed in the scope collapse (823aa1ac), so the policy was dangling and unauditable.
Current StateThe PRD now states autonomy is “a first-class, controllable spectrum (review-every-edit → full one-shot)” and that HELIX “will not flatten the seven-activity loop into one generic prompt.” Nothing recorded why the spectrum has exactly three positions, how the active level is resolved, or what a high-autonomy run may never do.
RequirementsHELIX must express an autonomy policy that a capable runtime honors, with a fixed vocabulary, a deterministic resolution order, and two invariants: a hard stop no level may pass, and a guarantee that autonomy never collapses the activity loop. The policy must be runtime-neutral — no CLAUDE.md dependency, no runtime config schema.

Decision

We adopt a three-position autonomy spectrumlow, medium, high, default medium — that controls checkpoint density only. The level changes how often a workflow pauses for confirmation; it never changes which activities run or whether a hard stop is honored.

We fix the resolution precedence as: per-invocation override → governing artifact frontmatter / project policy → runtime default (medium). The autonomy signal lives only in runtime-neutral artifacts. CLAUDE.md and runtime-specific instruction files are explicitly excluded from the chain.

We bind two invariants to every level:

  • Hard stop — true higher/equal-authority contradictions, unauthorized destructive actions, and human-only decisions stop the workflow at any level. High autonomy raises the pause threshold, never the stop floor.
  • Never collapse the loop — autonomy changes pause frequency, not the seven-activity loop. A high-autonomy run executes the same activities a low-autonomy run would.

At high, a workflow additionally infers concern selection when none is declared, recording the inference as an assumption rather than pausing to ask.

Key Points: three fixed positions | precedence chain excludes CLAUDE.md | checkpoint density only | hard stop + never-collapse-loop invariants | high autonomy infers concerns

Alternatives

OptionProsConsEvaluation
Single fixed behavior (always-ask or always-autonomous)Simplest to describeContradicts the PRD spectrum goal; unusable for both learning and one-shot contextsRejected: PRD requires a spectrum
Numeric/continuous slider (0–100)Fine-grainedNo meaningful semantics per value; impossible to test deterministically; invites per-step bikesheddingRejected: three positions are testable and sufficient
New vocabulary (ask-first/guided/yolo)EvocativeForks the existing low/medium/high already used in input.md, creating driftRejected: reuse the established vocabulary
Store autonomy in CLAUDE.md / runtime configConvenient per-runtimeBreaks runtime-neutrality (PRD R-4); same project would behave differently across runtimesRejected: signal must be runtime-neutral
Three positions, precedence chain, two invariantsReuses existing vocab, testable, runtime-neutral, auditableRequires restoring FEAT-011/TD-011 and re-blessing CONTRACT-002Selected: smallest governed policy that satisfies the PRD

Consequences

TypeImpact
PositiveThe autonomy policy is governed, auditable, and ratchet-able instead of dangling.
PositiveThe same project behaves identically across runtimes because the signal is runtime-neutral.
PositiveHigh autonomy becomes safe to use: the hard-stop and never-collapse-loop invariants bound what it may do.
PositiveConcern inference at high autonomy turns the previously inert concerns library into a default behavior.
NegativeEvery action that can pause must resolve the level at bootstrap — a small recurring authoring cost.
NeutralHELIX still ships no execution engine; the runtime supplies the agency the policy describes.

Risks

RiskProbImpactMitigation
“More autonomy” is read as “skip activities”MHFR-5 never-collapse-loop invariant stated in FEAT-011, TD-011, skill, and here
Autonomy signal leaks into CLAUDE.mdMMPrecedence chain explicitly excludes it; runtime-neutrality is a PRD-measured metric
Inferred concerns diverge from real needsMMInference recorded as an assumption; alignment review flags drift
High autonomy bypasses a true contradictionLHHard-stop invariant applies at every level; tested via the workflow-coverage harness

Validation

Success MetricReview Trigger
No dangling FEAT-011 / TD-011 references remainAny action or contract still cites a missing autonomy artifact
Active level resolves deterministically by the precedence chainAn action resolves autonomy from CLAUDE.md or a runtime config
High-autonomy runs infer concerns and still honor hard stopsA high-autonomy run overwrites concerns.md or passes a hard stop
Every required activity runs at every levelA high-autonomy run skips an activity or flattens the loop

References