mcpField
D
dcg

dcg

github.com/boshu2セキュリティ45044 回インストール1 日前に更新
リポジトリ

dcg について

dcgは、リスクの高い操作をブロックし、より安全な代替手段へ導くコマンドガードです。このスキルは、ブロック理由の説明と目的の維持、特定コマンドの許可判断を人間に委ねる手順を定めます。

主な機能

  1. 01該当するブロックルールを説明
  2. 02元に戻せる代替手段を提示
  3. 03コマンドとインラインスクリプトをスキャン
  4. 04プロジェクト別ルールパックを設定
  5. 05特定コマンドの許可に人間の承認を要求

活用シーン

  1. 01ブロックされた破壊的なGitコマンドに対応
  2. 02コマンドがブロック対象か確認
  3. 03コミット前にステージ済み変更をスキャン
  4. 04データベースやKubernetesのルールを有効化

インストール

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

$npx skills add https://github.com/boshu2/agentops --skill dcg

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

同梱ファイル

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

SELF-TEST.md
references/
COMMANDS.md
CONFIG.md
PACKS.md
PHILOSOPHY.md
SCENARIOS.md
TROUBLESHOOTING.md
scripts/
validate-dcg.sh

詳細

DCG:ブロックされたときの対応

核心となる考え方: ブロックはエラーではなく、チェックポイントです。ほとんどの場合、安全な代替手段があります。オーバーライドについて言及する前に、代替手段を探してください。

制約

  • allow-once によるバイパスを依頼、生成、実行してはいけません。ブロックされたコマンドを正確に実行する許可と実行は、人間だけが行えるためです。
  • ガードはコマンドの表記だけでなく状態を保護するため、ユーザーが意図した結果を、最も範囲が狭く元に戻せる代替手段で実現してください。
  • 判断を仰ぐ前に、該当したルールと残るリスクを説明してください。DCG によるブロックを再試行したり、難読化したり、迂回したりしてはいけません。

クイックナビゲーション

次のことをしたい場合移動先
今すぐブロックに対処する正確なワークフロー
安全な代替手段を見つける安全な代替手段
CLI コマンドをすべて確認するCOMMANDS.md
ルールパックを追加で有効にするPACKS.md
プロジェクトごとに設定するCONFIG.md
フックの問題をデバッグするTROUBLESHOOTING.md

正確なワークフロー

ブロックされたときは、毎回次の手順に従ってください。

1. Run `dcg explain "cmd"` → Understand why (see trace)
2. Check Safe Alternatives table → Use if exists (DON'T mention override)
3. No alternative? → Explain risk clearly, let human decide
4. Human approves? → THEY run: dcg allow-once CODE

禁止事項: 最初にオーバーライドを求めてはいけません。黙って再試行してはいけません。迂回してはいけません。

リスク段階別の承認数

安全な代替手段がなく、人間が判断する必要がある場合、必要な人間による個別の承認数は、コマンドが破壊し得るものに応じて変わります。

段階影響範囲必要な承認
復旧可能reflog/stash/ゴミ箱/バックアップで元に戻せるこの正確なコマンドに対して allow-once を 1 回
ローカル破壊的ローカルの未コミット状態、またはバックアップのない状態を完全に削除するallow-once を 1 回。失われる正確な状態を明示し、バックアップがないことを確認した後に限る
共有破壊的共有履歴、リモートブランチ、データベース、他の人が使用する名前空間個々のコマンド実行ごとに承認を 1 回。まとめて承認したり、パターンを広げたりしてはいけない

停止条件:段階 2 または段階 3 のコマンドを段階 1 として提示してはいけません。保留中の複数のブロックを、包括的な 1 回の承認にまとめてはいけません。複数の破壊的コマンドに使われる 1 回の「はい」は、承認のロンダリングという失敗パターンです。allow-once コードは、1 つのディレクトリ内の 1 つのコマンドに紐付けられており、ワークフローでもその状態を維持する必要があります。

ブロック出力の例:

BLOCKED: git reset --hard HEAD
Rule: core.git:reset-hard
Reason: Discards uncommitted changes permanently
Allow-once code: ab12
Safer alternative: git stash

適切な応答:

「変更を破棄しようとしましたが、git reset --hard がブロックされました。代わりに git stash を使います。必要であれば元に戻せます。」[stash を実行]

安全な代替手段

ブロックされたコマンド代わりに使用理由
git reset --hardgit stash元に戻せる
git checkout -- filegit stash push file変更を保持する
git push --forcegit push --force-with-leaseリモートに変更がないことを確認する
git clean -fdgit clean -fdn(プレビュー)削除されるものを表示する
git stash drop先に git stash list対象の stash を確認する
rm -rf /pathrm -ri /path またはパスを確認する対話形式/確認
kubectl delete namespacekubectl delete -l app=X対象を絞って削除する
DROP DATABASE先にバックアップする人間が承認する
docker system prune -a先に docker system df使用中のものを確認する

クイックリファレンス

dcg doctor              # Health check — hook registered?
dcg explain "cmd"       # WHY is it blocked? (with trace)
dcg test "cmd"          # Would this be blocked? (dry-run)
dcg allow-once CODE     # Human approves (THEY run this)
dcg packs               # List available rule packs
dcg scan --staged       # Pre-commit: scan for issues

ブロックされるもの

カテゴリーパターン安全な代替
Git の破壊的操作reset --hard、checkout --stash、restore --staged
Git の履歴push --force、branch -D--force-with-lease、-d
Git の stashstash drop、stash clear先に stash list を実行
ファイルシステムrm -rf(危険なパス)/tmp/* は許可
データベースDROP、TRUNCATE、WHERE 句のない DELETEWHERE 句を追加
K8sdelete namespace、delete --all-l ラベルセレクター

コンテキストに応じた動作(dcg 0.5.6 で測定): 一時ディレクトリの例外により、/tmp、/private/tmp、/var/tmp およびリテラル形式の $TMPDIR の下では rm -rf が許可されます。 それ以外はすべてブロックされます。たとえば、rm -rf ./build などの相対パス (core.filesystem:rm-rf-general)、/home/... や / などの絶対パス (core.filesystem:rm-rf-root-home)、さらには /private/var/tmp もブロックされます。 $TMPDIR 以外の未解決の変数は、一時パスとして扱われません。

dcg explain の例(7 ステップのパイプライン):

$ dcg explain "git reset --hard HEAD"
BLOCKED by core.git:reset-hard

Evaluation trace:
  1. Config allow overrides: no match
  2. Config block overrides: no match
  3. Heredoc detection: not applicable
  4. Quick reject: triggered (contains "reset")
  5. Context sanitization: no changes
  6. Normalization: git reset --hard HEAD
  7. Pack evaluation:
     - Safe patterns: no match
     - Destructive: MATCH "reset --hard"

Suggestion: Use `git stash` to preserve changes

アンチパターン

❌ "Command blocked. Run dcg allow-once ab12"  → Find alternative first!
❌ *Retrying silently or circumventing*         → Always acknowledge blocks
❌ Treating blocks as errors                    → They're checkpoints
❌ Asking user to allow-once without explaining → They need context

設定

# .dcg.toml — enable rule packs per-project
[packs]
enabled = ["database.postgresql", "kubernetes.kubectl", "cloud.aws"]

[overrides]
allow_patterns = ["rm -rf ./node_modules"]  # Project-specific safe

環境変数:

  • DCG_PACKS="containers.docker,kubernetes" — パックを有効化
  • DCG_DISABLE="kubernetes.helm" — 特定のパックを無効化
  • DCG_BYPASS=1 — バイパス手段(人間専用)

主な事実

  • 49 以上のルールパックを利用可能(データベース、コンテナー、k8s、クラウドなど)
  • サブミリ秒のレイテンシ — ワークフローを遅らせません
  • タイムアウト時はフェイルオープン — DCG がハングした場合、警告を出してコマンドを実行します
  • ヒアドキュメントのスキャン — インラインスクリプト(bash -c、python -c)も解析されます
  • インライン断片による誤検知 — スキャンではコマンド文字列のどこかに破壊的なトークンが含まれているかを照合するため、パターンが データ(コミットメッセージ本文、ヒアドキュメントの内容、プローブ引数)にしか現れなくても、実際には破壊的な操作が実行されないのにブロックされる場合があります。安全な方法は、内容をコマンドラインに含めず、ファイルまたは標準入力で渡すことです(例:git commit -F <file>)。または、テキストをインラインで渡すのではなく、目的のツールを直接実行してください。ガードをすり抜けるために、トークンを分割したりエスケープしたりしてブロックされたコマンドを再構成してはなりません。これは安全レイヤーを無効化します。
  • 1 回限りの許可コード — 4 桁の 16 進数、有効期限は 24 時間、コマンドとディレクトリの組み合わせに紐づきます

すべての始まりとなったインシデント

2025 年 12 月 17 日、AI エージェントが、何時間分もの未コミットの作業が含まれるファイルに対して git checkout -- を実行しました。ファイルは git fsck --lost-found で復旧できましたが、これにより明らかになりました。指示だけでは実行を防げません。機械的な強制が必要です。


検証

# Quick health check
dcg doctor | head -20

# Test if a command would be blocked
dcg test "git reset --hard HEAD"

# Should show: WOULD BE BLOCKED

出力仕様

  • パス: 応答とコマンド出力は stdout/stderr に出力します。設定が明示的に求められた場合に限り、.dcg.toml または .dcg/allowlist.toml を書き込みます。
  • ファイル名: DCG のプロジェクトファイル名はそのまま維持します。通常のブロック処理では永続ファイルは作成されません。
  • 形式: ブロックされたコマンド、一致したルール、リスク、取り消し可能な代替手段、および代替手段の検証結果を示します。コマンドは正確に引用してください。
  • 終了コード: インストールまたは設定作業では bash skills/dcg/scripts/validate-dcg.sh を実行し、終了コードが 0 であることを確認します。dcg test がブロックされるのは想定された証拠であり、バイパスを許可するものではありません。
  • 後続の引き継ぎ: 検証済みの安全な代替手段を実行するか、同等の代替手段がない場合は、正確なリスクと 1 回限りの許可に関する選択肢を人間に引き継ぎます。

品質チェックリスト

  • 許可されていないバイパス方法を明かしたり提案したりせずに、ブロックされた内容とルールを正確に特定している。
  • 選択した代替手段がより限定的で、可能な限り取り消し可能であり、ユーザーが求めた結果を保つことが実証されている。
  • 想定された破壊的コマンドのブロックと、DCG のインストールまたは設定の不具合を区別して検証している。

スクリプト

スクリプト用途
./scripts/validate-dcg.shインストール全体の検証

リファレンス

  • COMMANDS.md — dcg explain、dcg scan を含む CLI の完全なリファレンス
  • PACKS.md — 49 以上のルールパックシステム(データベース、k8s、クラウドなど)
  • CONFIG.md — 設定、エージェントプロファイル、heredoc の設定
  • SCENARIOS.md — 良い応答と悪い応答の詳細な例
  • PHILOSOPHY.md — DCG がこのように機能する理由
  • TROUBLESHOOTING.md — よくある問題と解決方法

コメント