多会话并行时的配置冲突

effort 写盘,model 不写盘。在一个窗口里随手拖一下滑杆,所有正在跑的窗口都被默默改掉了——这是文档里写着的行为,不是 bug。

约 8 分钟

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

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

现象

新开一个窗口,预期是账户默认的 Opus 5 + xhigh,实际显示的是 Opus 5 + low

没有人动过全局配置。 上一次只是在另一个窗口里用 /model 切了个模型,顺手把 effort 滑杆拖到了 low

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

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

原因:effort 写盘,model 不写盘

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

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

effort 不一样。官方的说法是:lowmediumhighxhigh 这四档,在交互式会话里设置时会跨会话持久化,写进 ~/.claude/settings.jsoneffortLevel

只有 max 是会话级的(除非通过环境变量设置)。

引爆点在 /model 面板里

官方文档明确写着这个设计:

/model 里,用左右方向键调整 effort 滑杆。

也就是说,你打开 /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

模型别名不用记版本号opus 指向最新的 Opus,sonnet 指向最新的 Sonnet。另外还有 fable(最难最长的任务)、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 启动参数 不写盘,仅当前会话 推荐

优先级顺序

设置从多个地方来,冲突时的顺序是:

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

技能和子代理的定义文件里也能设 effort,它在那个技能运行期间覆盖会话档位,但盖不过环境变量

怎么确认当前档位

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

养成一个习惯:开始一个重要任务之前,先扫一眼头部那行字

两秒钟,能省掉一次「为什么这次它这么敷衍」的返工。

一句总则

要让多个窗口互不干扰,所有 model 和 effort 的配置都在启动时用命令行参数或环境变量决定。

进会话之后只用 /model sonnet 这种带参数的形式临时切换——不碰 /effort,也不拖 /model 面板里的滑杆。


这一章到这里

入门的九节讲完了:怎么交办、它有什么本事、怎么管权限、怎么后悔、常用命令、上下文怎么管、Git、CLAUDE.md、多窗口。

到这一步你已经能把日常工作跑起来了。

下一章讲的是另一件事:当你发现自己在重复做同一件事的时候,该怎么把它固定下来。

本节事实查证日期:2026-08-05。 依据:官方 Model configuration 的 Adjust effort level 一节。

← 回到手册目录