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 current process 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.
cc-switch set deepseek
# Base URL [..]: https://api.deepseek.com/anthropic
# API key name (credstore key): DEEPSEEK_API_KEY
# Supported models (comma separated): 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.
If the provider's API key is not in credstore, activate fails loudly
with a credstore set <key> hint instead of writing an unusable setup.
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 every model slot first —
ANTHROPIC_DEFAULT_HAIKU_MODEL, ANTHROPIC_DEFAULT_SONNET_MODEL,
ANTHROPIC_DEFAULT_OPUS_MODEL, ANTHROPIC_CLAUDE_CODE_SUBAGENT_MODEL,
ANTHROPIC_MODEL, ANTHROPIC_CLAUDE_CODE_EFFORT_LEVEL — one at a time.
Enter a value to override, or Enter to keep the default. Overrides are
one-shot: they never touch the stored provider config.
cc-switch list
Lists every configured provider/model pair, one per line:
deepseek/deepseek-chat
deepseek/deepseek-reasoner
scnet/scnet-1m
cc-switch list-providers
Shows provider metadata (base URL, API key name, models) without the
model-per-line layout of list.
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 (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.- 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.
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file cc_switch-0.9.6.tar.gz.
File metadata
- Download URL: cc_switch-0.9.6.tar.gz
- Upload date:
- Size: 14.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.15
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f9a3cab96efe3ae7f7262e890362ef3c08159fb7f078bfc37d91158f633b8edd
|
|
| MD5 |
2d837d90a5f63beb067a47268b5d0922
|
|
| BLAKE2b-256 |
3605f19cdb1b0deeffc23de95c4bc3035f7430f79385bf04a0d53d02fe0076af
|
File details
Details for the file cc_switch-0.9.6-py3-none-any.whl.
File metadata
- Download URL: cc_switch-0.9.6-py3-none-any.whl
- Upload date:
- Size: 12.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.15
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c04caed6c719ca67cc205a58476f34eeff6581c739a86d81b4d974367fc5e4a7
|
|
| MD5 |
c21edc211000ab5585566194e9848d65
|
|
| BLAKE2b-256 |
11584c27cf19d9eb4b97e7d82c0246671cdbfdfeefbca371073b6f86f54a2dc7
|