This Gist documents a zsh wrapper function that allows running claude with provider-specific environment isolation, primarily for:
- GLM via Zhipu AI (Anthropic-compatible proxy)
- Vertex AI (Claude on GCP)
- Native Claude CLI defaults
- Future extensibility to other Anthropic-compatible providers
The goal is deterministic startup, no environment leakage, and explicit provider selection via a single CLI entrypoint.
Claude Code relies heavily on environment variables. In practice:
- Variables persist across shells and commands
- Multiple providers reuse overlapping env keys
- Misconfigured state silently degrades behavior
This wrapper enforces:
- Clean slate per invocation
- Explicit provider modes
- Anthropic-compatible proxy support
- Zero persistent side effects
Add the following to ~/.zshrc (or source it from a dedicated file).
export ZAI_API_KEY="YOUR_KEY"
export ENABLE_TOOL_SEARCH=true
export CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC=trueclaude() {
local mode="$1"
local bin="${CLAUDE_BIN:-$HOME/.local/bin/claude}"
if [[ -n "$mode" ]]; then
shift
fi
(
# Hard reset all Claude related variables
unset ANTHROPIC_API_KEY
unset ANTHROPIC_AUTH_TOKEN
unset ANTHROPIC_BASE_URL
unset CLAUDE_CODE_USE_VERTEX
unset ANTHROPIC_DEFAULT_OPUS_MODEL
unset ANTHROPIC_DEFAULT_SONNET_MODEL
unset ANTHROPIC_DEFAULT_HAIKU_MODEL
unset ANTHROPIC_MODEL
unset ENABLE_TOOL_SEARCH
unset CLOUD_ML_REGION
unset ANTHROPIC_VERTEX_PROJECT_ID
unset CLAUDE_CODE_MAX_OUTPUT_TOKENS
case "$mode" in
glmflash|flash)
: "${ZAI_API_KEY:?ZAI_API_KEY is not set}"
export ANTHROPIC_BASE_URL="https://api.z.ai/api/anthropic"
export CLAUDE_CODE_MAX_OUTPUT_TOKENS=128000
export ANTHROPIC_AUTH_TOKEN="$ZAI_API_KEY"
export ANTHROPIC_MODEL="glm-4.7-flashx"
export ANTHROPIC_DEFAULT_OPUS_MODEL="$ANTHROPIC_MODEL"
export ANTHROPIC_DEFAULT_SONNET_MODEL="$ANTHROPIC_MODEL"
export ANTHROPIC_DEFAULT_HAIKU_MODEL="$ANTHROPIC_MODEL"
;;
glm|GLM)
: "${ZAI_API_KEY:?ZAI_API_KEY is not set}"
export ANTHROPIC_BASE_URL="https://api.z.ai/api/anthropic"
export CLAUDE_CODE_MAX_OUTPUT_TOKENS=128000
export ANTHROPIC_AUTH_TOKEN="$ZAI_API_KEY"
export ANTHROPIC_MODEL="glm-4.7"
export ANTHROPIC_DEFAULT_OPUS_MODEL="$ANTHROPIC_MODEL"
export ANTHROPIC_DEFAULT_SONNET_MODEL="$ANTHROPIC_MODEL"
export ANTHROPIC_DEFAULT_HAIKU_MODEL="$ANTHROPIC_MODEL"
;;
vertex|google)
export ENABLE_TOOL_SEARCH=true
export CLAUDE_CODE_USE_VERTEX=1
export CLOUD_ML_REGION=global
export ANTHROPIC_VERTEX_PROJECT_ID="vertex-ai-project"
export ANTHROPIC_MODEL="claude-sonnet-4.5-20250929[1m]"
;;
""|default)
set -- "$mode" "$@"
;;
*)
set -- "$mode" "$@"
;;
esac
exec "$bin" "$@"
)
}claude glm
claude glmflash
claude vertex
claudeBehavior:
- First argument is interpreted as mode if recognized
- Unknown modes fall through as normal Claude arguments
- All configuration is scoped to a subshell, nothing leaks
| Mode | Provider | Notes |
|---|---|---|
glm |
GLM 4.7 | Full model |
glmflash |
GLM 4.7 FlashX | Faster, cheaper |
vertex |
Vertex AI | Requires GCP project |
| default | Native Claude | No env overrides |