2.8 KiB
2.8 KiB
name, description, type, originSessionId
| name | description | type | originSessionId |
|---|---|---|---|
| Claude Code 模型配置传播 | runcc.sh/cc4/cc5 模型切换机制,tmux 三层传播方案,settings.json 优先级问题 | feedback | 3abc1791-7202-45cf-85af-98b1f235a3c9 |
模型配置传播机制
规则: Claude Code 的 settings.json env 段优先级高于 shell export,会将同名环境变量覆盖。因此模型配置变量(ANTHROPIC_DEFAULT_*_MODEL)不能放在 settings.json 中,必须通过 runcc.sh 启动时删除 + shell export 设置。
Why: 用户发现运行 cc4 时状态栏仍显示 glm-5.1,因为 settings.json 中的 ANTHROPIC_DEFAULT_OPUS_MODEL: "glm-5.1" 覆盖了 shell 的 export ANTHROPIC_DEFAULT_OPUS_MODEL="glm-4.7"。
How to apply: runcc.sh 每次启动时先 jq 'del(.env.ANTHROPIC_DEFAULT_*)' 清理 settings.json,再 export 设置,再写入 tmux 三层传播。
tmux 三层传播
| 层级 | 机制 | 覆盖范围 | 隔离能力 |
|---|---|---|---|
| 1 | shell export |
当前进程 | 进程级 |
| 2 | tmux setenv -t <session> |
该 session 内新 pane | session 级 |
| 3 | tmux set-option -p @anthropic_* + .bashrc 读取 |
同 session 不同 pane | pane 级 |
关键文件
runcc.sh/templates/runcc.sh: 删除 settings.json 模型变量 → shell export → tmux 三层传播templates/bashrc.tail.sh: 新 shell 启动时读取 pane option(容器重建时自动生效).claude/hooks/agent-pane-track.sh: 将 PM pane 的模型 option 复制到新增 Agent pane
经验教训
- settings.json env 优先级陷阱: Claude Code 读取 settings.json env 并覆盖进程环境变量,即使 shell 已 export。模型切换变量必须从 settings.json 中删除。
- tmux 环境继承限制: tmux 新 pane 从 tmux server 继承环境,不从父 shell 继承。需用
tmux setenv/set-option显式传播。 - 同 session 并发隔离:
tmux setenv -t是 session 级的,同 session 不同 pane 无法隔离。用 pane option (per-pane) 实现隔离,.bashrc读取后覆盖 session 级值。 - Agent Team 子 pane: 新 pane 不继承父 pane 的 pane option,需在 hook 中显式复制。
- 模板文件同步: 修改
runcc.sh和.bashrc时,必须同时更新templates/下的模板文件,确保容器重建后一致。 - GLM 模型代码必须完整前缀:
4.5-air无效,正确代码是glm-4.5-air。Explore agent 默认使用 haiku 层级,haiku 模型代码错误导致 Agent tool 报 1211。可用curl https://open.bigmodel.cn/api/paas/v4/models查询有效模型列表。 - settings.json env 的双面性: 虽然它会覆盖 shell export(需要删除),但在已运行的会话中可临时写入正确值来修复子 agent 模型问题(利用其覆盖优先级),修复后再删除。