cc-switch
Generate ~/.claude/settings.json from saved provider/model configs —
a small CLI that mirrors the credstore pattern.
Non-secret provider shape lives in ~/.claude/cc-switch.json. API
keys are never stored there — the config keeps the key's name,
and the value is read from credstore at activate time and injected into
the system environment as ANTHROPIC_AUTH_TOKEN. The generated
settings.json contains no credential line.
Install
cc-switch is a standalone PyPI package — installed independently of slife (installing slife does not bring cc-switch, and vice versa). Both depend on credstore, which is pulled in automatically.
uv tool install cc-switch
# or, in this repo:
uv sync
Commands
cc-switch set <provider-name>
Create or edit a provider. Prompts for:
- Base URL (required)
- API key name — the credstore key holding the secret (required)
- Supported models (optional; comma, space, or semicolon separated)
If the provider already exists this edits it; otherwise it adds it. When editing, a blank answer keeps the current value. The models prompt toggles against the provider's current list: a model you type that is already listed is removed, one that isn't is added (symmetric difference). A blank answer leaves the list unchanged, and typing the same list again undoes the change.
cc-switch set deepseek
# Base URL [..]: https://api.deepseek.com/anthropic
# API key name (credstore key): DEEPSEEK_API_KEY
# Supported models (comma separated; toggles against the current list): deepseek-chat,deepseek-reasoner
No secret value is ever asked for or written — store it first with:
credstore set DEEPSEEK_API_KEY
cc-switch activate <provider-name/model-name>
Writes ~/.claude/settings.json with stock Claude Code defaults, and
injects the API key from credstore into the system environment as
ANTHROPIC_AUTH_TOKEN (mirroring credstore inject — registry on
Windows, shell profile on Unix), so a freshly launched Claude Code
session inherits it. The settings file contains no credential.
settings.json is written first, then the secret is resolved from
credstore. If the key is missing — or credstore itself is not
installed — activate fails loudly with the appropriate hint, leaving
the generated settings file on disk but not injecting a token.
On success, the activated provider/model is recorded in the top-level
active field of ~/.claude/cc-switch.json, so the list view can show
which model is currently active.
cc-switch activate deepseek/deepseek-chat
If the model is omitted and the provider has exactly one model, it is used; if several, you are prompted to pick one.
cc-switch activate <provider-name/model-name> --custom
Like activate, but lets you override each model slot first —
ANTHROPIC_DEFAULT_HAIKU_MODEL, ANTHROPIC_DEFAULT_SONNET_MODEL,
ANTHROPIC_DEFAULT_OPUS_MODEL, ANTHROPIC_CLAUDE_CODE_SUBAGENT_MODEL,
and ANTHROPIC_CLAUDE_CODE_EFFORT_LEVEL — one at a time. Enter a value
to override, or Enter to keep the default. The main model slot
(ANTHROPIC_MODEL) is chosen on the command line, not here. Overrides
are one-shot: they never touch the stored provider config.
cc-switch
With no command, lists every configured provider/model pair, one per
line. The currently active model is marked (active):
deepseek/deepseek-chat
deepseek/deepseek-reasoner
scnet/scnet-1m (active)
cc-switch list
Shows provider metadata (base URL, API key name, models) — one block per provider.
cc-switch remove <provider-name>
Deletes a provider config. Does not touch credstore or settings.json.
Files
| Path | Purpose |
|---|---|
~/.claude/cc-switch.json |
Provider/model shapes + the active spec (no secrets) |
~/.claude/settings.json |
Generated by activate |
credstore (DEEPSEEK_API_KEY, …) |
The actual API key values |
CC_SWITCH_FILE overrides the config path; the settings path can be
overridden for tests.
Security notes
- The config file holds only metadata — the API key is referenced by name.
activatereads the secret from credstore and injects it into the system environment asANTHROPIC_AUTH_TOKEN(registry on Windows / shell profile on Unix), mirroringcredstore inject; it is never written to settings.json.- A provider's
extra_env(settable via the Python API) may not containANTHROPIC_MODEL,ANTHROPIC_BASE_URL, orANTHROPIC_AUTH_TOKEN— cc-switch owns those slots, and a secret must never reach the plaintext config. - On a TTY,
activateprints an activation hint without echoing the secret; when stdout is piped it emits the shell export line foreval. - Restart your shell (or start a new terminal) after activating for the env change to take effect in the current session.
- Secrets are immutable Python
str— cc-switch follows credstore's practice ofdel-ing the reference immediately after use.
Metadata
Release files for cc-switch 0.9.10
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| cc_switch-0.9.10.tar.gz | 23.5 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| cc_switch-0.9.10-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 38.8 kB
Release files / cc_switch-0.9.10.tar.gz
| Download URL | cc_switch-0.9.10.tar.gz |
|---|---|
| Size | 23.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
75161961a09b2847e179bafc8f78296ba2e8fbe666f14ab6e522256288621080
|
|
BLAKE2b-256 checksum How to use checksums |
14980d1abb406aa92d3636542bc406fccec923ebcd0136480db6a8e4fbfc76d7
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.15
|
Release files / cc_switch-0.9.10-py3-none-any.whl
| Download URL | cc_switch-0.9.10-py3-none-any.whl |
|---|---|
| Size | 15.3 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
493b39faa992bfd4b19c283d04216d6969501867b8c6b59bee99b52f6416d009
|
|
BLAKE2b-256 checksum How to use checksums |
f8264151dfddf5e8188b5bb32b3452df3a68a70a6117633b9293ab62de354357
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.15
|