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 ヘッダを書き換えて別クライアントを装う手順ではない。
引用できる 4 点
切替前のイベント名
changelog は PostModelSwitch と対にする。/model、ピッカー、SDK、resume による切替の前に走る。
公式の 3 動作
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 だけでは途中の /model が見えない
既存の 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 をゲートウェイに偽造」——主語は Claude Code 自身の切替。公式イベントだけ述べ、ヘッダや originator の書き換えは書かない。「headless で ask が窓を出す」——changelog は headless では拒否と書く。
開始フック 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 で公式価格 × サービス料。
FAQ
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 を実行せず、組織のモデル方針も迂回しない。