Claude Code の危険なコマンドをブロックする Mod
rm -rf /、main への force-push、DROP TABLE、curl | sh などの破壊的な Bash コマンドを実行前に拒否します。
権限
- ツール呼び出しを傍受Claude が行うすべてのツール呼び出しを参照でき(tool.call / tool.check)、ブロックや変更も可能です。
- UI を変更Claude Code の画面に描画します。バンド、ペイン、ステータス表示、トーストなど(ui.render / $.ui.*)。
- 検証バージョン
- v2.1.291
- 最終検証日
- 必要バージョン
- Claude Code ≥ 2.1.287
- 表示先
- トースト
- ソース
- ClaudeMods (MIT)
Claude Code 内でインストール:
/plugin install cm-block-dangerous-commands --marketplace rotbit/claudemods-marketplaceこのModでできること
この Mod を使うと、Claude Code の危険なコマンドをブロックできます。対象は、Claude が Bash ツールで実行しようとしているシェルコマンドです。どのコマンドも実行される前に、短いルールの一覧と照合されます。ルールに該当したコマンドは拒否され、どのルールがなぜ発動したのかが Claude に伝えられ、あなたの画面にはルール名を示すトーストが表示されます。安全なコマンドはそのまま素通りします。
組み込みルールがカバーするのは次のとおりです。/、~、$HOME、.、* に対する rm -rf、main または master への git push --force、git clean -fdx、SQL の DROP TABLE、DROP DATABASE、DROP SCHEMA、TRUNCATE、chmod -R 777 /、mkfs、ディスクデバイスへの dd、生のディスクへの出力リダイレクト、curl や wget の出力をシェルへパイプする操作、そして古典的なフォーク爆弾です。git reset --hard はオプトインのルールとして用意されています。Claude Code 2.1.287 以降が必要です。
デモ
録画では、デモ用プロジェクトで Claude に破壊的な操作を頼んでいます。Mod は Bash の呼び出しを拒否し、該当したルール名がトーストで表示され、Claude はその理由を読んだうえで、コマンドを実行せずに応答します。
インストール
インストールブロックにあるいずれかの方法を使ってください。ガードは次のツール呼び出しから有効になります。/reload-plugins の後に再起動する必要はありません。
$ install cm-block-dangerous-commands
Claude Code 2.1.287 以上が必要
1.Claude Code 内で1行
/plugin install cm-block-dangerous-commands --marketplace rotbit/claudemods-marketplace実行中のセッション(v2.1.275 以降)に貼り付けます。最初に Claude Code がマーケットプレイスの追加を確認します。
2.シェルから
claude plugin marketplace add rotbit/claudemods-marketplace claude plugin install cm-block-dangerous-commands@claudemodsその後、すでに開いているセッションでは /reload-plugins を実行してください。
3.インストールせずに試す
git clone https://github.com/rotbit/claudemods-marketplace claude --plugin-dir ./claudemods-marketplace/cm-block-dangerous-commandsその1セッションだけ Mod を読み込みます。設定には何も追加されません。
仕組み
ロジックはすべて 1 つの tool.call フックに収まっています。hooks/register.ts から抜粋します。
on('tool.call', { tool: 'Bash' }, ($, e, next) => {
const match = findMatch(e.command, settings)
if (match === undefined) return next(e)
if (settings.mode === 'warn') {
$.ui.toast(`${$.plugin.name}: "${match.name}" is running (warn mode)`)
return next(e)
}
$.ui.toast(`${$.plugin.name}: blocked "${match.name}"`)
return { deny: denyReason($.plugin.name, match) }
}).catch(($, e, next) =>
next.called
? next(e)
: { deny: `${$.plugin.name}: its check failed, so the command was not run to be safe.` },
)マッチャー { tool: 'Bash' } により、このフックはシェルコマンドだけを受け取ります。hooks/rules.ts の findMatch は、まず allowPatterns を確認し、次に組み込みルール(オフにしたものは除く)、最後にあなたの extraPatterns を確認します。どれにも該当しなければ、next(e) によってコマンドは通常どおり実行されます。該当した場合、フックは { deny: reason } を返し、その理由が Claude の読むツール結果になります。
.catch ハンドラーこそが、この Mod を単なるフィルターではなくガードにしている部分です。next が呼ばれる前にチェックが例外を投げた場合、呼び出しは許可されずに拒否されます。つまり、この Mod はフェイルクローズで動作します。また session.start フックは、カスタムパターンの中に正しくない正規表現があると、一度だけトーストで知らせます。
rules.ts の各ルールは、ID、名前、1 文の理由、そしてテストで検証されるコマンド例を持つ、ただのデータです。
カスタマイズ
以下のオプションは /config で変更できます。mode: warn にすると、ガードは通知役に変わります。該当するコマンドも実行され、トーストで知らせるだけになります。extraPatterns と allowPatterns には JavaScript の正規表現を 1 項目に 1 つずつ指定します。組み込みルールそのものを変えたい場合は、hooks/rules.ts の RULES 配列にある該当ルールの pattern を編集してください。
| 設定 | 型 | デフォルト | 説明 |
|---|---|---|---|
| mode | string (block | warn) | "block" | Mode. block refuses a matching command; warn lets it run and shows a toast. |
| blockForcePush | boolean | true | Block force-push to main/master. Refuse git push --force / -f / +main to main or master. |
| blockHardReset | boolean | false | Block git reset --hard. Also refuse git reset --hard (off by default: it is a common, recoverable-ish workflow). |
| extraPatterns | string | [] | Extra patterns. Additional JavaScript regular expressions; a Bash command matching any of them is treated as dangerous. |
| allowPatterns | string | [] | Allow patterns. JavaScript regular expressions; a Bash command matching any of them is never blocked, whatever else it matches. |
Claude Code の /config で変更できます。Mod はホットリロードされます。
権限と安全性
ツール呼び出しを傍受 は、この Mod が存在する理由そのものです。すべての Bash コマンドを実行前に確認し、拒否することができます。コマンドを書き換えることはなく、自分でコマンドを実行することもありません。UI を変更 はトースト表示のためのものです。それ以外に、ファイル、ネットワーク、モデル、コマンドへの独自のアクセスは一切持ちません。
これは事故を防ぐための保護であり、サンドボックスではありません。パターンを回避するように組み立てられたコマンドは通ってしまうため、Claude Code の権限確認プロンプトは有効のままにしておいてください。Mod を無効にするには /plugin disable cm-block-dangerous-commands を実行します。すべての Mod をオフにしてセッションを始めるには claude --safe-mode を使います。
- ツール呼び出しを傍受
- Claude が行うすべてのツール呼び出しを参照でき(tool.call / tool.check)、ブロックや変更も可能です。
- UI を変更
- Claude Code の画面に描画します。バンド、ペイン、ステータス表示、トーストなど(ui.render / $.ui.*)。
互換性とトラブルシューティング
macOS のターミナル上で Claude Code 2.1.291 にてテスト済みです。ブロックされるはずのコマンドが実行されてしまう場合は、次を確認してください。
claude --versionが 2.1.287 以降であること、そして/pluginでこの Mod が有効になっていること。- シェルからインストールした場合は
/reload-pluginsを実行すること。 /configでmodeがwarnではなくblockになっていること。allowPatternsのエントリーが、意図した以上に広くマッチしていないこと。- ガードが対象とするのは
Bashツールだけです。EditやWriteによるファイル編集はチェックされません。
安全なコマンドが拒否される場合は、Mod 全体を warn モードに切り替えるのではなく、範囲を絞った許可パターンを追加してください。
よくある質問
- この Mod は Claude Code の権限確認プロンプトの代わりになりますか?
- いいえ。これはよくある事故を防ぐためのパターンによるガードです。難読化されたコマンドは正規表現をすり抜ける可能性があるため、権限確認プロンプトと deny ルールは有効のままにしておいてください。
- コマンドがブロックされたとき、Claude には何が伝わりますか?
- 呼び出しは拒否され、該当したルール名とその理由、そしてユーザー自身に実行してもらうか /config の allowPatterns や mode を調整するよう提案する説明が返されます。Claude はたいてい、より安全なコマンドを選ぶか、あなたに確認を求めます。
- 特定のコマンドだけを許可するにはどうすればよいですか?
- /config の allowPatterns に正規表現を追加してください。ここにマッチしたものは、組み込みルールや extraPatterns よりも常に優先されます。
- git reset --hard はブロックされますか?
- デフォルトではブロックされません。一般的で、意図して使われることも多い操作だからです。ブロックしたい場合は blockHardReset をオンにしてください。
- Mod 自体がクラッシュした場合はどうなりますか?
- tool.call フックはフェイルクローズで動作します。コマンドの実行前にチェック処理が例外を投げた場合、そのコマンドは「チェックに失敗した」というメッセージとともに拒否されます。
# 関連する Mod

プロンプト上の Git ブランチ表示
Git のブランチ、変更ファイル数、ahead/behind の状態を Claude Code のプロンプトの上に 1 行で表示します。
- プロンプト上部
- コマンドを実行
- ツール呼び出しを傍受
- UI を変更
v2.1.291 で検証済み

完了トースト
Claude の長いターンが終わると「Done in 2m 14s」のトーストと短いチャイムでお知らせ。デスクトップ通知にも対応します。
- トースト
- コマンドを実行
- UI を変更
- 音を再生
v2.1.291 で検証済み

ツール呼び出しカウンター
Claude のツール呼び出しをターンごと・セッションごとに数え、スピナーの横に件数を表示。/tally で内訳も確認できます。
- スピナー
- トランスクリプト
- ステータス
- ツール呼び出しを傍受
- UI を変更
- コマンド・ツールを追加
v2.1.291 で検証済み
同じカテゴリの Mod: 安全ガード、Git と GitHub。