Skip to main content
CC Safety Net は、未コミット変更、stash した作業、remote 履歴、または disk 全体を永久に破壊する可能性があるため、これらのコマンドをブロックします。次の表は既定の組み込みルールを示します。カスタムルールで拡張できます。 既定では、マークのないすべての行を 3 つの安全レベルでブロックします。Strict または Paranoid と記載した行には、その安全レベルまたは機能が必要です。ポリシーは重大でない一部のルールを無効にできます。各レベルを有効にする方法については、モードを参照してください。 このページは、ブロックするものと各境界を示す動作 matrix です。architecture のページではありません。順序付き guard flow についてはアーキテクチャ、分類器が判定に到達する正確な方法については解析エンジン、許可される安全な形式については許可されるコマンドを参照してください。

各レベルが追加するブロック

一部の重大な保護は、選択した安全レベルに依存しません。root と home の再帰削除、Git メタデータ保護、正規の policy.json 保護は、破壊的コマンドの master switch とルールごとの off override を無視します。

Git コマンド

これらの Git 操作は、未コミットの作業を破棄し、復旧履歴を破壊し、または共有 state を書き換えるためブロックします。 force flag と create/reset flag の両方で branch を変更する Git コマンド(例えば git checkout -Bfgit switch -Cf --discard-changes)は、強制 branch reset として扱い、ブロックします。

Git SSH 環境変数 override

Git は、network 操作中に任意の program を実行するため、GIT_SSH_COMMANDGIT_SSHGIT_SSH_VARIANT を使用できます。CC Safety Net は、任意のコマンドを実行できるため、network subcommand と組み合わせたこれらの override をブロックします。

ファイルシステムコマンド

rm -rf の対象は、次の first-match 順序で分類します。未対応の Windows UNC または device 対象、root または home、保護対象の Git メタデータ、一時 path、動的対象、設定済み allow path、作業ディレクトリとしての home、作業ディレクトリ自身、作業ディレクトリ内、作業ディレクトリ外です。一時 path はすべてのレベルで許可します。作業ディレクトリ内の他の path は、paranoid rm が有効でなければ許可します。安全な形式については、許可されるコマンドを参照してください。 破壊的コマンドを POSIX function に隠しても動作は変わりません。function を呼び出した場所で、caller の cwd を使用して body を解析します。call は quote('cleanup')、time/! prefix、eval を通して解決します。呼び出されない definition は不活性です。call 解決と scope については、POSIX shell functionを参照してください。
動的な rm -rf 対象は、standard で一律にブロックしません。rm -rf "$target" は standard で許可され、strict または paranoid で fail-closed 機能が有効になった場合だけブロックされます。Standard は敵対的または動的に生成されたコマンドテキストに対して best-effort です。コマンドが prompt injection または他の信頼できない source から来る可能性がある場合は、strict または paranoid を使用してください。
Git メタデータと動的対象は、設定済み allow path より先に分類します。そのため、destructive_command_protection.allow_paths の項目が Git メタデータ保護を緩和することはなく、検証不能な対象にも適用されません。

デバイスとディスクの破壊

CC Safety Net は、すべての安全レベルで ddmkfsshred を解析します。これらのルールは重大ルールではないため、破壊的コマンドの master switch とルールごとの off override を適用できます。 dd ルールを発生させるのは、device への書き込みだけです。device から file への読み取り(dd if=/dev/sda of=./backup.img)と、file-backed image に対する mkfs.ext4 disk.img は許可します。3 つのルールは wrapper と carrier にも適用します。bash -c "dd if=/dev/zero of=/dev/sda"sudo mkfs.ext4 /dev/sdaenv dd of=/dev/sda if=/dev/zeroeval "shred secret" はすべてブロックされます。

Git メタデータ

実行ディレクトリに最も近い祖先 .git、解決後の Git ディレクトリ、hooks サブツリーを保護します。この確認は設定読み込み前に実行するため、無効化できません。 symlink の .git directory と hooks directory は、lexical alias と canonical alias の両方で保護します。存在しない Git directory を参照する .git marker もブロックします。POSIX shell の末尾 * glob は dot-entry に一致しないため、repository root の rm -rf ./*.git を対象にしません。ただし、rm -rf .git/worktrees/* と PowerShell wildcard は対象にします。
境界:この guard は、実行ディレクトリに最も近い祖先 Git control plane を対象にします。実行ディレクトリの下にネストした他の repository と、解決済み set 外の Git-internal path は対象外です。

正規の policy.json

正規の user policy file、~/.cc-safety-net/policy.json、または変数が設定されている場合の $CC_SAFETY_NET_HOME/policy.json の変更や削除は常にブロックします。この確認は設定の読み込みに実行するため、保護対象 policy で無効にすることはできません。拒否結果に安全レベルと config state はありません。reason 文字列は正確に次のとおりです。
一致は、file、その directory、その directory の祖先について、次の形式を対象にします。
  • 直接の write、edit、patch target。
  • 正確な shell operand と write redirection。
  • 対応する environment-variable、relative、既存 symlink alias。
  • policy directory またはその祖先に対する再帰 rm
  • file、directory、または祖先を source とする mv
読み取り専用の [, cat, file, grep, head, jq, less, ls, more, rg, sed, stat, tail, test, wc は許可します。
これは意図的に最小にした exact-path guard であり、コマンド emulation ではありません。assignment だけの shell variable と明示的な cd を追跡しますが、glob または brace を展開せず、計算された interpreter path を推論せず、interpreter body を検査せず、archive member を推論せず、find action を simulate せず、transfer の最終 file name を推論しません。Rulebook、lockfile、cache、sibling file、policy-directory inspection はこの guard の対象外です。改ざん耐性があるのは policy.json だけです。

PowerShell Remove-Item

PowerShell support は、Remove-Item とその alias、および既存の cross-shell rule を中心とした保守的な subset です。一般的な PowerShell parser ではありません。ルールは powershellauto shell mode で適用します。posix mode は意図的に適用しませんが、git.reset-hardrm.recursive-force-root-or-home などの cross-shell rule は引き続き適用します。 alias と省略 parameter を解決するため、ri . -r -fo もブロックします。invocation-operator 形式(& Remove-Item ...& { ... }. { ... })、literal 文字列を持つ iex / Invoke-Expression$(...) subexpression も解析します。line comment(#)と block comment(nested を含む <# ... #>)は無視しますが、その後にある実コマンドは引き続きブロックします。不正または深さ上限を超えた block comment と subexpression は fail-closed です。
-WhatIf は PowerShell が実際には何も削除しないため、ブロックを無効にします。-WhatIf-WhatIf:$true、省略形 -wi は、通常ならブロックする Remove-Item . -Recurse -Force をすべて許可します。明示的な -WhatIf:$false は再度ブロックします。上の strict 専用行には 1 つ例外があります。Remove-Item $HOME -Recurse -Force は動的対象ではなく root/home 対象として分類されるため、standard でブロックします。

機密パス

機密パス保護は、コマンド解析前に実行する別の guard stage です。対応する commandpathsearch(grep/glob)、patch 形式に適用し、unknown tool の任意の text を shell コマンドとして扱うことなく unknown tool も確認します。 書き込みだけではなく、組み込み機密 set の読み取りもブロックします。cat .envenv cat .envsudo command cat .envstrings id_rsaxxd .envbase64 .envdd if=.envcat ~/.ssh/id_rsabash -c "cat .env"node -e 'require("child_process").execSync("cat .env")' はすべてブロックされます。 command-shape extraction は上限付きで構造的です。構造的な shell-syntax 上限では fail-closed になり、無効な parse では throw します。設定済み deny path は組み込みルールより前に一致させ、standard-mode の allowance で緩和することはありません。 すべての rule id と family、保護対象 path、2 つの Coding CLI tier、match 順序、exemption については、機密情報保護のリファレンスを参照してください。機能全体は secret_protection.enabled: false で無効にでき、個別ルールは secret_protection.overrides で on または off にできます。ポリシーを参照してください。

Shell ラッパーとインタープリター 1 行コード

bash -c または sh -c などの shell interpreter で wrapper されたコマンドもブロックします。ネストした wrapper を最大 10 階層まで再帰解析します。この深さを超えるコマンドは、通過させず拒否します。 Interpreter の 1 行コードに埋め込まれた破壊的 code は、既定で検出してブロックします。CC Safety Net は interpreter の -c または -e flag に渡された code を抽出し、埋め込まれた破壊的操作を scan します。そのため、agent は Python または Node call に os.system("rm -rf /") を入れて hook を通過させることができません。 解析する interpreter は、pythonpython2python3noderubyperl です。ブロックを発生させるのは埋め込まれた破壊的コマンドであり、1 行コードの形式だけなら既定で許可します。

すべての interpreter 1 行コードをブロックする

内容に関係なく interpreter 1 行コードをブロックするには、CC_SAFETY_NET_PARANOID_INTERPRETERS=1 を設定します。危険な code がなくても、すべての python -cnode -eruby -eperl -e 1 行コードをブロックします。python -c "print(1)" は standard と strict で許可され、ここではブロックされます。モードを参照してください。

strictparanoid の heredoc

fail-closed 機能が有効な場合、heredoc コマンドは次の条件をすべて満たす場合だけ許可します。
  • コマンドに heredoc が 1 つある。
  • heredoc が標準入力にある。
  • delimiter が quote されている。
  • コマンドに他の入力 redirection がない。
  • consumer が literal の catteegit applygit commitgh pr creategh issue create のいずれかである。
fail-closed 機能は strictparanoid で有効です。quote されていない delimiter は次の理由で拒否します。
その他の未対応形式または consumer は次の理由で拒否します。
standard mode での heredoc 内容の処理を含む完全な contract は、解析エンジンにあります。

解析できないコマンドテキスト

heuristic scan は、rm -rfgit reset --hardgit reset --mergegit clean -fgit checkout --forcegit checkout --git push --forcegit push --deletegit branch -Dgit tag -dgit stash dropgit stash clear--staged なしの git restorefind -deletedd of=/dev/mkfs /dev/shred <arg> を確認します。一致した場合は、ルール raw-text.dangerous-command で拒否します。text が echo または rg で始まる場合、findddmkfsshred pattern は除外するため、これらの文字列を echo または ripgrep invocation に quote しても scan を発生させません。
Resource-exhaustion 上限はレベル system とは別であり、standard を含むすべてのモードで拒否します。declared-command recursion 上限または structural command-validation 上限を超える場合は常に拒否し、通過させません。
explain コマンドを使用すると、CC Safety Net が特定のコマンドをブロックまたは許可する正確な理由を追跡できます。flag については CLI コマンド、JSON schema については explain トレースを参照してください。
最終更新日 2026年8月12日