Claude Codeを恐れるのをやめて、Guard Hooksを愛せるようになった方法
想像してみてください:あなたは安乐椅に舒适に座り、コーヒーをめながら、お気に入りのAIエージェント(Claude CodeでもCursorでもGitHub Copilot CLIでも)がリファクタリング作业を完了したと嬉しそうに报告している场景を。突然、rm -rf、甚至是更有趣的、sudo rm -rf /がターミナルに闪过。你可能会感到喉咙里卡了咖啡,那些未提交的更改——数小时的无偿劳动——就这样化为乌有。
ニューラルネットワークの「幻覚」に怯える、あの无力感を感じたことがありますか?私の实务では、このような状况が数回あり、そのたびに痛い教训となりました。だから、destructive_command_guardプロジェクト(略してdcg)に目が留まりました。「革命的なプラットフォーム」ではなく、非常に高速で大胆なターミナル用の番犬です。
この野兽是什么
简単に言えば、dcgはRustで書かれた高性能なフックです。あなた(またはAIエージェント)とコマンドライン間の通信プロセスを傍受します。破坏的なコマンドが何かを壊す前に拦截することだけが目的です。
このツールは、現在のAI開発世界でトレンドのほとんどに対応しています:Claude Code、Codex CLI、Gemini CLI、Copilot CLI、Cursor IDE、Grok、さらにはHermes Agentのようなエキゾチックなオプションまで。Linux、macOS、Windows(WSLまたはPowerShell経由)で动作します。
なぜ通常のgrepでは助からないのか
なぜRustプロジェクト全体を作る必要があるのか、简单なBashやPythonスクリプトで十分ではないかと思いますよね?プロジェクトの著者であるJeffrey Emanuelもそう思って试みました:初版はPythonでした。しかし、最新のタスクにはよりニュアンスのあるアプローチが必要であることがすぐにわかりました。
コンテキストが全て
dcgは単に文字列rm -rfを検索するだけでなく、コンテキストを分析します。エージェントがドキュメントに「don't use rm -rf /」と书いている场合、フックはこれがデータであることを理解し、ファイル書き込みをブロックしません。しかし、コマンドの実行が话题になる场は别です——ブロックが発动します。
そのため、3レベルの検証システムが采用されています:
- SIMD命介による高速サブストリング検索(クイックリジェクト)。これはマイクロ秒単位で动作します。
- コマンドの正规化(余分なスペースの削除、绝对パス相对パスへの置換)。
- 正規表现を使った复杂なパターンとの照合。
「隠された」脅威からの保护
興味深い机能——Heredocとインラインスクリプトのスキャン。エージェントがrm -rfを呼び出す决め手を打った场合、简単なコマンドラインフィルタでは通过させてしまいます。dcgはそのような构造の内部に掘り下げ、AST(抽象構文木)を使って解析し、怪しい関数呼び出しを見つけ出します。
具体的に何をブロックするのか
設定何もしていなくても、dcgは以下の最も恐ろしいものを保护します:
rm -rf、sudo rm -rf /、dd if=/dev/zero。- 一時フォルダ以外の
git push --force。 - ディスクフォーマット、パーティション削除、その他のシステム上の危険な操作。
しかし、最も良いのは「パック」(セキュリティパック)です。リポジトリには50以上があります。dcg.tomlで特定技術の保护を有効にできます:
[packs]
enabled = [
"database.postgresql", # Заблокирует DROP TABLE
"kubernetes.kubectl", # Не даст удалить namespace по ошибке
"cloud.aws", # Спасет от случайного terminate-instances
"containers.docker", # Ограничит docker system prune
]
实务ではどのように动作するか
たとえば、エージェントが気が触れてすべての変更をリセットしようと决めた场合。ターミナルに次のようなものが表示されます:
════════════════════════════════════════════════════════════════
BLOCKED dcg
────────────────────────────────────────────────────────────────
Reason: git reset --hard destroys uncommitted changes
Command: git reset --hard HEAD~5
Tip: Consider using 'git stash' first to save your changes.
════════════════════════════════════════════════════════════════
ブロックには役立つアドバイスが付いています。ほとんどの场合、エージェントはこの拒絶を受け取り、错误を认识して、より安全な替代案(例:git stashの使用)を提案します。
技術的な内部构造とパフォーマンス
感动したのはパフォーマンスへのアプローチです。著者はサブミリ秒のレイテンシを主张しています。细部好きな方のために:
- Rust + SIMD:プロセッサのベクトル命令を使用して、超高速なキーワード検索を行います。
- デュアル正規表現エンジン:简单なパターンは线形実行時間で动作する高速なエンジンが処理し、复杂なもの(先読み/後読みが必要な场合)はより強力だが遅い
regexが処理します。 - ゼロアロケーション:ホットパスでは、プログラムはヒープメモリを割り当てないように尝试します。これは、フックがすべてのキーストロークまたはエージェントコマンドで呼び出される场に極めて重要です。
ちなみに、このプロジェクトはフェイルオープン哲学を実装しています。dcgが割り当てられた時間予算内(デフォルトで200ms)にコマンドの分析が完了しない场合、通过させます。これは、ツールが通常の作业の妨げになる「ブレーキ」にならないようにするためです。私の见解では、セキュリティと使いやすさの合理的なトレードオフです。
ワークフローへの統合方法
试してみる最简单的方法は、READMEからのインストールスクリプトを実行することです。OSを判別し、適切なバイナリをダウンロードして、AIエージェントの設定ファイルを構成します。
Claude Codeの場合、claude_desktop_config.jsonにセクションを追加するだけです:
{
"hooks": {
"PreToolUse": [
{
"matcher": "Bash",
"hooks": [{ "type": "command", "command": "dcg" }]
}
]
}
}
チームで作业していて、誰かが破坏的なgit push --forceや壊れたCIパイプラインをコミットしていないことを確認したい場合は、スキャンモードがあります:
dcg scan --staged
プリコミットフックに挂钩して、Gitにプッシュしようとしているすべてのファイルをチェックできます。
缺点について
完璧なツールはありません。何が问题になる可能性がありますか?
- 误検知:高度な解析にもかかわらず、
dcgが完全に正当なコマンドをブロックする场があります。この场合、DCG_BYPASS环境変数またはDCG_UNLOCK_CODEシステムによる「非常口」が用意されています。 - 設定の复杂度:特定の必要がある场、TOML設定ファイルを掘り下げる必要があります。
- Rust Nightly:ソースからプロジェクトをビルドしたい場合は、2024年版の机能が使用されているため、Rustのナイトリー版が必要です。
これは谁に必要なのか
週に1回以上AIエージェントを使用し、ターミナルでのコマンド実行を信赖しているなら、迷うことなくインストールしてください。安上がりな保険です。神经망が提案した「キャッシュクリーナー」コマンドが实际上はシステムの半分を消去していたことに初心者がすぐに気づかない可能性がある场に、これは特に重要です。
経験豊富な開発者にとっては、神経をセーブする方法として适しています。私たちは皆、自动操縦でCtrl+Cを押すのがどれほど简单か知っていて、その後に最後のバックアップがいつだったかを必死に思い出します。
dcgは那种悄无声息地在后台运行、「不需要喂食」直到关键时刻到来的工具。它不会变魔术,只是解析字符串做得好,知道坏的命令是什么样子。在我们越来越多地将代码编写和执行委托给机器的世界里,这样的「数字保险丝」正在成为工作环境的必备属性。
少なくとも、现代のRustソフトウェアがどれほど速いか试してみる価値はあります。それと、AIにファイルの削除を信赖したことはありますか?どうなりましたか?
関連プロジェクト