Claude Media
Claude Code v2.1.221 — バックグラウンドセッションのPR作成が条件付きに変わる

Claude Code v2.1.221 — バックグラウンドセッションのPR作成が条件付きに変わる

Claude Code v2.1.221は、バックグラウンドセッションが必要な時だけドラフトPRを作るようになり、サンドボックスの資格情報ファイルをLinux/WSLでマスクできるようになったアップデートです。

Claude Code v2.1.221は、バックグラウンドセッションの完了後の振る舞いと、サンドボックスでの資格情報の扱いという、2つの運用に効く変更を含むアップデートです。バックグラウンドセッションは、作業を終えるとコミットとプッシュで成果を残したうえで、ドラフトPRを開くかどうかをタスクの内容に応じて判断するようになりました。あわせて、サンドボックス内のコマンドから資格情報ファイルの中身を隠しつつ外部通信だけ実値に差し替えるmode: "mask"が、LinuxとWSLに限って使えるようになっています。この記事では、これら2つを含む変更点を、利用形態別の影響早見表とバージョン間の差分をたどるタイムラインで確認していきます。

このリリースで何ができるようになるか

押さえるべき変化は3つあります。

  • バックグラウンドセッションの完了後の振る舞いが「常にPRを開く」から「必要な時だけ開く」に変わったこと
  • サンドボックスの資格情報ファイルをLinuxとWSLでマスクできるようになったこと
  • zshの[[ ]]正規表現条件式を使った権限チェックの抜け道が塞がれたこと

芯にあるのは1つ目で、離席運用の完了時に何が起きるかが変わります。

バックグラウンドセッションが作業を終えたときの動作から見ていきます。バックグラウンドセッションは、作業が終わるとコミットとプッシュを行って成果を保全します。PRを開くのはタスクの内容がそれを求めているときだけです。無条件には開きません。さらに、リポジトリのCLAUDE.mdにGitの指示があればそれに従い、終了時には作業がどこにあるかを必ず報告します。これまでは、ワークツリー分離したセッションが完了すると、確認を挟まずにドラフトPRまで自動で開いていました。

サンドボックス側では、資格情報の扱いが変わりました。資格情報ファイルにmode: "mask"を指定すると、サンドボックス化されたコマンドはファイル全体、または抽出用の正規表現(extract)で指定した範囲だけを覆い隠したコピーを読み込みます。サンドボックスのプロキシを経由した外部通信の時点でだけ、実際の値に差し替わります。この仕組みはLinuxとWSL限定です。macOSではファイルのmaskは使えず、これまで通りdeny(読み取り自体を拒否)にフォールバックします。

権限チェック側では、zshの[[ ]]正規表現条件式に隠したコマンドが、Bashツールの権限チェックをすり抜けて実行できていた問題が直りました。該当する形のコマンドは、今後は実行前に確認プロンプトが出ます。WindowsのPowerShellでも、引用符を含むパスを権限チェックが誤って扱う問題が直り、同様に確認が挟まるようになりました。

あなたの開発フローはどう変わるか

効き方は使い方でかなり分かれます。バックグラウンドセッションを日常的に回す人、サンドボックスでLinuxやWSLの環境を使う人、zshやPowerShellでコマンドを組み立てる人には具体的な変化がありますが、ローカルで短い対話を単発で回すだけなら体感はほとんどありません。

離席中のバックグラウンドセッションはPRを必要な時だけ開く

離席中に走らせるバックグラウンドセッションでは、この変更が最も響きます。コミットとプッシュで成果はそのまま保全されますが、PRを開くかどうかはタスクの内容が求めているかどうかで判断されるようになりました。無条件には開きません。

CLAUDE.mdにGitの運用ルール(コミットメッセージの書式やブランチ命名など)を書いている場合はそれに従い、完了時には作業がどこにあるかを必ず報告します。確認の起点をPR1本に集約したい運用のままでも、報告文から作業の場所は追えます。

Linux・WSLのサンドボックスなら、資格情報をファイル単位で隠せる

サンドボックス化したコマンドに、資格情報ファイルの中身を見せない選択肢が増えました。コマンドが読むのは、実値を伏せたセンチネル(見せかけの値)のコピーです。実際の値に置き換わるのは、サンドボックスのプロキシを通じて外部へ通信するタイミングだけです。

資格情報ファイルを丸ごとdenyにすると、コマンドがファイルを読めなくなります。読み込み自体に依存する処理は、そこで失敗することがあります。extractで範囲を絞ったmaskなら話が変わります。ファイルの形式を保ったまま、該当部分だけを隠せるからです。サンドボックス設定全体の書き方はClaude Codeの設定完全ガイドで確認できます。

この仕組みには前提があります。maskでは、プロキシが中身を差し替えるためにnetwork.tlsTerminateの設定が必要です。設定がないとセンチネルがそのままサーバーに届いて認証に失敗します。この設定漏れは、Claude Codeが起動時に報告します。この要件は環境変数でもファイルでも同じです。network.tlsTerminateはv2.1.199以降の実験的な機能(experimental)です。

ファイル単位のmaskは、sandbox.credentials.filesというキーの配列に書きます(環境変数側はsandbox.credentials.envVarsが対応するキーです)。以下は公式ドキュメントに載っているファイル向けの例です。~/.config/gh/hosts.ymlにあるGitHubトークンを対象に、extractの正規表現で秘密の範囲を絞り、api.github.comへの通信でだけ実値に差し替えます。

{
  "sandbox": {
    "enabled": true,
    "network": {
      "tlsTerminate": {},
      "allowedDomains": ["*.github.com"]
    },
    "credentials": {
      "files": [
        {
          "path": "~/.config/gh/hosts.yml",
          "mode": "mask",
          "extract": "oauth_token:\\s*(\\S+)",
          "injectHosts": ["api.github.com"]
        }
      ]
    }
  }
}

運用にあたっては、次の点もあわせて確認しておくと設定を書き切れます。

  • 実値への差し替え先はinjectHostsで絞り込みます。injectHostsに指定した各ホストはnetwork.allowedDomainsでも許可されている必要があります
  • injectHostsを省略した場合は、network.allowedDomainsで許可したホストすべてが実値の差し替え対象になります
  • 環境変数では、同じ変数にdenyが指定されていればdenyが優先されます
  • リポジトリの.claude/settings.json.claude/settings.local.jsonに書いたmaskエントリ・network.tlsTerminatecredentials.allowPlaintextInjectは無視されます(ユーザー設定・管理設定・--settingsで渡した設定でのみ有効)
  • denyのエントリはこれと非対称です。すべての設定スコープのdenyが合流し、どのスコープからでも追加できますが、別のスコープが追加したdenyを取り消すことはできません
  • 管理設定がsandbox.filesystemを設定しているか、"mode": "deny"sandbox.credentials.filesエントリを1つでも挙げている場合、filesystem.disabledは管理設定からしか設定できなくなります(管理者が配ったファイルシステム制限を、開発者が無効化できないようにするためです)。maskのまま適用されたエントリは、この固定を起こしません
  • 対象はWSL2に限られます。WSL1はbubblewrapが必要とするカーネル機能を持たないため非対応です
  • network.tlsTerminateの要件・injectHosts・設定ソースの制限は、ファイル項目でも環境変数のmaskと同じように働きます
  • extractの正規表現がファイル内で何もマッチしなかった場合、既定(onExtractNoMatch: "warn")では警告してエントリをスキップするため、サンドボックス内のコマンドは実ファイルをそのまま読めます。確実に伏せたい場合はdenyを、設定不備として起動自体を止めたい場合はerrorを指定します
  • extractの正規表現には、キャプチャグループを最低1つ含める必要があります。置き換わるのは各マッチのグループ1が捕捉した部分だけです
  • maskDuplicatestrueにすると、extractのマッチ範囲外にある同じ値の逐語コピーも置き換えます。生の部分文字列で照合するため、長くてランダム性の高い秘密に限って使います(既定はfalse)
  • ディレクトリパス・glob・8 MiB超・UTF-8テキスト以外のファイルをmaskに指定すると、安全にマスクできないためdenyへフォールバックします
  • filesystem.denyReadcredentials.filesdenyによる読み取りブロックは、ファイルシステムの分離を無効にすると効かなくなります。一方、maskとして適用されたエントリと環境変数側の保護は、分離とは独立して働き続けます

zsh・PowerShellで自動化しているなら確認プロンプトが増える

zshの[[ ]]正規表現条件式に隠したコマンドは、これまでBashツールの権限チェックをすり抜けていました。今回の修正で、該当するコマンドは確認プロンプトを経由するようになります。Windowsでも、PowerShellの権限チェックが引用符を含むパスを誤って扱う問題が直り、対象のパスは承認を求めるようになりました。権限チェックの全体像はClaude Codeのセキュリティガイドで確認できます。

自動モードの並列実行は権限チェックが軽くなる

並列のツール呼び出しに対する権限チェックが、自動モードでキャッシュを効かせる形に変わりました。チェックが保留中にモードを切り替えたときは、古い判定をそのまま適用せず確実に確認を求めます。あわせて、自動モードの権限判定でキャッシュ済みの会話の先頭部分を使い回すことで、プロンプトキャッシュのコスト削減にもつながっています。自動モードの分類器の呼び出しがキューに入っている間に権限モードが変わった、という通知が承認プロンプトに繰り返し表示されていた問題も解消しました。通知の積み重ねは無くなります。分類器がどう判定しているかの設計はClaude Code auto modeの中身で扱っています。

プラグインの追加・更新でつまずく場面が減る

プラグインまわりの細かい詰まりが、いくつか解消しました。マーケットプレイスのカタログが古いままだと、マーケットプレイスにあるはずのプラグインが「見つからない」と誤って報告されることがありました。/plugin installは、カタログを更新してから再試行するように変わっています。安全に有効化できるプラグインは、/reload-pluginsを挟まずその場で有効になります。プラグインの仕組み全体はClaude Codeプラグイン完全ガイドで確認できます。

プラグインのskillsパスは"."単独の指定も受け付けるようになりました。ルート直下にSKILL.mdを置いた構成での検証エラーメッセージも、プラグインのルートを使うよう案内する内容に変わっています。Claude Desktopの管理対象マーケットプレイス同期で拒否される名前をマーケットプレイスやプラグインに付けたときは、claude plugin validateが事前に警告します。

Vimモードのヤンクレジスタは消えなくなる

ヤンクレジスタ(コピーしたテキストを保持する領域)は、ダイアログや履歴検索、トランスクリプト表示を開くと消えていました。Vimモードのキーバインドで編集している場合、この地味な取りこぼしがv2.1.221で直っています。開いても内容は消えずに残るようになりました。空のプロンプトまでUndoで戻ったときは、エージェント表示に戻る前に「もう一度←を押す」確認が入るようになり、誤操作で意図せず画面が切り替わることを防ぎます。

利用形態別の影響早見表

利用形態影響度効く理由
バックグラウンドセッションを離席・非同期で回す影響度明確な恩恵あり効く理由PR作成がタスク次第になり、軽いタスクでのPR乱立が減る
サンドボックスでLinux・WSLの資格情報を扱う影響度明確な恩恵あり効く理由ファイル単位のmode: "mask"で中身を隠しつつコマンドは実行できる
サンドボックスをmacOSで使う影響度ほぼ影響なし効く理由ファイルのmaskは使えず引き続きdenyが適用される
zsh・PowerShellでコマンドを自動化する影響度条件次第効く理由抜け道は塞がれたが、無確認で通っていた自動化は確認プロンプトに当たる
自動モードで並列ツール呼び出しを多用する影響度条件次第効く理由権限チェックがキャッシュ効率化され通知の重複も減った
プラグインを頻繁に追加・更新する影響度条件次第効く理由マーケットプレイス再取得・即時有効化・"."パスが効く場面がある
ローカルで短い対話中心影響度ほぼ影響なし効く理由対象がバックグラウンドセッション・サンドボックス・シェルに寄る

主な変更点

39項目のうち、運用に効くのはバックグラウンドセッションのPR作成条件とサンドボックスの資格情報保護です。

バックグラウンドセッションとPR作成の方針

  • バックグラウンドセッションが、作業完了時にコミットとプッシュで成果を保全し、ドラフトPRはタスクが求める場合だけ開くよう変更。CLAUDE.mdのGit運用ルールに従い、完了時には作業の場所を必ず報告する

サンドボックスと資格情報保護

  • 資格情報ファイル向けにmode: "mask"を追加。LinuxとWSLでは、ファイル全体または抽出用正規表現(extract)で絞った範囲をセンチネルに置き換えて読み込ませ、サンドボックスのプロキシを経由する外部通信の時点でだけ実値に差し替える。macOSではファイルのmaskは使えずdenyにフォールバックする
  • サンドボックス化した大きなアップロードが、サンドボックスのプロキシ経由でTLSエラーになって失敗する問題を修正

権限チェックと自動モードの判定

  • zshの[[ ]]正規表現条件式の中に隠したコマンドが、Bashツールの権限チェックをすり抜けて実行できた問題を修正。該当コマンドは確認プロンプトを経由する
  • WindowsのPowerShellで、引用符を含むパスを権限チェックが誤って扱う問題を修正。該当パスは承認を求める
  • 自動モードの並列ツール呼び出しに対する権限チェックをキャッシュ効率化。チェック保留中にモードを切り替えても、古い判定を適用せず確実に確認を求める
  • 自動モードの権限判定で、キャッシュ済みの会話の先頭部分を使い回してプロンプトキャッシュのコストを削減
  • 自動モードの分類器の呼び出しがキューに入っている間に権限モードが変わった、という通知が承認プロンプトに繰り返し表示されていたのを削除

プラグインとスキル

  • claude plugin validateに、Claude Desktopの管理対象マーケットプレイス同期で拒否されるマーケットプレイスまたはプラグインの名前を付けたときの警告を追加
  • /plugin installが、古いマーケットプレイスのカタログを更新してから再試行するよう変更。カタログが古いままの「プラグインが見つからない」報告を防ぐ
  • /pluginからインストールしたプラグインを、安全な場合は/reload-pluginsなしにその場で有効化するよう変更
  • プラグインのskillsパスに"."単独の指定も受け付けるよう変更。ルート直下のSKILL.md検証エラーの案内文もプラグインルートの使用を勧める内容に変更
  • 「プラグインが変更されました」の通知が、再読み込み後も消えずに残っていた問題を修正

MCP・認証・課金まわり

  • セッション開始時にthinkingをオフにしていると、その後thinkingトグルを操作しても効かなかった問題を修正。接続途中のMCPサーバーを無効化しても、設定が気づかないうちに元へ戻ることはなくなった
  • 非対話モード(-p)で、--mcp-configで指定したMCPサーバーが最初のターンより前に接続されず、モデルがツール呼び出しを文字列としてそのまま出力してしまう問題を修正
  • constructorのような組み込みオブジェクトのプロパティと同名のSDK MCPツールで、APIリクエストの準備中にクラッシュしていた問題を修正
  • thinkingを無効にした状態でeffort xhigh・maxを使うと、WebSearchが400エラーで失敗していた問題を修正
  • チーム・エンタープライズの支出上限メッセージが、個人の支出上限に達した場合でも組織の月次上限のせいだと誤って表示していた問題を修正
  • Windowsのdesktop管理セッションで、余分なHOME環境変数が設定されている環境において、AWS SSOの名前付きプロファイルによるBedrock認証が失敗していた問題を修正
  • スリープからの復帰時に、2つのClaude Codeプロセスが同じMCPコネクタやWIF OAuthトークンを同時に更新しようとして再認証を強制される、まれな競合を修正
  • Gatewayのモデルフィールドの検証を変更。文字列でない値はそのまま転送せず400エラーで拒否する

セッション管理とその他の操作

  • CLAUDE_CODE_RESUME_INTERRUPTED_TURN=0が中断ターンの自動再開を無効化しない問題を修正。falsy(偽と評価される)な値が正しく扱われるようになった
  • Claude Code DesktopやWebのclaude.aiでセッション名を変更しても、CLIのセッション名に反映されない問題を修正。どの画面で改名しても名前がサニタイズ(無害化)される
  • ターミナルのみで使える組み込みコマンド(/help/feedbackなど)と同名のプラグイン・組織配布のスキルが、非対話セッションで呼び出せなかった問題を修正
  • /forkでフォークしたセッションが、元のセッションのチェックアウトをそのまま使うのではなく、自分自身の新しいワークツリーを作るよう変更
  • Escでプロンプトを取り消してから再送信すると、@で指定したファイルがエラーを出さずに消えていた問題を修正
  • /statusがセッションの種類を表示するよう変更。対話セッションならinteractive、バックグラウンドジョブならアタッチ済みのattachedか未アタッチのunattendedを示す
  • claude-apiスキルにprompt-auditサブコマンドを追加。古いモデル向けに書かれたプロンプトやツールの説明文を洗い出す

Vimモードの修正

  • ヤンクレジスタが、ダイアログ・履歴検索・トランスクリプト表示を開いても消えずに残るよう修正(従来は表に出さずに空になっていた)
  • 空のプロンプトまでUndoで戻ったとき、エージェント表示へ戻る前に「もう一度←を押す」確認が入るよう修正

表示・操作性の改善

  • VS Code拡張にFocus viewを追加。ツールの実行ログを、展開できるターン単位の要約の裏に隠し、実行中のツールを示すインジケーターを表示する。チャットメニューのトグル、Ctrl+Alt+F、または「Claude Code: Toggle Focus view」コマンドで切り替える
  • Statsパネルが、トークン合計にキャッシュトークンを含めるよう変更。入力・出力・キャッシュ読み取り・キャッシュ書き込みの内訳も表示する
  • /ultrareviewのエラーメッセージを改善。ベースとの共有履歴がないリポジトリでは、ブランチのないチェックアウトを事前に拒否してブランチ作成を案内する。すでに履歴がそろっているクローンに対してgit fetch --unshallowを勧めることもなくなった
  • Windowsの起動処理を、PowerShellを起動せずネイティブなkernel32呼び出しでプロセス生成時刻を読み取るよう変更。powershell.exeの起動を検知するエンドポイントセキュリティ製品での確認プロンプトが出なくなった
  • 絵文字の自動補完が、:thumbsup::thumbsdown::love:のような一般的な別名ショートコードも受け付けるよう変更
  • Google Vertex AIでのツール検索を、Claude 4.5世代以降のモデルで再度有効化
  • Claude in Chromeが、自分が開いたブラウザタブを、不要になった時点で閉じるよう変更
  • 高速モード(fast mode)がセッション途中で利用クレジットを使い切ったとき、失敗を隠さずストリーム上で報告するよう変更
  • Monitorツールで、出力を何も生成せずに終了したwatchが、その旨を明示するよう変更(従来は「stream ended」とだけ表示していた)

更新はclaude updateで取得できます。

claude update
claude --version

バックグラウンドセッションのPR作成は、v2.1.198の自走を運用判断へ引き戻す動き

バックグラウンドセッションが完了後にPRを開くかどうかは、v2.1.198からの流れで見ると変化の向きがはっきりします。v2.1.198は、claude agentsで動くバックグラウンドエージェントの自律度を引き上げた更新でした。ワークツリーでのコード作業を終えると、止まらずにコミット・プッシュ・ドラフトPR作成まで進みます。人が関与する最初の地点は「PRの差分レビュー1か所」に集約され、以来この挙動が既定として続いてきました。

v2.1.221はここに条件を足します。コミットとプッシュはv2.1.198のまま変わりません。変わったのはPRを開く条件です。軽い調査や小さな修正でも一律にPRが1本増えていた状態から、レビューを必要とするタスクだけがPRになる状態への切り替えです。加えてCLAUDE.mdのGit運用ルールに従う点と、完了時に作業の場所を必ず報告する点が新しく加わりました。自律度を上げる方向で進んできた自動化の系譜に、運用側の制御を差し戻す1手です。

同時期の別の系譜として、権限チェックの抜け道を塞ぐ修正も並行して続いています。v2.1.214ではzshの変数の添字(subscript)や修飾子(modifier)を[[ ]]比較の中で見逃していた問題が直り、今回はzshの[[ ]]正規表現条件式に隠したコマンドが同じチェックをすり抜けていた問題が直りました。同じ[[ ]]という構文の中に、形を変えた抜け道が見つかっては塞がれるという地道な積み重ねが続いています。同じ期間には/code-reviewのバックグラウンド化(v2.1.218)やOpus 5が既定のOpusモデルになったこと(v2.1.219)も進みました。バックグラウンド運用と権限まわりの変更が、並行して重ねられてきました。

バージョン公開日そのリリースが動かした向き今回との関係
v2.1.198公開日2026-07-01そのリリースが動かした向きバックグラウンドエージェントの完了時アクションを自動化し、人の介在をPRレビュー1点に集約今回との関係今回はこの自動化に条件を足す起点
v2.1.214公開日2026-07-18そのリリースが動かした向きzsh変数の添字・修飾子を[[ ]]比較の中で見逃す権限チェックの穴を修正今回との関係同じ[[ ]]構文内の抜け道を塞ぐ系譜の1つ
v2.1.218公開日2026-07-22そのリリースが動かした向き/code-reviewをバックグラウンドのサブエージェントで実行今回との関係バックグラウンド運用の拡張という並走する流れ
v2.1.219公開日2026-07-24そのリリースが動かした向きOpus 5を既定のOpusモデルに切り替え、sandbox.network.strictAllowlistを追加今回との関係Opus 5の切り替えは別系譜。strictAllowlistは今回のmaskと同じsandboxのallowedDomainsを扱う
v2.1.221公開日2026-08-04そのリリースが動かした向きバックグラウンドセッションのPR作成を条件付きに変更、サンドボックス資格情報ファイルへのmask追加今回との関係この記事が扱う更新

離席運用を前提に自律度を積み上げてきたバックグラウンドセッションは、v2.1.221でPRを開くかどうかがタスク側の判断に委ねられる形になりました。どのタスクが「PRを求めている」と判断されるかの基準は、公式には示されていません。CLAUDE.mdのGit指示で寄せる余地はありますが、運用に乗せる前に手元で確かめておきたいところです。

まとめ

Claude Code v2.1.221は、バックグラウンドセッションが完了後にコミットとプッシュで成果を保全しつつ、ドラフトPRはタスクが求める場合だけ開くようになりました。サンドボックスの資格情報ファイルには、LinuxとWSLに限ってmode: "mask"が使えるようになり、コマンドから中身を隠しながら外部通信では実値に差し替えられます。zshの[[ ]]正規表現条件式やPowerShellの引用符付きパスを使った権限チェックの抜け道も塞がれました。

バックグラウンドセッションを離席運用で回している人には、PRの乱立が減る点に更新の価値があります。LinuxやWSLでサンドボックス化したコマンドから資格情報を扱う人には、maskの選択肢が増えたことが効きます。zshやPowerShellでコマンドを自動化している人は、これまで無確認で通っていた経路に確認が挟まるようになる点を、更新前に把握しておくと運用が読みやすくなります。

ローカルで短い対話を単発で回すだけなら、体感の変化は小さめです。自分の使い方が早見表のどこに当たるかを見てから、更新の要否を判断できます。

関連ガイド

Claude Code全体の中でのこの更新の位置づけはClaude Code完全ガイドで確認でき、番号上の直前であるv2.1.220や、直前の機能追加版であるv2.1.219、バックグラウンド実行の系譜をまとめたv2.1.218もあわせて参照できます。2026年7月までのアップデートの流れは月次アップデートまとめでたどれます。

この記事を共有:XはてブLinkedIn