Run Claude Code with any LLM

One command, your provider, zero changes to your Claude Code configuration. The provider's settings live only inside that session. Several Claude accounts, personal and Team, work side by side the same way.

$ npm install -g wrapper-code
$ wrapper-code deepseek
Claude CodeDeepSeekKimi CodeKimi (Moonshot API)OllamaOpenRouterQwen Cloud Token PlanQwen CloudZ.ai GLM Coding Plan
Two terminals side by side run the same prompt: wrapper-code claude on the left, wrapper-code deepseek on the right. Then wrapper-code usage lists the requests and tokens of both.

The same prompt in two terminals: wrapper-code claude on the left, wrapper-code deepseek on the right. When both finish, wrapper-code usage shows the requests and tokens of each one, by model.

Isolated

Only environment variables change, and only for that process. Plain claude keeps using Anthropic, and nothing is written under ~/.claude.

Side by side

Run several Claude Code sessions at the same time, each with its own LLM: wrapper-code deepseek in one terminal, wrapper-code qwencloud in another, plain claude in a third.

Claude accounts

Several Claude logins at once, a personal plan and a Team on the same e-mail included. wrapper-code claude --account work opens one, --temp logs in for a single session. Plain claude keeps its own.

Plan or pay per token

Use a subscription you already pay for, such as Kimi Code, the Qwen Token Plan or the GLM Coding Plan, or pay per token. wrapper-code list shows how each provider bills.

Setup in the browser

The first launch opens a local page: paste the key, pick a model profile, and the key is tested before anything is saved.

Token usage

Each session records its requests and tokens locally. wrapper-code usage adds them up by provider, model and day, wrapper-code usage clear deletes them, and wrapper-code claude counts your Anthropic usage too. Nothing leaves your machine.

Providers

CommandProviderProfiles
wrapper-code claude Claude Code
Your own Claude Code login
  • Your normal models and settings; only token usage is recorded
docs
wrapper-code deepseek DeepSeek
API key
  • flash-1m DeepSeek Flash, 1M context (documentation default)
  • v4-pro DeepSeek V4 Pro as main model, Flash for subagents
docs
wrapper-code kimi-code Kimi Code
Kimi Code API key
  • k3-1m Kimi K3 with 1M context for every role
  • k3-256k Kimi K3 with 256k context for every role
docs
wrapper-code kimi Kimi (Moonshot API)
Moonshot API key
  • k3-1m Kimi K3 with 1M context (guide default), K2.7 Code for the Haiku tier
  • k2.7-code Kimi K2.7 Code, 256k context, dedicated coding model (needs thinking on: Alt+T / Option+T in Claude Code)
docs
wrapper-code ollama Ollama
No key
  • Models discovered from your server at setup time
docs
wrapper-code openrouter OpenRouter
OpenRouter API key
  • Any model with tool calling, picked from the live catalog at setup time
docs
wrapper-code qwencloud-token Qwen Cloud Token Plan
Token Plan API key
  • auto Automatic routing, Qwen 3.8 Max for Opus, Qwen 3.8 Flash for Sonnet, Qwen 3.6 Flash for Haiku
  • qwen-max Qwen 3.8 Max as main model, Qwen 3.8 Flash for subagents
  • qwen-plus Qwen 3.7 Plus for every role
  • deepseek-pro DeepSeek V4 Pro as main model, DeepSeek V4.1 Flash for subagents
  • glm GLM 5.3 for every role
docs
wrapper-code qwencloud Qwen Cloud
Qwen Cloud API key
  • pay-as-you-go Pay-as-you-go: Qwen 3.8 Max as main model, Qwen 3.8 Flash for Sonnet and subagents, Qwen 3.6 Flash for Haiku
docs
wrapper-code zai-coding Z.ai GLM Coding Plan
Z.ai API key
  • glm-5.3 GLM 5.3, GLM 5.3 Flash for the Haiku tier
  • glm-5.3-1m GLM 5.3 with 1M context, GLM 5.3 Flash for the Haiku tier
  • flash GLM 5.3 Flash for every role, to save plan quota
docs

wrapper-code vs claude-code-router

claude-code-router (CCR) is a local gateway that routes, rewrites and retries every request, for Claude Code and other agents. wrapper-code only sets up the environment of one session and gets out of the way: nothing between Claude Code and the provider, nothing running when you are not working, plain claude untouched. If you need routing, fallbacks or other agents, use CCR.

Read the full comparison

claude-code-router (CCR) is the best-known way to run Claude Code on other models. It is a local gateway: a background service on 127.0.0.1:3456 receives every request from Claude Code (and from Codex, Kimi CLI, OpenCode and other agents), decides per request which provider and model to call, and can rewrite, retry, fall back to another model or key, translate to OpenAI- and Gemini-style APIs, and add vision, web search or MCP tools to a model that lacks them. It has a management UI, request logs with cost estimates, a desktop app and Docker images. If you need any of that, use CCR.

wrapper-code wants to solve a smaller problem: start one Claude Code session on one other provider, with nothing changed for your normal Claude Code and nothing extra running. It sets the provider's ANTHROPIC_BASE_URL, key and model variables in the environment of one claude process and gets out of the way. That is the whole design, and it is where its advantages come from:

  • Nothing between Claude Code and the model. Requests go straight to the provider's endpoint. There is no local process to parse, rewrite and re-stream every request and response, and none that can be down. CCR's documentation lists its running service as a prerequisite for a Claude Code launched from it.
  • Your prompts stay between Claude Code and the provider. wrapper-code never sees them; the only thing it receives is Claude Code's own token counts, over a loopback port with a random per-session token. CCR's gateway sees every request, and its request logs store request and response bodies (configurable: all, errors only or none; kept for the current day).
  • Nothing runs when you are not working. No daemon, no desktop app, no database, no port left open. When claude exits, wrapper-code prints the usage block and exits too.
  • Plain claude cannot be hijacked. Nothing is written under ~/.claude, and there is no "system default" mode, so no setting could make your normal Claude Code talk to another backend. CCR has such a scope; its own guide recommends starting with "only opened from CCR" for the same reason.
  • Side by side. Each session carries its own environment, so wrapper-code deepseek, wrapper-code ollama and plain claude can run at the same time in three terminals.
  • The provider's integration, unchanged. Each provider definition follows the provider's published Claude Code setup (linked in the table above), and what reaches Claude Code is what the provider's endpoint sends: streaming, tool calls, caching and thinking as the provider implements them, with no translation layer in between.
  • Small and readable. One npm package with no runtime dependencies (27 files, about 100 kB, Node.js 18+). The whole configuration is one environment file per provider that you can cat; export the same variables by hand and you get the same session, with or without wrapper-code.

What wrapper-code does not do, by design: per-request routing, fallbacks, retries, key rotation, several providers in one session, protocol translation (the provider must speak the Anthropic Messages API), other agents than Claude Code. This reflects CCR 3.1 and its documentation (September 2026); check its repository for the current state.

Both can be installed at once. If a CCR profile is set as "system default", check that it did not add ANTHROPIC_BASE_URL to the env block of ~/.claude/settings.json: settings there win over the variables wrapper-code sets.

How it works

  1. Reads the provider definition: base URL, model variables, how to test a key.
  2. Reads your saved choices; runs the setup page if the key is missing.
  3. Builds an environment from your shell, the provider and your profile. ANTHROPIC_API_KEY is removed so Claude Code cannot fall back to Anthropic.
  4. Starts a small receiver on 127.0.0.1 for Claude Code's own token counts, which become the usage report.
  5. Finds claude on your PATH and runs it with that environment, forwarding your arguments and its exit code.

wrapper-code claude is the exception: it skips the first three steps and runs your own Claude Code with your environment as it is, only adding the receiver.

Requires Node.js 18+ and Claude Code. Works on macOS, Linux and Windows. Version v0.6.1.