A tiny local launcher for switching AI agent runtime profiles.
Start different agent sessions with different API endpoints, tokens, and models without rewriting global agent config.
Run different agent profiles side by side without breaking sessions that are already open.
aweswitch reads profiles from ~/.config/aweswitch/config.json and offers two modes:
- Launch mode (
aweswitch <profile>) — starts a new agent session with isolated env. Each session gets its own API endpoint, token, and model. Different terminals can run different profiles simultaneously. Env is frozen at launch time. - Write mode (
aweswitch apply <profile>) — writes profile env into~/.claude/settings.json. Start Claude first, then runaweswitch apply <profile>in a new terminal (or let the aweswitch skill do it for you). Restart the session or use/modelto pick the new model. Only one profile can be active at a time.
It is intentionally small. Today it supports Claude Code and Codex profiles. Hermes profile groups may appear in the config shape later, but they are not executable yet.
aweswitch is powered by two companion tools:
- aweskill — CLI skill package manager for AI agents. Handles skill installation, updates, and projection across 47+ coding agents.
- aweshelf — Session bookmark manager for Claude Code and Codex. Bookmark, categorize, and restore sessions with aweswitch profiles.
aweswitch manages how you launch sessions; aweshelf manages how you remember them. Use aweswitch -c to auto-bookmark at launch, and aweshelf resume to restore with the same profile later.
If you are working in Claude Code, Codex, Cursor, or other coding agents, tell it:
Read https://github.com/Webioinfo01/aweswitch/blob/main/README.ai.md and follow it to install and configure aweswitch.
The agent will install the aweswitch CLI, set up config, and help you add profiles. For ongoing profile management, it can also install the aweswitch skill via aweskill.
After setup, you can tell the agent things like:
"Write cc-glm to settings so I can switch with /model." "List all aweswitch profiles." "Add an AiHubMix codex profile." "Change the model in cc-glm to glm-5.2."
The agent can run aweswitch apply and aweswitch restore directly, but will not run aweswitch <profile> (launch mode) — that would nest agents. To launch a profile, run it in your own terminal:
aweswitch cc-glmInstall from PyPI:
pip3 install aweswitch
aweswitch --helpCreate the default config:
aweswitch config initThen open the config and align it with your real providers, models, and token variable names:
aweswitch config editOr add a new profile interactively:
aweswitch addThis prompts for provider (claude or codex), profile name, and provider-specific fields.
The default config shape groups profiles under their provider. This is a reference config you can adapt:
{
"profiles": {
"claude": {
"cc-glm": {
"env": {
"ANTHROPIC_BASE_URL": "https://open.bigmodel.cn/api/anthropic",
"ANTHROPIC_AUTH_TOKEN": "${GLM_ANTHROPIC_AUTH_TOKEN}",
"ANTHROPIC_MODEL": "glm-5.1"
}
},
"cc-gemini": {
"env": {
"ANTHROPIC_BASE_URL": "https://openclaw.chatgo.best",
"ANTHROPIC_AUTH_TOKEN": "${GEMINI_ANTHROPIC_AUTH_TOKEN}",
"ANTHROPIC_MODEL": "gemini-3.1-pro-preview"
}
},
"cc-xiaomi": {
"env": {
"ANTHROPIC_BASE_URL": "https://token-plan-sgp.xiaomimimo.com/anthropic",
"ANTHROPIC_AUTH_TOKEN": "${XIAOMI_ANTHROPIC_AUTH_TOKEN}",
"ANTHROPIC_MODEL": "mimo-v2.5-pro"
}
}
},
"codex": {
"cx-openai": {
"env": {
"OPENAI_BASE_URL": "https://api.openai.com",
"OPENAI_API_KEY": "${OPENAI_API_KEY}"
}
},
"cx-aihubmix": {
"env": {
"OPENAI_BASE_URL": "https://aihubmix.com/v1",
"OPENAI_API_KEY": "${AIHUBMIX_OPENAI_KEY}"
}
}
}
}
}Configure the token variables referenced by your profiles:
# Claude profiles
export GLM_ANTHROPIC_AUTH_TOKEN="..."
export GEMINI_ANTHROPIC_AUTH_TOKEN="..."
export XIAOMI_ANTHROPIC_AUTH_TOKEN="..."
# Codex profiles
export OPENAI_API_KEY="..."
export AIHUBMIX_OPENAI_KEY="..."Put long-lived variables in ~/.zshrc if you want them available in every shell.
Verify the configured profiles:
aweswitch list
aweswitch show cc-glmRun a profile:
aweswitch cc-glm # Claude Code
aweswitch cx-openai # CodexPass extra arguments through to the agent:
aweswitch cc-glm --dangerously-skip-permissions
aweswitch cx-openai --model o3Auto-bookmark sessions with aweshelf:
aweswitch cc-glm -c backend -t "Fix auth bug"See aweshelf Integration for details.
Useful config commands:
aweswitch config path
aweswitch config show
aweswitch config editInstall the aweswitch skill via aweskill to let AI agents manage profiles with natural language:
- List, inspect, add, edit, and delete profiles
- Apply profiles to settings (
aweswitch apply) or restore from backup (aweswitch restore) - Guide environment variable setup (e.g. adding tokens to
~/.zshrc)
After install, you can tell the agent things like "Add an AiHubMix codex profile", "Change the model in cc-glm to glm-5.2", or "List all profiles". The agent reads the config, makes changes, and verifies the result.
Each invocation starts a new agent session with its own env. Different terminals can run different profiles at the same time.
aweswitch cc-glm # launch Claude Code profile
aweswitch cx-openai # launch Codex profile
aweswitch cc-glm --dangerously-skip-permissions # pass extra arguments
aweswitch cc-glm -c backend -t "Fix auth bug" # auto-bookmark with aweshelfWrites profile env into ~/.claude/settings.json. Start Claude first, then in a new terminal:
aweswitch apply cc-glm # write to settings.json
aweswitch apply cc-glm --force # overwrite existing backup
aweswitch restore # restore settings from backupRestart the session or use /model to pick the new model.
| Scenario | Mode |
|---|---|
| Run multiple profiles side by side | Launch |
Switch model with /model inside a session |
Write |
| Quickly try different APIs | Launch |
| Set a persistent default profile | Write |
Note: The two modes do not interfere with each other.
aweswitch cc-glmdoes not read or modify settings.json.aweswitch apply cc-glmdoes not affect running sessions.
aweswitch add # add a profile interactively
aweswitch list # list all profiles
aweswitch show cc-glm # inspect one profile (secrets redacted)
aweswitch config show # full config (secrets redacted)
aweswitch config edit # open config in editoraweswitch checks PyPI for newer versions in the background on each run. If an update is available, a reminder is printed to stderr after the session ends.
To update manually:
aweswitch self-updateTo check without updating:
aweswitch self-update --checkTo disable the background check:
export AWESWITCH_NO_UPDATE_CHECK=1aweshelf is a session bookmark manager for Claude Code and Codex CLI. It lets you save, tag, search, and resume past coding sessions.
aweswitch integrates with aweshelf so you can bookmark a session at launch time, without a separate step:
aweswitch cc-glm -c backend -t "Fix auth bug"| Flag | Description |
|---|---|
-c, --category |
Category to tag the bookmark with (e.g. backend, research, infra). |
-t, --title |
Custom bookmark title. If omitted, aweshelf uses the session's first message. |
Both options require aweshelf to be installed. If aweshelf is not found, they are ignored with a warning printed to stderr. Claude Code launches normally regardless.
Note: launching multiple
aweswitch -csessions simultaneously in the same project may result in incorrect bookmark assignment. Sequential launches are safe — as long as the previous session's JSONL file has been created before starting the next one (typically a few seconds). See CONTRIBUTING.md for details.
pip3 install aweshelfEven without aweswitch's -c/-t flags, aweshelf is useful independently:
aweshelf bookmark # bookmark a session interactively
aweshelf bookmark --current # bookmark the most recent session in this project
aweshelf list # list all bookmarks
aweshelf search "auth" # full-text search across bookmarks
aweshelf resume BOOKMARK_ID # resume a saved session
aweshelf browse # interactive TUI browserSee the aweshelf README for full documentation.
aweswitch is for people who use AI coding agents with more than one runtime endpoint, model, or token source and want a repeatable local command instead of editing settings by hand.
- One local config file at
~/.config/aweswitch/config.json - Named agent profiles such as
cc-glm,cc-gemini,cc-xiaomi, orcx-openai - Side-by-side sessions where different terminals can launch different API/model combinations
- Runtime-only injection through provider-specific arguments
- No mutation of global agent config, so already-open agent sessions keep working with the settings they started with
- Token references through shell variables or
~/.claude/settings.json - Readable JSON with provider grouping under
profiles.claudeandprofiles.codex
By default, profiles live in:
~/.config/aweswitch/config.jsonYou can override that path with AWESWITCH_CONFIG.
Launch mode does not — it only reads the aweswitch config and passes runtime settings to the Claude Code process being launched. Already-running sessions are not affected.
Write mode does — aweswitch apply <profile> writes profile env into ~/.claude/settings.json. An automatic backup is created on first write. Use aweswitch restore to undo.
Yes. Codex profiles use OPENAI_BASE_URL and OPENAI_API_KEY in their env block. aweswitch injects the base URL via Codex's -c config overrides and the API key via environment variable, so no files are written to ~/.codex/.
Not yet. The config format groups profiles by provider so future support can fit naturally.
cc-switch is an adjacent Claude Code switching tool. It is useful reference material for the same problem space: making Claude Code provider/model switching easier from the command line.
The key difference is that aweswitch avoids global config mutation. Many switching tools work by changing the agent's shared API/model settings; that can make already-open agent sessions unreliable because the global API endpoint changed underneath them. aweswitch keeps profiles in its own JSON file and injects settings only when launching a new process, so each session keeps the API and model it started with.
aweswitch currently takes a smaller Python-package approach: local JSON profiles, runtime-only injection (Claude Code --settings, Codex -c flags and env vars), secret redaction for inspection commands, and provider grouping that leaves room for future agent support.
- Profiles are grouped under
profiles.<provider>.<profileName>. - Supported providers:
claude,codex. - Profile names must be unique across all provider groups.
envvalues only apply to the launched process.${VAR_NAME}values are expanded from the current shell environment.showandconfig showredact keys matching token, key, secret, password, or auth.
- Pass
envthrough runtime--settings '{"env": ...}'. - Set the model with
env.ANTHROPIC_MODEL. - Token values can also expand from
~/.claude/settings.jsonwhen they are missing from the shell.
ANTHROPIC_DEFAULT_HAIKU_MODEL, ANTHROPIC_DEFAULT_SONNET_MODEL, and ANTHROPIC_DEFAULT_OPUS_MODEL are not configured by default. If you want Claude Code to use a lighter model for lightweight or background tasks, add ANTHROPIC_DEFAULT_HAIKU_MODEL to the profile:
{
"profiles": {
"claude": {
"cc-xiaomi": {
"env": {
"ANTHROPIC_BASE_URL": "https://token-plan-sgp.xiaomimimo.com/anthropic",
"ANTHROPIC_AUTH_TOKEN": "${XIAOMI_ANTHROPIC_AUTH_TOKEN}",
"ANTHROPIC_MODEL": "mimo-v2.5-pro",
"ANTHROPIC_DEFAULT_HAIKU_MODEL": "mimo-v2.5"
}
}
}
}
}This keeps the main model on mimo-v2.5-pro while allowing Claude Code to use mimo-v2.5 for lighter work.
- Requires
OPENAI_BASE_URLandOPENAI_API_KEYinenv. - Base URL is injected via
-c model_providers.custom.base_url=...(no file writes). - API key is injected via environment variable (no writes to
~/.codex/auth.json). - Extra arguments are passed through to the
codexCLI.
Codex profiles only switch the API source (base URL + API key), not the model. In practice, Codex works best with OpenAI's own models — using third-party providers as a relay is the common use case, while switching to entirely different model providers tends to give a poor experience.
{
"profiles": {
"codex": {
"cx-aihubmix": {
"env": {
"OPENAI_BASE_URL": "https://aihubmix.com/v1",
"OPENAI_API_KEY": "${AIHUBMIX_OPENAI_KEY}"
}
}
}
}
}aweswitch does not write to ~/.codex/. The base URL is passed via Codex's -c flag and the API key via environment variable. This keeps your global Codex config untouched.
To add a Codex profile interactively:
aweswitch add
# Provider: codex
# Profile name: cx-myprovider
# OPENAI_BASE_URL: https://myprovider.com/v1
# OPENAI_API_KEY env var name: MY_PROVIDER_KEYSee Contributing for setup, testing, branching, and release workflow.

