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 -qruns the crate'scargo 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
pauseandresumesubcommands (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_usdin every API runner follows in 0.27.
coxswain-tools
- The
--feedoutput 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
--detailoutput 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 addrefuses 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 askcommand 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-dashjoins the manifest. A Rust component is bumped through Cargo.toml and Cargo.lock, and theversionsdrift 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.