Claude Code v2.1.309 — サンドボックスと権限判定の穴を一斉に修正
Claude Code v2.1.309は、サンドボックスとBash権限判定の抜け道を塞ぐ修正が中心です。claude ultrareviewは作業フォルダの信頼確認が必須になり、sed -iは通常のBash扱いに変わりました。
このリリースで何ができるようになるか
Claude Code v2.1.309は、サンドボックスとBashの権限判定をすり抜ける経路を塞ぐ修正が大半を占めるリリースです。新しいコマンドは増えていません。代わりに、これまで「守られているはず」だった設定が実際に効く場面が増えました。
v2.1.309の中心になる3つの変更
サンドボックスの穴埋め
起動ファイルの外部実行、symlink越しの
denyWrite、--mcp-configファイルの書き換えなど、境界を越える経路が塞がれました。権限判定の抜け道修正
リダイレクトが失敗するかもしれない変数代入、
cdを含む複合コマンド、サブシェルを含むEdit(path)のdenyなどが対象です。ultrareviewとsed -iの挙動変更
claude ultrareviewは作業フォルダの信頼確認が必須になり、CIでは--trust-workspaceか環境変数が要るようになりました。sed -iだけで変えたファイルは/rewindで戻らない場合があります。
あなたの開発フローはどう変わるか
影響は使い方によって大きく分かれます。CIにultrareviewを組み込んでいるチームは、このバージョンからフラグか環境変数の追加が要ります。
| 使い方 | 影響 | 何が変わるか |
|---|---|---|
CIで claude ultrareview を実行 | 影響明確な影響あり | 何が変わるか信頼確認が必須になり、質問できない環境では --trust-workspace か環境変数が無いと止まる |
sed -i で一括置換 | 影響条件次第 | 何が変わるか標準のBash承認に出て、/rewind で戻らない場合がある |
| 権限ルール・サンドボックスを厳しく設定 | 影響条件次第 | 何が変わるか抜けていた経路が閉じ、承認が増える場面がある |
| Windows・PowerShell | 影響条件次第 | 何が変わるかSet-Location や cd が承認を求め、フックの素通りが直る |
| Desktop・VS Codeでbypass permissions | 影響条件次第 | 何が変わるか危険な rm と rmdir が即拒否になる |
| 通常の対話利用 | 影響ほぼ影響なし | 何が変わるか設定の変更は要らない |
CIでultrareviewを回している場合
v2.1.309からは、信頼していないフォルダで claude ultrareview を実行すると、端末なら Trust <folder>? [y/N] と聞かれます。聞けない環境では Error: Workspace not trusted で止まります。
未信頼のまま止まった場合、終了コードは1になります(質問に n と答えたときやCtrl-Cも同じです)。
スクリプトには --trust-workspace を付けます。値は取りません。PR番号やベースブランチを先に書き、その後ろに置きます。
claude ultrareview 1234 --trust-workspaceこのフラグはその実行だけフォルダを信頼し、何も保存しません。信頼できる環境だけで動くCIなら、環境変数 CLAUDE_CODE_DISABLE_ULTRAREVIEW_TRUST_CHECK=1 でも同じ結果になります。こちらは設定ファイルの env ブロックではなく、Claude Codeを起動する環境に置く必要があります。
PRの取得がうまくいかない場合の切り分けはultrareviewでGitHubアカウント未接続と出たときにまとめています。信頼確認とは原因が別です。
sed -iで一括置換させている場合
sed -i は、シミュレートされたファイル編集のプレビューではなく、標準のBash承認プロンプトに出ます。実行内容はそのまま書かれたとおりに動きます。
注意点は /rewind です。sed -i だけで変えたファイルは、ほかのBash経由の編集と同じく /rewind で戻りません。Gitなどのバージョン管理を併用し、git diff で差分を確かめられる状態にしておくと、戻すときに困りません。
サンドボックスや権限ルールを固めている場合
サンドボックスの構成はClaude Codeのサンドボックスの選び方で整理しています。そこで挙げた隔離範囲のうち、起動ファイル、symlink、MCP設定ファイルまわりの境界が今回の修正で実際の挙動に近づきました。
設定を変える必要はありません。ただし、これまで「通っていた」コマンドが承認を求めるようになる場面があります。複合コマンドの cd と git、WindowsのPowerShellの Set-Location が該当します。自動承認前提のジョブは、一度ログを見直す価値があります。
主な変更点
79項目のうち、作業への影響が大きい領域から並べます。
サンドボックス
- macOSとLinuxで、サンドボックス内のBashがコマンドの前にシェルの起動ファイルをサンドボックスの外で実行しなくなりました
- macOSの
denyWriteのglobが、symlink経由で到達されるフォルダで実際のパスに効かない問題が直りました - サンドボックス内のコマンドや自動承認された編集が、
--mcp-configで渡したMCP設定ファイルを書き換えられる穴が塞がれました - Linuxの書き込み拒否は、バックグラウンドのコマンドがセッションより長生きしても解除されません
- 設定でサンドボックスから除外したコマンドは、サンドボックスが有効なのに起動できない状態のとき、書き込み許可リストのパスへ書く前に確認を求めます。サンドボックスなしへのフォールバックは、その場面では拒否されます
- プロファイルストアの書き込み保護が、設定ディレクトリにsymlink経由で到達したときにも効くようになりました
BashとPowerShellの権限判定
- 開けないかもしれないリダイレクトを伴うコマンドが設定した変数を、権限チェックが信用していた問題が直りました
cdが包まれている、または前置きされている複合コマンドでも、gitを実行する前に確認が出るようになりました。素のcdと同じ扱いです- サブシェルを含むコマンドでも、
Edit(path)のdenyルールがBashのリダイレクトを止めるようになりました - Windowsでは、現在のディレクトリを対象とし追加の引数を持つ
Set-Locationやcdが自動承認されなくなり、承認を求めます - PowerShellで動くフックが終了コード2で止まるようになりました。Windowsの
"shell": "powershell"を指定したPreToolUseとPermissionRequestフックも、Git for Windowsが無くて素通りすることはありません - 無効にしたMCPサーバーは、printモードとSDKセッションで後続の権限プロンプトが出ても再接続されません
Worktree
- ワークツリー分離のセッションで、ロケール接頭辞の付いたコマンドと、zshの一部の算術コマンドが、本来拒否すべきガードをすり抜けていた問題を修正しました
- Claude Codeが作るワークツリーとブランチのチェックアウトが、git replace refsを無視するようになりました。ほかのgit操作はもともと無視していました
- ワークツリーの作成と再利用で、gitが必要なオブジェクトをその場で取得しなくなりました。部分クローンでBashサンドボックスを設定している場合は、先に取得してから作成します
終了時の確認についてはWorktreeCreate hookで作ったworktreeが毎回確認される件で扱っています。claude rm の停止理由はclaude rmがunpushedコミットで止まる理由にあります。
入力、表示、セッション
- 非常に大きな入れ子の
CLAUDE.mdを読んだあと、セッションが何度も圧縮される問題を修正しました。サイズ上限を超えた入れ子のCLAUDE.mdは、先頭部分だけを読み込みます - Ctrl+Enter(今すぐ送信)が、応答開始前に押したときしかキューに入れない問題と、フック実行中に押すとフックをやり直したうえでメッセージをキューに残す問題を修正しました
!モードで、キーに割り当てたスラッシュコマンドがシェルで実行されなくなりました- Ctrl+Oで、配信待ちの他エージェントや他セッションのメッセージも見えるようになりました。全文が「待機中」の印付きで出ます
- 長いツール出力のプレビューは絵文字の途中で切れず、
jqで読めないトランスクリプトもできません /renameで付けた名前は、VS Codeのウィンドウ再読み込みや非対話の--resumeのあとも、他のセッションから生成名で見えることはありません/rewindの一覧は、/code-review --fix、サブエージェント、シェルコマンドでチェックポイント済みファイルを変えたターンを「コード変更なし」と表示しなくなりましたclaude remote-controlのステータス行で、gitリポジトリ外のフォルダのブランチがHEADと出る表示を直しました- 分割ペインのエージェントチームメイトが、リーダーのコマンドラインで指定したツールの拒否ルールと
--toolsを引き継ぐようになりました
設定、フィードバック、プライバシー
/privacy-settingsが古い「Help improve our AI models」の値を表示する問題を修正しました。取得できないときはその旨を表示します- 組織がフィードバックを受け付けないときは、「try again later」でなくサーバー側の理由と不具合の報告先が出ます
- 大きすぎる
/feedbackの報告は、失敗せずにトランスクリプトを外して再送されます --add-dirのフォルダにあるスキルが、同名のスキルに先に取られると到達できない問題を修正しました。<フォルダ>:<名前>の形で提示されます/verifyと/code-reviewが、シェルで変更された入れ子のパッケージ自身のスキルを見つけられるようになりました
環境ごとの修正
- macOS: Xcodeもコマンドラインツールも無いMacで、起動のたびに「Install Command Line Developer Tools」ダイアログが開く問題を修正しました
- Amazon Bedrock:
ANTHROPIC_BEDROCK_BASE_URLを既定のbedrock-runtime.<region>.amazonaws.comに設定したとき、細粒度ツールストリーミングがオンになります - keepalive pingだけを返すゲートウェイ越しで、「Waiting for API response」の表示がちらつく問題を修正しました。Anthropicのバックエンド以外へのルートは45秒待ちます
- GitHubのPRやIssueで、役割名やプレースホルダーを
@付きで書いても、無関係なユーザーに通知が飛ばなくなりました
変更と改善
claude ultrareviewが作業フォルダの信頼を必須にしました(前述)sed -iが標準のBashプロンプトに出るようになりました(前述)- DesktopアプリとVS Codeのbypass permissionsモードで、危険な
rmとrmdirのプロンプトが、書き換えのヒント付きで即時拒否に変わりました。無人のセッションが止まらないための変更です - Windowsで、Claude Codeが自分で実行するgitコマンドの多くが速くなりました。全プラットフォームで、そのコマンドのエラーはgitの言語設定にかかわらず英語で出ます
- フックモジュールの入れ子が深すぎて読み込めないとき、スタックオーバーフローではなく該当ファイルの名前を出します
- ディスクが満杯のとき、Bashコマンドが切れたことと空けるべきフォルダを伝えます。一時領域が満杯での起動も、生のENOSPCではなく分かる文面になります
VS Code、クラウドセッション、周辺機能
VS Code拡張では、証明書検証の失敗時に対処を示すログ警告の追加、空白のまま残るClaudeパネルの自動復旧、メッセージ未送信でも増えていた空の「Untitled」セッションの修正が入りました。/goal など長いスラッシュコマンドは「Show more」で折りたたまれます。EditとWriteのあとに問題を待つ時間は、多くの場合0.75秒になり、従来の1〜1.5秒から短縮されました。
クラウドセッションでは、ルーティン作成画面のコネクタ一覧が読み込み中に「利用可能なコネクタなし」と出る問題や、環境エディタが環境変数を並べ替えて引用符にバックスラッシュを足す問題が直りました。Changesペインは、プッシュ済みコミットだけ、またはClaudeの編集だけを表示しているときにそう表示します。
Claude TagのSlack連携では、承認した下書きがチャンネルでなくDMに投稿される問題や、停止したセッションでAllow/Denyが無反応になる問題が修正されました。Code Reviewでは、チェックの作成に失敗した後の最終リトライと、@claude review stop 後に待機中のプッシュがレビューを始める問題の修正が入っています。
/claude-api スキルは、API tracingの案内、最新ドキュメントの確認、Managed Agentsのサブエージェントチームを multiagent_20261001 で組む変更が入りました。同梱のdatavizスキルはAPCAをテキストコントラストの指標として受け入れます。
Bashの権限判定は「コマンドの見た目」に頼らない方向へ
このリリースで目を引くのは、個々の修正よりも並び方です。穴は2系統に分かれます。
1つ目は、コマンド文字列の照合をすり抜ける穴です。変数代入、リダイレクト、cd の包み方、ロケール接頭辞、zshの算術が該当します。権限ルールは Bash(rm *) のようにコマンドの形で照合され、ロケール接頭辞とzshの算術はワークツリー分離のガードが同じように形で判定します。形を少し変えるだけで照合を外れる経路が複数見つかり、それぞれ塞がれました。
2つ目は、サンドボックスの境界を越える穴です。起動ファイル、symlink、MCP設定ファイルが該当し、こちらは文字列の見た目とは別に、実際に書き込める範囲の問題でした。
その結果、ルールを厳しく書いたチームほど「何も変えていないのに承認が増えた」と感じやすくなります。これは設定の退行ではなく、これまで抜けていた経路が閉じた結果です。
一方で、bypass permissionsの rm と rmdir を即拒否にした変更は逆向きです。確認を挟むと無人セッションが止まるため、プロンプトをやめて、書き換えのヒント付きの拒否を選びました。
前後のバージョン
一つ前のv2.1.308は不具合修正のみの小さな更新で、v2.1.309はそこから79項目を積んでいます。その前のv2.1.307は /claude-api api-version の追加とMCPまわりの修正でした。
まとめ
v2.1.309は、サンドボックスと権限判定の境界を固める修正が中心の更新です。ほとんどの人は何もせずに取り込めます。
手を入れる必要があるのは2つです。CIで claude ultrareview を実行している場合は --trust-workspace か環境変数を足します。sed -i に一括置換を任せている場合は、sed -i だけで変えたファイルは /rewind で戻らない点を前提に、バージョン管理で受けます。自動承認前提のジョブは、複合コマンドの cd と git、PowerShellの Set-Location が承認を求めるようになっていないか確認します。
関連ガイド
このバージョン単体の位置づけや前後の版とのつながりは、Claude Code(クロードコード)の解説でまとめて確認できます。