Skip to content

0.1.0-beta.1

The first Coxswain release, cut on 2026-09-05 — the day the platform took its name. Every component is tagged v0.1.0-beta.1 in lockstep; the manifest table on the Releases page pins them. coxswain and coxswain-tools are published to PyPI from those tags by trusted publishing, so uv tool install coxswain-tools gets you the cox command without a token anywhere.

Status: beta. The loop works and runs itself daily, but the interfaces are still moving. Two things are deliberately deprecated for exactly one release: agent-tools as an alias for cox, and cast as an alias for the cartridge's crew key.

What you can do with it

Install the platform from one manifest, point it at a repository, and describe a change. Coxswain files it as a work item, plans it, builds it in a worktree under a budget, has two independent reviewers argue about it, arbitrates them, runs the project's own tests as evidence, and hands you a pull request. You merge. cox setup doctor tells you whether a machine can do that; cox runs top shows you the runs that are doing it now.

coxswain

  • manifest.toml as the single source of truth for what a release installs, with lockstep pins and tests on its shape.
  • The docs site: MkDocs Material, mike versions on GitHub Pages, dark by default with a light toggle and the project's own palette, prev/next navigation above and below every page, a CLI reference generated at build time from cox --help, and terminal screenshots captured with Rich.
  • A top-down pixel-art racing eight in the header, animated across six frames and still under prefers-reduced-motion.
  • Every graph's diagram, pulled from the graphs repository at build time rather than drawn by hand.
  • publish.yml: PyPI trusted publishing on v* tags, environment pypi, no token stored anywhere.

cartridges (coxswain-cartridges)

  • The coxswain Claude Code plugin: a session-start hook that prints the docket, a statusline showing runs in flight and free slots, and the /launch, /land, /runs, /intake and /regatta commands.
  • cartridge init <team> writes a minimal team cartridge that inherits its bindings from extends, beside base and local, and prints the profile lines to add.
  • cartridge.d/*.yaml fragments fold over each layer in sorted order, tighten-only per fragment, with refusals naming the fragment file. layers() exposes the resolved cartridge after each one.
  • crew replaces cast as the seats key, with cast accepted for one release and recorded in deprecations. Seat-bound plugin skills are no longer validated against the harness skill index.
  • policy.dispatch.max_in_flight bounds concurrent runs; policy.plan_tier derives a task's tier from its surfaces; a work item may carry budget_usd, capped by the base cartridge.

graphs (coxswain-graphs)

  • The coxswain graph's docket reports runs in flight and free slots, and the driver invokes only that many, deferring the rest with a reason. The chief-of-staff graph, its docs and its prose took the brand name; the registry key stays cos.
  • validate_chunk can ask for evidence: a typed needs_evidence list of paths the harness reads once and attaches before asking again, which ends the blind "need to verify" quarantines.
  • Budgets are recoverable. A build that hits its ceiling raises BudgetStop with the session and the spend, keeps the partial diff, and the lifecycle makes a deterministic go/no-go with remedies before continuing in the same session.
  • The plan competition and the plan attack are gated on a task's pre-build tier against plan_competition.min_tier, so three deep-tier calls are spent only where the surface is dangerous.
  • Every graph's page and mermaid diagram are generated from the graph's own docstring, with a freshness test that fails CI when a graph changes without a regeneration.
  • apply_patch strips a builder's trailing markup and refuses markup mid-patch by name.

tools (coxswain-tools)

  • cox is the operator command, and bare cox opens a Coxswain session: Claude Code with the plugin loaded and the workspace as its working directory. agent-tools stays as an alias for one release.
  • cox install plans from the manifest and executes it; cox upgrade refuses dirty checkouts; cox versions reports each component against its pin.
  • cox setup doctor verifies a machine read-only and exits non-zero when it cannot run an epic; cox setup is a curses screen over doctor, install and the cartridge editor.
  • cox runs events [--follow] [--json] is a typed event stream folded from run records; cox runs top is a live table of runs in flight, with --once for scripts; cox runs land plans and executes the landing of an approved run.
  • cox route files work, launches the harness detached, and reports status.
  • Maintainer commands live under cox dev, which refuses to run outside a maintainer's checkout, so the operator surface stays small.
  • Every subcommand carries help text, every group a description and worked examples, and a bare group prints its own help instead of a traceback.

crew (coxswain-crew)

  • Renamed from agent-cast. No behaviour changes; the cartridge vocabulary it names moved from cast to crew.

hud (coxswain-hud)

  • Renamed from agent-voice-hud. No feature work this release. The regatta — a live view of runs as a rowing race, with the reticle kept as an alternate flavor — is decomposed and planned.

desktop

  • Planned: the Waybar module, the notifier service and the floating runs top window, once runs notify and runs bar exist in tools.

Across every repository

Ruff runs in CI on all six components with one shared rule set, mirrored locally by pre-commit.