Skip to content

TD-011: Slider Autonomy Implementation

Example from HELIX’s own docs. This generated page comes from docs/helix/. Use it to see the method in practice; start with the artifact-type catalog for reusable templates. Historical plans and reports may describe retired architecture.

Source identity (from 02-design/technical-designs/TD-011-slider-autonomy-implementation.md):

ddx:
  id: TD-011
  authoring:
    home: repo
  depends_on:
    - FEAT-011
    - ADR-003
    - helix.prd

TD-011: Slider Autonomy Implementation

DateStatusDecidersRelatedConfidence
2026-05-24ProposedHELIX maintainersFEAT-011, ADR-003High

Context

[[FEAT-011]] governs the low/medium/high autonomy spectrum. This design specifies how the content-only HELIX realizes that policy: through action prompts, the routing skill, and runtime-neutral artifacts. There is no HELIX runtime to implement — the runtime supplies agency; HELIX supplies the words that tell it how often to pause and what it may never skip.

This replaces the pre-collapse TD-011, which designed a helix input CLI, an execute-loop queue drainer, and a .helix/slider-config.yaml schema. Those surfaces were removed in 823aa1ac and are out of scope. What survives is the behavioral contract.

Requirements summary (from FEAT-011)

  1. Three-position spectrum (low/medium/high), default medium (FR-1).
  2. Resolution precedence: per-invocation → artifact frontmatter / project policy → runtime default; no CLAUDE.md (FR-2).
  3. Concern inference at high autonomy when no concerns.md exists (FR-3).
  4. Hard-stop invariant at every level (FR-4).
  5. Never-collapse-the-loop invariant at every level (FR-5).

Design decisions

Decision 1 — Autonomy is resolved per action, not stored in a config file

Each action that can pause (input, frame, evolve, design, build) resolves the active level at its bootstrap step using the FR-2 precedence chain:

level = invocation_override            # e.g. "--autonomy high" or explicit prompt instruction
      ?? governing_artifact.frontmatter.autonomy
      ?? project_policy.autonomy        # runtime-neutral project policy artifact
      ?? "medium"                       # runtime default

No file format is mandated beyond a runtime-neutral autonomy: key in frontmatter or a project policy artifact. The level is data the action reads, not a feature it owns. This keeps autonomy expressible identically across DDx, Claude Code, Codex, Copilot, and Genie.

Boundary note: the runtime may surface the per-invocation override however it likes (argument, env var, chat instruction). HELIX only fixes the precedence order and the default, never the runtime mechanism.

Decision 2 — Checkpoint density is the only thing the level changes

An action’s steps are fixed by the action; autonomy parameterizes only the pause points between and within them:

Pause pointlowmediumhigh
Before interpreting ambiguous intentaskproceed + documentproceed + document
Before creating each downstream artifactaskcreate if deterministiccreate
On a resolvable conflictaskaskrecord assumption (kind:speculative), continue
On an ambiguous-scope decisionaskaskbest-effort + speculative work item
On a hard stop (Decision 4)stopstopstop

The set of steps the action runs is identical across columns. Only the “ask” cells differ. This is the mechanical statement of FEAT-011 FR-5.

Decision 3 — Concern inference at high autonomy

When an action that touches concerns (frame, input, evolve) runs at high and docs/helix/01-frame/concerns.md is absent:

  1. Classify the product nature from the vision/PRD/intent (web app, API service, CLI, data pipeline, library).
  2. Map the nature to candidate library concerns under workflows/concerns/ (e.g. web app → a tech-stack concern + a frontend concern + a11y-wcag-aa; API service → tech-stack + o11y-otel + security-owasp).
  3. Write concerns.md with the inferred selection, marking each as an assumption (a recorded inference, not a confirmed choice).
  4. Detect conflicts among inferred concerns per concern-resolution.md; record unresolved ones as assumptions to revisit, never as a silent pick.

At low/medium, concern selection follows the interactive path in concern-resolution.md §“Concern Selection in /helix frame”. Inference never overwrites an existing concerns.md.

Decision 4 — Hard-stop classification

A hard stop is a condition no autonomy level may pass:

ConditionWhy it is a hard stop
True contradiction between equal/higher-authority artifactsThe authority hierarchy cannot reconcile it; picking a side fabricates intent.
Destructive/irreversible unauthorized actionCannot be undone; consent is required (mirrors the repo destructive-command guard).
Decision only a human can makeProduct direction or an external contract change is outside agent authority.

Everything else is a resolvable conflict: high autonomy records an assumption and continues; low/medium ask. A runtime preserve/abort outcome ends the current bounded attempt and returns control to HELIX — it is an execution result, not a hard stop, and must not be re-classified as one.

Decision 5 — Where the behavior is authored

SurfaceWhat it carries
workflows/actions/input.mdCanonical per-level rules (already present) + precedence note.
workflows/actions/frame.md, evolve.mdConcern inference at high autonomy.
skills/helix/SKILL.md §AutonomyLevel semantics, precedence, hard-stop, never-collapse-loop — runtime-neutral, no runtime-specific assertions.
Governing artifact frontmatter / project policyThe autonomy: value the precedence chain reads.

Traceability

FEAT-011 requirementRealized by
FR-1 default mediumDecision 1 fallback
FR-2 precedenceDecision 1 chain
FR-3 concern inferenceDecision 3
FR-4 hard stopDecision 4
FR-5 never collapse loopDecision 2

Testing strategy

Behavioral, not unit — there is no HELIX code. Verification rides the existing workflow-coverage harness ([[FEAT-014]]):

  • A high-autonomy fixture run on a no-concerns.md project produces a concerns.md with inferred concerns (FR-3 / FEAT-011-AC3).
  • A high-autonomy fixture with a planted equal-authority contradiction stops rather than picking a side (FR-4 / FEAT-011-AC4).
  • An autonomy precedence fixture (invocation override vs frontmatter) resolves to the override (FEAT-011-AC2).
  • A loop-collapse check confirms every required activity still runs at high autonomy (FR-5 / FEAT-011-AC5).

Risks and mitigations

RiskMitigation
“More autonomy” misread as “skip activities”FR-5 invariant stated in FEAT-011, ADR-003, skill, and Decision 2 here.
Inferred concerns drift from real product needsInference is recorded as an assumption and is an alignment-review target.
Autonomy leaks into CLAUDE.mdFR-2 explicitly excludes it; runtime-neutrality is a PRD-measured metric.

References

Innsigle seal: model-primary by HELIX

The signature covers the markdown source of this page, not these HTML bytes. This page quotes that seal; verify it against the source file.

Composition
model-primary
Issuer
HELIX helix
Signing key
ed25519:b0865d76d834a52c48506414d16f4e5a (build key)
Signed source
artifacts/technical-designs/TD-011-slider-autonomy-implementation.md
Signed
2026-09-23T14:11:58Z
Content digest
sha256:007b5f43…1168feed

This build key is endorsed by the human key for build signing; the signature is not a detector and not a truth guarantee.

Raw attestation JSON
{
  "payload": {
    "innsigle": "1",
    "type": "https://innsigle.dev/claim/colophon/v1",
    "issued_at": "2026-09-23T14:11:58Z",
    "issuer": {
      "id": "helix",
      "name": "HELIX",
      "key_id": "ed25519:b0865d76d834a52c48506414d16f4e5a",
      "key_url": "https://documentdrivendx.github.io/helix/.well-known/innsigle/keys.json"
    },
    "subjects": [
      {
        "uri": "https://documentdrivendx.github.io/helix/artifacts/technical-designs/TD-011-slider-autonomy-implementation/",
        "digest": {
          "alg": "sha256",
          "value": "007b5f431aebc6151c4749bb4a1516df4d86514b1199f5cdf4ff72b61168feed"
        }
      }
    ],
    "colophon": {
      "schema_version": "1",
      "composition": "model-primary",
      "ingredients": [
        {
          "kind": "model",
          "name": "Claude",
          "role": "draft"
        },
        {
          "kind": "tool",
          "name": "sloptimizer",
          "role": "rewrite"
        },
        {
          "kind": "human",
          "name": "operator",
          "role": "structure-edit"
        }
      ],
      "notes": null
    }
  },
  "payload_encoding": "json",
  "signatures": [
    {
      "key_id": "ed25519:b0865d76d834a52c48506414d16f4e5a",
      "alg": "ed25519",
      "sig": "DBPRj-481kgBk9LBcabCSSrwFPGBMQp_vJ-j-MX9xRobs8pdN1LImYba6xUHKzM5SdxoEXIIZByoPsxgDQ6PAg",
      "signed_at": "2026-09-23T14:11:58Z"
    }
  ]
}