CLI utility to switch between Claude API and GLM 4.6 models in Claude Code
npm install glm-switchbash
npm install -g glm-switch
`
$3
`bash
Clone repository
git clone https://github.com/supermeo-studio/glm-switch.git
cd glm-switch
Setup
npm run setup
`
The npm run setup command will:
1. Install dependencies
2. Build TypeScript to JavaScript
3. Create a global symlink via npm link
---
Profile Concept
Each profile is a separate GLM API configuration containing:
| Config Key | Description |
|------------|-------------|
| ANTHROPIC_BASE_URL | API endpoint for GLM |
| ANTHROPIC_AUTH_TOKEN | Authentication token |
| ANTHROPIC_DEFAULT_HAIKU_MODEL | Haiku model (lightweight) |
| ANTHROPIC_DEFAULT_SONNET_MODEL | Sonnet model (balanced) |
| ANTHROPIC_DEFAULT_OPUS_MODEL | Opus model (powerful) |
Storage: Profiles are stored in ~/.claude/glm-switch/
---
Usage Guide
$3
`bash
Create profile 0 with default values
glm-switch init 0
`
Output:
`
✓ Profile 0 created
Config: {
"ANTHROPIC_BASE_URL": "https://api.z.ai/api/anthropic",
"ANTHROPIC_AUTH_TOKEN": "",
"ANTHROPIC_DEFAULT_HAIKU_MODEL": "glm-4.5-air",
"ANTHROPIC_DEFAULT_SONNET_MODEL": "glm-4.7",
"ANTHROPIC_DEFAULT_OPUS_MODEL": "glm-4.7"
}
Don't forget to set your auth token:
glm-switch set 0 token
`
$3
`bash
Set token for profile 0
glm-switch set 0 token b8eb5131e993419fa5f39181c7c6a1db.emTv6QgzVxbSo3a7
`
$3
`bash
Apply default profile (0)
glm-switch on
Apply specific profile
glm-switch on 1
`
Important: After applying, restart Claude Code/VS Code for changes to take effect.
$3
`bash
Create profile 1
glm-switch init 1
Set different token for profile 1
glm-switch set 1 token another_token_here
Apply profile 1
glm-switch on 1
`
$3
`bash
Update Sonnet model for all profiles
glm-switch setall sonnet glm-4.7
Update Opus model for all profiles
glm-switch setall opus glm-4.7
Update Haiku model for all profiles
glm-switch setall haiku glm-4.5-air
Update API endpoint for all profiles
glm-switch setall ANTHROPIC_BASE_URL https://api.z.ai/api/anthropic
`
$3
`bash
glm-switch list
`
Output:
`
Profiles:
[active] [default] 0
Base URL: https://api.z.ai/api/anthropic
Token: b8eb5131e...
Haiku: glm-4.5-air
Sonnet: glm-4.7
Opus: glm-4.7
1
Base URL: https://api.z.ai/api/anthropic
Token: (not set)
Haiku: glm-4.5-air
Sonnet: glm-4.7
Opus: glm-4.7
`
$3
`bash
glm-switch status
`
$3
`bash
glm-switch delete 1
`
$3
`bash
glm-switch off
`
---
All Commands
| Command | Description | Example |
|---------|-------------|---------|
| init [id] | Create a new profile | glm-switch init 0 |
| set | Set value for a specific profile | glm-switch set 0 token xxxx |
| setall | Set value for all profiles | glm-switch setall sonnet glm-4.7 |
| on [id] | Apply profile (default: 0) | glm-switch on 1 |
| off | Remove GLM config | glm-switch off |
| status | Show current status | glm-switch status |
| list | List all profiles | glm-switch list |
| delete | Delete a profile | glm-switch delete 1 |
| --help | Show help | glm-switch --help |
| --version | Show version | glm-switch --version |
---
Valid Config Keys
When using set or setall commands, valid keys are:
`
ANTHROPIC_BASE_URL
ANTHROPIC_AUTH_TOKEN
ANTHROPIC_DEFAULT_HAIKU_MODEL
ANTHROPIC_DEFAULT_SONNET_MODEL
ANTHROPIC_DEFAULT_OPUS_MODEL
`
---
How It Works
$3
`
~/.claude/
├── settings.json # Claude Code settings
└── glm-switch/ # GLM Switch profiles directory
├── profile-0.json # Profile 0 config
├── profile-1.json # Profile 1 config
├── active-profile.json # Currently active profile
└── default-profile.json # Default profile (0)
`
$3
`json
{
"id": "0",
"config": {
"ANTHROPIC_BASE_URL": "https://api.z.ai/api/anthropic",
"ANTHROPIC_AUTH_TOKEN": "your-token-here",
"ANTHROPIC_DEFAULT_HAIKU_MODEL": "glm-4.5-air",
"ANTHROPIC_DEFAULT_SONNET_MODEL": "glm-4.7",
"ANTHROPIC_DEFAULT_OPUS_MODEL": "glm-4.7"
},
"createdAt": "2025-01-14T10:00:00.000Z",
"updatedAt": "2025-01-14T10:00:00.000Z"
}
`
$3
When running glm-switch on [id], the tool injects config from the profile into ~/.claude/settings.json:
`json
{
"env": {
"ANTHROPIC_BASE_URL": "https://api.z.ai/api/anthropic",
"ANTHROPIC_AUTH_TOKEN": "your-token-here",
"ANTHROPIC_DEFAULT_HAIKU_MODEL": "glm-4.5-air",
"ANTHROPIC_DEFAULT_SONNET_MODEL": "glm-4.7",
"ANTHROPIC_DEFAULT_OPUS_MODEL": "glm-4.7"
}
}
`
---
Recommended Workflows
$3
`bash
1. Create profile 0
glm-switch init 0
2. Set your token
glm-switch set 0 token your_token_here
3. Apply
glm-switch on
4. Restart Claude Code
`
$3
`bash
1. Create new profile
glm-switch init 1
2. Set token
glm-switch set 1 token another_token
3. Apply when needed
glm-switch on 1
`
$3
`bash
glm-switch setall sonnet glm-4.7
glm-switch setall opus glm-4.7
glm-switch setall haiku glm-4.5-air
`
---
Safety Features
- Automatic Backup - Creates .backup file before modifying
- Atomic Writes - Uses temp files to prevent corruption
- JSON Validation - Validates structure before writing
- Rollback on Error - Restores from backup if modification fails
- Non-destructive - Preserves other settings
---
Troubleshooting
$3
`bash
Close and reopen terminal
Or check npm bin path
npm bin -g
Ensure npm bin is in your PATH
`
$3
`bash
1. Check status
glm-switch status
2. Restart Claude Code/VS Code COMPLETELY
3. Check status again
`
$3
`bash
List all profiles
glm-switch list
Create profile if needed
glm-switch init 0
`
$3
`bash
✗ Invalid config key: invalid_key
Valid keys: ANTHROPIC_BASE_URL, ANTHROPIC_AUTH_TOKEN, ANTHROPIC_DEFAULT_HAIKU_MODEL, ANTHROPIC_DEFAULT_SONNET_MODEL, ANTHROPIC_DEFAULT_OPUS_MODEL
`
$3
Windows: Run terminal as Administrator
macOS:
`bash
Check permissions
ls -la ~/.claude/
Fix permissions
chmod 644 ~/.claude/settings.json
`
---
Development
$3
`bash
git clone https://github.com/supermeo-studio/glm-switch.git
cd glm-switch
npm run setup
`
$3
`bash
npm run build
`
$3
`bash
npm run dev
`
$3
`bash
npm run clean
`
---
Uninstallation
$3
`bash
npm uninstall -g glm-switch
`
$3
`bash
Remove profiles directory
rm -rf ~/.claude/glm-switch
`
---
Platform Support
| Platform | Status | Settings Location |
|----------|--------|-------------------|
| Windows 10/11 | ✅ Supported | C:\Users\{username}\.claude\settings.json |
| macOS | ✅ Supported | ~/.claude/settings.json |
| Linux | ⚠️ Untested | ~/.claude/settings.json |
---
Version History
$3
- ✨ Multi-profile support
- ✨ New commands: init, set, setall, list, delete
- ✨ Profile storage in ~/.claude/glm-switch/`