【要約】Claude Code の auto モードで rm -rf 事故を止める PreToolUse hook を書いた [Zenn_Python] | Summary by TechDistill
> Source: Zenn_Python
Execute Primary Source
// Problem
開発者がClaude Codeのautoモードを利用する際、AIの文脈誤認によるデータ消失のリスクに直面する。AIが意図せず破壊的なコマンドを実行する問題は、以下のパターンで発生する。
- ・
cwdの誤認によるプロジェクト直下の削除。 - ・空の変数を用いた
rm -rf $BUILD_DIRの実行。 - ・
~/.ssh等の重要ディレクトリの誤削除。
// Approach
著者は、
shlexを用いたトークン解析と、リスクに応じた3段階の判定ロジックを実装した。具体的には、以下の手法でコマンドの安全性を評価する。- ・
shlexによる解析:punctuation_chars=Trueを用い、引用符内を除外して正確にコマンドを特定。 - ・3段階判定の実施:
1.
deny: ルート、ホーム、重要設定、または展開不能な複雑なコマンド(パイプ、変数、glob等)。2.
ask: 対象パスが明確に列挙可能な単独のrm/rmdir。3.
allow: /tmp配下などの無害な操作。- ・Fail-closed設計:hook内で例外が発生した場合は、安全のために
denyを返す。
// Result
この実装により、AIの自律性と安全性のバランスを保った運用が可能となった。開発者は以下の恩恵を受けられる。
- ・
askにより、削除対象を人間に提示しつつ、安全な操作は自動化できる。 - ・
denyされた場合、人間が!を付けて手動実行する明確なワークフローが確立される。 - ・Python標準ライブラリのみで構成され、導入コストが極めて低い。
Senior Engineer Insight
> 「完璧な防御」を捨て、「よくある事故を減らすネット」と割り切った設計思想が極めて実戦的である。
shlexによるパースや、展開不能なコマンドをdenyにする判断は、エッジケースでの事故を防ぐ上で妥当だ。ただし、find -deleteや別インタプリタ経由の実行は防げない。あくまで多層防御の一環として運用すべきである。