Claude Code 2.1.317 到 2.1.318 更新:SDK hook 出错可以拦住动作,换了模型的子代理不再跟会话的 effort,重读没变的文件会返回内容
11 月 3 日和 4 日 Claude Code 连发 2.1.317 和 2.1.318:SDK 的 hook 回调出错可以拦住动作;换了模型的子代理改用那个模型的 effort;Read 重读没变的文件会返回内容;网关的安全检查回 403、422 时 auto 模式不再每轮失败。
Claude Code 2.1.317 在北京时间 2026 年 11 月 3 日上午发布(UTC 11 月 3 日 01:25),2.1.318 在 11 月 4 日早上 8 点发布(UTC 11 月 4 日 00:01)。两版加起来有 150 多条改动,和本站读者关系最大的是这几点:
- Agent SDK 的 hook 回调出错时,可以拦住动作了。 以前回调崩了,动作照常执行。
- 子代理和队友换了模型,就不再跟会话的 effort,改用那个模型自己保存的档位或默认值。
- Read 工具重读一个没变的文件,会返回内容,不再只回一句“没变”。
- 走网关时,auto 模式不再因为安全检查返回 403、422 而每轮失败。
- 用 claude.ai 账号登录的,到期前 10 天开始提醒,
claude auth status也能看到到期时间。
这是 2.1.316 之后的两个版本。下面按“对你有什么影响”整理,不逐条翻译更新日志。这两版本站都没有实测,服务器上还是 2.1.316。
子代理、effort 和 SDK
hook 回调出错可以拦住动作(2.1.317)。 Agent SDK 的 hook 配置加了 onFailure: "block"(Python 写 on_failure="block")。不设的话,大多数事件上回调抛异常或返回的内容不合格,动作照常往下走,只发一条警告;PreToolUse 里用来拦危险操作的守卫一崩,调用就落回正常的权限流程。要 TypeScript 版 SDK 0.3.317、Python 版 0.2.177 以上。细节和例外的事件见《Agent SDK 的权限和 hooks》新补的一节。
换了模型的子代理不再跟会话的 effort(2.1.317)。 定义里没写 effort 的子代理,和主对话同一个模型时,用你在会话里选的档位;换了模型,改用那个模型自己保存的 effort 或默认值。代理团队的队友同理。想固定,就在定义里写 effort,见《子代理进阶》。
mod 的 fork 也能设 effort(2.1.318)。 mod 里 $.model.fork 加了 effort,顺手的小活可以用 low 跑,不管会话开的是哪一档。
其他:
- 设了“消息被标记时换模型”为 Ask each time 时,子代理会停下,不再自己换模型(2.1.318)。
- 后台子代理跑的 shell 命令超过 3 分钟就转到后台,现在所有服务商上都这样,免得提示缓存在等的时候过期(2.1.318)。
- 用 SendMessage 给正在跑的后台代理发消息,它手上的命令转到后台、不停掉,消息到得更早(2.1.317)。
- 在输入框里按 Ctrl+C 清掉打的字,不会再把所有后台代理一起停掉(2.1.317)。
读文件和省用量
- Read 工具删掉了“文件自上次读取后没有变化”的占位回复(2.1.317)。 现在重读一个没变的文件,会把内容再给一遍,重复读的那几次会多花一些 token。更新日志没有说为什么改。
- Grep 和 Glob 搜索超时只拿到一部分结果时,Claude 不会再当成完整结果(2.1.317)。
DISABLE_PROMPT_CACHING_OPUS、DISABLE_PROMPT_CACHING_SONNET对带[1m]、其他地区、不带日期的默认模型写法也生效了(2.1.317)。- 压缩: 很长的对话在压缩时要缩短自己的请求,不会再丢掉早先的摘要;空闲时自动压缩不会再把对话换成一段不是摘要的回复(2.1.317、2.1.318)。
走中转站、网关和公司网络
- auto 模式经网关(2.1.317)。 把 LLM 网关设成 base URL,它对 auto 模式在服务端的安全检查回 403 或 422 时,以前每一轮都失败,现在不会了(用
apiKeyHelper时的 403 照旧)。走中转站开 auto 模式碰到每轮报错的,升级后再试。 - 证书(2.1.317、2.1.318)。 某些做 TLS 检查的代理换了根证书之后报
unable to get local issuer certificate,修了;NODE_EXTRA_CA_CERTS指向的文件是空的、不是 PEM,或者开头那张证书坏了,以前所有连接都失败,现在用读得出的证书,并在 stderr 上警告。 - 地区或网络封锁(2.1.317)。 返回 HTTP 403 的地区或网络封锁,以前显示成登录失败,现在会说明是被封锁了。VS Code 里碰到这种情况也不再弹登录页。
- OpenTelemetry(2.1.317)。 指标、事件和 span 加了
anthropic.plan、anthropic.seat_type、anthropic.provider、anthropic.custom_base_url,能按套餐、服务商和自定义的接口地址分开统计;经代理导出时卡住、不发、狂连的几个问题也修了,导出超时默认 10 秒。
登录和脚本
- claude.ai 登录的到期时间(2.1.318)。
claude auth status加了loginExpiresAt,claude -p的 JSON 结果加了credential_expires_at;文字输出的claude -p在到期前 10 天开始往 stderr 打一行提醒。到期时的报错会直接说是到期了,-p里会提示用claude auth login或claude setup-token。用 claude.ai 账号跑定时脚本的,可以靠这两个字段提前换。 claude -p写不进去时不再退出码 0(2.1.317)。 磁盘满了或超了配额、会话记录和~/.claude.json没写进去,现在会报错,文字和 JSON 输出下退出码 1。2.1.318 起,没有变化时claude -p也不再每次重写~/.claude.json。--continue丢掉前面的对话(2.1.314 引入的问题),在一次格式坏了的工具调用重试用完之后会出现,2.1.318 修了。CLAUDE_CODE_DISABLE_NESTED_SESSION_ID(2.1.317)。 在云端会话或自托管 runner 里跑claude -p,以前会和外层会话共用一个 ID、写进同一份记录,重启时可能接错对话,这一版改成各用各的;要旧的行为,在自托管 runner 上设这个变量为1。
权限和安全
- 网页或 shell 工具调用要把你的账号邮箱发到网络上之前,会先问你(2.1.317)。
- 发完消息紧接着按的键,不会再被当成对权限提示的回答;提示出来得慢时也一样(2.1.318)。
- tmux、iTerm2 分屏里的队友,组长在手动模式时不会再以 auto 模式启动(2.1.317)。
deniedMcpServers按网址写的条目,现在也能拦住网址对得上的 Anthropic 提供的服务器,以及云端会话、自托管 runner 里的连接器(2.1.318)。- auto 模式下子代理的工具调用检查没有给出结果时,主界面会显示提示,以前什么都不显示(2.1.317)。
桌面应用、VS Code、云端会话和其他
- 桌面应用 Code 标签页(2.1.317): 项目和本地的 MCP 服务器在第一轮之后断开的问题修了;项目里设的
effortLevel在新会话里被忽略的问题修了;组织的远程托管设置没加载时会提示,加载好了再提示一次。 - 在 IDE 的终端里启动时,不再自动安装、更新 IDE 扩展(2.1.318)。 要装,在外面的终端里运行
/ide,或者到编辑器的扩展页面装。 - 云端会话: 可以不选仓库直接开(2.1.318);MCP 服务器要你打开的链接会显示成卡片(2.1.317);
gh run view --log能读到 GitHub Actions 的日志了(2.1.318)。 /schedule: 新建的云端定时任务带上了你没要的连接器时会警告,并告诉你怎么去掉(2.1.317)。/claude-api managed-agents-onboard给新智能体的内置工具默认用auto权限策略,和 Console 一致(2.1.318)。- Claude Tag: 在 Slack 里新贴的 artifact 链接显示成带 Open 按钮的简单卡片(2.1.317)。
- 2.1.288 的一个修复被撤掉了(2.1.318): 恢复 2.1.286 及更早版本开始的对话时,模型早先的思考内容现在可能被丢掉。
另外还有 Windows、Remote Control、自托管 runner、Claude apps 网关(企业用,2.1.317 加了按开发者、按天、按 IdP 组查花费的管理接口)的一批修复,没有逐条列出,见更新日志。
怎么升级
claude update
claude --version
原生安装的 Claude Code 会在后台自己更新。只想要某一版,用 claude install 2.1.318。