destructive-command-guard について
Claude Code 向けのコマンドガードで、Bash コマンド実行前に既知の破壊的操作をブロックします。エージェントの誤操作を減らしたい開発環境向けで、未認識のコマンドは既定で許可し、セキュリティパックを設定できます。
主な機能
- 01PreToolUse フックとしてBash呼び出しを検査
- 02破壊的なパターンより安全なパターンを先に確認
- 03カテゴリ別のセキュリティパック設定
- 04ファイル内の破壊的コマンド文脈をスキャン
- 05未認識のコマンドを既定で許可
活用シーン
- 01git の強制リセットなどをブロック
- 02ファイルシステムの削除コマンドを制限
- 03データベースやクラウド向けパックを有効化
- 04CIでファイル中のコマンド文脈をスキャン
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ oakoss/ agent-skills --skill destructive-command-guardインストール後、Claude Code で/destructive-command-guardを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/command-detection.mdinstallation.mdpack-configuration.mdsafety-patterns.mdtroubleshooting.md詳細
Destructive Command Guard
破壊的なコマンドを実行前に検知してブロックする、高性能な Claude Code フックです。Rust で記述されており、memchr クレートによる SIMD 加速フィルタリングと Aho-Corasick による複数パターンマッチングで、サブミリ秒のレイテンシを実現します。エージェントは善意を持つものの、誤りを犯す可能性があるという前提に基づいています。
Overview
DCG はホワイトリスト優先のアーキテクチャを採用しています。破壊的なパターンの前に安全なパターンをチェックし、認識されないコマンドはデフォルトで許可されます(フェイルセーフ)。これにより、正当なワークフローを妨げず、既知の危険なパターンを常にブロックできます。DCG は Claude Code の PreToolUse フックとして動作し、Bash ツールが呼び出されるたびに標準入力から JSON を受け取り、終了コード 0(許可)または 2(ブロック)を返します。検査対象は Bash ツールの直接の呼び出しのみであり、シェルスクリプトの内容は検査しません。
処理パイプラインは、JSON 解析、コマンドの正規化(/usr/bin/git のような絶対パスを除去)、SIMD クイックリジェクトフィルター(git または rm を含まないコマンドでは正規表現による検査を省略)、パターンマッチングの4段階で構成されています。memchr クレートはハードウェアで高速化された部分文字列検索(x86_64 では SSE2/AVX2、ARM では NEON)を提供し、Aho-Corasick はパターン数にかかわらず O(n) の時間で複数パターンを処理します。
DCG は、カテゴリ別(git、ファイルシステム、データベース、コンテナ、Kubernetes、クラウドプロバイダー、インフラストラクチャツール)に整理された49以上のモジュール式セキュリティパックに対応しています。コアパック(core.git、core.filesystem)は常に有効です。追加のパックは ~/.config/dcg/config.toml または DCG_PACKS 環境変数で設定します。dcg scan サブコマンドを使うと、破壊的なコマンドが含まれるコンテキストをファイル内で監査することもでき、CI との連携に適しています。
DCG は crates.io では公開されていません。cargo +nightly install または Linux、macOS、Windows WSL 向けのビルド済みバイナリを使って、GitHub からインストールします。脅威モデルは、エージェントは善意を持つものの誤りを犯す可能性があることを前提としています。DCG は正直な間違いを検出しますが、敵対的な攻撃には対応しません。
クイックリファレンス
| カテゴリ | ブロックされるコマンド |
|---|---|
| 未コミットの作業 | git reset --hard、git checkout -- <file>、git restore <file>、git clean -f |
| リモートの履歴 | git push --force / -f、git branch -D |
| stash した作業 | git stash drop、git stash clear |
| ファイルシステム | /tmp、/var/tmp、$TMPDIR の外での rm -rf |
| カテゴリ | 許可されるコマンド |
|---|---|
| 安全な git | git status、git log、git diff、git add、git commit、git push、git pull、git fetch、git branch -d、git stash、git stash pop |
| 安全なパターン | git checkout -b、git restore --staged、git clean -n、git push --force-with-lease |
| 一時ディレクトリ | rm -rf /tmp/*、rm -rf $TMPDIR/* |
| 設定 | 値 |
|---|---|
| 終了コード(安全) | 0 |
| 終了コード(ブロック) | 2 |
| デフォルトの動作 | 許可(フェイルセーフ) |
| パターンの優先順位 | 安全なパターンを先にチェックし、その後に破壊的なパターンをチェック |
| 安全なパターン | 34 |
| 破壊的なパターン | 16 |
| パックカテゴリー | 例 |
| -------------- | --------------------------------------------------------------- |
| コア(デフォルト) | core.git、core.filesystem |
| データベース | database.postgresql、database.mysql、database.mongodb |
| コンテナー | containers.docker、containers.compose、containers.podman |
| Kubernetes | kubernetes.kubectl、kubernetes.helm、kubernetes.kustomize |
| クラウド | cloud.aws、cloud.gcp、cloud.azure |
| インフラストラクチャ | infrastructure.terraform、infrastructure.ansible |
| システム | system.disk、system.permissions、system.services |
| その他 | strict_git、package_managers |
| 環境変数 | 用途 |
|---|---|
DCG_PACKS | パックを有効化します(カンマ区切り) |
DCG_DISABLE | 特定のパックを無効化します |
DCG_VERBOSE | 詳細な出力を有効にします |
DCG_BYPASS | DCG を完全にバイパスします(緊急用) |
DCG_COLOR | 色の表示モード(auto、always、never) |
| インストール方法 | コマンド |
|---|---|
| クイックインストール | curl -fsSL ".../install.sh" | bash -s -- --easy-mode |
| ソースからインストール | cargo +nightly install --git https://github.com/Dicklesworthstone/destructive_command_guard destructive_command_guard |
| ビルド済みバイナリ | Linux x86_64、Linux ARM64、macOS Intel、macOS Apple Silicon、Windows WSL |
| 処理段階 | 説明 |
|---|---|
| JSON の解析 | PreToolUse フックの入力を読み取り、Bash 以外のツールを許可します |
| 正規化 | 絶対パスを取り除きます(/usr/bin/git は git になります) |
| SIMD による高速な除外 | memchr の部分文字列検索により、関係のないコマンドの正規表現処理をスキップします |
| パターン照合 | 安全なパターンを先に確認し、次に破壊的なパターンを確認します。デフォルトでは許可します |
よくある間違い
| 間違い | 正しい方法 |
|---|---|
| フックを追加した後、Claude Code を再起動しない | ~/.claude/settings.json を変更した後は、必ず Claude Code を再起動します |
シェルプロファイルで DCG_BYPASS=1 を恒久的に設定する | バイパスは単一のコマンドに限って一時的に設定し、その後削除します |
| DCG がスクリプト内のコマンドを検査すると想定する | DCG が検査するのは Bash ツールの直接呼び出しのみであり、./deploy.sh の内容は検査しません |
破壊的だと思い込み、git branch -d(小文字)をブロックする | 小文字の -d は安全です(マージを確認します)。強制削除するのは大文字の -D のみです |
| 本番環境でデータベースやクラウドのパックを有効にしない | 使用するスタックに応じて、~/.config/dcg/config.toml で関連するパックを設定します |
| DCG が悪意ある行為者を止めると期待する | DCG は不注意によるミスを検出しますが、意図的なユーザーはいつでもフックをバイパスできます |
nightly ツールチェーンを使わずに cargo install を実行する | DCG には Rust nightly(edition 2024)が必要です。cargo +nightly install を使用します |
委任
- エージェントのセッションで試行された破壊的なコマンドを監査する:
Exploreエージェントを使用します - 新しいプロジェクト環境にカスタムパックを設定して DCG をセットアップする:
Taskエージェントを使用します - DCG とほかのガードレールを組み合わせた多層安全アーキテクチャを計画する:
Planエージェントを使用します