Claudexor

Routes coding tasks to Claude Code, Codex, Cursor, OpenCode, Antigravity or Grok Build and tracks quota

By Anton Razzhigaev (individual) JavaScript Local · stdio Developer toolsAI and ML

53 popularity score ★ 522 ↓ 723/wk

Connect your client

Local (npm)

Add in one click

Opens the app, which asks before it adds the server.

Or add it by command or config

FirstTerminal
npm install -g claudexor
claudexor doctor
Claude CodeTerminal
claude mcp add claudexor -- claudexor mcp serve
Claude Desktopclaude_desktop_config.json
{
  "mcpServers": {
    "claudexor": {
      "command": "claudexor",
      "args": [
        "mcp",
        "serve"
      ]
    }
  }
}
Cursor~/.cursor/mcp.json
{
  "mcpServers": {
    "claudexor": {
      "command": "claudexor",
      "args": [
        "mcp",
        "serve"
      ]
    }
  }
}
VS Code.vscode/mcp.json
{
  "servers": {
    "claudexor": {
      "type": "stdio",
      "command": "claudexor",
      "args": [
        "mcp",
        "serve"
      ]
    }
  }
}
Codex~/.codex/config.toml
[mcp_servers.claudexor]
command = "claudexor"
args = ["mcp", "serve"]
Gemini CLITerminal
gemini mcp add --scope user claudexor claudexor -- mcp serve

Settings 6

Set together: raw api
OPENAI_API_KEY secret Optional: Key for the raw API route when no signed-in agent CLI is used; a stored openai secret is tried when it is unset. For raw API route.
CLAUDEXOR_RAWAPI_KEY secret Optional: Takes the place of OPENAI_API_KEY for the raw API route when set. For raw API route.
CLAUDEXOR_RAWAPI_BASE_URL Optional: Endpoint the raw API route calls. Default https://api.openai.com/v1. For raw API route.
CLAUDEXOR_RAWAPI_MODEL Optional: Model the raw API route uses when none is chosen. Default gpt-4o-mini. For raw API route.
CLAUDEXOR_CONFIG_DIR Optional: Points Claudexor at another state folder. Default ~/.claudexor/v3.
CLAUDEXOR_DISABLE_STORED_SECRETS Optional: Set to 1 to stop keys being looked up in the stored secrets file.

What it does

Claudexor sits in front of the coding agents a developer already has signed in on their own machine. It can drive Codex CLI, Claude Code, Cursor CLI, OpenCode, Antigravity and xAI's Grok Build on a grok.com subscription. A raw model API with a key is the fallback route. Its MCP server starts with `claudexor mcp serve` over stdio, so another assistant can hand work to that layer rather than to one agent.

It registers 41 tools. The main ones queue a read-only question, a plan, an agent run that edits code, a new project, or a best-of race where two or more attempts compete and a model from another vendor judges them. Each queues the job with a local daemon and returns a handle. The rest read status and results, wait on many runs at once, answer questions a run asks, send a live message to a running attempt, change its time limit, or start a follow-up. Each prompt tool also takes per-run controls, such as a web policy or a hard time limit. Threads keep a conversation with a project across turns, and upload tools bring a local file in as an attachment.

Account tools show which named subscription profiles are ready, their quota and balances, and can spend a quota reset a vendor offers. Two recovery tools inspect the daemon's journal and can set a damaged part aside.

A few things live only in the code. When a call leaves repoPath out, the project is the folder the server was started in. The raw API route defaults to the OpenAI endpoint and gpt-4o-mini. And Claudexor does not install Grok itself: it finds the grok program through CLAUDEXOR_GROK_BIN before falling back to the PATH and then ~/.grok/bin.

Since 5.0, credential-shaped prompt text and project files such as .env are passed through untouched. The changelog moves the only content check to `pr` publication, where a pinned Betterleaks scan reports findings by rule and place without echoing the matched text.

What it needs

RuntimeNode.js 24.15+
Runs onmacOS, Linux
Coding agent subscription (Claude, Codex, Cursor, Grok...)Paid planRuns spend your own plan quota; OpenCode and Antigravity also work, and a provider API key covers the raw API route
Also
  • At least one vendor CLI on PATH: codex, claude, cursor-agent, opencode, agy or grok
  • Git, for worktrees and patch delivery

Install with `npm install -g claudexor`, then check the setup with `claudexor doctor`. Sign each agent in through Claudexor rather than the bare vendor CLI. Claudexor can install some agent CLIs itself with `claudexor harness install <harness> --target local --yes --json`, pinned to an exact version under ~/.claudexor/node; Grok is the exception and has to be installed separately. On Windows only the Codex and Claude installs work. Before the first `pr` delivery, fetch the pinned publication scanner with `claudexor scanner prepare`, or with `claudexor scanner prepare --from-archive <file>` when offline. A running daemon picks it up at its next `pr`.

Limits

  • Limit Run tools return a handle; the answer comes later through claudexor_run_status or claudexor_run_result, since MCP Tasks are not used yet
  • Not covered Quota tracking covers Claude, Codex and Antigravity; Cursor's balance is only read from its dashboard
  • Limit If host plugin files and the CLI versions differ, mcp serve will not start until `claudexor plugin repair all` is run
  • Early release The ACP surface and the host plugin file layout are marked experimental; the MCP tool set is the stable contract
  • Early release Grok Build sign-in from the app is unverified against a real vendor session, and live checks ran only on Windows 11
  • Limit `pr` delivery refuses until the pinned scanner, which the npm packages leave out, is fetched with `claudexor scanner prepare`
  • Not covered Selected .env and key files are copied and published as-is in directory execution, and changes made in place have no full rollback
  • Platform The Copilot plugin runs on macOS and Linux only
  • Not covered Only claude, codex and cursor can host the delegated belt, one level deep with 8 sub-runs per parent by default
  • Not covered web=off turns off each agent's web tools but leaves network access open, and Cursor is refused under off

Run tools do not return the answer: they queue work and return a handle, and the result must be read with claudexor_run_status and claudexor_run_result. MCP Tasks are not offered. Quota tracking and account rotation cover Claude, Codex and Antigravity; Cursor has no usage source yet. If the installed host plugin files and the CLI versions differ, `mcp serve` refuses to start until `claudexor plugin repair all` is run. The ACP surface and host plugin layout are marked experimental. claudexor_thread_read fails with daemon_unavailable when no daemon is running. The portable Copilot plugin does not support Windows.

Who it suits

A fit for a developer who already pays for two or more coding agents and wants one assistant to share tasks among them, race them and keep an eye on quota, all on their own Mac or Linux box. It brings a daemon, a state folder under ~/.claudexor and Node 24, and its run tools answer through handles. Someone with a single agent and no use for races or quota tracking gains little from it.

Tools 41

23 only read, 15 change things, 3 can delete or overwrite. A ? marks an optional parameter.

claudexor_ask
Queue a read-only question about a project, with an optional deeper multi-scout passprompt: stringrepoPath?: stringharness?: stringprimaryHarness?: stringmodel?: stringeffort?: stringprocessingPreference?: stringidempotencyKey?: stringattachments?: arrayexecution?: objectdeepScan?: booleantaskGroupId?: stringweb?: stringaccess?: stringcredentialProfileId?: stringpaidBudget?: objectmaxSeconds?: integertimeLimitMode?: stringn?: integer
claudexor_plan
Queue a read-only implementation plan for a taskprompt: stringrepoPath?: stringharness?: stringprimaryHarness?: stringmodel?: stringeffort?: stringprocessingPreference?: stringidempotencyKey?: stringattachments?: arrayexecution?: objecttaskGroupId?: stringweb?: stringaccess?: stringcredentialProfileId?: stringpaidBudget?: objectmaxSeconds?: integertimeLimitMode?: stringn?: integercouncil?: boolean
claudexor_run changes
Queue an agent run that edits code; model review is off unless asked forprompt: stringrepoPath?: stringharness?: stringprimaryHarness?: stringmodel?: stringeffort?: stringidempotencyKey?: stringattachments?: arrayexecution?: objectn?: integerprotectedPathApprovals?: arraytaskGroupId?: stringweb?: stringaccess?: stringcredentialProfileId?: stringpaidBudget?: objectmaxSeconds?: integertimeLimitMode?: stringtests?: arrayreview?: boolean
claudexor_best_of changes
Queue at least two competing attempts on one task and have another vendor's model judge themprompt: stringrepoPath?: stringharness?: stringprimaryHarness?: stringmodel?: stringeffort?: stringidempotencyKey?: stringattachments?: arrayexecution?: objectn?: integertaskGroupId?: stringweb?: stringaccess?: stringcredentialProfileId?: stringpaidBudget?: objectmaxSeconds?: integertimeLimitMode?: stringtests?: array
claudexor_create changes
Queue a run that starts a new projectprompt: stringrepoPath?: stringharness?: stringprimaryHarness?: stringmodel?: stringeffort?: stringidempotencyKey?: stringattachments?: arrayexecution?: objecttaskGroupId?: stringweb?: stringaccess?: stringcredentialProfileId?: stringpaidBudget?: objectmaxSeconds?: integertimeLimitMode?: stringn?: integertests?: arrayreview?: boolean
claudexor_thread_create changes
Open a lasting thread on a project without starting a model; write turns edit the folder in place unless workspace is isolatedrepoPath: stringtitle?: stringdefaultMode?: enumworkspace?: enumworkspaceRoot?: stringcredentialProfileId?: stringprimaryHarness?: stringeligibleHarnesses?: arrayaccess?: enumidempotencyKey?: string
claudexor_thread_turn changes
Send the next turn of a thread and get a run handlethreadId: stringprompt: stringattachments?: arrayrunMode?: enumharness?: stringprimaryHarness?: stringmodel?: stringeffort?: stringcredentialProfileId?: stringaccess?: enumweb?: enummaxSeconds?: integertimeLimitMode?: enumexecution?: objectidempotencyKey?: string
claudexor_thread_read
Read a thread and its session records without starting workthreadId: string
claudexor_thread_history
Page through a thread's turns, up to 20 at a time, with answer previewsthreadId: string
claudexor_thread_prompt
Read the full stored prompt of one turn in byte-bounded partsthreadId: string
claudexor_store_identity
Report which daemon store the server is talking to, before uploads
claudexor_upload_import changes
Import one absolute local file on the server's machine as an attachment in a single keyed call
claudexor_upload_create changes
Start a multi-step upload
claudexor_upload_import_local changes
Feed a local file into an upload that is already open
claudexor_upload_status
Check how far an upload has got
claudexor_upload_finalize changes
Close an upload and get the stored resource
claudexor_upload_cancel changes
Abandon an open upload
claudexor_status
Show whether each harness is ready and which model is set
claudexor_capabilities
List what each harness and mode can do and may change
claudexor_accounts
Show credential profiles with readiness and quota; fresh probes vendors and costs morefresh?: boolean
claudexor_account_resources
Read balances, spending caps, quota and reset offers for accountsrefresh?: booleantarget?: objectmodel?: string
claudexor_account_reset deletes
Spend a quota reset an account offers, or look up an earlier reset by operation idtarget?: objectoffer_id?: stringgrant_id?: stringidempotency_key?: stringoperation_id?: string
claudexor_runs
List recent runs so a lost run id can be found
claudexor_inspect
Read one run's details and evidencerunId: string
claudexor_run_status
Read where a run stands nowrunId: string
claudexor_run_result
Read a finished run's outputrunId: string
claudexor_run_cancel deletes
Stop a run that is still goingrunId: string
claudexor_run_interactions
List the questions a run is waiting onrunId: string
claudexor_answer_interaction changes
Answer a question a run is waiting onrunId: stringinteractionId: stringanswers: array
claudexor_apply_check
Check without changes whether a run's patch would applyrunId: string
claudexor_run_wait
Wait on one run and replay its events in bounded batches (50 events, 25 s by default)
claudexor_run_event_read
Read one large run event piece by piece
claudexor_runs_wait
Watch up to 1000 run handles in one calltargets: arraywaitMs?: integer
claudexor_task_group_runs
Read one page of the runs in a task grouptaskGroupId: stringlimit?: integercursor?: stringexpectedStoreId?: string
claudexor_run_time_limit changes
Read, set, extend or remove a run's time limitrunId: stringaction: enumseconds?: integermode?: enumexpectedRevision?: integer
claudexor_run_message changes
Send a live message to the attempt a run is runningrunId: stringtext: stringidempotencyKey: string
claudexor_run_continue changes
Start a follow-up run from a finished single-candidate Agent or Ask runrunId: stringprompt?: stringidempotencyKey?: stringcontinueCarrier?: enum
claudexor_next_message changes
Draft, replace or clear the next message queued behind an Agent or Ask run
claudexor_next_message_read
Read a queued next-message draft and the settings frozen with it
claudexor_journal_recovery
Inspect, validate or export one partition of the daemon journalaction: enumpartition: string
claudexor_quarantine_journal deletes
Set a damaged journal partition aside and start a fresh one, after an exact confirmationpartition: stringexpectedFingerprint: stringconfirmation: enum

Similar servers