
Claude Code v2.1.288 の主要アップデート - /code-review の --max-findings 追加と bash -c 内の危険な rm の確認漏れ修正
クラウド事業統括本部の石川です。Claude Code の v2.1.288(2026-10-02 公開)がリリースされました。本記事では主要な変更点を整理し、本日は/code-review に追加された --max-findings を試してみました。
前回のアップデート記事はこちらです。
アップデートサマリー
v2.1.288 では 89 件の変更が入りました。CHANGELOG の項目の内訳は、Fixed(修正)が 64 件、Improved(改善)が 12 件、Added(追加)が 7 件、Changed(変更)が 6 件です。修正は、セッションの再開とコンパクション、プラグインと mods、クラウドセッション、権限確認とフックに多く入っています。変更には、バックグラウンドコマンドの時間制限の適用範囲や、claude project purge から claude purge への名称変更が含まれます。
注目のアップデート
/code-review に --max-findings が追加(新機能)
/code-review に、報告する指摘の件数を指定する --max-findings オプションが追加されました。--max-findings <n> で最大 n 件、--max-findings all ですべての指摘を、通常の上限の代わりに報告します。n には通常の上限より大きい値も小さい値も指定できます。
指定した値は以降のレビューでも使われ、--max-findings default を渡すと通常の上限に戻ります。公式ドキュメントのコマンド一覧によると、エイリアスの /review でも同じオプションを指定できます。
差分が大きく、通常の上限には収まらない数の指摘が出そうなレビューで役立つ変更と感じます。
本記事の後半では、不具合を含む差分に対して --max-findings 1 を指定し、報告される指摘が 1 件に絞られること、フラグなしで実行した次のレビューにもその指定が引き継がれること、--max-findings default で元の件数に戻ることを試していますのでご覧ください。
/code-review --max-findings を試してみた
Ctrl+C で消したプロンプトを ↑ キーで復元(新機能)
Ctrl+C でクリアしたプロンプトを復元できるようになりました。プロンプトが空の状態で ↑ キーを押すと、クリアした下書きが戻ります。貼り付けたテキストや画像も含めて復元されます。

公式ドキュメント(Interactive mode)によると、Claude Code では実行中の処理がないときに Ctrl+C を押すとプロンプトの入力がクリアされ、もう一度押すと終了します。
長い指示や画像を貼り付けた後に、Ctrl+C で誤って消してしまった経験がある方には助かる変更と感じます。
パス指定のルールとネストした CLAUDE.md が Write/Edit でも読み込まれるよう修正(不具合解消)
paths で対象を指定した .claude/rules のルールと、サブディレクトリにある(ネストした)CLAUDE.md が、Write や Edit でスコープ内のファイルを作成・変更したときに読み込まれない問題が修正されました。これまでは Read のときだけ読み込まれていました。
パス指定のルールは、次のように YAML フロントマターの paths で対象のファイルを指定します(公式ドキュメント Memory の例)。
---
paths:
- "src/api/**/*.ts"
---
# API Development Rules
- All API endpoints must include input validation
- Use the standard error response format
- Include OpenAPI documentation comments
公式ドキュメントでも、パス指定のルールは、パターンに一致するファイルに対して Claude が Read、Write、Edit のいずれかのツールを使ったときに読み込まれると説明されています。
Claude が既存のファイルを読まずに新しいファイルを作る場面でも、パス指定のルールが効くようになる点が大きいと感じます。
応答途中の API タイムアウトと "Prompt is too long" による失敗を修正(不具合解消)
長いタスクの途中でターンが失敗する問題が 2 件修正されました。
- 応答の途中で API がタイムアウトすると、ターンが失敗していました。非対話セッションとサブエージェントは途中までの応答から続行し、thinking だけの応答は再試行されるようになりました。
- 最後の応答がトークン使用量 0 を報告した場合に、長い会話が自動コンパクションされず、"Prompt is too long" で失敗していました。
CI などの非対話セッションで、タイムアウトのたびにジョブを再実行していた方には効果の大きい修正と推測します。
bash -c 内の危険な rm とフックのスキップを修正(セキュリティ)
権限確認やフックによるチェックを経ずにツールが実行される問題が 2 件修正されました。
- bypassPermissions モード、またはシェルの allow ルールの下で、
bash -cやsh -cのスクリプト内にある危険なrm(/やホームディレクトリに対するものなど)が、確認なしで実行されていました(anthropics/claude-code#96300)。 - PreToolUse と PermissionRequest のフックが、フックのマッチングに失敗した場合や、ツールの入力を JSON にシリアライズできない場合にスキップされていました。この場合は、ツール呼び出しがブロックされるようになりました。
公式ドキュメント(Permission modes)では、ファイルシステムのルート、ホームディレクトリ、作業ディレクトリなどを重要なパス(critical path)とし、これらを対象とする rm と rmdir は、allow ルールや "allow" を返す PreToolUse フックがあっても、ほかの確認を省略するモードであっても承認されないと説明されています。1 件目は、bash -c/sh -c の中に書かれた rm が、この確認を経ずに実行されていた問題です。
bypassPermissions モードやシェルの allow ルールを使っている方、PreToolUse フックで危険なコマンドを止める運用をしている方は、早めにアップデートしておきたい修正と感じます。
バックグラウンドコマンドの時間制限が無人セッションのみに(既定値の変更)
v2.1.285 で入ったバックグラウンドコマンドの時間制限が、無人セッション(-p、Agent SDK、CI、クラウド)にだけ適用されるようになりました。ターミナル、デスクトップアプリ、VS Code のセッションでは制限がなくなりました。変更前後の比較は、後述の「破壊的変更・既定値の変更」で扱います。
v2.1.285〜v2.1.287 で、ターミナルから長時間動かすバックグラウンドコマンドが 30 分で止まっていた方には、元の使い方に戻せる変更と感じます。
アップデート内容
新機能
/code-reviewの--max-findings: 報告する指摘の件数を指定できるようになりました(前述)。- Ctrl+C で消したプロンプトの復元: 空のプロンプトで ↑ キーを押すと、クリアした下書きが戻ります(前述)。
- MCP サーバーの追加スコープに対する再認証: ツール呼び出し中に MCP サーバーが追加の OAuth スコープを求めたとき、再認証のプロンプトが表示されるようになりました。
- agents ビューの Ctrl+F と Alt+↑/↓: 名前でセッションを探す Ctrl+F と、グループ間を移動する Alt+↑/↓ が追加されました。この 2 つとリネームは、keybindings.json で割り当てを変更できます。
- mods の
$.ui.selection(): フルスクリーンモードで最後に選択したテキストを返します。選択範囲がトランスクリプトの 1 行に収まる場合は、その行も返します。 - クラウドセッションの組み込み
gh api: GitHub CLI が入っていないイメージのクラウドセッションで、組み込みのgh apiが使えるようになりました。あわせて、組み込み版がファイル名・jq フィルター・GitHub のエラーに含まれる制御文字をターミナルに送っていた問題も修正されています。 - スクリーンリーダーモードでの権限モードの読み上げ: プランを承認したとき(Shift+Tab での承認を含む)に、新しい権限モードが読み上げられるようになりました。
セキュリティ
bash -c内の危険なrmとフックのスキップを修正: 2 件です(前述)。BASHPIDへの代入が確認なしで許可される問題を修正: シェルが算術式として評価する値をBASHPIDに代入するコマンドを、Bash ツールの権限チェックが黙って許可していました。確認を求めるようになりました。sandbox.credentials.filesが効かない問題を修正:permissions.blockReadsOutsideWorkingDirectoriesが有効なとき、git の設定ファイルに対するsandbox.credentials.filesのエントリが効いていませんでした。
改善
- auto mode の長い会話への対応: 会話が長くなり、クライアント側の安全分類器でレビューできなくなった場合に、ツール呼び出しのたびに確認を求めたり失敗したりする代わりに、会話をコンパクションするようになりました。
/autocompactの設定をモデルごとに保存: 自動コンパクションのウィンドウがモデルごとに保存され、モデルを切り替えても各モデルの設定が保たれるようになりました。- MCP の URL プロンプトでの待機: 完了を通知できないサーバーからの URL プロンプトでは、"I'm done, continue" が押されるまでツール呼び出しを続けなくなりました。ブラウザーでの操作を先に終えられます。
- agents ビューの
n:フィルターでの Enter: 最上段の行ではなく、名前が最もよく一致するセッションを開くようになりました。Ctrl+F の検索も同様です。 - このほか、スクリーンリーダーモードの読み上げと表示、Remote Control の認証情報の更新、セルフホストランナーの組み込み
gh api、Bash の権限確認で表示する理由、Claude Tag、/usage-creditsやアーティファクトのデータベースのエラー表示などが改善されています。
修正
- 応答途中のタイムアウトと "Prompt is too long" による失敗を修正: 2 件です(前述)。
- パス指定のルールとネストした CLAUDE.md が Write/Edit で読み込まれない問題を修正: これまでは Read のときだけ読み込まれていました(前述)。
- セッション再開時の欠落を修正:
--resumeで、直前のコンパクションが復元したファイルなどのコンテキストが落ちることがありました。再開したセッションでターンの最後の応答が保存されず、次の--resumeでプロンプトが未回答に見える問題と、v2.1.286 以前に開始した会話を再開するとモデルの以前の thinking が落ちる問題も修正されています。 - MCP ツールの呼び出しが 2 回実行される問題を修正: リモートサーバーの結果が 16 MB を超える、または解析できない場合に、呼び出しが 2 回実行されることがありました。
- structured outputs を拒否する環境での失敗を修正: structured outputs を拒否する Mantle やゲートウェイの環境で、セッションタイトル、memory recall、プロンプトフックが失敗していました。structured outputs を無効にする環境変数
CLAUDE_CODE_DISABLE_STRUCTURED_OUTPUTSも追加されています。公式ドキュメントによると、Mantle は Amazon Bedrock の Invoke API ではなく Anthropic API の形式で Claude のモデルを提供する Amazon Bedrock のエンドポイントです。また、この環境変数に1を設定すると、structured output のoutput_config.formatフィールドと、それに対応するanthropic-betaの値を送らなくなり、CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETASが無効にするほかのプレリリース機能は有効なまま残ります。 - ヘッドレスセッションが SIGTERM を無視する問題を修正:
timeoutや systemd などのスーパーバイザーが SIGTERM と一緒に SIGCONT を送ると、-p/SDK のセッションがまれに SIGTERM を無視していました。 - LSP ツールの呼び出しが止まる問題を修正: 言語サーバーが動的なケーパビリティ登録を使う、または応答しなくなると、LSP ツールの呼び出しが無期限に止まっていました。リクエストは 60 秒でタイムアウトするようになりました(サーバーごとの
requestTimeout)。 /loginの結果表示を修正: 認証情報をセキュアストレージに保存できなかった場合にも、"Login successful" と表示していました(anthropics/claude-code#73861)。失敗を表示し、新しいログインが反映されなかったときは再試行を提示するようになりました。--bareセッションの/loginが、そのセッションが読まないサインインを行い、保存済みのログインを置き換える可能性があった問題も修正されています。- npm の自動アップデーターの誤った成功報告を修正: プラットフォーム固有のバイナリのダウンロードに失敗し、プレースホルダーの
claudeスタブだけがインストールされた場合にも、成功と報告していました。 - GitHub ソースのプラグインのインストール失敗を修正: GitHub の SSH キーがない macOS と Linux のマシンで、
claude plugin installが失敗していました。クローンは HTTPS にフォールバックし、通知を表示するようになりました。 - 地味に嬉しい修正: sandbox auto-allow の下で、本文がプレーンテキストと単純な
$VAR参照だけの、区切り文字をクォートしないヒアドキュメント(python3 <<EOF)が実行のたびに承認を求めていました。Claude が書くpython3 <<EOFで毎回承認を求められていた方には地味に嬉しい修正と感じます。 - このほか、Remote Control とクラウドセッション(Cowork を含む)、プラグインと mods、VS Code 拡張機能、Claude Tag、スクリーンリーダーモードなど、多数の細かな不具合が修正されています。
破壊的変更・既定値の変更
バックグラウンドコマンドの時間制限が無人セッションのみに(既定値の変更)
v2.1.285 の CHANGELOG によると、このバージョンからバックグラウンドの Bash と PowerShell のコマンドが時間制限(既定 30 分、run_in_background の timeout で最大 2 時間)で停止するようになりました。v2.1.288 からは、この時間制限が無人セッションにだけ適用されます。公式ドキュメント(Tools reference)にも、v2.1.288 より前はすべてのセッションに適用されていたと記載されています。
| セッションの種類 | v2.1.285〜v2.1.287 | v2.1.288〜 |
|---|---|---|
-p、Agent SDK、CI ジョブ、クラウドセッション |
時間制限あり | 時間制限あり |
| ターミナル、デスクトップアプリ、VS Code 拡張機能 | 時間制限あり | 時間制限なし |
無人セッションの時間制限は、環境変数で引き上げられます。公式ドキュメントによると、BASH_DEFAULT_TIMEOUT_MS を 1800000(30 分)より大きくすると既定の 30 分が、BASH_MAX_TIMEOUT_MS を 7200000(2 時間)より大きくすると上限の 2 時間が、それぞれ設定した値に置き換わります。
claude project purge が claude purge に(名称変更)
claude project purge が claude purge に変わりました。旧名も引き続き動作し、通知を表示します。公式ドキュメント(CLI reference)によると、claude purge はプロジェクトのローカルの状態(トランスクリプト、タスクリスト、デバッグログ、ファイル編集の履歴、プロンプト履歴の行、~/.claude.json のプロジェクトのエントリ)を削除するコマンドです。
変更前(〜v2.1.287):
claude project purge ~/work/repo --dry-run
変更後(v2.1.288〜):
claude purge ~/work/repo --dry-run
v2.1.288 の環境で、旧名と新名それぞれの --help を実行した結果です(削除は実行していません。オプション一覧は省略しています)。
claude project purge --help
Usage: claude project purge [options] [path]
`claude project purge` is now `claude purge`. Delete all Claude Code state for a
project (transcripts, tasks, file history, config entry)
claude purge --help
Usage: claude purge [options] [path]
Delete all Claude Code state for a project (transcripts, tasks, file history,
config entry)
検証環境: Claude Code v2.1.288
クライアント側の auto mode 分類器が Sonnet 5.5/Opus 5.5 の固定を無視(挙動の変更)
クライアント側の auto mode 分類器が、Claude Sonnet 5.5 または Opus 5.5 を指定した ANTHROPIC_DEFAULT_SONNET_MODEL の固定を無視し、Claude Sonnet 5 を使うようになりました。公式ドキュメント(Permission modes)では、分類器は既定で /model の選択ではなく Claude Sonnet 5 で動くと説明されています。
以下は設定例です(モデル ID の形式はプロバイダーによって異なるため、仮の表記にしています)。
export ANTHROPIC_DEFAULT_SONNET_MODEL='<Claude Sonnet 5.5 のモデル ID>'
- 変更前(〜v2.1.287): クライアント側の auto mode 分類器は、この固定を無視しません。
- 変更後(v2.1.288〜): クライアント側の auto mode 分類器は、この固定を無視して Claude Sonnet 5 を使います。
/code-review --max-findings を試してみた
/code-review の --max-findings で、報告される指摘の件数の上限と、指定した値の引き継ぎがどう変わるかを確認する手順です。通常の上限の件数は CHANGELOG と公式ドキュメントに記載がないため、上限を下げる --max-findings 1 で確認し、all は任意の追加手順とします。
公式ドキュメント(Code Review)によると、/code-review はブランチの upstream より先にあるコミットと未コミットの変更をレビューします。レビューはバックグラウンドのサブエージェントとして動き、完了すると指摘が会話に届きます。
前提条件
- git
- macOS または Linux の bash / zsh
Step 1: 検証用のリポジトリを作る
使い捨てのディレクトリに git リポジトリを作り、初期コミットを作ります。
% mkdir review-demo && cd review-demo
% git init -q
% printf 'def average(xs):\n return sum(xs) / len(xs)\n' > stats.py
% git add stats.py
% git commit -qm "init"
Step 2: 不具合を含む変更を加える
不具合を複数含む変更を、コミットせずに作業ツリーに加えます。以下は例です(先頭の要素を飛ばす、空リストで 0 除算になる、インデックスが float になる、などの不具合を含みます)。
% cat > stats.py <<'EOF'
def average(xs):
total = 0
for i in range(1, len(xs)):
total += xs[i]
return total / len(xs)
def median(xs):
xs.sort()
return xs[len(xs) / 2]
def percent(part, whole):
return part / whole * 100
EOF
今の時点のディレクトリ構成は以下のとおりです。
% tree -d -a
.
└── .git
├── hooks
├── info
├── logs
│ └── refs
│ └── heads
├── objects
│ ├── 2b
│ ├── 69
│ ├── 9b
│ ├── info
│ └── pack
└── refs
├── heads
└── tags
Step 3: 通常の上限でレビューする
review-demo ディレクトリで claude を起動し、フラグなしで実行します。報告された指摘の件数を控えておきます。
/code-review

レビューはバックグラウンドのエージェント @code-review として実行され、18 秒で終わりました。報告された指摘は 5 件で、重大度の内訳は high が 2 件、medium が 2 件、low が 1 件です。
Step 4: --max-findings 1 でレビューする
/code-review --max-findings 1

報告された指摘は 1 件だけになりました。報告されたのは、Step 3 の 1 件目と同じ stats.py:3(high)の average のループの指摘です。
Claude の説明によると、レビューの出力には、件数の制限で除外した問題として次の 2 件も書かれていました。どちらも Step 3 で報告された指摘です。
stats.py:10:xs[len(xs) / 2]がTypeErrorになる(Step 3 の 2 件目)stats.py:9:xs.sort()が呼び出し元のリストを並べ替える(Step 3 の 4 件目)
Step 5: フラグなしで再実行する
フラグを付けずに実行し、Step 4 の 1 が引き継がれているかを確認します。
/code-review

フラグを付けずに実行しましたが、報告された指摘は 1 件のままでした。Claude の説明によると、レビューの出力には Step 4 で指定した --max-findings 1 が引き継がれていると書かれており、元の件数の制限に戻すには /code-review --max-findings default を実行するよう案内されていました。
報告された 1 件は、Step 4 と同じ stats.py:3(high)の指摘です。件数の制限で除外された問題として、stats.py:9-10(median の TypeError など)と stats.py:14(percent の ZeroDivisionError)の 2 件も書かれていました。
Step 6: 通常の上限に戻す
/code-review --max-findings default

件数の制限が通常の上限に戻り、5 件すべてが報告されました。指摘の箇所と重大度は Step 3 と同じです(high 2 件、medium 2 件、low 1 件)。
Step 3〜6 で報告された指摘の件数をまとめると、次のとおりです。
| Step | コマンド | 報告された指摘 |
|---|---|---|
| 3 | /code-review |
5 件 |
| 4 | /code-review --max-findings 1 |
1 件 |
| 5 | /code-review(フラグなし) |
1 件(Step 4 の 1 を引き継ぎ) |
| 6 | /code-review --max-findings default |
5 件 |
--max-findings 1 の指定は、フラグなしで実行した次のレビュー(Step 5)にも引き継がれ、--max-findings default を渡すと元に戻りました。CHANGELOG の「the choice is reused until you pass --max-findings default」のとおりの動作です。ただし、この差分では Step 3 と Step 6 の指摘が 5 件で、通常の上限に達したかどうかは画面からは分からないため、通常の上限の件数そのものは確認できていません。
なお、defaultは、通常の上限は 1 つの固定値ではなく、effort レベルとモデルの組み合わせによって変わるようです。
通常の上限より多くの指摘を 1 回のレビューで受け取れるようになりました。/code-review をマージ前の確認に使っている方には、試してみる価値のあるオプションだと感じます。
最後に
応答途中のタイムアウトや "Prompt is too long" での失敗、再開時の欠落など、長いタスクを途中で止めてしまう問題がまとめて修正されています。-p やサブエージェントで長時間の作業を任せる場面で、最後まで走り切れることが増えると感じます。
-p や bypassPermissions モードで Claude Code を動かしている方は特に、アップデートして試してみてはいかがでしょうか。
参考文献







