Skip to content

0.41.0

Cut on 2026-10-16. Status: beta. Towpath now shows the chair's background agents and splits spend between the chair, its agents and the cox seats. The install and upgrade path is repaired after the first clean-machine rehearsal of 0.40.0, an install and an upgrade in a throwaway container: cox install clones components under the names its setup step reads, cox upgrade --to takes each component's pin from the target release, and the install page now gives the commands, flags and steps that work on a clean machine (coxswain #303, coxswain #306). A group of chair and routing fixes ships beside them. The first pieces of a dedicated home directory for the install are in place but wired to no command, and the directory itself ships in 0.42.0. A release rehearsal design and a dispatch-only rehearsal workflow also landed in this repository (coxswain #304, coxswain #305); the workflow cannot gate a release yet, as the known gaps explain.

Towpath shows the chair's background agents. The towpath feed gains a chair_agents section, one row per background agent the chair launched, with its label, model, state, start and finish, tokens and cost. It also gains a spend_split section that divides the five-hour and weekly windows between the chair session, the chair's agents and the cox seats, with each window's meter fraction and reset time. Towpath draws them as a Chair agents frame and a spend split frame on the regatta page, both hidden until toggled with 0 and .. A feed from an older cox carries neither section, and the frames then say there is nothing to show.

An install and upgrade path that works on a clean machine. The first clean-machine rehearsal of 0.40.0, a fresh install and an upgrade from 0.39.1 in a throwaway container, failed both. cox install cloned each component to <root>/<name> while its own setup step read <root>/coxswain-<name>, so the setup step failed. Install now clones to the names setup reads, and fetch, checkout, cox versions and cox upgrade read the same directories. With --to, cox upgrade overrode every component's tag with the target version, which left a pinned component such as crew behind. It now takes each tag from the target release's manifest. The first upgrade run crashed on a module import after its setup step replaced the tool's own environment; install and upgrade now import every module before that step. Install and upgrade exit 0 when only the closing doctor reports failing rows, and print a line that says to create the workspace folders and team cartridge and run cox setup doctor. cox install still does not create those folders or the cartridge, so the install page lists them as steps.

Chair and routing fixes. cox route requeue queues the intake of an initiative whose decompose produced no tasks. cox route file records a repository under the home directory in the tilde form, cox runs cause finds a task whose ticket moved phase after the run, and a relaunch honours lane capacity zero. The land back-off gains a rule that releases a window when the phase branch has a new head; nothing records or passes a head yet, so the back-off still runs its full window.

Groundwork for the home directory, not yet a feature. A design, a location resolver, a setup install plan that can take the resolved locations, and pure migration planners and doctor rows landed. None of it is wired to a command: cox setup migrate does not exist in 0.41.0, cox setup install still lays out under --root, and cox setup doctor does not show the home rows. The directory ships in 0.42.0.

coxswain-dash

  • The feed reader parses the new chair_agents and spend_split sections against a shared activity fixture. Both are optional, and an agent state it does not know parses as unknown instead of failing the feed (dash #132, dash #133).
  • A Chair agents panel lists each background agent newest first with its state, model, elapsed time, tokens and cost. A spend split panel shows the chair session, chair agents and cox seats in dollars and share for the five-hour and weekly windows, with the meter fraction and the time to reset (dash #134).
  • The regatta page draws both panels in a band under the main frames. 0 toggles the Chair agents frame and . the spend split frame, both hidden by default, and focus cycles through a frame only while it is shown (dash #135).

coxswain-tools

  • The towpath feed carries the chair's background agents and a three-way spend split. Pure row and split builders (tools #1696) feed readers for the chair session's and agents' transcripts and for the price catalog, with the assembly of both sections (tools #1697), and the feed wiring adds chair_agents and spend_split to the schema 1 snapshot (tools #1698). An agent is done when its last message ends the turn, running while its transcript has moved in the last ten minutes, and failed otherwise, and at most 12 rows are sent.
  • The land back-off rule releases an open window when the refusal recorded a phase branch head and the current head differs. Refusals do not record a head and the land planner does not pass the current one, so no back-off releases on a new head yet (tools #1699).
  • cox route requeue ID queues the intake of an initiative that has no live tasks and drops the empty initiative, so an intake whose decompose produced no tasks can run again. It takes an intake or an initiative, --dry-run, and writes store rows only (tools #1700, tools #1707).
  • cox route file writes a repository under the home directory in the tilde form and expands a --repo ~/... value, so a filing made on the chair machine resolves on every lane host (tools #1701).
  • cox runs cause finds a task whose ticket moved to another phase after the run, by looking for exactly one matching work item in the same initiative (tools #1702).
  • A relaunch honours lane capacity zero: when the local machine and every lane host are capped at 0, no initiative relaunches and the refusal says no lane capacity remains (tools #1703).
  • Groundwork for a dedicated home directory, wired to no command: the design document (tools #1704), a resolver for the home, its installs and workspaces folders, and the config, state and profile paths (tools #1705), a setup install plan that can take the resolved locations and registers the plugin marketplace through the claude command only (tools #1710), and pure planners for moving an existing layout and its lane hosts with doctor rows for the home that cox setup doctor does not show yet (tools #1716).
  • cox install clones each component to <root>/coxswain-<name>, the directory its setup step reads (tools #1706).
  • cox upgrade --to takes each component's tag from the target release's manifest, so a pinned component stays pinned, where it had overridden every component with the target version (tools #1711).
  • The upgrade imports every lazily loaded module before its setup step replaces the tool's environment, so the first upgrade run finishes, and install does the same before its setup step (tools #1708, tools #1712).
  • Install's fetch and checkout, the facts cox versions and cox upgrade gather, and the upgrade runner read each component from its coxswain-<name> directory. A bare directory left by an older install is listed as an extra (tools #1714, tools #1715).
  • Install and upgrade exit 0 when only the closing doctor reports failing rows, and print a line that says to create the workspace folders and team cartridge and run cox setup doctor (tools #1717).

Known gaps

The rehearsal landed as a design, a dispatch-only workflow and a script with tests (coxswain #304, coxswain #305), but it cannot gate a release yet. Its fresh and upgrade scenarios download an install.sh that does not exist, so they do not run the documented install, and the release command does not require a passing rehearsal. Requiring it is planned for 0.42.0. The gate for 0.41.0 was a clean-machine rehearsal run by hand in a throwaway Proxmox container. The fresh install and the upgrade from 0.40.0 both passed on tools 4e23473 and the umbrella at 569a119, and the upgrade ran before the tag with the candidate staged in local mirrors.

The home directory and cox setup migrate are 0.42.0. The resolver, the install plan, the migration planners and the doctor rows exist and are tested, but no command calls them. The land back-off does not release on a new head until refusals record one and the planner passes the current one.

Components

coxswain-dash and coxswain-tools change. coxswain-cartridges and coxswain-graphs have no commits since v0.40.0 and stay pinned there, and coxswain-crew is unchanged since v0.38.0 and stays pinned there.

Upgrading from 0.40.0. The store schema is unchanged and nothing migrates. Update cox itself first, with uv tool upgrade coxswain-tools or brew upgrade cox, so the upgrade runs with this release's fixes, then run cox upgrade. It takes each component's pin from the 0.41.0 manifest, so crew stays at v0.38.0. An install made with cox install at 0.40.0 has its components cloned under bare directory names (cartridges, graphs, tools, and crew or dash if you installed them), and 0.41.0 reads coxswain-<name>. The upgrade therefore lists each bare directory as an extra and clones a fresh coxswain-<name> beside it at the pinned tag. The bare directories are not upgraded or used again, cox versions keeps listing them as extra, and you can delete them by hand. If you made coxswain-* links to get past the 0.40.0 install failure, the upgrade reads those names and needs no fresh clone.