0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Claude Codeのrm -rfでC:\Usersが全削除された事故を防ぐワンコマンドツールを作った

0
Posted at

何が起きたか

GitHubのClaude CodeリポジトリにIssue #36339が投稿された。

自律モードのClaude Codeがrm -rfをプロジェクトディレクトリに実行した。Windows 11 + WSL2の環境。ディレクトリにはNTFS junction(シンボリックリンクの一種)が含まれていた。

rm -rfはjunctionを辿り、プロジェクトディレクトリだけでなくC:\Users配下を全削除した。

ドキュメント、ダウンロード、デスクトップ。全部消えた。

なぜ起きたか

Claude Codeはデフォルトで安全フックが0個rm -rf /を実行しても止める仕組みがない。

ドキュメントにはフックの存在は書いてある。でも自動設定はされない。自分でbashスクリプトを書いて、settings.jsonに登録する必要がある。ほとんどの人はやらない。

作ったもの

npx cc-safe-setup

10秒で4つの安全フックを自動インストールする。

フック 何を防ぐか
Destructive Guard rm -rf /rm -rf ~rm -rf ..git reset --hardgit clean -fdもブロック
Branch Guard main/masterへの直接push
Syntax Check Python/Shell/JSON/YAML/JSの構文エラーを編集直後に検出
Context Monitor コンテキストウィンドウが80%を超えたら警告

各フックは実際の事故から作られた。Destructive Guardは#36339のrm -rf事故。Branch Guardは深夜3時にmainにpushされた事故。Syntax Checkは構文エラーが30ファイルに連鎖した事故。

仕組み

  1. ~/.claude/hooks/に4つのシェルスクリプトを書き出す
  2. ~/.claude/settings.jsonにフック登録を追加
  3. Claude Codeを再起動すれば有効

フックはPreToolUse(コマンド実行前)とPostToolUse(ファイル編集後)の2種類。PreToolUseフックがexit 2を返すとコマンドがブロックされる。

Destructive Guardの核心部分:

# rm on sensitive paths → ブロック
if echo "$COMMAND" | grep -qE 'rm\s+(-[rf]+\s+)*(/$|/\s|/home|~)'; then
    echo "BLOCKED: rm on sensitive path" >&2
    exit 2
fi
# ただしnode_modules/dist/buildは許可

インストール後

セットアップの確認:

npx cc-health-check

cc-safe-setupで4つの安全フックをインストールすると、Safety Guardsスコアが50% → 90%に上がる。

全体像

npx cc-health-check  → 診断(無料)
npx cc-safe-setup    → 4フック修正(無料)
claude-code-hooks    → 11フック全部(無料OSS)
Ops Kit $19          → 全部入り+独占ツール

🛠 無料で始める: claude-code-hooks — 11個のproduction hooksをOSS公開中

📖 もっと詳しく: Claude Codeを本番品質にする実践ガイド(¥800)

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?