runward gate
Version updated for https://github.com/stranxik/runward to version v0.19.0.
- This action is used across all versions by 0 repositories.
Action Type
This is a Composite action.
Go to the GitHub Marketplace to find the latest changes.
Action Summary
Runward is an agent delivery framework that automates the entire mission from framing to handover, addressing architecture problems in agentic systems by providing structured delivery and governance. It supports various input sources like specs, OpenSpecs, and prototypes and offers six gated phases: Frame, Spec Kit, OpenSpec, Brownfield, Floor, Evolution on Evidence, Governance, and Handover. Runward ensures that agentic systems are built, tested, and delivered with resilience and autonomy, making them robust against unpredictable outputs and complex environments.
What’s Changed
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.
initwith no explicit--toolswrites only the vendor-neutral core (AGENTS.md+.agents/skills/);--yesno longer defaults to theclaudeprofile 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 (CLAUDECODEfor Claude Code and Cowork,GEMINI_CLI,CURSOR_AGENT), falling back to a config-file marker, thenundetermined. It recommends the matching auto-trigger channel and points at the inert sample — it never wires anything (wires:falseinvariant, ADR-0012) and never prompts, so an agent run never hangs. Onundetermined, 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--jsonso a subprocess can’t corrupt the object.- Hardened non-interactivity.
isNonInteractive()also returns true when stdin is not a TTY orCIis 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, thewires:falseinvariant) and smoke assertions forwire --jsonandcheck --json[ --strict]. Self-gate strict green; 65 unit tests.