Claude Code 多窗口配置:每个窗口使用不同的 API Key
Claude Code 多窗口配置:每个窗口使用不同的 API Key
Frank Dum前言
用 Claude Code 写代码的时候,你可能遇到过这些场景:
- 手上有多个 API Key(不同提供商、不同额度),想同时用起来
- 一个窗口跑主力项目,另一个窗口做实验,互不干扰
- 某个 API 节点挂了,想快速切到备用节点继续干活
Claude Code 默认读取全局配置,所有窗口共享同一套环境变量。但其实它提供了一个 --settings 参数,可以在启动时注入自定义配置,覆盖默认的环境变量。利用这个机制,我们可以为每个窗口写一个独立的启动脚本,各自配置不同的 API Key、Base URL 和模型。
本文就来聊聊怎么实现这个方案。
核心原理
Claude Code 的 --settings 参数接受一个 JSON 字符串,其中 env 字段可以设置环境变量。这些环境变量会覆盖系统默认值,仅在当前会话中生效。
关键的环境变量有:
| 变量名 | 作用 |
|---|---|
ANTHROPIC_AUTH_TOKEN |
API 密钥 |
ANTHROPIC_BASE_URL |
API 端点地址 |
ANTHROPIC_MODEL |
默认使用的模型 |
ANTHROPIC_DEFAULT_SONNET_MODEL |
Sonnet 模型 ID |
ANTHROPIC_DEFAULT_OPUS_MODEL |
Opus 模型 ID |
ANTHROPIC_DEFAULT_HAIKU_MODEL |
Haiku 模型 ID |
ANTHROPIC_REASONING_MODEL |
推理模型 ID |
每个启动脚本通过 claude --settings '{...}' 传入不同的配置,就能实现窗口级别的隔离。
实现步骤
1. 创建脚本目录
先找个地方放启动脚本:
1 | mkdir -p ~/claude-scripts |
2. 编写启动脚本
每个脚本对应一套独立的 API 配置。以下是三个示例脚本的模板:
脚本一:主力配置
1 |
|
脚本二:备用配置
1 |
|
脚本三:测试配置(精简模式)
1 |
|
测试脚本中额外设置了 CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC 为 1,这会禁用非必要的网络请求(如遥测数据),适合在不稳定的网络环境下使用。
3. 赋予执行权限
1 | chmod +x ~/claude-scripts/claude-*.sh |
4. 在不同终端窗口中启动
1 | # 终端窗口 1 - 主力配置 |
每个窗口都是独立的 Claude Code 会话,使用各自的 API Key 和端点,互不影响。
进阶:配置 Shell 别名
每次输入完整路径太麻烦,可以在 ~/.zshrc(或 ~/.bashrc)中添加别名:
1 | # Claude Code 多窗口别名 |
保存后执行 source ~/.zshrc,之后只需要输入 cm、cb、ct 就能快速启动对应配置。
如果你想让别名启动后自动进入某个项目目录,可以这样写:
1 | alias cm='cd ~/projects/main-project && ~/claude-scripts/claude-main.sh' |
进阶:快速扩展新配置
拿到新的 API Key 了?复制一份脚本改改就行:
1 | cp ~/claude-scripts/claude-main.sh ~/claude-scripts/claude-new.sh |
然后编辑 claude-new.sh,替换 ANTHROPIC_AUTH_TOKEN 和 ANTHROPIC_BASE_URL 即可。
进阶:使用 tmux 统一管理多窗口
为什么需要 tmux?
开 3 个配置来回切;终端误关全掉;SSH 断线丢现场;重启后要重开一堆窗口。
下面默认你已经装好 tmux,并且 ~/claude-scripts/ 里放着可执行的启动脚本(例如 claude-main.sh、claude-backup.sh、claude-test.sh)。
tmux 基础操作
| 目的 | 命令/快捷键 |
|---|---|
| 创建会话 | tmux new -s session-name |
| 创建窗口 | Ctrl+b c |
| 切换窗口 | Ctrl+b 0/1/2、Ctrl+b n(下一个)、Ctrl+b p(上一个) |
| 窗口列表 | Ctrl+b w |
| 分离会话 | Ctrl+b d |
| 附加会话 | tmux attach -t session-name |
| 列出会话 | tmux ls |
方案一:手动在 tmux 窗口中启动脚本
1 | # 步骤 1:创建 tmux 会话 |
这种方式适合临时使用:灵活、随开随用;但每次都要手动建窗口和逐个启动。
方案二:tmux 自动化启动脚本
创建一个完整的自动化脚本 ~/claude-scripts/start-claude-tmux.sh:
1 |
|
赋予执行权限:
1 | chmod +x ~/claude-scripts/start-claude-tmux.sh |
使用方式:
1 | ~/claude-scripts/start-claude-tmux.sh |
说明:
- 自动检查会话是否存在,避免重复创建
- 为每个窗口命名,方便识别
- 一键启动完整工作环境
- 适合日常使用
tmux 窗口命名和组织
- 启动脚本里用
-n命名窗口(如"主力/备用/测试"),一眼就知道哪个在跑哪套配置。 - 运行中要改名:在 tmux 里按
Ctrl+b ,重命名。 - 快速定位:
Ctrl+b w打开窗口列表,用方向键选中即可切过去。
会话持久化的优势
- 关闭终端窗口,tmux 会话仍在后台运行
- 随时
tmux attach恢复工作状态 - 适合长时间运行的任务(如大型项目重构)
- SSH 断开也不影响会话
注意:tmux 会话在系统重启后会丢失。只有在不关机的情况下(关闭终端、SSH 断开等),会话才能保持。
示例场景:
1 | # 早上启动工作环境 |
不同模型版本的配置说明
--settings 中可以分别指定不同场景使用的模型版本:
ANTHROPIC_MODEL:默认模型,Claude Code 主要交互使用ANTHROPIC_DEFAULT_SONNET_MODEL:当你用/model sonnet切换时使用的模型ANTHROPIC_DEFAULT_OPUS_MODEL:当你用/model opus切换时使用的模型ANTHROPIC_DEFAULT_HAIKU_MODEL:Haiku 模型,用于轻量级任务(如子代理)ANTHROPIC_REASONING_MODEL:推理模型,用于需要深度思考的场景
你可以根据不同 API 提供商支持的模型来灵活配置。比如某个提供商只支持到 Sonnet 4.5,那就把 Opus 相关的也指向 Sonnet。
常见问题
Q: 多个窗口会共享对话历史吗?
不会。每个 claude --settings 启动的会话都是完全独立的,对话历史、上下文互不干扰。
Q: 能不能在同一个终端里切换配置?
不能直接切换。--settings 是启动时传入的,运行中无法修改。需要退出当前会话,用另一个脚本重新启动。
Q: API Key 放在脚本里安全吗?
脚本文件存在本地,只要你不把它提交到公开仓库就没问题。建议:
- 将脚本目录加入全局
.gitignore - 设置文件权限为仅自己可读:
chmod 600 ~/claude-scripts/claude-*.sh - 如果需要更高安全性,可以从环境变量或密钥管理工具中读取
Q: 不同窗口可以用不同的 Base URL 吗?
可以,这正是这个方案的优势之一。每个脚本可以指向完全不同的 API 端点,比如一个用官方 API,一个用第三方代理。
Q: tmux 和普通多终端窗口有什么区别?
简要对比:
- 会话持久化:关闭终端不影响 tmux 会话(但系统重启会丢失)
- 统一管理:一个命令启动所有窗口
- 快捷键切换:
Ctrl+b 0/1/2比Alt+Tab更精确 - 远程友好:SSH 断开可以重新附加
Q: tmux 会话会共享环境变量吗?
默认不会"自动同步"。每个窗口在启动时继承当时的环境,之后各跑各的;你通过 tmux send-keys 在不同窗口里运行不同启动脚本,每个窗口各自加载自己的 API Key/配置,互不影响。
Q: 如何在 tmux 中快速切换窗口?
Ctrl+b 0/1/2/...:切换到指定编号的窗口Ctrl+b n:下一个窗口Ctrl+b p:上一个窗口Ctrl+b w:显示窗口列表,用方向键选择Ctrl+b l:切换到上一次使用的窗口Ctrl+b &# 关闭当前窗口,需要确认
Q: tmux 会话意外断开怎么办?
tmux 会话在后台持续运行,即使终端关闭或 SSH 断开。重新连接的方法:
1 | # 查看所有会话 |
一般情况下,窗口里正在运行的 Claude Code 进程还在,工作状态也会保留。
Q: 可以同时使用 tmux 和 iTerm2/Windows Terminal 的多标签吗?
可以,但没必要。tmux 的窗口管理已经足够强大,而且有会话持久化的优势;建议选一种为主,避免"标签里套窗口"导致层级过多、越管越乱。
总结
Claude Code 的 --settings 参数是实现多窗口隔离的关键。通过为每个窗口编写独立的启动脚本,你可以:
- 同时使用多个 API Key,充分利用不同账号的额度
- 为不同项目配置不同的模型和端点
- 某个节点出问题时快速切换到备用配置
如果你需要更高效的多窗口管理,tmux 是理想的搭档:
- 一键启动完整工作环境,无需手动打开多个终端
- 会话持久化,关闭终端也不丢失工作状态
- 快捷键切换,比鼠标点击更快
- 适合长时间运行的开发任务
两种方案可以结合使用:--settings 负责配置隔离,tmux 负责窗口统一管理。整个方案就是几个 shell 脚本的事,简单直接,没有额外依赖。
