Claude Code v2.1.289 の主要アップデート - sandbox auto-allow 時の Bash deny ルール修正と agent.spawn の teammate 対応

Claude Code v2.1.289 の主要アップデート - sandbox auto-allow 時の Bash deny ルール修正と agent.spawn の teammate 対応

Claude Code v2.1.289がリリースされました。セキュリティ修正5件を含む27件の変更が入り、特にsandboxのauto-allow時のBash deny ルール適用問題が修正されています。本記事では変更点を整理したうえで、実際に環境変数プレフィックス付きコマンドがdeny ルールで止まるかを試してみました。
2026.10.05

クラウド事業統括本部の石川です。Claude Code の v2.1.289(2026-10-03 公開)がリリースされました。本記事では変更点を整理したうえで、sandbox の auto-allow 有効時に Bash の deny ルールが適用されるかを実際に試します。

前回のアップデート記事はこちらです。

https://dev.classmethod.jp/articles/20261003-cc-updates-v2-1-288/

アップデートサマリー

v2.1.289 では 27 件の変更が入りました。内訳は新機能 1 件、セキュリティ修正 5 件、不具合修正 19 件、改善 2 件です。不具合修正 19 件のうち 15 件は mods とプラグインに関するもので、セキュリティ修正 5 件はいずれも権限ルールまたは組織管理の設定に関わります。

注目のアップデート

mods の agent.spawn が agent team の teammate に対応(新機能)

mod(Claude Code 内でコードを動かすプラグイン)向けに、次の 3 点が追加されました。

  • agent team の teammate が起動するときにも agent.spawn イベントが発火する
  • プラグインの hook イベント間で agent id が統一される
  • $.agent.list() に idle と waiting の状態が加わる

公式ドキュメントの Mods reference によると、agent.spawn は subagent または teammate が起動する直前に発火するイベントで、hook からモデルを指定したり、起動を拒否したりできます。teammate の場合は e.isTeammate が true になります。

agent team の teammate ごとにモデルを選んだり起動を止めたりする mod を書きたい方にとって、teammate の起動も agent.spawn で扱えるようになった点が使いどころになると感じます。

短いコードブロックでのターミナルのフリーズを修正(不具合解消)

閉じていない <script> タグを多数含む短いコードブロック、または深くネストした ${ 置換を含む短いコードブロックで、ターミナルがフリーズする問題が修正されました。あわせて、閉じていない <script> タグを多数含む短いコードブロックがあると、公開した artifact ページが閲覧者のブラウザタブをフリーズ・クラッシュさせる問題も修正されています。

閉じていない <script> タグを多数含む短いコードブロックや、深くネストした ${ 置換を含むコードを扱う方は、応答の表示中にターミナルが止まる事象に遭遇しにくくなると見ています。

sandbox の auto-allow 時に Bash の deny / ask ルールが適用されない問題を修正(セキュリティ)

sandbox の auto-allow 有効時に、次の 2 つのケースで Bash の deny / ask ルールが適用されていなかった問題が修正されました。

  • 値が展開される環境変数プレフィックスを前置したコマンド(例: TZ="$HOME" rm -rf build)
  • コマンドの前に単独の変数代入があるコマンド

公式ドキュメントの sandbox のページでは、auto-allow モードでも明示的な deny ルールは常に適用されると説明されています。今回の 2 件は、この説明どおりに動いていなかったケースの修正です。

sandbox の auto-allow を有効にしたうえで deny ルールで特定のコマンドを止めている方は、早めにアップデートしておくのがよいと考えます。

管理対象マシンでのユーザー導入 mod・プラグインに関する修正(セキュリティ)

組織の管理下にある環境に関わる修正として、次の 2 件が入りました。

  • 管理対象マシン(managed settings を配備したマシン)で、複合シェルコマンドの入れ子部分に対する deny / ask ルールが、ユーザーがインストールした mod の承認より優先されていなかった問題
  • ユーザーがインストールしたプラグインが、組織管理の MCP サーバーのサインイン用ツールの説明文を書き換えられた問題

managed settings を配備しつつユーザーの mod を許可している組織の管理者は、この 2 件が修正された点を把握しておくとよいと感じます。

シンボリックリンク経由のファイルに Read の deny ルールが適用されない問題を修正(セキュリティ)

シンボリックリンク経由のファイルを @メンションしたとき、または IDE で変更・選択したときに、Read の deny ルールが適用されていなかった問題が修正されました。

.env などを Read の deny ルールで保護していて、シンボリックリンクや IDE 連携を多用している方に関係する修正だと感じます。

アップデート内容

新機能

  • mod 向けに、agent team の teammate 起動時にも agent.spawn イベントが発火するようになり、プラグインの hook イベント間で agent id が統一され、$.agent.list() に idle と waiting の状態が加わりました

改善

  • プラグインのコードペインで大きなファイルを開く速度を改善しました(ハイライト表示のレイアウトを最終的な幅で 1 回だけ行う)
  • mod のバンドやペインの描画に失敗したとき作者に表示される行を改善し、mod 名と、何も描画されなかったことを示すようになりました

セキュリティ

  • 管理対象マシンで、複合シェルコマンドの入れ子部分に対する deny / ask ルールが、ユーザーがインストールした mod の承認より優先されていなかった問題を修正
  • シンボリックリンク経由のファイルを @メンションしたとき、または IDE で変更・選択したときに、Read の deny ルールが適用されていなかった問題を修正
  • ユーザーがインストールしたプラグインが、組織管理の MCP サーバーのサインイン用ツールの説明文を書き換えられた問題を修正
  • sandbox の auto-allow 有効時に、値が展開される環境変数プレフィックスを前置したコマンド(例: TZ="$HOME" rm -rf build)に Bash の deny / ask ルールが適用されなかった問題を修正
  • sandbox の auto-allow 有効時に、コマンドの前に単独の変数代入があると Bash の deny / ask ルールがスキップされる問題を修正

修正

  • 短いコードブロックでのターミナルのフリーズを修正: 閉じていない <script> タグを多数含む、または深くネストした ${ 置換を含む短いコードブロックで、ターミナルがフリーズする問題を修正
  • 公開 artifact ページでのブラウザタブのフリーズを修正: 閉じていない <script> タグを多数含む短いコードブロックがあると、公開した artifact ページが閲覧者のブラウザタブをフリーズ・クラッシュさせる問題を修正
  • [VSCode] claude auth status の変更を取り消し: サインアウトを頻発させた可能性がある、v2.1.288 での claude auth status の変更を取り消し
  • ローカルフォルダのマーケットプレイスのプラグイン表示が古い問題を修正: plugin list / plugin eval / plugin update が古いコピーを表示する問題と、シンボリックリンクの --plugin-dir でホットリロードが効かない問題を修正
  • 未知の枠線スタイルによる起動時のフリーズを修正: ターミナルが認識しない枠線スタイルの Box をプラグインが描画すると、起動時にフリーズまたは強制終了する問題を修正
  • プラグインの非同期例外によるセッション終了を修正: プラグインの画面ハンドラが非同期に例外を投げると、supervised セッションとバックグラウンドセッションが終了する問題を修正
  • mod の ui.render hook によるセッション終了を修正: ui.render hook が書き込んだ値によって行の描画中に例外が発生すると、セッションが "unrecoverable interface error" で終了する問題を修正。代わりにエンジン自身の行を描画するようになりました
  • 地味に嬉しい修正: アップグレード後の最初のセッションで、インストール済みの mod が読み込まれない問題を修正。アップデートした直後に mod が動かず原因を探す、という手間がなくなる修正だと感じます。
  • このほか、プラグインペインのリンクの描画、mod のペイン・バンド・Client 領域の描画失敗時の挙動、claude plugin validate の判定、制御文字を含むテキストの表示など、多数の細かな不具合が修正されています。

sandbox auto-allow 時の Bash deny ルールを試してみた

v2.1.289 で、環境変数プレフィックスを付けたコマンドに deny ルールが適用されるかを claude -p で確認しました。普段の設定を変えないよう、作業用ディレクトリに一時的な設定ファイルを置いて --settings で渡し、--setting-sources project でユーザー設定(~/.claude/settings.json)を読み込まないようにしています。

Step 1: 作業ディレクトリを作る

.claude/ ディレクトリや git リポジトリを含まない、新しいディレクトリを作って移動します。

% mkdir -p ~/cc-handson-sandbox-deny
% cd ~/cc-handson-sandbox-deny

Step 2: deny ルールありの設定ファイルで実行する

設定ファイル(settings.json)は次のとおりです。

% cat > settings.json <<'EOF'
{
  "permissions": { "deny": ["Bash(touch *)"] },
  "sandbox": {
    "enabled": true,
    "autoAllowBashIfSandboxed": true,
    "failIfUnavailable": true
  }
}
EOF

touch を deny ルールで拒否し、sandbox と auto-allow を有効にしています。failIfUnavailable は、sandbox を起動できない場合にサンドボックスなしでコマンドが実行されるのを防ぐ設定です。

この設定で、修正対象の形(値が展開される環境変数プレフィックス)を再現するため、TZ="$HOME" を前置した touch を実行させます。

% claude -p --max-turns 1 --output-format json \
  --setting-sources project --settings ./settings.json \
  'Run exactly this Bash command: TZ="$HOME" touch denied.txt' > result.json

Step 3: deny ルールなしの設定ファイルで実行する

拒否の理由が deny ルールであることを確かめるため、 permissions を削除し、sandbox は同じ内容にした settings-control.json を作ります。

% cat > settings-control.json <<'EOF'
{
  "sandbox": {
    "enabled": true,
    "autoAllowBashIfSandboxed": true,
    "failIfUnavailable": true
  }
}
EOF

同じ形のコマンドを実行しました。

% claude -p --max-turns 1 --output-format json \
  --setting-sources project --settings ./settings-control.json \
  'Run exactly this Bash command: TZ="$HOME" touch allowed.txt' > result_control.json

Step 4: 結果を比較する

結果の JSON から必要なフィールドを jq で取り出し、ファイルの有無を確認した結果です。

% jq '{subtype, terminal_reason, permission_denials}' result.json
{
  "subtype": "error_max_turns",
  "terminal_reason": "max_turns",
  "permission_denials": [
    {
      "tool_name": "Bash",
      "tool_use_id": "toolu_01GEtWFEFRvt9Yvq7Hyua6wn",
      "tool_input": {
        "command": "TZ=\"$HOME\" touch denied.txt",
        "description": "Create empty file denied.txt"
      }
    }
  ]
}

% ls denied.txt
ls: denied.txt: No such file or directory

% jq '{subtype, terminal_reason, permission_denials}' result_control.json
{
  "subtype": "error_max_turns",
  "terminal_reason": "max_turns",
  "permission_denials": []
}

% ls allowed.txt
allowed.txt

deny ルールありでは TZ="$HOME" touch denied.txt が permission_denials に記録され、denied.txt は作成されませんでした。deny ルールなしでは permission_denials が空で、allowed.txt が作成されています。どちらも subtype が error_max_turns になっているのは、--max-turns 1 の上限に達して終了したためです。

環境変数プレフィックスを付けたコマンドでも deny ルールで止まることを、対照実験とあわせて確認できました。auto-allow による実行と deny ルールによる制限を両立しやすくなったと感じます。

最後に

teammate 起動時の agent.spawn や $.agent.list() の状態取得により、agent team を mod から扱える範囲が広がりました。権限ルールの修正とあわせて、mods を使った拡張を試し始めるのによいタイミングだと感じます。

sandbox の auto-allow と deny ルールを組み合わせて使っている方や、mods を書いている方は、アップデートして試してみてはいかがでしょうか。

参考文献

https://github.com/anthropics/claude-code/blob/main/CHANGELOG.md

https://code.claude.com/docs/en/changelog

https://dev.classmethod.jp/articles/20261003-cc-updates-v2-1-288/


Claudeならクラスメソッドにお任せください

クラスメソッドは、Anthropic社とリセラー契約を締結しています。各種製品ガイドから、業種別の活用法、フェーズごとのお悩み解決などサービス支援ページにまとめております。まずはご覧いただき、お気軽にご相談ください。

サービス詳細を見る

この記事をシェアする

AI白書

関連記事