CLAUDE.md に「ファイル削除禁止」と書いていても、Claude が間違えて rm -rf を実行する可能性はゼロではありません。settings.json の hooks 機能で、特定コマンドが走る前に物理的に止める設定を入れておくと、ルール違反を実行段階で阻止できます。本当に守らせたい禁止事項は、文章のルールではなく hooks で押さえるのが安全です。
settings.json に書く最小の形(公式ドキュメント2026-09-21確認)
Bash の実行前にチェックスクリプトを挟む、最小の設定は次の形です。matcher で対象を Bash ツールに絞り、command にチェックスクリプトのパスを書きます。
{
"hooks": {
"PreToolUse": [
{
"matcher": "Bash",
"hooks": [
{
"type": "command",
"command": "/path/to/check-command.sh"
}
]
}
]
}
}
このスクリプトが危険なコマンドを検出して標準エラー出力にメッセージを書き、終了コード 2 で終わると、その Bash コマンドの実行はブロックされます(終了コード 0 なら決定なしとして、通常どおり実行されます)。
この設定は、プロジェクトの .claude/settings.json に書けばそのリポジトリだけに効き、~/.claude/settings.json に書けば手元の全プロジェクトに効きます。入れたら実際に危険なコマンドを頼んでみて、途中で止まるかを確認します。