0.31.0
Cut on 2026-10-05. Status: beta. This release makes coxtop the place you run Coxswain from, and lets the chair run
with less hand-holding. It carries four headlines. Coxswain's own CI check jobs now read their runner from the
COXSWAIN_RUNNER repository variable, so they can move to a self-hosted runner while GitHub-hosted runners are down
(coxswain #230, coxswain #231).
coxtop is the entry point. Bare cox on a terminal opens coxtop. The settings screen reads and writes the team
cartridge and the hosts table, coxtop adds a machine and edits initiatives, and cox route edit and cox route remove
change or drop a filed initiative. The chair panel hosts a Claude session beside the pages: the backtick key opens and
hides it, and an ended session frees its keys. Dash releases attach prebuilt coxtop binaries.
coxtop reads the fleet from the store. The chair frame reads the chair's tick from the store, so it shows the loop's health from any machine, with its tick age. The runs list says how each run ended, history marks an idle run as idle instead of crashed, every Regatta frame carries its number, and a run drill-down opens even when the store has not placed the run on a machine yet.
The chair steers clear and carries. The chair holds back a launch whose surfaces overlap a live run, carries a stranded or split phase to its land, gives a free local lane one decompose with no pairing, and skips a lane host whose login has lapsed instead of fetching from it.
Keys that do one thing. Layout cycles on v, so p is only run pause; selection is arrows only, so k is only
kill; and Slipstream follows the t theme.
Upgrading from 0.30.0. Nothing migrates, and the store schema is unchanged. Restart the chair loop after
upgrading cox, so it writes the chair tick that coxtop now reads. The policy.dispatch.local_lanes: decompose
reservation is no longer needed; remove it from the team cartridge. coxtop's watch, spend and health views are
partly built (their schemas, stubs and boards are here) and open in 0.32.0.
coxswain-cartridges
- CI check jobs read their runner from the
COXSWAIN_RUNNERvariable (cartridges #180).
coxswain-crew
- CI check jobs read their runner from the
COXSWAIN_RUNNERvariable (crew #10).
coxswain-dash
- The settings screen: its scaffold, core, screen and wiring (dash #49, dash #50, dash #51, dash #52, dash #58, dash #60), parsing the settings verb's JSON as it prints it (dash #71).
- coxtop adds a machine (dash #53, dash #54, dash #55) and edits initiatives (dash #57, dash #64).
- The chair panel hosts a Claude session: its keys (dash #69), its render as a side panel (dash #70), and an ended session frees the keys while a failed attach is not retried (dash #76).
- Dash releases attach prebuilt coxtop binaries, with install docs (dash #72, dash #73).
- The chair frame shows the loop's tick age (dash #67, dash #68) and reads phases today, drafts and housekeeping age from the feed (dash #56).
- The runs list shows how each run ended (dash #61, dash #62, dash #66), and history shows an idle outcome, dimmed (dash #59).
- Every Regatta frame carries its toggle number (dash #74, dash #75).
- Layout cycles on
v, sopis only run pause (dash #63); selection is arrows only and Slipstream follows thettheme (dash #65). - A run drill-down with no machine yet opens instead of loading forever, and a detail line that does not parse shows why (dash #78).
- The watch, spend and health views' schemas, stubs and spend board (dash #77, dash #80, dash #81).
- CI check jobs read their runner from the
COXSWAIN_RUNNERvariable (dash #79).
coxswain-graphs
- CI check jobs read their runner from the
COXSWAIN_RUNNERvariable (graphs #689).
coxswain-tools
- Bare
coxon a terminal opens coxtop (tools #1350). cox settingsreads and writes the cartridge and the hosts table (tools #1335, tools #1337, tools #1346, tools #1351), and fills lanes per machine and the build settings (tools #1353, tools #1354).cox route editandcox route removechange or drop a filed initiative (tools #1334, tools #1338, tools #1339).- The coxtop feed reads the chair from the store (tools #1355, tools #1356), and the feed's runs and work directories default to the profile's workspace (tools #1349).
- History reads an ok run's outcome from its task records and reports idle (tools #1345).
- The chair steers clear of a launch whose surfaces overlap a live run (tools #1330, tools #1340, tools #1341).
- The chair carries a stranded or split phase to its land (tools #1332, tools #1333, tools #1336, tools #1343).
- A free local lane takes one decompose with no pairing (tools #1331), and a decompose that ends with no tasks leaves its intake queued and asks the chair instead of reading as done (tools #1357).
- A lane host whose login lapsed is not fetched, and the plan skips a blocked host (tools #1342, tools #1347, tools #1348, tools #1352).
- CI check jobs read their runner from the
COXSWAIN_RUNNERvariable (tools #1358).
Components
coxswain-tools carries bare cox, settings, route edit and remove, the store-read chair and the chair's
steer-clear and carry; coxswain-dash carries the settings, add-machine and edit screens, the session panel, the
runs list and the key fixes. coxswain-graphs, coxswain-cartridges and coxswain-crew carry only the CI runner
variable.