同时开几个 Claude Code 窗口,为什么它们会互相改设置

effort 会写盘、model 不会。一次随手拖动滑杆,所有正在跑的窗口都被默默改掉。这是一次事故复盘,附四种让会话彼此独立的做法。

2026/08/04约 7 分钟HiBridge 原创
方法来源本文由 HiBridge 撰写,方法来自下面的出处。
出处
Model configuration — Adjust effort level
来自
Anthropic 官方文档
查证日期
2026/08/04

同时开三四个 Claude Code 窗口跑不同任务,是稍微熟练之后的常态:一个窗口整理访谈稿,一个窗口改报告,一个窗口跑数据。

问题是这几个窗口并不是完全独立的

现象

新开一个窗口,预期是账户默认的 Opus 5 + xhigh,实际显示 Opus 5 + low。没有人动过全局配置——上一次只是在另一个窗口里用 /model 切了模型,顺手把 effort 滑杆拖到了 low。

三件事同时发生,而且没有任何提示:

  • 新窗口的 effort 没有回到默认
  • 配置文件里的 effortLevel 被改成了 low
  • 正在运行的其他窗口,也跟着变了

原因:effort 写盘,model 不写盘

这两个设置的持久化行为不一样,而这正是所有困惑的来源。

model/model 切换,默认只对当前会话生效,不写进配置文件。

effort 不一样。官方文档的原话是:lowmediumhighxhigh 这四档,在交互式会话里设置时会跨会话持久化,写进 ~/.claude/settings.jsoneffortLevel。只有 max 是会话级的(除非通过环境变量设置)。

引爆点在 /model 面板里。官方文档明确写了这个设计:

In /model: use left/right arrow keys to adjust the effort slider when selecting a model

也就是说,你打开 /model 本来只想切模型,但左右箭头调的是 effort,回车之后 effort 就被写盘了。这不是 bug,是文档里写着的行为——只是没人会预期「切模型」这个动作会改全局配置。

因为 ~/.claude/settings.json 全局唯一,写盘那一刻:

  1. 正在运行的其他会话被实时改掉
  2. 之后新开的会话读到的也是新值
  3. 「最后一次修改胜出」,没有任何会话隔离

model 之所以没事,只是因为它压根没写盘。

哪些模型支持哪些档位

设置之前先确认目标模型支持什么。官方当前的对照表:

模型 可用档位
Fable 5 low medium high xhigh max
Opus 5、Sonnet 5、Opus 4.8、Opus 4.7 low medium high xhigh max
Opus 4.6、Sonnet 4.6 low medium high max

没列在表里的模型不支持 effort——Haiku 就不支持。

设了不支持的档位不会报错,而是向下取最近的可用档:在 Opus 4.6 上设 xhigh,实际按 high 跑。

默认档位是 high,Opus 4.7 例外,它默认 xhigh

四种让会话彼此独立的做法

核心思路一句话:在启动时决定,不要进去之后改。

一、启动参数(推荐)

--model--effort 都只对当前会话生效,不写盘。

Terminal
claude --model opus --effort xhigh
claude --model sonnet --effort high
claude --model haiku

模型别名不用记版本号:opus 指向最新的 Opus,sonnet 指向最新的 Sonnet,haiku 指向 Haiku。另外还有 fable(最难最长的任务)、best(有 Fable 5 权限就用它,否则用最新 Opus)、default(清除覆盖,回到账户推荐值)。

二、环境变量(固定某个终端的偏好)

在某个终端窗口里 export,只对这个 shell 生效,优先级高于配置文件。

Terminal
export CLAUDE_CODE_EFFORT_LEVEL=xhigh
claude

注意一个例外:max 通过环境变量设置时不是会话级的,这跟在会话里设 max 的行为不同。

三、一次性内联

最临时的写法,只影响这一次启动:

Terminal
CLAUDE_CODE_EFFORT_LEVEL=low claude

四、给常用组合起别名(日常最省事)

写进 ~/.zshrc(macOS 默认)或 ~/.bashrc,之后开窗口直接敲别名:

Terminal
alias claude-deep='claude --model opus --effort xhigh'
alias claude-fast='claude --model sonnet --effort low'

改完执行 source ~/.zshrc 生效。以后每个窗口都是彻底独立的。

进会话之后的纪律

操作 会不会影响其他窗口 用不用
/effort <档位> 写盘 → 全局生效 避免
/model 打开面板 + 拖滑杆 写盘 → 全局生效 避免
/model sonnet 带参数 不开面板,仅当前会话 可以
CLAUDE_CODE_EFFORT_LEVEL 不写盘,仅当前 shell 推荐
--model / --effort 启动参数 不写盘,仅当前会话 推荐

优先级顺序

设置从多个地方来,冲突时的顺序是(官方文档):

环境变量 > 你配置的档位 > 模型默认值

另外,Skill 和 subagent 的 frontmatter 里也能设 effort,它在那个 Skill 运行期间覆盖会话档位,但盖不过环境变量

一句话总则

要让多个 Claude Code 窗口互不干扰,所有 model 和 effort 的配置都在启动时用命令行参数或环境变量决定;进会话之后只用 /model sonnet 这种带参数的形式临时切换,不碰 /effort,也不拖 /model 面板里的滑杆

怎么确认当前档位

不用打开 /model 也能看:会话头部会在模型名旁边显示,比如 “with low effort”。启动时和切换时,底栏也会短暂闪一下当前档位。

养成一个习惯:开始一个重要任务之前,先扫一眼头部那行字。 两秒钟,能省掉一次「为什么这次它这么敷衍」的返工。