Skip to content

Instantly share code, notes, and snippets.

@konstantinosbotonakis
Created January 22, 2026 12:44
Show Gist options
  • Select an option

  • Save konstantinosbotonakis/bc9df8c8c84c3816d4240249735d942e to your computer and use it in GitHub Desktop.

Select an option

Save konstantinosbotonakis/bc9df8c8c84c3816d4240249735d942e to your computer and use it in GitHub Desktop.
Claude Code load multiple Providers

Claude CLI Multi-Provider Loader (GLM, Vertex, Native)

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.


Why This Exists

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:

  1. Clean slate per invocation
  2. Explicit provider modes
  3. Anthropic-compatible proxy support
  4. Zero persistent side effects

Installation

Add the following to ~/.zshrc (or source it from a dedicated file).

Required environment variables

export ZAI_API_KEY="YOUR_KEY"
export ENABLE_TOOL_SEARCH=true
export CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC=true

The Wrapper Function

claude() {
  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" "$@"
  )
}

Usage

claude glm
claude glmflash
claude vertex
claude

Behavior:

  • 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

Supported Modes

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment