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

6 月 30 日
 luckybilly

我有好几个 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

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

1822 次点击
所在节点    Claude Code
6 条回复
live2490643
6 月 30 日
感谢分享
Scarb
7 月 1 日
不错,正好需要
yyyyyyh
7 月 1 日
工具还是太重了 如果是 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
7 月 1 日
@yyyyyyh 原理差不多,都是改环境变量。
这个工具会动态读你的 cc switch 里配置的所有 key ,使用简单,按 cc switch 中配置的模型提供商名称模糊匹配(也可以直接 ccs 命令后用上下按键选择模型提供商),免维护,以后添加 key 、改模型版本等操作,直接在 cc switch 中操作就行
其实不管怎么做,满足自己用就行,不必纠结
spediacn
7 月 1 日
我是这么做的:
配置:~/.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 "$@"
luckybilly
7 月 2 日
@spediacn 挺不错的,自用这样基本够用了,不会需要频繁增加 provider 。
这个 ccs 工具是适配那些用 cc switch 来管理多个模型提供商的时候,提供快捷指令的。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1223985

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX