Skip to main content
破壊的コマンドの保護は、未コミットの作業、stash した変更、リモートの履歴、その他のデータ、ディスクを破壊しうるコマンドをブロックするコマンド解析のステージです。すべてのブロックは、ブロックメッセージ、監査ログ、explain --json の ruleId フィールドで、以下のルール ID のいずれかを示します。 このページでは、すべての組み込みルール ID、ブロックする内容、有効になる条件を示します。ブロックメッセージからルールを調べ、無効にするかどうかを判断するために使ってください。各ルールの境界と具体例についてはブロックされるコマンドを、destructive_command_protection スキーマについてはポリシーを、独自のルールを追加するにはカスタムルールを参照してください。 登録済みのルールは 70 個です。そのうち 10 個は致命的な操作に対するルールで、無効にできません。それ以外のすべてのルールは、ルール単位の override を受け付けます。ルールによらない拒否には、代わりに固定の拒否 ID のいずれかが付きます。これらはどの override でも無効にできません。

組み込みルールを許可する

致命的でないすべてのルールに、同じ 3 つの手順が適用されます。
  1. ルール ID を取得します。ブロックメッセージに表示されるほか、対象のコマンドそのものに対して explain を実行し、ruleId を読み取ることもできます。
  2. policy.json の destructive_command_protection.overrides に、その ID を値 "off" で追加します。ユーザーファイルはすべてのプロジェクトに、プロジェクトファイル .cc-safety-net/policy.json はそのプロジェクトだけに適用されます。既存のファイルにマージしてください。以下は完全な例です。
  3. もう一度 explain で確認します。そのコマンドの判定は allowed になり、status に override が表示されます。
override はルール全体を無効にするものであり、特定のコマンド 1 つだけを許可するものではありません。"on" はその逆で、安全レベルが無効にしているルール(standard モードでの rm.recursive-force-paranoid など)を有効にします。再帰削除をパス単位で除外するには destructive_command_protection.allow_paths を使います。Allow path を参照してください。登録されていない ID は policy check で拒否されます。

致命的な操作に対するルール

10 個のルールは致命的(catastrophic)としてマークされています。これらは destructive_command_protection.enabled: false も "off" の override も無視するため、どのポリシーでも、どの安全レベルでもブロックします。うち 8 個は、rm、find、PowerShell、cmd による / またはホームディレクトリの再帰削除と、Git メタデータの削除が対象です。残りの 2 個は、対象を安全に読み取れない再帰削除を扱います。1 つは、引用符の書き方によって対象が分割され、ドライブのルートを指しうる cmd の削除、もう 1 つはアナライザーが読み取らない形で powershell や pwsh に渡された再帰削除です。以下の表では 致命的 と表示しています。

表の読み方

有効になる条件は、どの安全レベルまたは機能がそのルールを有効にするかを示します。すべてのレベルは standard、strict、paranoid のすべてを意味します。機能に紐づくルールは、安全レベルと safety.overrides のどちらで設定されたかにかかわらず、その機能が有効なときに有効になります。例は、そのルールを発火させる最短のコマンドです。各境界がどこにあるかは、ブロックされるコマンドのリファレンスを参照してください。

Git のルール

ファイルシステムのルール

PowerShell のルール

コマンドプロンプトのルール

これらのルールは、cmd /c または cmd /k の本体にある、/s スイッチ付きの rmdir、rd、del、erase の対象を判定します。本体の読み取り方はコマンドプロンプトの本体を参照してください。

実行のルール

固定の拒否 ID

ルールによらない拒否もあります。コマンド解析の前に実行されるガード、解析の上限と失敗、使用できない作業ディレクトリによる拒否です。これらには固定の ID が付き、ブロックメッセージ、監査ログ、explain --json の ruleId フィールド、checkCommand が返す拒否の ruleId に表示されます。これらの ID は登録済みのルールではないため、destructive_command_protection.overrides には指定できません。policy check は、いずれも unknown destructive command rule id "<id>" として拒否します。
最終更新日 2026年10月11日