[STATUS: ONLINE] 当サイトは要約付きのエンジニア向けFeedです。

TechDistill.dev

[DISCLAIMER] 当サイトの要約は正確性を保証しません。気になる記事は必ず原文を確認してください。
cd ..

【要約】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や別インタプリタ経由の実行は防げない。あくまで多層防御の一環として運用すべきである。

[ RELATED_KERNELS_DETECTED ]

cd ..

> System.About()

TechDistillは、膨大な技術記事から情報の真髄(Kernel)のみを抽出・提示します。