Claude Code v2.1.251 — モデル切り替えを検知するフックとセキュリティ修正など71件
Claude Code v2.1.251は71項目の更新です。モデル切り替えを制御する新フック(PreModelSwitch/PostModelSwitch)と、シンボリックリンクを悪用した権限回避などセキュリティ修正が中心です。
Claude Code v2.1.251は71項目の更新です。内訳は新機能5件、修正41件、改善10件、仕様変更14件、削除1件。新機能の中心は、モデルの切り替えをフックで検知できるPreModelSwitchとPostModelSwitchです。修正の多くは、権限チェックの境界をすり抜けられる抜け道を塞ぐものに集まっています。
このリリースで何ができるようになるか
新機能5件のうち、開発フローに直接効くのは3つです。
モデル切替フックが加わった(PreModelSwitch/PostModelSwitch)
PreModelSwitchとPostModelSwitchという2つのフックイベントが追加されました。モデルの切り替えが起きる前後で発火し、切り替えをブロックする、確認を挟む、あるいは注釈を付けて記録するといった処理をフック側から行えます。あわせてSessionStartの再開フックも拡張されました。再開しようとしているセッションがどれだけ古いか(staleness)と、再キャッシュの推定コストを受け取れます。
Claude Codeのフックイベントは、この2つを含めずに数えても30種類を超えます。一覧と設定方法はClaude Code Hooks完全ガイドにまとめています。公式のhooksリファレンスにも両フックの節が追加され、発火条件と入力フィールドが公開されています。PreModelSwitchが発火するのは明示的な切り替えのときだけで、/modelとそのピッカー、Option+P(Alt+P)、/configのModel設定、fast modeのオン(セッションのモデルが変わる場合)、Agent SDK / Remote Controlからのset_model・apply_flag_settingsが対象です。フォールバックやセッション再開時の復元のようにClaude Code自身が起こす切り替えでは発火せず、PostModelSwitchだけが走ります。モデルの切り替えを自前で管理しているチームにとっては、切り替えの瞬間を初めて捕捉できる手段になります。
Remote Controlでサブエージェントの動きがライブに見える
Remote Controlに接続したスマートフォンやブラウザから見える情報が広がりました。メインの会話が結果を待っている状態のサブエージェント、つまりフォアグラウンドで動くサブエージェントは、ツール呼び出しとその結果がリアルタイムでストリーミングされます。既定の動作であるバックグラウンドサブエージェントは、これまでどおりステータス表示にとどまります。
外出先からデスクの続きを確認するとき、サブエージェントが今なにを実行しているかまで追えるようになった形です。
/usageの支出上限バーと/costのプロンプトキャッシュ行
/usageに支出上限(spend limit)バーが加わりました。Claude appsゲートウェイ配下で支出上限が設定されている開発者向けに、rate_limits.spend_limitというステータスラインフィールドも用意されています。
/cost(/usageのエイリアス)には、セッション単位のプロンプトキャッシュ行が加わりました。キャッシュヒット率・ミス回数・再キャッシュされたトークン数・キャッシュのウォーム/コールドを1行で確認できます。
/cost公式ドキュメントに掲載されている表示例は次の形です。
Prompt cache (main): 14 requests · 91% of input tokens from cache · 2 misses (last 6m 10s ago, 310.2k tokens re-cached) · 1 expected rebuild (compaction or tool-result clearing) · warm (1h TTL, last activity 40s ago)対象はメインの会話のみで、サブエージェントの消費は含みません。同じ数値はステータスラインスクリプト向けのprompt_cacheオブジェクトからも取得できます。長時間セッションでキャッシュミスが頻発している状況を、体感ではなく数値で確認できます。
あなたの開発フローはどう変わるか
影響の大きさは利用形態で分かれます。
| 利用形態 | 影響度 | 具体的に変わること |
|---|---|---|
/modelや設定からのモデル切り替えを制御したい開発者 | 影響度明確な恩恵あり | 具体的に変わることPreModelSwitchで切り替えをブロック・確認できる |
| フォールバックや自動復元を記録したい開発者 | 影響度恩恵あり | 具体的に変わること自動の切り替えはPostModelSwitchのみが発火するため、事後の記録や指示の注入に使える |
| Remote Controlで外出先からセッションを見る利用者 | 影響度明確な恩恵あり | 具体的に変わることフォアグラウンドサブエージェントのツール呼び出しがライブで見える |
| 支出上限やプロンプトキャッシュの効率を管理したいチーム | 影響度明確な恩恵あり | 具体的に変わること/usageの支出上限バーと/costのキャッシュ行を直接確認できる |
| シンボリックリンクを含むリポジトリ・プラグイン・共有マシンでClaude Codeを動かす運用 | 影響度明確な恩恵あり | 具体的に変わること権限チェック後のパス差し替えやパストラバーサルを塞ぐ修正が入った |
| managed settingsを配布する組織の管理者 | 影響度条件次第 | 具体的に変わることsandboxのTLS終端・プロキシ経由・資格情報注入系の設定変更に承認が必要になった |
Bash権限で算術式代入(OPTIND=1/0等)を自動承認していた自動化・CI | 影響度条件次第 | 具体的に変わること今後は承認プロンプトが挟まる。無人実行の場合は要確認 |
claude agentsやバックグラウンドセッションを多用する開発者 | 影響度明確な恩恵あり | 具体的に変わることworktree内ファイル編集・トランスクリプト上書きなど複数の不具合が解消 |
| Agent Teamsを使うチーム | 影響度明確な恩恵あり | 具体的に変わることチームメイトの最終回答がリードに届かない不具合が解消 |
| 個人でシンプルにコーディング用途だけに使う利用者 | 影響度ほぼ影響なし | 具体的に変わること直接影響する変更は少ない |
権限チェックの抜け道を塞ぐ修正が集中した
今回もっとも重い意味を持つのは、権限チェックの境界をすり抜けられる抜け道を塞ぐ修正群です。
- ファイルツール(Read・Write・Edit)では、権限チェックが通った後に作業ディレクトリ内のシンボリックリンクが差し替えられると、承認した場所の外を読み書きできてしまう不具合がありました
- GrepとGlobは、シンボリックリンク経由で辿ったファイルに
Read(...)の拒否ルールを適用していませんでした - Workflowツールは、権限チェックが走る前に読み取り範囲外の
scriptPathを読み込み、エラーメッセージにそのパスをそのまま引用していました - プラグインマーケットプレイスのエントリが宣言するコマンドは、プラグインディレクトリの外を指せる状態でしたが、今後はパストラバーサルエラーとして拒否されます
権限チェックそのものの精度も上がりました。整数のシェル変数へ算術式を代入するコマンド(OPTIND=1/0やRANDOM=2+2など)は、これまでBash権限チェックを自動的に通過していましたが、今後は承認を求めます。
サンドボックス内で実行したコマンドの出力ファイルも、作成と読み戻しの方式が変わり、サンドボックス化されたコマンドがファイルをリダイレクトや置き換えで細工できなくなりました。プロジェクト設定から詳細なベータトレーシングや生のAPIボディログを有効化できてしまう不具合も修正されています。下位スコープのベータトレーシングエンドポイントが、managed settingsやホストアプリで固定したOTLPコレクターを迂回できてしまう不具合も解消しました。
いずれも、境界の外にあるはずのものが経路を工夫すると見えたり通過できたりしてしまう、同じ形の穴です。
サーバー管理設定(managed settings)の承認がさらに絞られた
managed settingsまわりにも変更が集中しています。sandboxのTLS終端・プロキシ経由の通信・資格情報の注入・サンドボックス隔離を弱める設定は、適用前に承認が必要になりました。ANTHROPIC_CUSTOM_HEADERSも、managed settingsとプロジェクト設定のどちらから来た場合でも、AuthorizationやHostのような資格情報・組織/テナント・ルーティング・API挙動に関わるヘッダーを設定するときは承認対象です。この環境変数自体の挙動はANTHROPIC_CUSTOM_HEADERSとはで扱っていますが、v2.1.251で承認まわりだけが変わります。
管理者側の体験も改善されました。承認ダイアログは、前回承認した時点から変わった設定だけを列挙するようになっています。セッション途中でdisableAutoModeが配信されても、稼働中のauto modeセッションがdefaultモードへ戻されなかった不具合も解消しました。同じClaude appsゲートウェイへ再サインインしたとき、設定が変わっていないのに承認プロンプトが再表示される不具合も直っています。
managed settingsの全体的な優先順位や配布方法はClaude Code組織管理ガイドにまとめています。
claude agentsとバックグラウンドセッションの安定性
バックグラウンドセッションとそのサブエージェントが、git worktree addで作成したworktree内のファイルを編集できない不具合が直りました。別のClaude Codeプロセスがプラグインマーケットプレイスを更新している最中に起動すると、バックグラウンドセッションが不安定になることがありました。プラグイン由来のSkillを一つも読み込めないまま固定される状態です。この不具合も解消しています。
ディレクトリを変更してセッションを移動させると、同じIDを持つ既存のトランスクリプトが気づかないうちに上書きされる不具合も修正されました。tmux上でSSH経由のバックグラウンドセッションのテキストを選択したときに、tmuxバッファへコピーされない不具合も直っています。emacs -nwやmicroのように/dev/ttyを開くエディタでCtrl+Gを押すと「Emacs quit unexpectedly」で落ちる不具合も修正されています。self-hosted runnerでは、強制停止したセッションのBashツールのプロセスが残り続ける不具合が解消しました。
コマンド面ではclaude --helpにattach・logs・stop・respawn・rmが加わり、--resumeのメッセージがバックグラウンドセッションへ接続する具体的なclaude attach <id>コマンドをそのまま示すようになりました。バックグラウンドセッションの操作方法全般はclaude agents --jsonでバックグラウンドセッションを操作するにまとめています。
Agent Teamsとクロスセッション連携の修正
Agent Teamsでは、チームメイトの最終回答がチームリードに届かず、中身のない「available」通知だけが届く不具合が修正されました。最終回答は今後idle通知の中に入って届きます。バックグラウンドサブエージェントが、名前のない兄弟エージェントや親エージェントからのメッセージに返信できない不具合も直りました。原因は、送信元を表すfromにアドレスとして使えないエージェント種別が入っていたことでした。
Claude Desktopが別セッションから配信したメッセージに返信しようとするとSendMessageが「not reachable」で失敗していた不具合も修正され、Claude Desktop経由で正しく配信されるようになっています。
主な変更点
認証・サインイン・ゲートウェイ
- Claude appsゲートウェイのセッションが、保存済みのAnthropicプロファイル(Consoleサインイン等)を有効とみなし、
/statusに表示したりゲートウェイの401リトライに使おうとしていた不具合を修正(実際のリクエストでは使われない) - クラウドセッションが、ホスト側がセッションの初期モデルを設定しただけなのに「モデルが変更された」とClaudeに伝えていた不具合を修正
- 組織のポリシーでRemote Controlが無効化されている場合にエラー扱いで報告していたのを、静かな通知1本に変更
- バックグラウンド化したセッション(
←・/background・--bg)がシェルでエクスポートしたVertex/Bedrockゲートウェイ設定(ANTHROPIC_*_BASE_URLとCLAUDE_CODE_SKIP_*_AUTH)を失い、全リクエストが失敗していた不具合を修正 - Maxプランで
claude --bg --model fableを使うと、対話セッション側にはまだFableの割り当てが残っているのに利用クレジットを求めて停止していた不具合を修正 - クラウドセッション作成時、GitHub接続の一時的な失敗後に毎回GitHubセットアップを勧めていたのを、再試行を勧めるメッセージに変更
- 新規インストール直後の初回起動が、アカウントの既定がauto modeであってもdefaultモードで始まっていた不具合を修正
- Opus 5でeffortが
xhighまたはmaxかつ思考(thinking)を無効にしたリクエストが「effort … is not supported when thinking is disabled」で失敗していた不具合を修正。この場合はeffortがhighとして送信される - 「1Mコンテキストへの切り替え」を勧めるヒントが、現在のOpusモデルがすでに1Mコンテキストのときにも表示されていた不具合を修正
- 組織の管理者が利用クレジット上限を$0に設定しているTeam・Enterpriseメンバーが
/usage-creditsを実行すると、「上限に達した」ではなく管理者へ依頼する案内が出るよう修正
MCPとフックの細かい修正
- Remote Controlで
/mcp reconnectを実行したとき、別セッションでサーバーが無効化されている場合に実際の対処法ではなく汎用的な非開示エラーを表示していた不具合を修正 claude mcp add --headerとclaude mcp add-jsonのヘルプテキストが、対応するトランスポートの種類を誤って案内していた不具合を修正- MCPサーバーメニューのコピー機能が、結果に関わらず常に成功したと表示していた不具合を修正。サインインURLがどうコピーされたかを示すよう変更
--input-format stream-jsonで、クライアントが注入したメッセージIDなしのアシスタントツール呼び出しが最初の呼び出しへマージされ、結果が失われていた不具合を修正(古いセッションの--resume時も含む)- SDK MCPサーバーのハンドシェイク応答が失われたとき、SDKとクラウドセッションが無期限にハングしていた不具合を修正。70秒でタイムアウトし、失敗したサーバーだけを切り離すようになった
表示・キーボード・その他の不具合
- 思考のみを出力したターンの後、「text content blocks must be non-empty」エラーで会話が止まる不具合を修正
- 並列サブエージェントを多数動かすとTUIにラグが出ていた問題を修正。1秒ごとの進捗表示が積み上がらず、直前の表示を置き換えるようになった
- GNU screenと、
screenターミナルタイプを使うtmuxセッションで、イタリック体(セッション再開時の要約行など)がハイライトブロックとして描画されていた不具合を修正 - 追加ディレクトリ(
additionalDirectories)にヌルバイトを含む項目があると起動がクラッシュしたり、SDKホスト・IDE・フック経由の場合は/add-dirとその後の設定更新が壊れていた不具合を修正。該当項目は今後スキップされる claude ultrareviewと/ultrareviewが、クラウドセッションの起動に失敗した場合でも30分間待ち続けていた不具合を修正。今後は早期に停止して理由を報告する--worktree --tmuxで、gitlab.com起点のマージリクエスト番号を指定すると、まずGitHub形式の取得を試みてから失敗していた不具合を修正。GitLabの参照を直接取得するようになった- 無人セッション(agent-teamのチームメイトペイン等)で「auto modeを既定にする」というワンタイムの案内が表示され、意図しないキー入力で承諾されてしまうことがあった不具合を修正
/bug・/shareが無効化されている環境で「/feedbackが無効です」と誤って表示していた不具合を修正。組織ポリシーや環境変数で/feedbackを無効にしている場合、tips・/help・拒否メッセージがそれを勧めなくなった
仕様変更
/radioがBedrock・Vertex AI・Foundry・Claude Platform on AWS、およびテレメトリー無効時にも使えるよう変更- Claude in Chromeのブラウザ操作が、テレメトリー無効化セッションを含めて常にClaude Codeの権限チェックを通るよう変更(これまではChrome拡張機能自体のプロンプトを使っていた)
CLAUDE_CODE_SUBAGENT_MODELが、すべてを上書きするのではなくサブエージェントの既定モデルを設定するだけに変更。エージェント定義のmodel:と、個別起動時に明示したモデルが優先される- コミットの署名(commit trailer)の既定値が、認識されたClaudeモデルでない場合(カスタム
ANTHROPIC_BASE_URL経由のサードパーティモデル等)はCo-Authored-By: Claude Codeに変更 - 座席制のEnterpriseサブスクリプションの既定モデルが、他のプレミアムプランと同じくOpus 5に変更
/effortが効果レベルをモデルごとに保存するよう変更。モデルを切り替えても、それぞれのモデルが自分の設定を保持する- アナリティクスが、managed settingsでゲートウェイサインインが強制されている(または読み込めない)ことだけを理由にサインイン前で無効化されなくなった。ゲートウェイへのサインイン後、または
DISABLE_TELEMETRY経由でのみ無効化される - Bedrock・Vertex・Foundry、テレメトリー無効時のフッターPRバッジが、
gh pr viewではなくgh auth token・GH_TOKEN・GITHUB_TOKEN経由でGitHub APIを直接呼ぶよう変更 - プラグイン・LSPのインストール提案とauto modeの既定化オファーが、入力中の文字列を送信または消去するまで待つよう変更。Enterキーで意図せず提案に答えてしまうことがなくなった
- プロジェクトレベルの
.claude/settings.jsonのenvが、CLAUDE_CONFIG_DIR・CLAUDE_CODE_TMPDIR・TMPDIR/TMP/TEMPを設定しなくなった。これらはシェル・ユーザー設定・managed settingsで設定する
削除
- 使用頻度の低い6言語(1c・gml・isbl・mathematica・maxima・sqf)のシンタックスハイライトを削除。ネイティブバイナリは2.5MB小さくなった
改善
- UIの再描画を減らし、ターン中のCPU使用率を下げた
- ネイティブバイナリが約5MB小さくなった
- クラウドセッションでBashコマンド実行中にネットワークプロキシが接続を切断すると、単なる「connection reset」ではなくホスト名と理由を含む結果が返るようになった
/scheduleが、Claude Codeで設定したMCPサーバーはクラウドのルーティンに接続できない旨を説明するようになった(従来は素っ気ない「No MCP connectors」のみ)- サブエージェントからのメッセージで、送信元がこのセッション内のワーカーであるとClaudeに伝わるようになり、無関係な別セッションと誤認しにくくなった
- サブエージェントパネルや
/tasksから開いたバックグラウンドサブエージェント・forkのトランスクリプトで、入力欄のプレースホルダーが「Message @name…」に変わった - MCPサーバー名のサニタイズをエラーメッセージ・メニュー・コマンド結果全体で改善した
CLAUDE_CODE_PROVIDER_MANAGED_BY_HOST(Claude Desktop等)配下のAmazon Bedrockセッションが、BedrockのモデルIDやARNを渡された場合にinference-profileの探索を待たなくなった- managed settingsの承認ダイアログが、前回承認した時点から変わった設定だけを列挙するようになった
- モデルのツール呼び出しが壊れている場合のリトライが改善され、壊れた出力はBedrock・Vertex・Foundryを含めてリトライの文脈から除外される
VSCode
- サインイン画面の「Bedrock, Foundry, or Vertex」ボタンが、サードパーティプロバイダーの設定セクションではなくドキュメントの先頭を開いていた不具合を修正
- Remote Controlのバナー表示を、フッターのピル(Remote Controlが有効または失敗しているときに表示)に変更。オン/オフは
/remote-controlで切り替える
シンボリックリンク修正群はv2.1.248が引いた信頼境界線を継ぐ動き
番号上直前のv2.1.250は、公開された内容が「Bug fixes and reliability improvements」の1行だけの回でした。新機能が入った直前のリリースはv2.1.248で、コマンド実行とWebFetchを封じる--restrictedフラグを追加し、評価ハーネスや共有マシンでClaudeが動ける範囲を利用者が選べるようにしました。
v2.1.251はその続きを、利用者が選ぶオプションではなく土台の側でやっています。シンボリックリンクの差し替え、プラグインのパストラバーサル、権限チェック前のパス読み取り、算術式代入の自動承認。これらはどれも--restrictedを使っていなくても存在した抜け道でした。v2.1.248が「何をどこまでやらせるか」を選べるようにしたのだとすれば、v2.1.251は選んだ範囲の外側に残っていた抜け道を塞ぎました。
managed settingsの承認対象拡大も同じ向きです。sandboxのTLS終端やプロキシ経由の設定、ANTHROPIC_CUSTOM_HEADERSまで、境界を弱める変更ほど承認を求めるようになりました。
| バージョン | 項目数 | 性格 |
|---|---|---|
| v2.1.247 | 項目数33 | 性格SendFeedback追加とエラー可視化の修正群 |
| v2.1.248 | 項目数49 | 性格--restrictedと信頼境界まわりの整備 |
| v2.1.250 | 項目数非公開 | 性格不具合修正のみの短い1行 |
| v2.1.251 | 項目数71 | 性格権限チェックの抜け道を塞ぐ修正とモデル切替フック(本記事) |
土台を整えるリリースのあとに、新しい選択肢を増やすリリースが来る、という交互のパターンがここでも繰り返されています。
まとめ
Claude Code v2.1.251は71項目の更新です。新機能5件の内訳は次のとおりです。
PreModelSwitch・PostModelSwitch(モデル切替フック)- Remote Controlでのフォアグラウンドサブエージェントのライブストリーミング
/usageの支出上限バー/costのプロンプトキャッシュ行claude --helpへのattach・logs・stop・respawn・rm追加
修正41件のうち、権限チェックの抜け道を塞ぐものが大きな比重を占めます。改善10件・仕様変更14件・削除1件を合わせても、公開されたCVEや強制的なbreaking changeは含まれません。
モデルの切り替えをフックで管理したい開発者、共有マシンやプラグインを扱う環境、claude agentsでバックグラウンドセッションを多用する開発者には、直接効く変更が集まっています。個人でシンプルにコーディングだけに使っている場合は、通常の更新サイクルで取り込めば十分です。
関連ガイド
このバージョン単体の位置づけや前後の版とのつながりは、Claude Code完全ガイドでまとめて確認できます。
関連する記事
Claude Code をもっと見る →Claude Code(クロードコード)とは — できること・料金・使い方・CLIから8つの拡張機構まで
Claude Code v2.1.248 — コマンド実行を封じる制限モードなど49件
Claude Code v2.1.247 — SendFeedbackツールの追加とエラー可視化の修正など33件
Claude Code v2.1.243 — 契約単価をコストに反映する設定とキーレスサインインなど60項目
Claude Code v2.1.235 — プロンプト入力のスペルチェック追加を含む19項目の更新
Claude Code v2.1.133 — ワークツリーのベース選択機能と、Hooks/Bashでのeffort連携