PreModelSwitch
2.1.251 起:模型切换前可 block / confirm / annotate
Claude Code 2.1.251(2026-08-28)增加 PreModelSwitch 与 PostModelSwitch hook。changelog 原文:block, confirm, or annotate a model switch。SessionStart 的 resume hook 现在还会收到 session staleness 与 estimated re-cache cost。这是官方 hook 事件,不是教你改 HTTP 头去冒充另一个客户端。
四个可单独引用的点
切换前的事件名
changelog 把它和 PostModelSwitch 并列。发生在 /model、模型选择器、SDK 或 resume 导致的切换之前。
三种官方动作
deny 取消切换;ask 需确认(headless 会拒绝);annotate 给下一次请求加上下文。exit code 2 也可 block。这是产品文档里的 hook 语义。
2026-08-28
同一天的 changelog 还修了 effort … is not supported when thinking is disabled。升级一版同时拿到两个表面。
resume 时多了的字段
SessionStart resume hooks now receive session staleness and the estimated re-cache cost。切换模型会作废缓存时,这是可观察的成本信号,不是绕过计费。
只靠 SessionStart 覆盖不到「中途换模型」
既有 hooks 指南覆盖 Stop、SessionStart、工具事件。2.1.251 之前,会话中途 /model 或选择器换模型,没有对称的前后钩子。PreModelSwitch 补的是这一段:策略、审计、提示词可以挂在切换本身上,而不是只在开局跑一次。
选择器现在还能带上 per-session effort
同版本还写:模型选择器可以为会话设置 effort 与 ultracode 标记;/effort 改为按模型记住默认档。PreModelSwitch 看到的「下一次要用的型号」可能带着 effort。观察请求即可,不必也不该去改 Originator 一类客户端标识。
时间线
Claude Code 已有 SessionStart、Stop、工具前后等事件。企业用来做审计与阻断。
Added PreModelSwitch and PostModelSwitch hook events (block, confirm, or annotate a model switch)。
以你本机 changelog 与 hooks 文档为准。事件 payload 字段以当前版本 schema 为准,本页不发明未公开的头。
已确认 vs 误读
已确认
事件名、block/confirm/annotate、与 /model 及选择器同一路径、resume 带 staleness 与 re-cache cost,均来自 2.1.251 changelog(2026-08-30 核对)。
误读
「用 hook 伪造另一个模型 id 给网关」——hook 的主语是 Claude Code 自己的切换流程。本页只陈述官方事件,不描述改请求头或 originator 去换目录。「headless 里 ask 会弹窗」——changelog 写 headless 上 ask 会拒绝。
开局钩子 vs 切换钩子
SessionStart:会话开始 / resume
适合注入项目规则、检查工作区。2.1.251 起 resume 额外带陈旧度与重缓存估计。它看不到一次中途 /model。
PreModelSwitch:每一次换模型之前
适合「这个仓库不许切到某档」「切换前请确认」「给下一个型号加一句约束」。PostModelSwitch 在切换之后做记录。
官方 hook 怎么挂(观察语义)
升级到 2.1.251+,按 Claude Code hooks 文档注册 PreModelSwitch / PostModelSwitch。changelog 里的动作是 block、confirm、annotate。本页不提供伪造模型 id、改 HTTP 头或绕过组织模型策略的步骤。策略该拦的切换,用官方 deny/exit 2。
QCode 不执行这些 hook
PreModelSwitch 跑在 Claude Code 客户端里。QCode 提供模型 API。切换之后真正打到哪一个在售 id,仍按你发送的 model 字段与上游目录。需要自备 API 时,用已开通的 key 按官方价 × 服务费率调用在售型号。
常见问题
PreModelSwitch 在哪些动作上触发?
公开说明包括 /model、模型选择器、SDK 与 resume 引起的切换。以当前版本 hooks 文档的事件表为准。
block 和 confirm 有何差别?
changelog:deny 取消切换;ask 需确认,headless 则拒绝。annotate 不拦,只加上下文。
和 2.1.251 的 effort 修复是一回事吗?
不是。同版本另一条是 xhigh/max + thinking off 的 400。hook 是事件,effort 是参数组合。
能不能靠 hook 让网关以为我在用另一个客户端?
本页不描述改客户端标识或 originator。hook 观察与约束的是 Claude Code 内部的模型切换。
resume 时的 re-cache cost 是账单吗?
changelog 写的是 estimated re-cache cost,给 hook 做决策。实际扣费仍看 token 与官方价,不是这一个字段单独成账。
QCode 会转发这些 hook 吗?
不会。hook 是客户端生命周期。API 只看到你发出的 Messages / Completions 请求。
信息来源
Claude Code changelog 2.1.251(2026-08-28):Added PreModelSwitch and PostModelSwitch hook events (block, confirm, or annotate a model switch); SessionStart resume hooks now receive session staleness and the estimated re-cache cost。code.claude.com/docs/en/changelog。核对 2026-08-30。
相关阅读
Claude Code hooks 自动化
SessionStart / Stop 等既有事件;本页只补模型切换这一段。
Claude Code 斜杠命令
/model 与选择器是 PreModelSwitch 的触发源之一。
Anthropic Agent Skills
另一条官方扩展面,不要和 hook 事件名混用。
整理自 Claude Code 2.1.251 changelog,不代表未写进文档的 payload 字段。QCode 不执行客户端 hook,也不绕过组织模型策略。