mcpField
D
destructive-command-guard

destructive-command-guard

github.com/oakossセキュリティ2094 回インストール10 週間前に更新
リポジトリ

destructive-command-guard について

Claude Code 向けのコマンドガードで、Bash コマンド実行前に既知の破壊的操作をブロックします。エージェントの誤操作を減らしたい開発環境向けで、未認識のコマンドは既定で許可し、セキュリティパックを設定できます。

主な機能

  1. 01PreToolUse フックとしてBash呼び出しを検査
  2. 02破壊的なパターンより安全なパターンを先に確認
  3. 03カテゴリ別のセキュリティパック設定
  4. 04ファイル内の破壊的コマンド文脈をスキャン
  5. 05未認識のコマンドを既定で許可

活用シーン

  1. 01git の強制リセットなどをブロック
  2. 02ファイルシステムの削除コマンドを制限
  3. 03データベースやクラウド向けパックを有効化
  4. 04CIでファイル中のコマンド文脈をスキャン

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/oakoss/agent-skills --skill destructive-command-guard

インストール後、Claude Code で/destructive-command-guardを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

references/
command-detection.md
installation.md
pack-configuration.md
safety-patterns.md
troubleshooting.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
カテゴリ許可されるコマンド
安全な gitgit 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
Kuberneteskubernetes.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_BYPASSDCG を完全にバイパスします(緊急用)
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 エージェントを使用します

参考資料

コメント