policy.json、rule.json、このページで説明する CC_SAFETY_NET_* 環境変数から設定を読み取ります。変数は、エージェントを起動する前にシェルまたはエージェントの起動環境で設定してください。環境変数は安全レベルを引き上げられますが、引き下げることはできません。
CC_ プレフィックスのない古い SAFETY_NET_* という名前も、表に記載した箇所では引き続き使えます。各レベルでブロックされる内容はモードを、ポリシーファイルはポリシーを参照してください。
設定ファイルの場所
プロジェクトのパスは、エージェントのセッションが動いているディレクトリを基準にします。設定時の作業ディレクトリを参照してください。
CC_SAFETY_NET_HOME は、サンドボックスのようにエージェントがシェルとは別のホームディレクトリで動く場合に役立ちます。移動するのはユーザースコープだけで、プロジェクトのファイルは常にプロジェクトから解決されます。監査ログも移動しません。監査ログを移動する方法は監査ログで説明しています。
CC Safety Net がエージェントから保護するのは policy.json だけです。rule.json とルールブックは、エージェントも編集できる通常のファイルです。
安全レベル
各プリセットは、
fail_closed、paranoid_rm、paranoid_interpreters の 3 つの機能の組み合わせを有効にします。それぞれでブロックされる内容はモードを参照してください。
これ以外の値は無視され、policy.json のレベルがそのまま使われます。このとき、標準エラー出力に必ず次の警告が出ます。
機能トグル
次の変数は機能ごとの以前からのフラグで、いずれも機能を有効にする方向にしか働きません。偽と解釈される値を設定しても、機能は無効になりません。プリセットより機能を減らすには、policy.json のsafety.overrides を使ってください。
フラグは、
1 または true(大文字と小文字は区別しない)を設定すると有効になります。CC_SAFETY_NET_* の名前が設定されていればそちらが優先され、SAFETY_NET_* のエイリアスはプレフィックス付きの名前がない場合にだけ参照されます。
優先順位
ポリシーと環境変数は、次の決まった順序で組み合わされます。- プリセット。
policy.jsonのsafety.levelが、継承される機能の既定値を決めます。このフィールドがない場合、プリセットはstandardです。 CC_SAFETY_NET_LEVEL。 基本レベルは、ポリシーのレベルと環境変数のレベルのうち高い方です。環境変数はレベルを引き上げられますが、引き下げることはできません。safety.overrides.*。 続いて、policy.jsonの明示的な機能のオーバーライドが、fail_closed、paranoid_rm、paranoid_interpretersをtrueまたはfalseに設定できます。- 機能トグル。
CC_SAFETY_NET_STRICT、CC_SAFETY_NET_PARANOID、CC_SAFETY_NET_PARANOID_RM、CC_SAFETY_NET_PARANOID_INTERPRETERSは最後に適用されます。これらのフラグは単調に働きます。それぞれ機能を強制的にtrueにするだけで、無効にすることはできません。 - ワークツリーモードは、
workflow.worktree_modeとCC_SAFETY_NET_WORKTREEの論理 OR です。
fail_closed が無効で paranoid_rm が有効な場合は custom と報告されます。
destructive_command_protection.overrides のルール単位の設定は、機能で決まった状態の上に適用されます。致命的なルールは常に適用され、ここまでのどの設定でも無効にできません。
プロジェクトポリシーの緩和
このスイッチがない場合、
CC_SAFETY_NET_LEVEL で有効にした機能を、プロジェクトの safety.overrides で無効にできます。オーバーライドはレベルの後に適用されるためです(上の手順 3)。機能トグルは最後に適用されるため、プロジェクトファイルで無効にすることはできません。このスイッチで取り除かれるフィールドはプロジェクトの緩和を無視するを参照してください。
このスイッチは rule.json のフィールドも 1 つ対象にします。プロジェクトだけが宣言した transparent_wrappers のエントリは、引用符付き heredoc の本文をシークレットの検査から外さなくなります。透過ラッパーを参照してください。
監査ログの記録範囲
拒否は常に監査ログに記録されます。無効な値を指定した場合の動作は監査の対象範囲を参照してください。
デバッグ出力
コマンドが許可された理由を調べるときや、バグを報告するときに使います。監査ログに記録される内容は変わりません。
更新チェックを無効にする
doctor とダッシュボードが行う更新チェックには影響しません。チェックで表示される通知は rule doc の更新通知を参照してください。
有効な設定を確認する
status は、有効なレベルと問題の有無を表示します。doctor の Environment セクションには、各変数とその値、使用中の以前の SAFETY_NET_* 名が一覧表示されます。