dcg について
dcgは、リスクの高い操作をブロックし、より安全な代替手段へ導くコマンドガードです。このスキルは、ブロック理由の説明と目的の維持、特定コマンドの許可判断を人間に委ねる手順を定めます。
主な機能
- 01該当するブロックルールを説明
- 02元に戻せる代替手段を提示
- 03コマンドとインラインスクリプトをスキャン
- 04プロジェクト別ルールパックを設定
- 05特定コマンドの許可に人間の承認を要求
活用シーン
- 01ブロックされた破壊的なGitコマンドに対応
- 02コマンドがブロック対象か確認
- 03コミット前にステージ済み変更をスキャン
- 04データベースやKubernetesのルールを有効化
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ boshu2/ agentops --skill dcgインストール後、Claude Code で/dcgを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
SELF-TEST.mdreferences/COMMANDS.mdCONFIG.mdPACKS.mdPHILOSOPHY.mdSCENARIOS.mdTROUBLESHOOTING.mdscripts/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 --hard | git stash | 元に戻せる |
git checkout -- file | git stash push file | 変更を保持する |
git push --force | git push --force-with-lease | リモートに変更がないことを確認する |
git clean -fd | git clean -fdn(プレビュー) | 削除されるものを表示する |
git stash drop | 先に git stash list | 対象の stash を確認する |
rm -rf /path | rm -ri /path またはパスを確認する | 対話形式/確認 |
kubectl delete namespace | kubectl 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 の stash | stash drop、stash clear | 先に stash list を実行 |
| ファイルシステム | rm -rf(危険なパス) | /tmp/* は許可 |
| データベース | DROP、TRUNCATE、WHERE 句のない DELETE | WHERE 句を追加 |
| K8s | delete 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 — よくある問題と解決方法