Mingyu's Library主页
2026年8月20日

第 14 课:新功能速用 v2.1.236(默认模型、空闲通知、沙箱拒绝规则收紧)

日期:2026-08-20 前置:Claude Code v2.1.236+(2026-08-19 发布)。notify_when_idle 仅 macOS / Linux(含 WSL2)。 官方来源:Claude Code changelog 升级:claude update,然后 claude --version 确认到 2.1.236 或更高。

昨天(8/19)发布的 v2.1.236 里有三件事值得马上改进工作流:一个环境变量解决「团队/CI 里默认模型不统一」,一个参数把多会话并行从「轮询问对方好了没」变成「它好了会叫你」,还有一条沙箱语义修正——如果你之前写过 **/.env 之类的拒绝规则,它今天才真正变得可靠。四条技巧由浅入深。


技巧 1(入门):用 ANTHROPIC_DEFAULT_MODEL 定「起始模型」,而不是锁死模型

以前想统一模型只有 ANTHROPIC_MODEL,但它是硬锁:设了之后 /model 的选择在重启后会被它盖掉。v2.1.236 新增的 ANTHROPIC_DEFAULT_MODEL 只决定新会话从哪个模型起步,你在会话里用 /model 改过之后,那个选择会跨重启保留。

区别一句话:ANTHROPIC_MODEL = 「必须用这个」,ANTHROPIC_DEFAULT_MODEL = 「没说的话用这个」。

# ~/.zshrc:日常起步用 Sonnet 省额度,遇到硬骨头再 /model 切 Opus 并保留
export ANTHROPIC_DEFAULT_MODEL=claude-sonnet-5

团队场景(推荐写进项目而不是个人 shell):

// .claude/settings.json —— 提交进仓库,新人 clone 即生效
{
  "env": {
    "ANTHROPIC_DEFAULT_MODEL": "claude-sonnet-5"
  }
}

CI / 无头模式里仍然建议用 --model 显式指定,让日志里能看出这次跑的是谁:

claude -p "跑一遍 lint 并修掉 error 级问题" --model claude-sonnet-5

验证:开一个新会话 → /model 看当前选中的是不是默认值 → 切成另一个模型 → 退出重开,应当保留你切换后的选择(这就是它和 ANTHROPIC_MODEL 的差别)。

📖 Claude Code changelog v2.1.236


技巧 2(进阶,承接第 13 课):notify_when_idle —— 让另一个会话干完了主动叫你

第 13 课讲了跨会话消息(ListAgents + SendMessage)。它当时的痛点是:你给 B 会话派了个长活,想知道它什么时候完事,只能不停地再发消息问,或者自己切过去看。

v2.1.236 给 SendMessage 加了 notify_when_idle:一次性预约——对方下次进入空闲状态时,回一条通知给你。opt-in、不轮询、不占对方上下文。

典型用法(在会话 A 里,用自然语言驱动工具即可):

帮我用 ListAgents 找到那个正在跑数据迁移的会话,
给它发一句「迁移跑完后把失败行数报给我」,
并且带上 notify_when_idle —— 它一空下来我就要知道。

值得记住的三个边界:

配合上一课的并行模式(worktree A 写实现 / worktree B 写测试),现在的心智模型是:派活 → 挂上 idle 通知 → 回到自己的活上,而不是守着终端看。

📖 跨会话消息官方文档 · changelog


技巧 3(进阶):沙箱拒绝规则语义修正——你的 **/.env 现在才真正生效

这条是安全修复,建议今天就复查一遍你的配置。

v2.1.236 在 macOS 上修正了沙箱读取规则的优先级:通配符 read-deny 规则(例如 **/.env)

  1. 现在在允许读取的区域内部也优先生效(以前可能被一条更宽的 allow 覆盖);
  2. 覆盖被匹配目录里的全部内容(命中的是目录时,目录内的文件一并拒绝);
  3. 不能靠改名绕过——把 .env 改成别的名字再读,不再是一条逃逸路径。

也就是说:如果你曾经写过 deny 规则、又因为「好像没拦住」而放弃了,今天值得重写一遍。一份可用的起点:

// .claude/settings.json
{
  "permissions": {
    "deny": [
      "Read(**/.env)",
      "Read(**/.env.*)",
      "Read(**/*.pem)",
      "Read(**/*.key)",
      "Read(**/id_rsa*)",
      "Read(~/.aws/**)",
      "Read(~/.ssh/**)"
    ]
  }
}

验证(务必真跑一次,别假设):

# 在项目里造一个假密钥文件
printf 'FAKE_TOKEN=not-a-real-secret\n' > .env.probe
# 然后在 Claude Code 会话里让它读:
#   "读一下 .env.probe 的内容"
# 期望:被 deny 规则拦下并明确告知,而不是把内容打印出来
rm .env.probe

顺带提一句同版本的 auto mode 收紧:Monitor 的 allow 规则在 auto mode 期间会被搁置,Monitor 命令改为与 Bash 命令走同样的审查;并且 auto mode 的 git 状态检查不再会被仓库的 status.showUntrackedFiles=no 骗成「工作区干净」。两条都是「以前可能悄悄放行」的口子被堵上了。

📖 沙箱与权限文档 · changelog


技巧 4(实战):把 /goal 的自动 check-in 用起来,让长任务不再「挂死」

/goal 给会话挂一个持续目标。老问题是:当目标卡在一个长时间运行的后台任务后面时,会话会安静地等到你回来。

v2.1.236 改成:空闲且目标被后台工作挡住时,自动在 30 分钟后 check-in,然后 1 小时、2 小时递增。同版本还把「跑飞的 recap」封了顶——自动 recap 和 /recap 现在都被截断到 400 字符、按词边界切,不会再刷屏。

一个能直接抄的长任务工作流:

# 1) 在会话里挂目标
/goal 把 CI 上失败的 e2e 测试全部修绿,每修好一个就提交一次

# 2) 触发长耗时的后台验证(交给 Claude 跑,不要自己守着)
#    比如让它跑完整套 e2e,然后它会自己在 30min / 1h / 2h 回来看结果

# 3) 需要的话,关掉自动 check-in(留给 CI 之类不希望被打扰的场景)
export CLAUDE_CODE_GOAL_CHECKIN_MINUTES=0

配合技巧 2:目标挂在会话 A(长跑),会话 B 里给 A 发一条带 notify_when_idle 的消息,你就同时有了「它自己会回来推进」和「它一停下来会通知我」两条保障——这是目前 Claude Code 里最省心的长任务姿势。

另外两个同版本的小改进,今天会直接影响手感:

📖 changelog v2.1.236


一句话总结

今天升级到 v2.1.236 后做三件事:把 ANTHROPIC_DEFAULT_MODEL 写进项目 settings、给长跑会话挂上 notify_when_idle、重新检查一遍 Read(**/.env) 之类的 deny 规则并真跑一次验证——第三件是安全项,优先级最高。


本课选题依据:v2.1.236 于 2026-08-19 发布,按「当天有新功能则优先讲新功能速用」的规则选定。上一次新功能速用是 v2.1.221(2026-08-05),内容不重叠。