Install runward from where you already work.
A lead only counts if it distributes. We checked, channel by channel, where the deterministic gate can install in one gesture, and with what strength. The result: a family of packagings, the same one line everywhere, and an honest tiering of what each channel can actually block.
One gate, every channel, tiered without lying
- GitHub Action: the hard gate. A published action, set as a required check, blocks at merge. The channel best aligned with governance, open, no secret. Maximum leverage.
- Claude Code plugin, and its siblings. A plugin that runs the gate at turn end, plus the same for Gemini CLI, Codex and Copilot: the same line,
runward check --strict, at the right moment. - Soft-gate channels, labelled soft. Cursor and Kiro let you bundle a hook, but their end of turn does not hard-block: the gate there is per-tool, and we say so plainly rather than dress it up.
- MCP: discovery, never a gate. An MCP tool is called by the model, which can skip it. We publish a descriptor to be findable, and a README that hammers it: this is not a gate. Claiming otherwise would sell a soft judge dressed as a hard one — exactly what runward refuses.
Honesty as the argument
In a market that overclaims, saying "hard here, soft there, discovery-only for MCP" is itself a credibility signal. The invariant holds everywhere: the operator installs, runward never wires anything itself; each packaging is a thin shell around the same exit code; and no agent is privileged. The neutral surface stays AGENTS.md and the shared skills.
Submitting to the marketplaces stays your gesture, like the npm publish: the packages are prepared, never submitted behind your back.
Install: npx runward init
Release v0.18.0 on GitHub · The channel map · CHANGELOG
← All news