0.16.0
Cut on 2026-09-25. coxswain-cartridges, coxswain-graphs and coxswain-tools are tagged v0.16.0;
coxswain-crew is unchanged and stays pinned at v0.12.0; coxswain-tools is published to PyPI from its tag.
Status: beta. Git is now the only requirement for landing work:
cox runs land goes through a pluggable forge, local by default (plain git) and GitHub built in. The
tools read their run records through one layer that prefers the record files and falls back to the SQLite
store, and the backfill imports a real workspace with nothing left unreadable. That readies the cutover
planned for 0.17.0. System one shadows a second role, the review prescreen. From this release the umbrella's
devtools tag only the components that changed since their last tag (coxswain #90, #91). Its README render
understands nested commands (coxswain #93), the tap step leaves the tap clone on its branch (coxswain #87),
and the install page tells you to trust the tap first, as current Homebrew requires (coxswain #88).
Upgrading from 0.15.0. Two defaults change. Landing uses the local forge and cox route sync mirrors
nothing, unless the profile says otherwise. To keep landing through GitHub pull requests and syncing a GitHub
Project as before, add forge: github and tracker: github-projects to
~/.config/agent-tools/profile.yaml.
coxswain-cartridges
- The review prescreen joins handoff in the local shadow default, and both read one examples file,
~/.local/state/coxswain/system_one/examples.jsonl(cartridges #157). - The local cartridge's lint check carries its safe fix,
ruff check --fix ., so the harness fixes what ruff can before it calls a task approved (cartridges #154). Ruff is pinned to the version CI runs (cartridges #155).
coxswain-graphs
- A yes/no system-one question reads only the yes/no examples, so one examples file serves every role (graphs #362).
- The stored phase record carries its manifest's content, the proposals included (graphs #357).
- The records backfill imports a workspace as it really is: runs paired with their launch records, epic runs
that wrote only phase manifests, calls from before call ids (under a stable
legacy:id), launch-only runs, and attempts from before attempt kinds. Files that are not records are skipped, and every run that has a usage file is stamped as ended. The first full import of this workspace reads zero malformed records, and archiving refuses while any remain (graphs #355, #360, #364, #365). Ruff is pinned to the CI version (graphs #358).
coxswain-tools
- Forges.
cox runs landfinds, opens, checks and merges through the forge the profile names, withforge: local(plain git) the default andforge: githubbuilt in. Other forges register by entry point undercoxswain.forges(tools #518, #520, #524). - Trackers.
cox route syncmirrors the work store through the tracker the profile names:tracker: none(the default) mirrors nothing, andtracker: github-projectsis built in. A run can still pause sync withruns/policy.tracker.json, which wins over the profile (tools #551). cox setup doctorchecks for git, and for gh only when the forge is github, and a fresh machine gets one next step instead of a column of failures.cox versionsnamescox installwhen there is no manifest (tools #526).- Read layer.
run_storeanswers a run's usage, calls, phase manifests and trace events, reading the record files first and an ended run in the SQLite store after them (tools #492, #494, #496, #509, #513). The usage readers,cox runs series,cox runs trace, the phase land, notifications, the usage window, route sync's costs, the stats commands andcox stats ingestall read through it (tools #498, #500, #502, #504, #532, #540, #549). - Intake adapters that name a vendor live outside tools and register by entry point under
coxswain.sources; Jira and Asana moved to the newppfenning/coxswain-sources(tools #506). cox route statusshows live and recent runs, and--allshows every run (tools #530).- The ccusage active block is cached for a minute in the runs directory, so pacing checks seconds apart run it once (tools #544).
route chair,route launchandroute syncjoin the command table as nested commands, sogo/commands.json, the README and the Go port all see them (tools #542).- The profile's
forgeandtrackerkeys are documented, with the right default profile path (tools #545, #552). cox stats system-onerestarts its graduation window only on a model change (tools #505), andcox stats exampleswrites several roles into one file (tools #522).cox runs landlands a task stacked on a parent that merged as a squash (tools #533), and marks done a landed task whose run also recorded a quarantine (tools #535).pytest --regenrewrites the help and command-table snapshots, and CI checks the README Commands block against the umbrella's renderer (tools #511, #490). Ruff is pinned to the CI version (tools #516).- Go spike (not shipped).
go/holds a Go port of the CLI. The command table exports togo/commands.json(tools #507, #510). The Go help renderer matches 51 of the 52 help fixtures byte for byte (tools #515, #547), andusage assessgives the same answer as Python on this workspace (tools #528, #536, #538). Help renders in 2 ms against 72 ms and in 11 MB against 23 MB.
Known gaps
The SQLite cutover is next (0.17.0). Graphs still writes the record files, and the store is written beside
them. Live views read a per-call trace spool, which the cutover keeps and compacts when each call ends.
Trackers registered under coxswain.trackers resolve, but route sync runs only the built-in GitHub
Projects sync for now. GitLab, Bitbucket and Gitea forges are not written yet.
Components
coxswain-tools carries the forges, the trackers, the read layer, the doctor and the Go spike. coxswain-graphs carries the
backfill and the manifest in the store. coxswain-cartridges carries the second shadow role and the lint fix.
coxswain-crew is unchanged and stays pinned at v0.12.0.