Skip to content

0.2.0

Cut on 2026-09-06. Every component is tagged v0.2.0 in lockstep; the manifest table on the Releases page pins them. coxswain-tools is published to PyPI from that tag, so uv tool install coxswain-tools gets you the cox command.

Status: beta, and the version says so differently now. 0.1.0-beta.1 promised a convergence on 0.1.0 that was never happening — this release adds commands and changes behaviour. Under zero-dot versioning the major already means the interface may move, and the minor is where breaking changes go. The word beta stays in the docs, where it can say what is settled and what is not; the version string is for resolvers.

Breaking

The HUD and desktop are no longer components. The voice HUD went back to being a standalone project, private and archived, and desktop was a shell around it that had no implementation in this repository. Coxswain is four components now: cartridges, graphs, tools, and the optional crew. cox install --with hud and --with desktop no longer resolve, and cox hud is gone. If you were using the voice loop, it is unchanged in its own repository — it simply is not part of this product.

policy.gate defaults to ticket. A cartridge now declares one of four human-gate levels, and the default is the safest: the harness proposes and a person merges. A machine that merged on green under 0.1.0-beta.1 will stop doing so until you set a different level. Any change toward full through the cartridge chain is refused by name, the same tighten-only rule write_kinds already had.

The loop lands its own work more often

A run's records now answer questions they could not before. A build's size target counts source lines and reports test lines beside them rather than refusing for them. The handoff no longer asks for evidence the harness already measured. A validator that answers with a placeholder is asked once more and then abstains, and its evidence request must name a real path. Reviews run at the standard tier with arbitration kept deep, which is where the judgment was measured to be worth it. Every node's dollar ceiling is its own again, rather than being spent by its siblings on the same ticket.

New in cox

  • cox runs detail RUN — a per-run drill-down: node timeline, standing objection, quarantine reason, last tool calls. runs top opens it with ENTER.
  • cox runs notify — desktop notifications for exits, quarantines, budget stops and cost.
  • cox route leader take|beat|release|status — one file says who drives the landing loop, and route launch and runs land --apply refuse while another live session holds it.
  • cox dev release-check — the docs checks that compare the CLI surface, the manifest and the release notes against what actually landed, run before a tag.
  • cox route file --from-intake — an intake file becomes an initiative, linked both ways and retired; route status shows intake as queued, decomposed and landed.

The project layer

A target repository may carry .agent/cartridge.yaml, merged last over whatever the team resolved to. Four keys are allowed — context, policy.review_tier, landing_areas.checks and description — every other key is refused by name, and the overlay is tighten-only. Runs record an overlay_sha, so a run under an overlay is provably a different run.

Also

The public front pages name the repositories they actually are, and every documentation link carries the version segment the site publishes under. Ruff runs in CI on every repository. The methodology now says what a graph may not do: a graph owns sequence and writes nothing, and one harness owns every consequence.