Skip to content

cartridges

Who a run works for. This folder is the core package and the cartridge data inside the coxswain repository; it ships as part of the one coxswain package. To install Coxswain, see the root README.

Graphs reference abstract roles (plan, build, review_charter). A cartridge binds those roles to real skills, names where writes land, and carries the team's own written conventions. The same graph runs for any team that can fill the contract: swapping trackers, style charters or model providers is an edit to one file, not a rewrite.

What is here

core/                pure substrate: merge, policy, manifest, ledger, work store, intake
cartridges/base/     the contract: roles, write-kind taxonomy, autonomy policy
cartridges/local/    the filesystem-only cartridge every install starts from
cartridges/<name>/   example-team, and the comfort presets local-comfort0 and local-comfort1
providers/           the shipped provider profiles (tier -> model) and catalog.yaml, the model price list
skills-plugins/      the reference `local-skills` plugin and the `coxswain` session plugin
context-templates/   starting points for a team's own context packs
.claude-plugin/      the Claude Code plugin marketplace, named coxswain-cartridges
docs/                design notes and the clean-room rule
tests/               this folder's suite

A workspace's cartridges/base and cartridges/local are links into cartridges/ here, so they move with the checkout's release.

Provider profiles

A provider profile names the runner, maps each tier to a model, and sets the budget for each tier and role. The files in providers/ are the shipped defaults: claude-code.yaml, anthropic-default.yaml and local-oss.yaml. A fresh cox install points the machine profile's provider_profile at <checkout>/src/cartridges/providers/claude-code.yaml.

A profile your team edits is team configuration, not code. Keep it outside the checkout, in the workspace or in <home>/providers/, and point provider_profile in each machine's profile at it. An edited file inside the checkout makes it dirty, and cox upgrade refuses a dirty checkout. Copy catalog.yaml along with the profile: the chair reads model prices from the catalog.yaml beside provider_profile first. cox setup migrate leaves a profile that is already outside the checkout where it is.

Tests

From this folder:

cd src/cartridges && uv run pytest -q

Fixtures are synthetic. The suite leans hardest on the ways autonomy must fail to be granted: streaks that do not transfer across kinds, risks, cartridge hashes or provider profiles, and a single reversal resetting the streak and doubling the bar.

Working with a cartridge

Resolve and validate the local cartridge from this folder:

uv run python -m core.cartridge --team local --json --skills-root skills-plugins

--skills-root checks that every bound skill name resolves to exactly one skill body; pass it once per plugin root.

Start your own team's cartridge in your workspace:

cartridge init my-team --cartridges-dir <workspace>/cartridges

It creates my-team/, its context/ tree, links to base and local, and a cartridge.yaml naming the team. cox install registers the marketplace at <checkout>/src/cartridges and installs local-skills@coxswain-cartridges when claude is on PATH.

The docs site explains the rest: cartridges, team cartridge and policy, including how a write kind earns autonomy.

License

MIT. See LICENSE.