Skip to content

0.26.0

Cut on 2026-09-30. coxswain-graphs, coxswain-tools and coxswain-dash are tagged v0.26.0. coxswain-cartridges stays pinned at v0.23.1 and coxswain-crew at v0.12.0. coxswain-tools is published to PyPI from its tag. Status: beta. This release brings coxtop, the fleet dashboard, as a preview. It carries three headlines.

coxtop, a preview. coxswain-dash joins the release as an optional component. It provides coxtop, a terminal dashboard for the fleet built with ratatui. It shows the chair, spend, machines, lanes, runs, the queue and the inbox on the Regatta and Slipstream pages, with a Harbor Light toggle. You can drill into a run, an initiative or a machine. It reads cox dash --feed and cox dash --detail, and every action it offers is a cox command it shows you before it runs. coxtop is a beta and is actively being improved. The visuals will move toward the design canvas in 0.27, and a panel to talk with the chair is planned. Install it with cargo (the crate is coxswain-dash; it installs coxtop):

cargo install --git https://github.com/ppfenning/coxswain-dash --tag v0.26.0

Short ids from the store. Intakes and initiatives get short ids from a sequence in the store (store migration 0011). Existing work gets short_id aliases backfilled. Commands accept either the short id or the full slug and show the id next to the title.

Store migrations back up first. Before a pending migration, the store writes a backup: pg_dump -Fc for Postgres, the backup API for SQLite. python -m harness.store_migrate --pending <url> lists what would run without applying it.

Upgrading from 0.25.1. The store migrates to schema 11 the first time the new code opens it, after writing a backup to $COX_STORE_BACKUP_DIR (default ~/.local/state/coxswain/backups/). Postgres needs pg_dump on the path, or set COX_STORE_MIGRATE_WITHOUT_BACKUP=1 to migrate without one. Upgrade every machine that shares a store together, because older code refuses a newer schema. Restart the chair loop after upgrading cox.

coxswain-dash

  • The coxtop crate: Regatta and Slipstream pages, app state, terminal loop and the Harbor Light toggle (dash #2, dash #3, dash #4, dash #5, dash #6, dash #7).
  • Drill-downs into a run, an initiative and a machine, with row selection and navigation between them (dash #8, dash #9, dash #10, dash #12, dash #15).
  • The repository's pytest -q runs the crate's cargo test (dash #1), and Python caches are ignored (dash #13).

coxswain-graphs

  • The decompose corrects or rejects a task phase the plan never declared, and a decompose that created nothing fails (graphs #645, graphs #650).
  • pytest's "no tests ran" is a skipped check in a repository with no Python tests (graphs #646). The check runs the interpreter's own pytest by path (graphs #652).
  • The store CLI gains pause and resume subcommands (graphs #647).
  • Short initiative ids from a store sequence: migration 0011 and the ids module (graphs #637, graphs #657).
  • Store migrations back up first, list what is pending, and tests no longer pin the schema version (graphs #659).
  • The API runners gain rate-limit handling and auth for the OpenAI-compatible runner, plus a pricing, cost and budget helper (graphs #654, graphs #656). Recording cost and honoring budget_usd in every API runner follows in 0.27.

coxswain-tools

  • The --feed output coxtop reads carries every section in the schema-1 shape it parses (tools #1250), and its queue and inbox carry only open work, capped (tools #1256).
  • The --detail output emits the v1 run, initiative and machine shapes coxtop parses (tools #1257, tools #1264, tools #1265).
  • Intake ids come from the store under ids:, either form resolves, and lists show the id with the title (tools #1245, tools #1248, tools #1249).
  • A remote launch mirrors the initiative's work directory to the lane host, so a moved ticket no longer lingers there (tools #1244).
  • The lane host's readiness check branches on the runner and names the missing variable (tools #1253).
  • cox host add refuses weight and capabilities flags, and the host upsert no longer sends them (tools #1254).
  • The loop does not launch an initiative whose ready tasks all wait on an unfinished need (tools #1258).
  • The pure core of chair decisions: builders and filters for asking, answering and listing (tools #1260). The cox chair ask command follows in 0.27.
  • Phase and task PRs the harness opens end with a footer linking to Coxswain (tools #1261).

coxswain

  • Release PRs end with the coxswain footer (coxswain #210).
  • coxswain-dash joins the manifest. A Rust component is bumped through Cargo.toml and Cargo.lock, and the versions drift reads its Cargo.toml (coxswain #211).
  • A manifest component may carry since, the release it joined. The release checks skip it in older versions, and the release tags it in its first release (coxswain #212, coxswain #213).

Components

coxswain-dash is new in this release. coxswain-graphs carries the decompose, store and runner changes, coxswain-tools the dash feed and detail, ids and loop fixes, and the umbrella the release mechanics. coxswain-cartridges and coxswain-crew are unchanged.