分享一个在 Claude Code 里 [同时] 用多个 ApiKey 的方法

luckybilly 2026-06-30 17:11 1

我有好几个 coding plan ,还有公司提供的 ApiKey ,我用 CC Switch 来管理这些 key 。


遇到的问题是:因为所有终端共享一套全局的配置,在 CC Switch 中切换配置会全部窗口同步变更。而且会导致正在进行的 session 无法继续使用。


我想在不同的终端使用不同的 coding plan 去做不同的事,目前 cc switch 不支持会话级隔离,于是让 AI 给我做了个小工具: https://github.com/luckybilly/cc-switch-helper


这个工具搭配 cc switch 使用能做到会话级隔离,一个终端用个人密钥、另一个终端用公司密钥,同时运行,互不冲突。


直接在终端用 ccs 命令指定名称启动就行,非常方便:


窗口 1: ccs minimax  → 用 Minimax 的 Claude Code
窗口 2: ccs kimi → 用 Kimi 的 Claude Code
窗口 3: ccs zcy → 用 自定义 provider 的 Claude Code
窗口 4: ccs deep → 用 DeepSeek 的 Claude Code

image.png


重要的是,它不影响 CC switch 的正常使用,它是通过动态读取 CC Switch 中配置的模型数据作为当前终端的环境变量来运行,真正的会话级隔离。

最新回复 (5)
  • live2490643 06-30 21:03
    1
    感谢分享
  • Scarb 07-01 09:44
    2
    不错,正好需要
  • yyyyyyh 07-01 10:31
    3
    工具还是太重了 如果是 windows 的话 直接在 .$Profile 里面添加这个我感觉就挺方便


    function claude-mimo {
    param([switch]$d)
    Reset-ClaudeAuth
    $env:ANTHROPIC_BASE_URL = "https://token-plan-cn.xiaomimimo.com/anthropic"
    $env:ANTHROPIC_AUTH_TOKEN = "tp-xxxxxxxx"
    $env:ANTHROPIC_MODEL = "mimo-v2.5"
    $params = @()
    if ($d) { $params += "--dangerously-skip-permissions" }
    $params += $args
    claude @params
    }

    # deepseek
    function claude-ds {
    param([switch]$d)
    Reset-ClaudeAuth
    $env:ANTHROPIC_BASE_URL = "https://api.deepseek.com/anthropic"
    $env:ANTHROPIC_AUTH_TOKEN = "sk-xxxxxxx"
    $env:ANTHROPIC_MODEL = "deepseek-v4-pro"
    $params = @()
    if ($d) { $params += "--dangerously-skip-permissions" }
    $params += $args
    claude @params
    }
  • luckybilly 楼主 07-01 10:49
    4
    @yyyyyyh 原理差不多,都是改环境变量。
    这个工具会动态读你的 cc switch 里配置的所有 key ,使用简单,按 cc switch 中配置的模型提供商名称模糊匹配(也可以直接 ccs 命令后用上下按键选择模型提供商),免维护,以后添加 key 、改模型版本等操作,直接在 cc switch 中操作就行
    其实不管怎么做,满足自己用就行,不必纠结
  • spediacn 07-01 12:06
    5
    我是这么做的:
    配置:~/.config/env.d/文件夹,在里头放入:
    claude.sh
    codex.sh
    antigraivity.sh


    claude.sh 里也是和楼上一样的思路,通过 shell 函数实现。多个 Coding Plan ,就每一份写一个。如我同时有 Claude Pro 订阅和 MiniMax 、智谱订阅,可以这么写:

    ```
    #!/bin/bash
    # Claude CLI Configuration Manager

    # The proxy address is defined here once and used globally.
    export GLOBAL_PROXY_URL="http://127.0.0.1:65210"

    # Wrap a command with proxy environment variables
    with_proxy() {
    env \
    http_proxy="$GLOBAL_PROXY_URL" \
    https_proxy="$GLOBAL_PROXY_URL" \
    HTTP_PROXY="$GLOBAL_PROXY_URL" \
    HTTPS_PROXY="$GLOBAL_PROXY_URL" \
    ALL_PROXY="$GLOBAL_PROXY_URL" \
    all_proxy="$GLOBAL_PROXY_URL" \
    "$@"
    }

    # Wrap a command without proxy environment variables
    without_proxy() {
    env \
    -u http_proxy \
    -u https_proxy \
    -u HTTP_PROXY \
    -u HTTPS_PROXY \
    -u ALL_PROXY \
    -u all_proxy \
    "$@"
    }


    if command -v claude &>/dev/null; then

    # Core runner to ensure environment isolation
    # Usage: _run_claude_cli <config_dir> [VAR=VAL ...]
    _run_claude_cli() {
    local config_dir="$1"
    shift
    (
    # Clear existing Anthropic variables to ensure no leakage from the host shell
    unset ANTHROPIC_API_KEY ANTHROPIC_AUTH_TOKEN ANTHROPIC_BASE_URL \
    ANTHROPIC_MODEL ANTHROPIC_DEFAULT_OPUS_MODEL \
    ANTHROPIC_DEFAULT_SONNET_MODEL ANTHROPIC_DEFAULT_HAIKU_MODEL

    # Set the configuration directory
    export CLAUDE_CONFIG_DIR="$config_dir"

    # Default settings for API-based usage
    if [[ "$config_dir" != "$HOME/.claude" ]]; then
    export CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC="1"
    export DISABLE_TELEMETRY="true"
    export ANTHROPIC_DISABLE_TELEMETRY="true"
    fi

    # Apply specific environment variables passed as arguments before the command
    while [[ "$1" == *"="* ]]; do
    export "$1"
    shift
    done

    # Execute claude with proxy
    with_proxy claude "$@"
    )
    }

    # --- Claude Pro (Direct Subscription) ---
    # Uses ~/.claude/
    claude-pro() {
    _run_claude_cli "$HOME/.claude" "$@"
    }

    # --- Third-party Provider Configurations (using dedicated directories) ---

    # MiniMax
    claude-minimax() {
    _run_claude_cli "$HOME/.claude-minimax" \
    ANTHROPIC_BASE_URL="https://api.minimaxi.com/anthropic" \
    ANTHROPIC_AUTH_TOKEN="MiniMax API KEY" \
    ANTHROPIC_MODEL="MiniMax-M3" \
    ANTHROPIC_DEFAULT_OPUS_MODEL="MiniMax-M3" \
    ANTHROPIC_DEFAULT_SONNET_MODEL="MiniMax-M3" \
    ANTHROPIC_DEFAULT_HAIKU_MODEL="MiniMax-M2.7" \
    "$@"
    }

    # 智谱 AI (Zhipu)
    claude-zhipu() {
    _run_claude_cli "$HOME/.claude-zhipu" \
    ANTHROPIC_BASE_URL="https://open.bigmodel.cn/api/anthropic" \
    ANTHROPIC_AUTH_TOKEN="Zhipu API KEY" \
    ANTHROPIC_MODEL="glm-5.2" \
    ANTHROPIC_DEFAULT_OPUS_MODEL="glm-5.2" \
    ANTHROPIC_DEFAULT_SONNET_MODEL="glm-5.1" \
    ANTHROPIC_DEFAULT_HAIKU_MODEL="glm-4.7" \
    "$@"
    }

    fi
    ```
    为了保证 Claude-Pro ,Claude (智谱),Claude ( MiniMax )各自会话隔离,我建立了
    .claude-zhipu
    .claude-minimax
    这几个文件夹。


    使用时很简单,执行 claude-zhipu, claude-pro/claude, claude-minimax 就行了。如果需要走代理,就修改这里:
    "$@"
    改为:
    with_proxy claude "$@"
* 帖子来源V2EX
返回