Skip to content

v0.19.0 — agent-operable baseline + runward wire

Choose a tag to compare

@stranxik stranxik released this 17 Jul 12:46

Making "an AI agent can discover, install and operate runward with no human at the keyboard" true — without leaning on a detection layer that can only ever be partial (ADR-0030).

  • Neutral baseline by default. init with no explicit --tools writes only the vendor-neutral core (AGENTS.md + .agents/skills/); --yes no longer defaults to the claude profile and the wizard pre-checks nothing. No harness is privileged — a channel is an opt-in the operator adds afterward. Closes a standing vendor-neutrality breach.
  • runward wire — best-effort harness detection. Detects the AI harness running the command via a verified runtime signal (CLAUDECODE for Claude Code and Cowork, GEMINI_CLI, CURSOR_AGENT), falling back to a config-file marker, then undetermined. It recommends the matching auto-trigger channel and points at the inert sample — it never wires anything (wires:false invariant, ADR-0012) and never prompts, so an agent run never hangs. On undetermined, the doctrine (AGENTS.md + the plugin SKILL.md) tells the agent to ask the operator which tool they use rather than guess.
  • check --json — a machine contract. A stable, deterministic JSON verdict (current gate, deliverable states, conformance gaps) so an agent drives on data, not scraped text. Hook output is routed to stderr under --json so a subprocess can't corrupt the object.
  • Hardened non-interactivity. isNonInteractive() also returns true when stdin is not a TTY or CI is set — an autonomous run never hangs on a prompt it cannot answer.
  • Guards. New unit tests for detection (signal precedence, per-family config detection, undetermined, the wires:false invariant) and smoke assertions for wire --json and check --json[ --strict]. Self-gate strict green; 65 unit tests.