claudexor
Multi-harness control plane for Claude Code, Codex, Cursor, and OpenCode: quota-aware rotation across multiple Claude/Codex subscriptions, shared thread context, and cross-model review.
Install / Use
npx skills add razzant/claudexorInstalls into whichever agent you are using.
Other
Other agent config
Quality Score
Category
Development & EngineeringSupported Platforms
Skill content
View source on GitHubClaudexor
Claudexor is a local-first control plane for the AI coding agents you already pay for. It runs Codex CLI, Claude Code, Cursor CLI, OpenCode, and raw API adapters behind one typed interface: a chat of turns where read-only questions resume the vendor's own native session, write turns land as inspectable patches, races pit harnesses against each other with cross-family review, and every claim — cost, quota, web evidence, auth route — is a typed fact you can audit, never a vibe.
Compared to driving a bare Codex or Claude Code session, Claudexor adds the
layer the vendors do not ship: best-of-N races with independent reviewers and
arbitration; honest budget/quota accounting (unknown cost is never $0);
deterministic gates and protected paths; and — since 2.1 — credential
profiles: several Claude/Codex/Cursor subscriptions registered side by side,
each with its own isolated named login. Live subscription-quota tracking —
and the opt-in policy that rotates a spent account out of the way on typed
vendor limits — covers the harnesses with a vendor usage source (Claude and
Codex); Cursor has none yet. Everything runs on your machine, files are the
source of truth, and there is no telemetry.
Current status: v3.3.7. See "Stability at 2.0" below for what is a stable contract and what remains experimental; retired verbs and mode ids hard-error with the new spelling instead of silently aliasing.
If you use Claudexor — or you are an agent whose human does — a star is the one-click way to say it works.


- Prerequisites
- Install
- Remote SSH
- Quickstart
- Modes
- Credential Profiles And Quota
- Web, Budgets, And Gates
- Routing, Auth, And Secrets
- Daemon And Control API
- Artifact Layout
- Integrations
- Architecture
- Development
- Stability at 2.0
- For External Agents
- Privacy
- Uninstall / where your data lives
Prerequisites
- Node.js >= 20.19 (the daemon, CLI, and every surface run on Node)
- pnpm (via corepack:
corepack enable pnpm) - Git for isolated workspaces, candidate envelopes, and delivery. Supported in-place non-Git paths remain available; Doctor reports Git availability, and the app's Workspace Git check explains whether the selected shape is admitted.
- At least one logged-in vendor CLI —
codex,claude,cursor-agent, oropencode— OR a provider API key (adapters acceptOPENAI_API_KEY,ANTHROPIC_API_KEY, ... as fallbacks; the raw-API route needs only a key). Log in through Claudexor, not the bare vendor CLI — see Install And Login - macOS for the desktop app; the CLI/daemon also run on Linux
Install
CLI + daemon from npm (installs the claudexor and claudexord bins):
npm install -g claudexor
claudexor doctor
You can also build from source — see Quickstart below.
On a Mac, the app is the easiest way in — it ships as a signed and notarized DMG, so it installs like any ordinary Mac app, with no Gatekeeper warnings:
- Download
Claudexor-<version>.dmgfrom Releases. - Drag
Claudexor.appintoApplications. - Open it. The app starts its bundled Claudexor engine, then onboarding checks the external Git and harness route needed by the work you select.

The app bundles its own daemon runtime and starts it on launch; installing the Claudexor CLI is only needed for terminal use. Git and vendor harnesses remain separate capabilities checked before a run starts. (The v1.0.0 DMG was unsigned — if you kept it, either upgrade or approve it via System Settings → Privacy & Security → Open Anyway.)
Remote SSH
The macOS app can run a thread on a Linux or macOS SSH host while keeping the
UI local. In Settings → Connections, pick a concrete alias from
~/.ssh/config or create one in-app — the form appends a plain Host block
to ~/.ssh/config (after a timestamped backup), never a key or password.
Connect it, then choose a saved folder or Browse on <host>… from the
project picker. The thread is permanently bound to that
host and folder; changing either creates a new draft.
Claudexor uses the system /usr/bin/ssh, so existing keys, ssh-agent,
known_hosts, MFA and ProxyJump remain OpenSSH's responsibility. On first
connection the app verifies and installs a signed, no-sudo runtime under
~/.claudexor/remote/, then reaches its loopback-only control API through an
SSH local forward. Vendor CLIs and their credentials remain on the server and
with the vendors. Claudexor can install a harness CLI on the host for you
through a disclosed, exact-pinned flow — claudexor harness install, or
Settings → Harnesses for a connected host: Claude, Codex, and OpenCode
install one exact pinned npm version, and Cursor's vendor script is
downloaded in full and runs in the visible terminal where you watch it;
nothing executes before the exact command is disclosed and confirmed.
(Installing them on the host yourself works too.) Then sign in from the app,
which runs each vendor's own login in an embedded SSH terminal (Codex uses
device auth). Remote threads include an embedded SSH terminal and an
explicit-port preview tunnel.
Updates
- macOS app — each release publishes a
claudexor-runtime-<version>.tar.gzclosure (the bundled daemon, setup-login runner, Browser MCP, and native process-identity helper; Node, the CLI, UI, and icons stay outside it) plus a signedruntime-manifest.jsondescribing it. On foreground and from the bottom-left update chip / Check for Updates, the app reads that manifest and, if a newer runtime is offered, surfaces "Update available → vX.Y.Z". One click installs it in place, no new DMG: the app downloads the closure, verifies its SHA-256 against the signed manifest, unpacks it under~/.claudexor/runtime/versions/<version>/, probe-starts it, waits until the engine is idle (it never interrupts running jobs), stops the daemon, swaps the active pointer atomically, relaunches, and re-checks the version — rolling back to the last-known-good runtime on any failure. The manifest is signed by a dedicated offline key the app pins; an unsigned, unknown-key, tampered, or downgraded manifest is refused. Node stays app-owned, so a Node bump still ships a new signed DMG. There is no background update timer; the check runs only when you open the app or click Check for Updates. The manifest'sminAppVersionfloor means an app that is too old is told to update the app itself rather than offered an incompatible engine. - embedded hosts — the same signed manifest and the same Node-free closure
may be exact-pinned by a host that owns its Claudexor daemon lifecycle. The
archive contains only ordinary directories/files (internal package links are
materialized), so its format needs no POSIX symlink support. The host supplies
the exact Node version proven by its reviewed pin, launches
claudexord.bundle.cjs, verifies--probeagainst the pinned{version,buildSha}, and uses--stop <observed-version> <observed-buildSha>before replacing a live closure. This is an extraction/daemon-bootstrap contract, not a claim that every harness or interactive login path has feature parity on Windows. The signed manifest is the upstream publication authority used to form that pin; a host may verify it live or rely on its reviewed exact URL/buildSha/SHA-256/size pin.minAppVersionremains the macOS app's compatibility field; embedders keep protocol, one tested Node version, and entrypoint bounds in their pin instead of creating a second Claudexor manifest or trust root. Start and stop must use the sameCLAUDEXOR_CONFIG_DIRand, when overridden,CLAUDEXOR_DAEMON_SOCK, or the lifecycle command may address another daemon. A Windows consumer still owns a native extract/--probe/handshake/--stopsmoke before claiming Windows support. - npm — CLI/daemon installs update the ordinary way:
npm install -g claudexor@latest.claudexor release checkreports whether a newer engine runtime is published, verifying the same signed manifest fail-closed (npm users update via npm).
Quickstart
pnpm install --frozen-lockfile
pnpm build
# Run the CLI from the repo (or add an alias/PATH entry for it):
node packages/cli/dist/cli.js doctor
alias claudexor="node $(pwd)/packages/cli/dist/cli.js"
claudexor ask "2+2?"
claudexor ask "google the latest release notes" --web auto
claudexor ask --deep-scan "map this repo's auth and run storage"
claudexor agent "fix the failing auth refresh test" --harness codex
claudexor best-of "fix add() and keep the patch minimal" --harness codex,claude --n 2
claudexor inspect <run_id>
claudexor follow <run_id> # live event tail of a daemon run; answers questions in the TTY
claudexor apply <run_id> --dry-run
claudexor doctor
claudexor secrets list
claudexor daemon start
apply --dry-run checks final/patch.diff with git apply --check and does
not mutate the repo. Unknown flags and invalid --access/--web/--effort
values fail loudly with exit code 2 — a typo never silently runs with defaults.
When deterministic gates protect existing test/package surfaces and the task is
explicitly test-authoring work, use --allow-protected-path <glob[,glob...]> to
record typed per-run approval for those protected gate/test path changes. This
does not bypass built-in critical/security human gates.
Reviewers and approvals
Two Agent-only power knobs shape review; Ask and Plan reject both, and Council is the explicit multi-harness critique path for Plan:
- Reviewers — pick exactly who reviews a change. Pass
--reviewer-panela comma-separated list ofharness=model:effortentries (model and effort are optional); repeat a harness to review through several models. Example:--reviewer-panel "claude=claude-opus-4-8:max,cursor=gemini-3.1-pro". Omitted, the engine chooses a cross-family panel automatically. - Approvals — mark paths that must clear a human before a change
Truncated for display — read the full file on GitHub.
Related Skills
Agent-Reach
84.4kGive your AI agent eyes to see the entire internet. Read & search Twitter, Reddit, YouTube, GitHub, Bilibili, XiaoHongShu — one CLI, zero API fees.
headroom
73.4kCompress tool outputs, logs, files, and RAG chunks before they reach the LLM. 20% fewer tokens for coding agents, 60-95% fewer tokens for JSON, same answers. Library, proxy, MCP server.
ruflo
73.0k🌊 The original agent harness. Deploy intelligent multi-player swarms, coordinate autonomous workflows, and build conversational AI systems. Features adaptive memory, self-learning intelligence, federation, vector RAG integration, and native Claude Code / Codex / Hermes and many more Integrated
career-ops
72.4kOpen-source AI job search: scan job portals, evaluate listings into a structured A-H report with a global 1-5 score, tailor your CV, track applications — runs locally in your AI coding CLI (Claude Code, Codex, OpenCode, Antigravity…)
