Blast Radius:Claude Code の rm -rf プレビューで影響を先に確認
rm -r、強制プッシュ、データベースのマイグレーションを実行前に止め、影響を受けるファイルやコミットを一覧表示して、あなたの判断を待ちます。
権限
- コマンドを実行お使いのマシン上でシェルのプログラムを実行できます($.process.run / spawn)。具体的に何を実行するかはソースで確認してください。
- ツール呼び出しを傍受Claude が行うすべてのツール呼び出しを参照でき(tool.call / tool.check)、ブロックや変更も可能です。
- UI を変更Claude Code の画面に描画します。バンド、ペイン、ステータス表示、トーストなど(ui.render / $.ui.*)。
- 検証バージョン
- v2.1.291
- 最終検証日
- 必要バージョン
- Claude Code ≥ 2.1.287
- 表示先
- ペイン、プロンプト上部
Claude Code 内でインストール:
/plugin install blast-radius --marketplace hamzafer/claude-code-modsこのModでできること
Blast Radius は Claude Code の rm -rf プレビューを行うコミュニティ Mod で、Hamza Zafar(hamzafer)の claude-code-mods コレクションに含まれています。Claude が Bash ツールを通じて危険なシェルコマンドを実行しようとすると、Mod はそれを保留し、何が変わるのかを見せてから、あなたが Cancel か Proceed を押すのを待ちます。
保留されるコマンドは 3 種類です。再帰的な rm では、削除されるファイルの一覧と合計サイズが表示されます(例:delete 42 files (1.3 MB))。~ と $HOME は展開されますが、それ以外のシェル変数、コマンド置換、~user を含むパスについては、推測で表示する代わりに "can't preview" と表示します。git push --force では、最後の fetch 時点を基準に、失われるリモートのコミットとプッシュされるローカルのコミットを一覧表示します。データベースのマイグレーション(prisma、supabase、drizzle-kit、knex、sequelize、rails、alembic、typeorm)はプレビューできないため、名前がマイグレーションやスキーマらしい未コミットのファイルを一覧表示します。
レポートはサイドペインで開きます。ターミナルの幅がペインには狭すぎる場合は、プロンプトの上の帯に表示されます。デフォルトでフォーカスされているのは Cancel(ホットキー c)で、Proceed は y です。カウントダウンが auto-cancels in 42 s のように表示され、60 秒以内に応答がなければコマンドはキャンセルされます。どちらの場合も Claude には理由が伝えられるので、無人のセッションでも止まらずに続行します。一度に保留されるコマンドはひとつだけで、2 つ目は順番を待ち、その後で自分のカウントダウンを最初から受け取ります。
私たちの 危険なコマンドのブロック は決まった破壊的パターンを即座に拒否しますが、Blast Radius は「事実を見せてから尋ねる」タイプのガードです。あなたが承認したコマンドを止めることはなく、致命的な対象だけでなく普通の rm -r もカバーします。2 つを併用することもできます。作者の README によると、Claude Code 2.1.287 以降が必要です。
デモ
録画では、デモプロジェクトに小さなファイルを 3 つ入れた使い捨ての dist フォルダーを作り、Claude に rm -r dist の実行を依頼します。Blast Radius は実行前にコマンドを保留し、削除される内容(3 ファイル、12 KB、各パスの一覧)を、Cancel・Proceed ボタンと自動キャンセルのカウントダウンとともに表示します。Cancel を押すので、何も削除されません。
インストール
インストールブロックのいずれかの方法を使ってください。どれも作者自身のマーケットプレイスから直接インストールします。プラグインが読み込まれた時点でガードが有効になります。
$ install blast-radius
Claude Code 2.1.287 以上が必要
作者のマーケットプレイスからインストール: hamzafer/claude-code-mods
1.Claude Code 内で1行
/plugin install blast-radius --marketplace hamzafer/claude-code-mods実行中のセッション(v2.1.275 以降)に貼り付けます。最初に Claude Code がマーケットプレイスの追加を確認します。
2.シェルから
claude plugin marketplace add hamzafer/claude-code-mods claude plugin install blast-radius@claude-code-modsその後、すでに開いているセッションでは /reload-plugins を実行してください。
3.インストールせずに試す
git clone https://github.com/hamzafer/claude-code-mods claude --plugin-dir ./claude-code-mods/mods/blast-radiusその1セッションだけ Mod を読み込みます。設定には何も追加されません。
仕組み
Mod は Bash の tool.call にフックします。純粋関数 classify がコマンドを &&、||、;、改行で分割し、3 種類の危険なコマンドを探します。どれにも当てはまらなければ、呼び出しは next(e) でそのまま通過します。以下は hooks/register.tsx の、再帰削除のプレビュー部分です。
// Unquoted $t expands globs, and nothing else, without running the command.
const script =
'shopt -s nullglob; for t in "$@"; do for p in $t; do [ -e "$p" ] || continue; ' +
'echo "S $(du -sk "$p" | cut -f1)"; find "$p" -type f | head -n 5000 | sed "s/^/F /"; done; done'
const r = await $.process.run(['bash', '-c', script, 'blast-radius', ...targets], init)対象はスクリプトに埋め込まれるのではなく引数として渡され、一覧は 5000 ファイルで打ち切られます。計測が終わると、Mod は保留中のコマンドを $.state アトムに保存し、$.ui.open で blast-radius ペインを開いて、ボタンの押下、期限、呼び出しの中断を 0.25 秒ごとにポーリングします。Proceed は next(e) を返すので、コマンドは書かれたとおりに実行されます。Cancel またはタイムアウトでは、プレビューの要約を含むメッセージ付きの { deny: ... } を返します。これらすべての前に $.session.surfaces() がチェックされ、画面がない場合は呼び出しが即座に拒否されます。
カスタマイズ
設定項目は timeoutSeconds(デフォルト 60、最小 0)のひとつで、保留されたコマンドがキャンセルされるまでの待ち時間を決めます。0 にすると無期限に待ち、カウントダウンは非表示になります。/config の Mod 名の下、または settings.json の pluginConfigs で変更してください。マイグレーションツールの一覧は register.tsx 先頭の正規表現 MIGRATION で、MAX_LISTED(200)はレポートに表示する行数の上限です。
権限と安全性
私たちは実行前に、プラグインが実行しうるすべてのファイル(hooks/hooks.json、hooks/register.tsx、型宣言、テスト)を読みました。package.json、インストールスクリプト、バンドルされたコードはありません。
ツール呼び出しの介入 が表示されるのは、Mod が Bash の呼び出しを関門として扱うためです。保留や拒否はできますが、コマンドを書き換えることはありません。コマンドの実行 は $.process.run によるものです。実行するプログラムは読み取り専用で、上記の du/find スクリプトを使った bash -c、強制プッシュ用の 2 回の git log --oneline、マイグレーション用の git status --porcelain、そしてポーリングループの sleep 0.25 です。各プレビューの呼び出しには 10 秒のタイムアウトがあります。非常に大きな対象では、du と find がそのタイムアウトまでかかることがある点に注意してください。~ を展開するために環境変数 HOME を読み取ります。UI の変更 はペインと帯に対応します。
ファイルの書き込み、ネットワークの使用、モデルの呼び出しは行いません。claude plugin validate はエラーも警告も報告せず、作者の 17 件のテストは Claude Code 2.1.291 ですべて成功しました。サンドボックスではなく、もう一度見直すための仕組みとして扱ってください。rm を変数や別のプログラムの陰に隠したコマンドは分類されません。
- コマンドを実行
- お使いのマシン上でシェルのプログラムを実行できます($.process.run / spawn)。具体的に何を実行するかはソースで確認してください。
- ツール呼び出しを傍受
- Claude が行うすべてのツール呼び出しを参照でき(tool.call / tool.check)、ブロックや変更も可能です。
- UI を変更
- Claude Code の画面に描画します。バンド、ペイン、ステータス表示、トーストなど(ui.render / $.ui.*)。
互換性とトラブルシューティング
macOS 上の Claude Code 2.1.291 で確認しました(validate とテスト)。危険なコマンドが保留されない場合は、次を確認してください。
claude --versionが 2.1.287 以降で、/pluginで Mod が有効になっていること。- コマンドが 3 種類のいずれかであること。
-rなしの単純なrm file.txtは保留されません。 - 強制プッシュのプレビューは、最後の fetch 時点のアップストリームを基準にコミットを数えます。最新の一覧を見るには
git fetchを実行してください。 claude -pなど画面のないセッションでは、保留されたコマンドは表示されずに即座に拒否されます。
よくある質問
- Blast Radius はどのコマンドを止めますか?
- 再帰的な rm(rm -r、rm -rf、rm --recursive、sudo の後に続くものも含む)、-f・--force・--force-with-lease または +refspec 付きの git push、そして prisma、supabase、drizzle-kit、knex、sequelize、rails、alembic、typeorm のマイグレーションコマンドです。複合コマンドは各部分がチェックされます。
- プレビューのために危険なコマンドを実行しますか?
- いいえ。rm の場合は、glob の展開だけを行う bash スクリプトの中で対象に du と find を実行します。強制プッシュの場合は、最後の fetch 時点のアップストリームに対して git log を 2 回実行します。マイグレーションの場合は git status を実行します。それぞれ 10 秒のタイムアウトがあります。
- 誰も応答しなかったらどうなりますか?
- 60 秒後にコマンドはキャンセルされ、Claude には何をしようとしていたか、そして自分の判断で再試行しないよう伝えられます。待ち時間を変えるには timeoutSeconds を設定してください。0 にすると無期限に待ちます。
- claude -p やヘッドレス実行ではどうなりますか?
- 画面がつながっていないとボタンを押せる人がいないため、止められたコマンドはプレビューを含む理由とともに即座に拒否されます。
- 危険なコマンドのブロック(cm-block-dangerous-commands)とは何が違いますか?
- 危険なコマンドのブロックは、該当するコマンドをトーストとともに即座に拒否します。Blast Radius は代わりにあなたに尋ね、何が削除・上書きされるかを示し、Proceed を押せばコマンドをそのまま実行します。
# 関連する Mod
おすすめ危険なコマンドのブロック
rm -rf /、main への force-push、DROP TABLE、curl | sh などの破壊的な Bash コマンドを実行前に拒否します。
- トースト
- ツール呼び出しを傍受
- UI を変更
v2.1.310 で検証済み
おすすめプロンプト上の Git ブランチ表示
Git のブランチ、変更ファイル数、ahead/behind の状態を Claude Code のプロンプトの上に 1 行で表示します。
- プロンプト上部
- コマンドを実行
- ツール呼び出しを傍受
- UI を変更
v2.1.310 で検証済み
同じカテゴリの Mod: 安全ガード、Git と GitHub。