多会话并行时的配置冲突
effort 写盘,model 不写盘。在一个窗口里随手拖一下滑杆,所有正在跑的窗口都被默默改掉了——这是文档里写着的行为,不是 bug。
同时开三四个窗口跑不同的活,是稍微熟练之后的常态:一个整理访谈稿,一个改报告,一个跑数据。
问题是这几个窗口并不完全独立。
现象
新开一个窗口,预期是账户默认的 Opus 5 + xhigh,实际显示的是 Opus 5 + low。
没有人动过全局配置。 上一次只是在另一个窗口里用 /model 切了个模型,顺手把 effort 滑杆拖到了 low。
三件事同时发生,而且没有任何提示:
- 新窗口的 effort 没有回到默认
- 配置文件里的
effortLevel被改成了low - 正在运行的其他窗口,也跟着变了
原因:effort 写盘,model 不写盘
这两个设置的持久化行为不一样,这是所有困惑的来源。
model 用 /model 切换,默认只对当前会话生效,不写进配置文件。
effort 不一样。官方的说法是:low、medium、high、xhigh 这四档,在交互式会话里设置时会跨会话持久化,写进 ~/.claude/settings.json 的 effortLevel。
只有 max 是会话级的(除非通过环境变量设置)。
引爆点在 /model 面板里
官方文档明确写着这个设计:
在
/model里,用左右方向键调整 effort 滑杆。
也就是说,你打开 /model 本来只想切模型,但左右方向键调的是 effort,回车之后 effort 就被写盘了。
这不是 bug,是文档里写着的行为——只是没人会预期「切模型」这个动作会改全局配置。
因为 ~/.claude/settings.json 全局唯一,写盘那一刻:
- 正在运行的其他会话被实时改掉
- 之后新开的会话读到的也是新值
- 「最后一次修改胜出」,没有任何会话隔离
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 都只对当前会话生效,不写盘。
claude --model opus --effort xhigh
claude --model sonnet --effort high
模型别名不用记版本号:opus 指向最新的 Opus,sonnet 指向最新的 Sonnet。另外还有 fable(最难最长的任务)、default(清除覆盖,回到账户推荐值)。
二、环境变量(固定某个终端的偏好)
在某个终端窗口里 export,只对这个 shell 生效,优先级高于配置文件。
export CLAUDE_CODE_EFFORT_LEVEL=xhigh
claude
注意一个例外:
max通过环境变量设置时不是会话级的,这跟在会话里设max的行为不同。
三、一次性内联
最临时的写法,只影响这一次启动:
CLAUDE_CODE_EFFORT_LEVEL=low claude
四、给常用组合起别名(日常最省事)
写进 ~/.zshrc(macOS 默认)或 ~/.bashrc:
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 一节。