1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Claude Code v2.1.323 解説:未知モデル1M扱い・MCP v1削除・権限穴の修正

1
Posted at

はじめに

Claude Code v2.1.323 は、実験的な Code Mode とプラグインの対応バージョン宣言(engines)を加えた大型リリースです。同時に、Bash 権限チェックやサンドボックスを回避できる穴が多数ふさがれ、設定の見直しが必要になりうる破壊的変更も含まれます。

特に影響が大きいのは次の4点です。

  • 認識できないモデル ID のコンテキスト窓が 200K → 1M 扱いになった
  • MCP v1 クライアントが削除された
  • Bash 許可ルールとサンドボックスのセキュリティ修正
  • サンドボックス・権限判定・プラグイン/mod 仕様の厳格化

📌 影響を受ける人

  • ゲートウェイ(ANTHROPIC_BASE_URL)経由で他社モデルを使っている人
  • .mcp.json や MCP_SDK_GENERATION=v1 を使っている人
  • Bash(ls*) のようなワイルドカード許可ルールを書いている人
  • プラグイン / mod の開発者
  • サンドボックス・worktree・フックを運用しているチーム管理者

変更の全体像

優先度の目安は次のとおりです。

優先度 変更 主な対象
最優先 Bash 権限・サンドボックス修正 全ユーザー
高 未知モデル ID の 1M 扱い ゲートウェイ経由の他社モデル利用者
高 MCP v1 削除・挙動変更 MCP 利用者
高 サンドボックス/権限判定の厳格化 チーム管理者
高 プラグイン/mod の仕様変更 プラグイン開発者

変更内容

1. Bash 権限チェックとサンドボックスの修正(critical)

権限確認を回避できる複数の穴が修正されました。主なものは次のとおりです。

区分 修正内容
ワイルドカード Bash(ls*) のように直結した許可ルールが確認を飛ばす問題。変数名を含むルールは確認するよう変更
ラッパー sudo / env 経由で deny/ask ルールが効かない問題。sudo のフラグをまとめて書いた許可ルールが確認を飛ばす問題
危険な削除 rm を別フォルダ基準で判定し、確認を飛ばす問題
シェル zsh の特定オプション下で確認なしに実行される問題、lsof が確認なしに実行される問題
Windows ワイルドカードや複数ファイルを渡した読み取りコマンドが確認なしに実行される問題。.exe の隣の .cmd/.bat を実行する問題
書き込み保護 .git や .claude への書き込みで「don't ask again」が効かない問題。Read の deny ルールの対象に Write/Edit が書ける問題
サンドボックス sandbox.excludedCommands が対象外のコマンドまでサンドボックス外で実行させる問題、セッション中にサンドボックスが切れる問題、チェックポイントのコピーが読める問題
起動時 --settings が検証に失敗すると claude -p や SDK がサンドボックスなしで実行される問題(起動時に停止するよう変更)
その他 plansDirectory がプロジェクト外に書き込む問題、シンボリックリンク経由でプロジェクト設定を読む問題、巻き戻し(rewind)で権限モードが変わる問題

改善点として、遅い環境でも同じコマンドに同じ判定が出やすくなり、検査と実行で挙動が変わりうるコマンドは確認を求めるようになりました。また、起動時に変数値に * を含む許可ルール(例: Bash(PORT=* npm run dev))を警告します。

💡 Tips
これまで「許可したのに確認が出なかった」コマンドが、今後は確認されるようになる可能性があります。逆に言えば、既存の許可ルールが想定より広く効いていた可能性があるため、見直しの好機です。

2. 未知のモデル ID は 1M コンテキスト扱いに(Breaking)

⚠️ Breaking Change
Claude Code が認識しないモデル ID のコンテキスト窓は、従来の 200K ではなく 1M とみなされます。窓が小さい他社モデルでは、満杯になると /clear するまで毎ターン失敗しうます。

項目 旧 新
未知モデル ID の想定窓 200K 1M
窓が小さい他社モデル 200K 前提で動作 満杯後に毎ターン失敗しうる

対処は次の3つです。

  • 200K のままにしたい: CLAUDE_CODE_DISABLE_1M_CONTEXT=1
  • 早めにコンパクトしたい: /autocompact
  • 他社の小さい窓のモデル: 満杯になる前に CLAUDE_CODE_DISABLE_1M_CONTEXT=1 を設定(推奨)

あわせて、Claude apps gateway の /v1/models が、どの上流でも窓サイズが確定しているモデルについて max_input_tokens を返すようになりました。

3. MCP v1 クライアント削除と挙動変更(Breaking)

⚠️ Breaking Change
v1 MCP クライアントが削除されました。

項目 変更
MCP_SDK_GENERATION=v1 v2 クライアントを互換モードで動かす設定に(ハンドシェイクを早め、OAuth サインインの検査を緩める)
サインイン完了ツール bypass / auto モードでも確認を求める。誰も答えられない場面(dontAsk モードなど)では /mcp を使う
.mcp.json のサーバー承認 サーバー名の完全一致で判定。別の綴りで書かれた承認は再確認
/mcp 表示 入力スキーマを API が拒否して外したツールの数と理由を表示
再サインイン TOKEN_EXPIRED などで終わらず、再サインインを求める

そのほか、再開時に MCP 呼び出しが欠ける問題、削除と再追加後にツールが無いまま切断される問題、SDK ホストがツール一覧に null を送るとヘッドレスセッションが終了する問題などが修正されています。

4. サンドボックスと権限判定の厳格化(Breaking)

⚠️ Breaking Change
サンドボックス、フック、auto モードの判定が安全側に倒れました。

  • シンボリックリンク: 書き込み可能なフォルダ内にあり、別の場所や存在しないパスを指すリンク経由の書き込み許可は無視される(実パスを許可する必要あり)
  • git worktree: git worktree add/move/remove や、セッションが開始していない/与えられていない worktree でのコミットは読み取り専用エラー
  • glab: glab config set(--global/--host なし)と glab config edit --local はサンドボックス内で失敗
  • フック: PreToolUse が allow を返した後に権限チェックがエラーになった場合は、フックが無い場合と同じ判定。PermissionRequest フックが書き換えた入力で失敗した場合は再確認または拒否
  • auto モード: 使えないときは --permission-mode auto でも Manual モードで起動。ANTHROPIC_BASE_URL のゲートウェイ上で名前に「haiku」を含むモデルは、claude-haiku-5-5 を除き auto モードで拒否
  • 保存: 秘密情報らしき文字列を含む許可ルールや、git 追跡中の settings.local.json への保存はセッション限り
  • 確認追加: /security-review とスキル内の git コマンドは実行前に確認。外部から見えるアーティファクトの更新は許可ルールがあっても確認
  • トークン保護: Claude Code 自身の ripgrep と内部 git コマンドは、サインイントークンや API キーの大半を渡さずに実行

5. プラグイン / mod の仕様変更(Breaking)

新機能

  • plugin.json に engines["claude-code"] で対応バージョンを宣言可能。範囲外ではインストール・更新・読み込みしない(インストール/更新では範囲内の最新版を選ぶ)
  • claude plugin validate が TypeScript のフックモジュールを型検査(警告扱い、--strict で失敗)
  • claude plugin install --json に unsetOptionCount を追加
  • mod のペインの props に isPromptCovered を追加

破壊的変更

  • engine.create への *・名前空間・否定のフックは観察専用に。$ 名詞を追加・保留するには engine.create を名前で指定してフックする
  • validate は許可されない書式の engine.create フックを失敗にする(インストール済み mod は引き続き読み込まれる)
  • tool.list フックが追加・削除したツールは、モデルと全エージェントに適用
  • git サブモジュールが記録済みコミットにない場合、インストール失敗
  • 信頼されていないフォルダでは、リポジトリ設定がフックを無効化したりプラグインを切り替えたりできない

非推奨: プラグインの agent 設定は引き続き有効だが、起動時・list・validate で警告。

6. その他の変更

項目 内容
Code Mode(実験的・オプトイン) Claude が JavaScript を書いてツールを呼び出す。利用者が自分でオンにし、組織単位で無効化も可能
環境変数(追加) CLAUDE_CODE_AUTO_MODE_MODEL、CLAUDE_CODE_DISABLE_AGENT_PROGRESS_SUMMARIES、CLAUDE_CODE_RESUME_HINT_COMMAND、CLAUDE_CODE_AUTOMOUNT_ROOTS
環境変数(変更) CLAUDE_CODE_OVERLOADED_RETRY_MAX_DELAY_MS の上限が 64000 → 300000
プロキシ 組織設定・ポリシーのリクエストは ALL_PROXY のみのプロキシを使わない(HTTPS_PROXY を設定)
OpenTelemetry otlp の既定プロトコルが http/protobuf。OTEL_EXPORTER_OTLP_TIMEOUT の上限が 30 秒 → 25 秒
worktree .git がリンクやハードリンクを含むチェックアウト(git-new-workdir、cp -al)では作成を拒否
セッション間メッセージ 入力を待たずに送れる上限が約 20 件 → 100,000 件
subagentStatusLine 削除。キーが残っていてもエラーにはならない
認証 名前付きプロファイルの取り違え、各ゲートウェイでのトークン更新不具合などを多数修正

⚠️ 注意
/logout をバックグラウンドセッションで実行すると、コンピューター上の全セッションからサインアウトし、MCP のログインとプラグインのシークレットを削除します。

影響と対応

対応チェックリスト

  1. 許可ルールの棚卸し: Bash(ls*) や Bash(PORT=* npm run dev) などを、必要最小限の具体的なルールに書き直す
  2. ゲートウェイ利用者: 窓の小さい他社モデルには CLAUDE_CODE_DISABLE_1M_CONTEXT=1 を設定する
  3. MCP 利用者: .mcp.json の承認がサーバー名の完全一致になったため、再確認ダイアログが出た場合は綴りを揃える。サインイン完了ツールは常に確認される
  4. サンドボックス運用者: シンボリックリンク経由の許可を実パスに置き換える。worktree 操作が必要なセッションでは事前の準備を確認する
  5. フック運用者: PreToolUse が allow を返した後に権限チェックが失敗する場合、フックがない場合と同じ判定になることを前提にする
  6. プロキシ環境: ALL_PROXY のみ設定している場合は HTTPS_PROXY も設定する
  7. プラグイン開発者: engines["claude-code"] を宣言し、claude plugin validate --strict で engine.create フックの書式を確認する。agent 設定は移行を検討する
  8. OpenTelemetry 利用者: OTEL_EXPORTER_OTLP_PROTOCOL を明示していない場合は http/protobuf になる点を確認する
  9. worktree 利用者: git-new-workdir や cp -al で作ったコピーは通常の clone に置き換える

💡 Tips
CLAUDE.md には、未知モデルの 1M 扱いと CLAUDE_CODE_DISABLE_1M_CONTEXT=1 の方針、MCP の承認ルール、サンドボックスとフックの運用メモを追記しておくとチームで共有しやすくなります。

コード例

許可ルールの見直し

// Before: 直結ワイルドカードや、変数値に * を含むルール
{
  "permissions": {
    "allow": [
      "Bash(ls*)",
      "Bash(PORT=* npm run dev)"
    ]
  }
}
// After: 対象を具体化(例)
{
  "permissions": {
    "allow": [
      "Bash(ls)",
      "Bash(ls -la)",
      "Bash(PORT=3000 npm run dev)"
    ]
  }
}

他社モデルの 1M 誤認を防ぐ

# 200K のままにする(満杯になる前に設定)
export CLAUDE_CODE_DISABLE_1M_CONTEXT=1

# 早めにコンパクトしたい場合は Claude Code 内で
# /autocompact

MCP v1 指定の扱い

# Before: v1 クライアントが動作
MCP_SDK_GENERATION=v1 claude

# After: v1 クライアントは削除。同じ指定は v2 クライアントの互換モードで動く
MCP_SDK_GENERATION=v1 claude

プロキシ設定

# Before: ALL_PROXY だけで組織設定・ポリシーのリクエストも通っていた
export ALL_PROXY=http://proxy.example.com:8080

# After: HTTPS_PROXY も設定する
export ALL_PROXY=http://proxy.example.com:8080
export HTTPS_PROXY=http://proxy.example.com:8080

プラグインの対応バージョン宣言

engines の書式の詳細は入力データに含まれないため、記述は公式ドキュメントで確認してください。plugin.json に engines["claude-code"] として範囲を指定すると、範囲外のバージョンではインストール・更新・読み込みが行われません。

まとめ

  • v2.1.323 は Bash 権限・サンドボックスの回避穴を多数ふさぐセキュリティ重視のリリース。既存の許可ルールを見直すこと
  • 未知のモデル ID は 1M 扱いになった。ゲートウェイ経由で窓の小さい他社モデルを使う場合は CLAUDE_CODE_DISABLE_1M_CONTEXT=1 を設定する
  • MCP v1 クライアントは削除。.mcp.json の承認は完全一致で判定される
  • サンドボックス(シンボリックリンク、worktree)、フック、auto モードの判定が安全側に変わった
  • プラグイン開発者は engines 宣言と engine.create フックの書式変更、agent 設定の非推奨化に対応する
  • Code Mode は実験的・オプトインで、組織単位での無効化も可能

更新後は、まず許可ルールと環境変数を点検することをおすすめします。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?