Claude Code v2.1.323 — Code Modeの追加と、確認が抜ける経路をふさぐ修正
Claude Code v2.1.323は実験機能のCode Modeを加え、plugin.jsonにenginesを導入しました。Bashの許可ルールやサンドボックスで確認が抜けていた経路をふさぐ修正が並びます。
このリリースで何ができるようになるか
Claude Code v2.1.323の主な新機能は、実験的なCode Modeと、plugin.json のバージョン範囲宣言(engines)です。changelogの項目は294件ありますが、大半は修正と挙動の変更です。その中心は、確認が出ないまま通っていたBashやサンドボックスの経路を締める修正になります。
v2.1.323で影響が大きい3つの変更
Code Modeが実験的なオプトインで加わった
自分で有効にするオプトイン方式で、まだ実験段階です。
プラグインが対応するClaude Codeの範囲を宣言できる
plugin.jsonにengines["claude-code"]を書くと、範囲外のプラグインはインストールも更新も読み込みもされません。範囲に収まる最新版が選ばれます。許可ルールとサンドボックスの抜け道が複数ふさがれた
Bash(ls*)のような許可ルール、sudoやenvを挟んだ拒否ルール、rmの判定フォルダーなど、プロンプトが出ないまま通っていたケースが並びます。
もう一つ見落としやすいのが、既定値の変更です。Claude Codeが知らないモデルIDのコンテキストウィンドウは200Kから1Mに変わり、ALL_PROXY だけで組織設定を取りに行く経路は無くなりました。自動実行の環境では、これらが先に効きます。
あなたの開発フローはどう変わるか
Code Modeを有効にするとき
有効化の方法と、組織で無効にする方法は、changelogが案内する /docs/en/code-mode にあります。
enginesを書くプラグイン配布者
engines["claude-code"] を書くと、インストールと更新では範囲に収まる最新版が選ばれます。プラグインのリファレンスの plugin.json 節には、範囲の書式がまだ載っていません。
検証コマンドも強化されました。TypeScriptで書いたフックのモジュールが型チェックされ、指摘は1件ずつ警告になります。--strict を付ければ、その警告で失敗します。
claude plugin validate ./my-plugin --strictCIにこの1行を置いているなら、v2.1.323以降は型の警告でも赤くなります。modの engine.create フックが決められた1つの書き方になっていない場合も、validateは失敗するようになりました。インストール済みのmodはそのまま読み込まれます。claude plugin validate でMCP設定の取りこぼしを見つける使い方は、claude plugin validateでMCP設定の取りこぼしを見つけるにあります。
自動実行(claude -p・SDK)を回しているとき
--settings に渡したファイルがJSONとして不正で、かつ sandbox キーを含む場合、起動が止まるようになりました。サンドボックスを切る設定であっても同じです。以前は検証に失敗した設定のままBashが非サンドボックスで動くケースがあり、その穴をふさぐ変更です。
claude -p はテキスト出力のとき、設定が要求したモデルをブロックしていると、別のモデルで動いたことをstderrに警告します。deniedModels と availableModels に関する注記は、毎回の実行では出なくなりました。/status と claude doctor には残ります。
長いフックを待つ間は、30秒ごとに進捗の心拍が送られます。Claude Desktopのようなホストが、ターンを固まったものとして打ち切らないための仕組みです。ホスト側がこのバージョンを取り込んでから効きます。
ゲートウェイやサードパーティのモデルを使うとき
認識できないモデルIDのコンテキストウィンドウを、200Kではなく1Mとみなすようになりました。コンテキストウィンドウが小さいモデルでは、満杯になると /clear するまで毎ターン失敗することがあります。心当たりがあれば、満杯になる前に次の1行を入れておきます。
export CLAUDE_CODE_DISABLE_1M_CONTEXT=1
claudeモデル設定のドキュメントによると、この変数を立てると200Kに固定され、自動圧縮が200Kの境界で働きます。早めに圧縮したいだけなら、/autocompact が使えます。
サンドボックスを使っているとき
macOSとLinuxのサンドボックスでは、git worktree add・move・remove が読み取り専用で失敗します。セッションを始めたworktree、または明示的に渡したworktree以外でのコミットも同じです。プロジェクトの中にあるworktreeでも例外ではありません。worktreeを自動で作らせている運用では、作成がサンドボックスの外で行われる構成でないと失敗します。
macOS・Linux・WSLのサンドボックスでは、書き込み権限がsymlink経由で付いている場合も変わりました。書き込み可能なフォルダー内のsymlinkが別の場所や存在しないパスを指していると、その権限は無視されます。実体のパスを許可してください。
利用形態別の影響
| 利用形態 | 影響 | 見る項目 |
|---|---|---|
| 対話で使う個人 | 影響条件次第 | 見る項目許可ルールの書き方、/security-review の確認 |
| プラグイン配布者 | 影響明確な恩恵あり | 見る項目engines、claude plugin validate |
CIで claude -p を回すチーム | 影響条件次第(失敗が早くなる) | 見る項目--settings の検証、ALL_PROXY |
| ゲートウェイ経由の他社モデル | 影響条件次第(満杯時に失敗しうる) | 見る項目コンテキストウィンドウの既定1M |
| 複数セッションを自動で連携させる環境 | 影響ほぼ影響なし(上限が上がる側) | 見る項目メッセージ上限20から100,000へ |
| サンドボックスでworktreeを使う環境 | 影響条件次第(失敗が早くなる) | 見る項目git worktree add・move・remove |
| VS Code利用者 | 影響ほぼ影響なし(信頼済みフォルダーのみなら) | 見る項目未信頼フォルダーでの信頼確認 |
主な変更点
Code Modeとプラグイン
- Code Modeを追加。実験的なオプトインで、ClaudeがJavaScriptを書いてツールを呼ぶ
plugin.jsonにengines["claude-code"]を追加。範囲外のプラグインはインストール・更新・読み込みの対象外で、インストールと更新は範囲に収まる最新版を選ぶclaude plugin validateがフックのモジュールを型チェックし、modのengine.createフックが足す・外す・置き換える$で始まる名前($名詞)も検査する。決められた1つの書き方になっていないmodは失敗するが、インストール済みのmodは読み込まれ続けるclaude plugin install --jsonの結果にunsetOptionCountを追加。userConfigのうち未設定の数が分かる- プラグインの
agent設定を非推奨に。動作は変わらず、起動時とclaude plugin list・claude plugin validateで警告が出る - マーケットプレイスとプラグインのインストールは、gitのサブモジュールがリポジトリの記録したコミットに合っていないと失敗する
- インストールコマンドがstderrに書いた場合、成功ではなく警告として表示される
npm・pip・uv・cargo・github・ghという名前のマーケットプレイスを、予約名として拒否しなくなったenabledPluginsにバージョン一覧を書いたプラグインが、理由なしに無効のままになることはなくなった。/pluginとclaude plugin listが理由を表示する- プラグインの言語サーバーが起動できないときの警告を追加。サーバー名と確認先が出る
- Perforceの設定があるのに
CLAUDE_CODE_PERFORCE_MODEがオフのとき、起動時に1度だけ通知する - modの
tool.checkフックの権限プロンプトは、問い合わせたプラグインだけを挙げる。以前はそのツールにフックした全プラグインが並んでいた *・名前空間・否定のフックをengine.createに付けても、観察するだけに変わった。$名詞を足す・外すときは名前を指定してフックする
権限とサンドボックス
確認が出ないまま通っていた経路の修正が中心です。
- 「今後は聞かない」を、
.gitや.claudeのような機密パスへの書き込みコマンドに出さない。保存しても次のプロンプトを止められなかったため - 秘密情報らしき文字列を含む許可ルールと、gitが追跡する
settings.local.jsonに保存されるルールは、「今後は聞かない」を選んでもそのセッションだけ有効で、保存されない - 一部の
lsofは、確認なしでは動かなくなった - 危険な削除の確認は、
rmを別フォルダーで判定して飛ばすことがなくなった。バイパスモードとBash許可ルールの両方が対象 Bash(ls*)のように*が直付けされた許可ルールが、場合によって確認を飛ばした問題を修正。変数名を指すBash(NODE_ENV*)は確認が出るsudoやenvなどのラッパー越しでも、Bashの拒否ルール・確認ルールが効く。sudoのフラグを組み合わせた許可ルールが確認を飛ばす問題も修正sandbox.excludedCommandsに名前のないコマンドは、サンドボックスの外で動かないReadの拒否ルールが付いたパスには、WriteツールとEditツールも書けない- zshで一部の非既定シェルオプションを設定していると、確認なしでBashが動く場合があった。いまは確認が出る
- 実行中にBashのサンドボックスが切れる場合があった問題を修正。旧形式の設定ファイルを使うインストールで、Claude Code自身の設定が守られていなかった問題も修正
- サンドボックス内のコマンドは、設定ディレクトリ下のファイルチェックポイントのコピーを読めなくなった
--permission-mode autoかdefaultMode: autoが、auto modeを使えないときに、より広く許す側のモードで始まる問題を修正。いまはManualで始まり、先に確認するplansDirectoryを設定したとき、プロジェクト内に収まると示せない書き込みは拒否される。以前はプランのファイルがプロジェクト外に書かれる場合があった- ゲートウェイ(
ANTHROPIC_BASE_URL)越しのauto modeで、名前にhaikuを含むモデルは、claude-haiku-5-5以外は拒否される。Haiku 4.5と同じ扱い PreToolUseフックが「allow」を返した後で、ツールの権限チェックがエラーで失敗したときは、フックの答えが無かったものとして判定する。PermissionRequestフックが書き換えた入力でチェックが失敗したときは、再度確認し、答える相手がいなければ拒否する/security-reviewは、Claudeが実行する前に確認する。スキルのインラインgitコマンドは、bare repositoryのworktreeなどでは許可するまで止まる(auto modeとバイパスモード以外では)- プロジェクトの
.mcp.jsonのMCPサーバー承認は、サーバー名の完全一致で照合する。別の綴りで書かれた承認項目は、再び確認される - 起動時に、
Bash(PORT=* npm run dev)のように変数の値に*を含むBash許可ルールを警告する
サインインとバックグラウンドセッション
別のサインインへ会話が移ってしまう問題が複数まとまっています。
- 名前付きAnthropicプロファイルのセッションを
/fork・左矢印・--bgでバックグラウンドへ引き継ぐと、別のサインインに移る問題を修正。更新時に開いていたセッションは開き直す必要がある - プロファイルが無い・変わった・上書きされたバックグラウンドセッションは、別のサインインで会話を送らず、止まって理由を表示する
- シェルのAPIキー・認証トークン・ワークロードIDで動くセッション(セットアップトークンを除く)も、同様に移らず止まる
- バックグラウンドセッションのサインインが、前のアカウントの資格情報を残さず消す。コンピューター上の全セッションが対象で、拒否されたサインインではログインが残らない場合もある
- バックグラウンドセッションでの
/logoutは、これまで何も起きなかった。いまはコンピューター上の全セッションをサインアウトし、保存済みのMCPログインとプラグインの秘密情報を消して、そのセッションを終える claude -pの警告が、claude auth logoutで保存済みMCPサーバーのログインとプラグインの秘密情報も消えると説明するようになった- MCPのツール呼び出しが、サインイン用サーバーのエラー(
TOKEN_EXPIREDなど)で終わらず、再サインインを求めるようになった - 期限切れのclaude.aiログインで「Credit balance too low」と出ていた問題を修正。クレジットのない保存済みConsoleキーや
ant auth loginのプロファイルが使われていたのが原因 - macOSで、keychainの応答が遅いと、
/loginの直後に「Not logged in」が戻る問題を修正
モデル、コンテキストウィンドウ、使用量
- 認識できないモデルIDのコンテキストウィンドウを200Kから1Mに変更。早めに圧縮するには
/autocompact、200Kに固定するにはCLAUDE_CODE_DISABLE_1M_CONTEXT=1 - 他社モデルでコンテキストウィンドウが小さい場合、満杯になると
/clearまで毎ターン失敗することがあるため、満杯になる前に同じ変数を設定する - モデルが使用量クレジットを必要とするのにクレジットが切れている・オフのとき、止める・クレジットに切り替える・アップグレードの選択肢を出す
- Fableの週次上限で、リセット時刻と選択メニューが出なかった問題を修正。
-p・SDK・IDE・クラウドでは、上限メッセージにリセット時刻と続け方が入る - Fableの週次上限を超えたあと、「Now using usage credits」の通知が、名前付けのような小さなモデルへの要求で重複したり、出なかったりする問題を修正
/usageが、セットアップトークンとCLAUDE_CODE_OAUTH_TOKENで制限バーを隠す問題を修正。セッションと週次のバーを残し、他が無い理由を表示するCLAUDE_CODE_OVERLOADED_RETRY_MAX_DELAY_MSの上限を64000から300000に引き上げ
Remote Control、クラウドセッション、Claude Code on the web
claude remote-controlが、4時間以上空けて同じフォルダーで再起動すると新しいコンピューターとして再接続する問題を修正。いまは最大30日、同じ識別を保つ- Wi-Fiの切り替えやVPNの再接続の後で、セッションが1分以上「切断」と表示される問題を修正
- 使用量クレジットを使うかの質問が、Claudeアプリにも表示される
- ターミナルでしか答えられない権限プロンプトの待ち中に、実行中と表示される問題を修正
DISABLE_TELEMETRYかDO_NOT_TRACKを設定していると、他のデバイスや通知に権限の内容が出なかった問題を修正- Claude Code on the webには、スケジュールタスクの失敗通知、リポジトリを選ばない選択肢(セルフホスト環境)、GitHub Enterprise Serverのリンクの修正などが入った
モデル以外の設定、OpenTelemetry、ヘッドレス
CLAUDE_CODE_AUTO_MODE_MODELが、サードパーティプロバイダー上のClaude Desktopセッションの管理設定で使える。Desktop側がこのバージョンを取り込んでから有効subagentStatusLine設定を削除。サブエージェントの行は常に既定の表示になり、キーが残った設定ファイルもそのまま読み込まれるCLAUDE_CODE_DISABLE_AGENT_PROGRESS_SUMMARIESを1にすると、サブエージェントの進捗要約と、それを書く要求が止まるCLAUDE_CODE_RESUME_HINT_COMMANDで、Claude Codeを起動するプログラムが、終了時のヒントに自分の再開コマンドを出せる- 組織設定とポリシーの要求は、
ALL_PROXYだけで設定したプロキシを使わなくなった。必要ならHTTPS_PROXYを設定する - OpenTelemetryは、
otlpエクスポーターにエンドポイントがあってOTEL_EXPORTER_OTLP_PROTOCOLが無いとき、http/protobufを使う。コレクターまでの待ち時間は、プロキシ経由で25秒まで許容される。OTEL_EXPORTER_OTLP_TIMEOUTで許される上限も、30秒から25秒に下がった - 不正な
OTEL_RESOURCE_ATTRIBUTESの項目が1つあっても、他の属性が落ちなくなった。/statusが外した項目を表示する - 自己ホスト型ランナーで、作業指示が置き換えられて不要になったon-demandランナーの終了コードを、1に戻した(v2.1.321とv2.1.322では0だった)
- Claude Code自身のripgrepと内部のgitコマンドは、サインイントークンとAPIキーの大半を持たずに動く。そのため、gitの資格情報ヘルパーやフックが、それらを見つけられなくなった
.docxを、Artifactツールのアセットアップロードに追加MCP_SDK_GENERATION=v1は、v1のMCPクライアントが削除されたため、v2クライアントの互換モードで動く- Windowsでは、
git.exeと同じPATHのフォルダーにあるgit.cmdのような.cmd・.batラッパーを実行せず、.exeを実行する - 複数のセッションが、同じコンピューター上の他のセッションへ、ユーザーのプロンプトなしで送れるメッセージ数の上限を、約20から100,000に変更
VS Codeでは、まだ信頼していないフォルダーでの最初のセッションの前に、Claude Codeの信頼確認が出ます。断ると、そのフォルダーの設定とMCPサーバーは使われません。--trust-workspace false の自己ホスト型ランナーと、未信頼フォルダーのVS Codeでは、リポジトリの設定でフックを無効にしたり、プラグインを切り替えたりもできなくなりました。実行中のBashまたはPowerShellコマンドの出力も、コマンドのカードの下にそのまま出ます。
Claude Tagでは、Slackで始めたセッションがEnterpriseプランのCompliance APIに載るようになりました(ベータ)。Code Reviewの管理設定には、リポジトリ別のレビュー費用を月・週・日単位でCSVに書き出すボタンが付きました。
Bashの許可ルールは、書いた範囲より広く通さない方向へ寄った
権限まわりの修正を並べると、共通点は一つです。どれも、確認が出るはずの場面で出ていませんでした。lsof、別フォルダーの rm、sudo を挟んだ拒否ルール、zshのシェルオプション。入り口はそれぞれ違いますが、結果は確認の抜けです。
許可ルールの書き方にも、同じ向きの変更が及んでいます。変数名を指す Bash(NODE_ENV*) は、確認が出るようになりました。起動時には、値に * を含む Bash(PORT=* npm run dev) の警告も出ます。手元のルールが書いた範囲どおりに通っているかを見直す材料になります。
権限のドキュメントには、Bash(ls *) と Bash(ls*) の違いが表で載っています。
スペースの有無で、どこまで通るかが変わる
Bash(ls *)
ls -la と ls に一致します。lsof には一致しません。
Bash(ls*)
ls -la と lsof に一致します。広く通すルールなので、意図があるときに書きます。
これは仕様どおりの動きで、v2.1.323で変わったわけではありません。今回の修正は、直付けのワイルドカードが「場合によって」確認を飛ばしていた部分に当たります。専用の解説はClaude Codeの警告「wildcard before the rest」とBash許可ルールの直し方にあります。
もう一点、自動化のチームにとって効くのは、プロンプトが増える側の変更です。これまで黙って通っていた経路が、確認を求めるようになります。バイパスやauto modeの外で、スクリプトから長時間回しているセッションは、止まって初めて気づくことになりがちです。前のバージョンで通っていたからといって、同じ許可ルールが同じように通るとは限りません。
このリリースの項目は、「何を足したか」より「何をこれまで通していたか」の一覧として読むほうが、役に立ちます。
直近のリリースとの接点
v2.1.323の項目に出てくるバージョン
- v2.1.302CLAUDE_CODE_AUTO_MODE_MODELが使える
auto modeの分類器モデルを選ぶ環境変数。v2.1.323でDesktopのサードパーティプロバイダー向け管理設定にも対応
- v2.1.318サブエージェントの進捗要約を止められる
CLAUDE_CODE_DISABLE_AGENT_PROGRESS_SUMMARIESはv2.1.318から使える環境変数。v2.1.323の追加項目に入った - v2.1.321 / v2.1.322不要になったon-demandランナーの終了コードが0に
作業指示が置き換えられたケースだけ、v2.1.323で1に戻る。v2.1.321の変更はClaude Code v2.1.321にあります
- v2.1.323Code Modeとengines
実験的なCode Modeと、
plugin.jsonのバージョン範囲宣言
モデルを選ぶ環境変数の細部は、CLAUDE_CODE_AUTO_MODE_MODELでauto modeの分類器モデルを選ぶに、Perforceの起動時通知はClaude CodeのPerforce p4 edit対応にまとまっています。
まとめ
実験機能に手を出す予定のない環境では、v2.1.323の影響は「確認が増える」「失敗が早くなる」の2方向に出ます。--settings の検証、ALL_PROXY、.mcp.json の承認、サンドボックス内のworktree操作の4点は、自動実行の環境で挙動が変わりやすい箇所です。
プラグインを配る側は、engines を書くかどうかを決めることになります。判断の軸は、対応範囲外の環境にプラグインを入れさせたいかどうかです。
関連ガイド
このバージョン単体の位置づけや前後の版とのつながりは、Claude Codeの基礎ガイドでまとめて確認できます。
参照した一次ソース
この記事の記述は、次の一次ソースと照合しています。更新時に参照先が変わった場合は一覧も更新します。