xcb routes coding tasks across the Claude, Codex, and Devin subscriptions you already pay for. Each task runs on an account that is signed in, idle, and not at a known usage limit, on a model that fits the work. Type work into xcb's terminal thread, where tasks keep running after you close the terminal, or hand it one task at a time from another agent or your own code.
Status: Latest release for macOS ARM64 and Linux x86_64; other hosts build from source. MIT licensed.
Site · Docs · Getting started · Route contract · TypeScript SDK · Compare · Changelog
On macOS with Apple silicon or Linux x86_64 (glibc 2.34 or newer), one command
downloads the latest release for your platform, checks its SHA-256 checksum,
and installs ~/.local/bin/xcb:
curl -fsSL https://xcb.sh/install.sh | shxcb upgrade installs later releases the same way. XCB_VERSION installs one
exact version, XCB_INSTALL_PREFIX replaces ~/.local, and XCB_ADD_PATH=yes
adds the bin folder to your shell profile.
On other hosts, build with Git, Rust 1.97.1, and the platform's build tools:
git clone https://github.com/hraness/xcb.git && cd xcb
rustup toolchain install 1.97.1 --profile minimal
./scripts/install-native.shUpgrade and uninstall covers updates and removal.
Install Claude Code 2.1.268 or later, then connect an account and open your thread:
xcb setup claude
xcbxcb setup adds an account, checks the Claude Code build, opens the browser
sign-in, and loads the account's models. xcb keeps that sign-in in its own
state folder, apart from your usual Claude Code login. xcb setup codex
works the same way; Devin connects by importing the Devin CLI's sign-in
(accounts and models).
Plain xcb opens your thread, one conversation for all your projects. Type a
task such as “fix the failing test in ~/src/app”. xcb picks the project folder
and says why (“Started Fix the failing test in app · named app ·
/workspace to move”), picks an account and model, and runs the task there. If
a turn stops at a usage limit, xcb continues the task on another account or
model that can take it. Closing the terminal detaches without cancelling
anything; the next xcb shows the results.
/taskslists running and finished work;/cancel <task-id>stops a task./steer <task-id> <guidance>adds guidance for a task's next turn.- Start a prompt with
Use Claude,Use Codex, orUse Devinto choose the provider./helplists every command, and the terminal guide covers keys and search.
From an agent or script, xcb --json route reads one JSON task on stdin,
picks an account and model that can take it, runs one turn, and prints one
JSON result:
echo '{"version":1,"workspace":"/absolute/path/to/project","task":"Fix the failing parser test"}' \
| xcb --json route{"version":1,"status":"completed","requestId":"route_…","session":"s_…",
"route":{"provider":"claude","account":"a_…","model":"claude/sonnet/low","label":"Sonnet · low","reason":"…"},
"state":"idle","outcome":{"terminal":"completed","joined":true,"effects":"settled","pending_attention":false,"failure":null},
"text":"…"}Add "dryRun": true to see the chosen route without running anything, or pin
provider, account, or model. A failure exits 1 with a code such as
unavailable, busy, or needs_input. The route contract
lists every field.
From your own app, the TypeScript SDK's createSubscriptionRouter runs a
task on the account and model your app names, and holds that account until
the provider process exits; it does not choose them for you. Install it with
npm install @hraness/xcb; the SDK quickstart has a complete
example.
| Provider | Supported builds | Status |
|---|---|---|
| Claude | Claude Code 2.1.268 or later within version 2 | Coding workflow passed on macOS ARM64 with the tested account. On Linux, Claude runs after you run xcb's sandbox checks on that machine. |
| Codex | Codex CLI 0.157.1 or 0.156.1 on macOS ARM64 | Passes xcb's sandbox and tool checks. The recorded signed-in coding run used the previous supported build. |
| Devin | Devin CLI 3000.11.3, 3000.11.1, or 3000.10.31 on macOS ARM64 | Coding workflow passed on macOS ARM64 with the tested account and Devin CLI 3000.11.3. |
xcb checks each provider executable's version, and for Codex and Devin its
exact SHA-256, before it runs anything. xcb doctor shows what it found.
- Filter: keep the accounts that can take the task now: supported provider build, signed in, enabled, idle, not at a known usage limit, with a recently seen model.
- Rank: order those models by relative quality, cost, and speed for the kind of task. Long prompts get the highest-quality model available.
- Hold: lock the chosen account so no other task can use it, and run the provider in an OS sandbox with xcb's file tools for one project folder.
- Record: when the provider process exits, record how the run ended. If xcb can't confirm that, it keeps the account held and doesn't retry.
How routing works covers each step.
xcb # your thread, from any directory
xcb chat --new # a project view for this directory
xcb run -p "Explain this repository" # one task here; prints the answer
xcb tasks # managed tasks across projects
xcb attention # questions and approvals waiting on you
xcb accounts # accounts, usage, and which need you
xcb doctor # provider builds and unfinished runs
xcb upgrade # install the latest verified release
xcb help advanced # remote devices, project agents, extensionsAccounts, credentials, and task history live in ~/.local/share/xcb, outside
your projects (--state or XCB_STATE moves it). The
CLI and configuration reference lists every
command, setting, and exit code.
- Tools: providers work through xcb's file tools, without their own shells or plugins, so a task can do less than in the provider's own CLI.
- Tests and builds: the command runner is an offline Linux VM on macOS ARM64; Git is read-only there, and native macOS builds can't run.
- Concurrency: each account runs one provider turn at a time, and tasks in the same project folder take turns.
- Remote devices:
xcb linkneeds a relay deployed from this repository'sconvex/folder (remote operations). - Managed harness: the self-tuning harness is in development; the current build does not run self-modifying routing policies (design).
xcb was formerly AgentMixer: xcb accounts import-agentmixer --source <path>
copies one Claude credential (migrating).
The compatibility reference covers the TypeScript
package and its xcb-compat CLI. Contributing ·
Security · MIT license