Skip to content

0.40.0

Cut on 2026-10-16. Status: beta. The first part of the 0.40 line makes the pieces a second machine depends on work as one system. Work records name their repository relative to the home directory, so a record means the same thing on every host. cox setup --store shared offers a Postgres run store with Garage traces, and cox setup store switch moves between that and files. A chair session attaches to a live loop instead of taking the chair, and project cards link to store rows by key. The towpath view of the chair's background agents follows in 0.41.0, and a dedicated home directory for the install in 0.42.0.

Records that mean the same on every machine. A work record carries a home-relative repository path. The harness expands a tilde-prefixed repository and decompose writes the tilde form, the remote fetch and launch map it for each host, and route lint and the stranded reader expand it. cox route paths lists the stored absolute paths that can be rewritten and --apply rewrites them.

A store shared between machines. cox setup --store shared writes a shared-store.yaml profile that keeps run records in Postgres and traces in an S3-compatible object store such as Garage, and cox setup store switch copies the existing store and traces to the other backend in either direction, leaving the source in place. The setup doctor checks the chosen store. The switch reads the store copier's real per-table output, so a completed copy is not reported as unverified.

Cards that follow the store. A project card links to a work item by key, and the card's status follows the store. cox route file refuses a title that duplicates an open issue unless --force is given, and board items become intake candidates. An initiative can build on one card branch and open one pull request per repository.

The model clamp. A chair records its model, the launcher passes it to the harness, and the runner lowers a seat that would run above it. The clamp is off by default.

coxswain-cartridges

  • The decompose-initiative skill writes the tilde form of a repository path, states the contract fixture path rule, and tells builds to use neutral names in test data so the clean check passes (cartridges #209, cartridges #214, cartridges #217).
  • The Claude Code provider profile pins the build role to the standard tier (cartridges #210).

coxswain-dash

  • The queue priority is signed, so a negative row parses and draws instead of failing the feed (dash #129).
  • The repository's clean-check script passes ruff check ., so a build in this repository stays inside its own surfaces (dash #130).

coxswain-graphs

  • The harness expands a tilde-prefixed repository, and decompose writes the tilde form (graphs #778).
  • A decompose retries a refused contract task once with the refusal (graphs #781).
  • Work items gain issue_number, project_item_id and parent_item columns with a backfill, and an epic run writes card_branch on a fresh launch (graphs #783, graphs #786, graphs #789).
  • The runner clamps a resolved tier to the chair's model, named in the environment value COXSWAIN_CHAIR_MODEL, and logs chair_ceiling; roles listed in chair_ceiling_exempt keep their tier (graphs #790, graphs #791, graphs #792).
  • The OpenAI-compatible runner gains a tool-loop adapter, so it builds through the vendor-neutral tool loop, and a spent thread fails before any request (graphs #793).

coxswain-tools

  • Work records carry a home-relative repository path: a helper, the remote fetch and launch maps, route lint, the stranded reader, the chair readers, the command edges and the chair exec all expand it (tools #1640, tools #1646, tools #1650, tools #1651, tools #1652, tools #1656, tools #1661, tools #1672).
  • cox route paths lists stored absolute repository paths and --apply rewrites them to the home-relative form (tools #1662, tools #1677).
  • cox setup --store offers the shared store (Postgres run records, S3-compatible traces) and cox setup store switch moves between files and shared: the choice core and profile writer, the setup flag, doctor rows, and a switch verb in each direction (tools #1659, tools #1667, tools #1671, tools #1674, tools #1684). The switch engine reads the copier's real output (tools #1687).
  • cox chair attach says whether a live loop holds the lease and exits 0 if so, and bare cox attaches to a live loop and leaves the lease alone (tools #1670, tools #1678, tools #1689).
  • A chair record carries an optional model, set by cox route chair take --model, and the launcher exports it as COXSWAIN_CHAIR_MODEL (tools #1683, tools #1685, tools #1690).
  • Project cards link to work items by key: a codec and a contract fixture, route pull dedupes, route sync sets a card's status from the store, cox route file refuses a duplicate title, and board items become intake candidates (tools #1655, tools #1680, tools #1686, tools #1692, tools #1693).
  • An initiative builds on one card branch and opens one pull request per repository (tools #1653, tools #1657, tools #1666, tools #1676).
  • cox upgrade moves crew, dash and the umbrella checkout along with the other components, and cox versions words why components can look drifted and when a pin cannot be met (tools #1645, tools #1660, tools #1663).
  • The workspace pull carries the loop's own unstaged files through with --autostash, so a live chair's pull no longer fails every tick (tools #1682).
  • Route lint resolves an initiative id, and route sync reads the active GitHub login and accepts an issue number a land wrote quoted (tools #1654, tools #1679, tools #1691).
  • The lane-host login check sees a token-authenticated host, and the Claude auth status parse tolerates login-shell startup noise (tools #1648, tools #1668, tools #1675).
  • The PR footer drops the coxswain version, and the setup doctor's model-freshness check no longer crashes (tools #1641, tools #1658).

Known gaps

The store switch is tested against an injected copier and the copier's real output shapes, but it has not been run against a production store. The towpath activity fixture (tools #1694) is groundwork for 0.41.0 and has no reader yet.

Components

coxswain-cartridges, coxswain-dash, coxswain-graphs and coxswain-tools change. coxswain-crew is unchanged since v0.38.0 and stays pinned there.

Upgrading from 0.39.1. Nothing to migrate for most installs. The model clamp does nothing by default: it is on only when the chair takes the lease with --model, and each lane host's provider profile needs chair_ceiling_exempt (for example the judge roles validate_phase, arbitrate and review_adversary) before you turn it on, because a lane host reads its own profile. To move an existing install to a shared store, run cox setup store switch shared; cox setup store switch files moves back. cox route paths lists stored absolute repository paths and --apply rewrites them. The Claude Code provider profile now pins the build role to the standard tier.