Claude Code の rm -rf 事故を防ぐ

Claude Code は端末をフルに操作できます。rm -rf / を走らせてファイルシステムごと消すことが、実際に起きています。これは仮の risk ではありません。GitHub に報告された実際の事故です。

実際の事故

🆕 1,500ファイル・50GBが永久に消えた(2026年4月)

Claude がファイルをサブディレクトリへ移動し、その後で親ディレクトリを rm -rf した——移動したばかりのファイルごと破壊した。移動先が移動元の子だったという、計画の論理の失敗。

#49129 — 48時間で3件目のデータ消失

C:\Users ディレクトリ全体が NTFS ジャンクション経由で消えた

rm -rf が NTFS のジャンクションを辿り、ユーザープロファイルのディレクトリ全体を消した。文書も設定もインストール済みのプログラムも、すべて消失。

#36339 — 40件以上の反応

Remove-Item -Recurse -Force で全ソースコードが破壊された

Claude がリポジトリのルートで Remove-Item -Recurse -Force * を実行し、未 push のソースコードをすべて破壊した。

#37331

「掃除」の作業中に Mac のファイルシステム全体が消えた

「掃除」のタスクの最中に、Claude が macOS の重要なシステムディレクトリを消した。

#36233

午前3時に force-push が共有ブランチの履歴を書き換えた

自律で動いていた Claude Code のセッションが、開発者が眠っている間に main へ force push し、共有ブランチの履歴を書き換えた。

#36640

🆕 Opus 4.7: 安全の分類器が壊れ、3日で23件以上のデータ消失(2026年4月)

auto モードの安全の分類器が Opus 4.6 に固定されていた。既定のモデルが Opus 4.7 になると分類器が機能せず、auto モードの利用者は安全の関門なしで走っていた。結果: ~/.ssh が消えたgit-credentials が消えたbash_profile と zshrc が0バイトに切り詰められた

hook はモデルに依存しません。どの Opus の版で走っていても効きます。

なぜ CLAUDE.md では防げないか

CLAUDE.md のルールはプロンプトの文脈の一部です。文脈が一杯になると、ルールは押し出されます。Claude はそれを無視できますし、実際に無視します。「rm -rf を決して走らせるな」というルールはお願いであって、強制ではありません。

解決: PreToolUse の hook

Claude Code の Hooks はプロセスの層で、モデルの制御の外で動きます。終了コード2で終わる PreToolUse の hook は、その道具の呼び出しを止めます。モデルはこれを迂回できません。

destructive-guard.sh — rm -rf を止める hook:

#!/bin/bash
INPUT=$(cat)
COMMAND=$(echo "$INPUT" | jq -r '.tool_input.command // empty')

# Block rm -rf with dangerous targets
if echo "$COMMAND" | grep -qE 'rm\s+.*-[rRf]*[rR][rRf]*\s+(/|~|\$HOME|\.\.)'; then
  echo "BLOCKED: Destructive rm command targeting root/home" >&2
  exit 2
fi

exit 0

8つの安全 hook を10秒で入れる

npx cc-safe-setup

rm -rf を止め、main への force push を防ぎ、秘密の漏洩を捕まえ、編集のたびに構文を検証します。9,200以上のテスト 734の hook

GitHub · npm · はじめにの手引き

設定を検証する

npx cc-safe-setup --verify

各 hook にテストの入力を送り、正しく止まることを確認します:

destructive-guard:
  ✔ rm -rf / → BLOCKED
  ✔ rm -rf node_modules → ALLOWED
8/8 hooks verified

安全のスコアを測る

npx cc-health-check

無料の20点の診断。80点を下回るなら、Claude Code の設定に隙間があります。

cc-safe-setup はオープンソースで、依存はなく、グローバルには何も入れません。すべての hook はローカルで動きます。GitHub でソースを見る

さらに詳しく: 事故防止の実践ガイド(Zenn) · English version · 全ツール