https://github.com/maxgfr/claude-code-switch
Minimal, zero-dependency provider switching for Claude Code — switch between Anthropic, OpenRouter, DeepSeek, Z.AI, Kimi, Qwen, MiniMax and custom endpoints
https://github.com/maxgfr/claude-code-switch
ai anthropic claude claude-code cli deepseek glm homebrew kimi llm minimax model-switching openrouter posix provider qwen shell zai
Last synced: 1 day ago
JSON representation
Minimal, zero-dependency provider switching for Claude Code — switch between Anthropic, OpenRouter, DeepSeek, Z.AI, Kimi, Qwen, MiniMax and custom endpoints
- Host: GitHub
- URL: https://github.com/maxgfr/claude-code-switch
- Owner: maxgfr
- License: mit
- Created: 2026-04-02T22:34:20.000Z (3 months ago)
- Default Branch: main
- Last Pushed: 2026-04-03T12:50:02.000Z (3 months ago)
- Last Synced: 2026-04-03T14:09:12.917Z (3 months ago)
- Topics: ai, anthropic, claude, claude-code, cli, deepseek, glm, homebrew, kimi, llm, minimax, model-switching, openrouter, posix, provider, qwen, shell, zai
- Language: Shell
- Homepage: https://github.com/maxgfr/claude-code-switch
- Size: 47.9 KB
- Stars: 0
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- Contributing: CONTRIBUTING.md
- License: LICENSE
Awesome Lists containing this project
README
# claude-code-switch
Minimal, zero-dependency provider switching for [Claude Code](https://docs.anthropic.com/en/docs/claude-code). One shell script to rule them all.
Switch between AI providers (Anthropic, OpenRouter, DeepSeek, Z.AI, Kimi, Qwen, MiniMax, Doubao, or any custom endpoint) with a single command. **`claude` always works as-is** — `ccs` is a sidecar that only injects env vars when you explicitly run `ccs`.
Inspired by [foreveryh/claude-code-switch](https://github.com/foreveryh/claude-code-switch), stripped down to the essentials: **switch provider, set model, launch claude**.
## Features
- **9 built-in providers**: Anthropic, OpenRouter, DeepSeek, Z.AI, Kimi, Qwen, MiniMax, Doubao, Custom
- **Default model**: configurable globally and per provider
- **Zero dependencies**: pure POSIX sh — no jq, no python, no node
- **Zero interference**: `claude` always works normally — `ccs` never touches your shell or Claude config
- **Direct launch**: `ccs` starts Claude Code with the right env vars (scoped to that process)
- **Shell integration** (optional): `eval "$(ccs env)"` exports vars to your current session
- **API key validation**: clear errors when a provider is not configured
- **Masked secrets**: `ccs status` never leaks your full API key
## Installation
### Homebrew (recommended)
```sh
brew install maxgfr/tap/claude-code-switch
```
### Manual
```sh
# Download the script
curl -fsSL https://raw.githubusercontent.com/maxgfr/claude-code-switch/main/ccs -o /usr/local/bin/ccs
chmod +x /usr/local/bin/ccs
# First run creates ~/.claude-provider/config — add your API keys
ccs config
```
## Quick start
```sh
# 1. Add your API keys
ccs config
# 2. Switch to a provider
ccs use openrouter
# 3. Launch Claude Code
ccs
```
## Usage
```
ccs [args...] Launch claude with active provider (default)
ccs [arguments]
COMMANDS
use [model] Switch to a provider (saves as default)
list List configured providers
status Show active provider and model
config Open config file in $EDITOR
launch [args...] Launch claude with active provider env vars
env Print export statements for current shell
reset Clear active provider (back to vanilla claude)
purge Remove all ccs data (~/.claude-provider/)
help Show help
version Show version
```
### Examples
```sh
# Switch provider
ccs use anthropic # Use default model (claude-sonnet-4-6)
ccs use anthropic claude-opus-4-6 # Override model
ccs use openrouter openai/gpt-4o # OpenRouter with specific model
ccs use deepseek deepseek-reasoner # DeepSeek R1
ccs use zai glm-5.1 # Z.AI GLM-5.1
ccs use kimi # Kimi K2.5
ccs use qwen # Qwen 3.5 Plus
ccs use minimax # MiniMax M2.7
ccs use doubao # Doubao Seed Code (ByteDance)
# Check state
ccs list # See all providers and their status
ccs status # See active provider, model, masked API key
# Launch Claude Code
ccs # Launch with active provider
ccs --print "hello world" # Pass flags through to claude
# Export to current shell
eval "$(ccs env)" # Export env vars to current session
```
## Providers
All providers expose an Anthropic-compatible Messages API endpoint, confirmed working with Claude Code.
| Provider | Base URL | Default Model |
|--------------|-----------------------------------------------------------|----------------------------------|
| `anthropic` | *(native — no override)* | `claude-sonnet-4-6` |
| `openrouter` | `https://openrouter.ai/api` | `anthropic/claude-sonnet-4` |
| `deepseek` | `https://api.deepseek.com/anthropic` | `deepseek-chat` |
| `zai` | `https://api.z.ai/api/anthropic` | `glm-5.1` |
| `kimi` | `https://api.moonshot.ai/anthropic` | `kimi-k2.5` |
| `qwen` | `https://dashscope-intl.aliyuncs.com/apps/anthropic` | `qwen3.5-plus` |
| `minimax` | `https://api.minimax.io/anthropic` | `MiniMax-M2.7` |
| `doubao` | `https://ark.cn-beijing.volces.com/api/coding` | `doubao-seed-code-preview-latest`|
| `custom` | *(user-defined)* | *(user-defined)* |
### Z.AI Coding Plan
[Z.AI](https://z.ai) offers a **Coding Plan** optimized for AI-powered coding tools like Claude Code:
- **Models**: GLM-5.1, GLM-5, GLM-4.7, GLM-4.6
- **Plans**: Coding Lite ($6/mo), Standard ($10/mo), Pro ($30/mo)
- **Get your API key**: [z.ai/manage-apikey](https://z.ai/manage-apikey/apikey-list)
```sh
ccs use zai glm-5.1
ccs
```
### Doubao (ByteDance/Volcengine)
[Doubao](https://www.volcengine.com/product/doubao) is ByteDance's AI platform with coding-optimized models:
- **Models**: `doubao-seed-code-preview-latest` (256K context)
- **Free tier**: 50M tokens/day for new users
- **Get your API key**: [Volcengine ARK Console](https://console.volcengine.com/ark)
```sh
ccs use doubao
ccs
```
## Configuration
Located at `~/.claude-provider/config`. Simple INI format, editable by hand:
```ini
[_defaults]
provider=anthropic
model=claude-sonnet-4-6
[anthropic]
base_url=
api_key=sk-ant-your-key-here
model=claude-sonnet-4-6
[openrouter]
base_url=https://openrouter.ai/api
api_key=sk-or-v1-your-key-here
model=anthropic/claude-sonnet-4
[zai]
base_url=https://api.z.ai/api/anthropic
api_key=your-zai-key-here
model=glm-5.1
opus_model=glm-5.1
haiku_model=glm-4.7
```
- **`[_defaults]`** — global default provider and model
- **`api_key=`** — empty means not configured
- **`base_url=`** — empty for `[anthropic]` uses native Anthropic API (no `ANTHROPIC_BASE_URL`)
- **`model=`** — main model (maps to sonnet/default tier in `/models`)
- **`opus_model=`** — optional, for `/models` opus tier (falls back to `model`)
- **`haiku_model=`** — optional, for `/models` haiku tier + fast tasks (falls back to `model`)
## Shell integration
Add to `~/.zshrc` or `~/.bashrc` so `ccs use` automatically exports env vars to your current shell:
```sh
ccs() {
if [ "${1:-}" = "use" ]; then
command ccs "$@" && eval "$(command ccs env)"
else
command ccs "$@"
fi
}
```
## How it works
`ccs` runs `exec env ... claude` — the env vars only exist in that child process. Your shell and `claude` are never affected.
```
claude → normal Claude Code, no ccs involvement
ccs → Claude Code with provider env vars (scoped to that process)
```
| Variable | When |
|-------------------------------|------------------------------------------------------|
| `ANTHROPIC_BASE_URL` | Third-party providers only (unset for native) |
| `ANTHROPIC_AUTH_TOKEN` | Third-party providers only (avoids API key prompt) |
| `ANTHROPIC_API_KEY` | Native Anthropic only |
| `ANTHROPIC_MODEL` | Always |
| `ANTHROPIC_DEFAULT_OPUS_MODEL` | Third-party — maps to `opus_model` in config |
| `ANTHROPIC_DEFAULT_SONNET_MODEL`| Third-party — maps to `model` in config |
| `ANTHROPIC_DEFAULT_HAIKU_MODEL` | Third-party — maps to `haiku_model` in config |
| `CLAUDE_CODE_SUBAGENT_MODEL` | Third-party — uses `model` |
| `ANTHROPIC_SMALL_FAST_MODEL` | Third-party — uses `haiku_model` |
State is persisted in `~/.claude-provider/active` so `ccs` works across shell sessions. Run `ccs reset` to clear it, or `ccs purge` to remove all ccs data.
## Contributing
See [CONTRIBUTING.md](CONTRIBUTING.md).
## License
[MIT](LICENSE)