policy.json は、CC Safety Net の user scope 設定ファイルです。安全 preset の選択、個別の組み込み保護の有効化と無効化、保護するパスの追加、audit record の保持期間の設定に使用します。
独自の custom blocking rule を定義する rule.json および rulebook とは別のファイルです。その schema についてはカスタムルールを参照してください。
Policy file の場所
CC_SAFETY_NET_HOME を設定すると、ファイルはそのディレクトリの直下に、rules/ と同じ階層で配置されます。override 自体については環境変数を参照してください。
policy file は 1 つだけです。project scope の policy.json はありません。 runtime はその 1 つのパスだけを読み取るため、プロジェクトが利用者の policy を上げたり下げたりすることはできません。
dashboard がファイルを書き込む場合、directory は 0700、file は 0600 で作成します。
Policy file の保護
正式な userpolicy.json は、ready と degraded のすべての runtime state で保護対象です。policy file の保護は configuration snapshot の読み込み前に動作するため、壊れた設定でも弱体化できません。次の操作は hard-stop します。
- 任意のツールによるファイルへの write、edit、patch
- operand にファイル名を含む shell command
- ファイルへの write redirection
- その directory または任意の ancestor に対する recursive
rm - そのファイルに到達する
find … -deleteとfind … -exec rm - ファイル、その directory、または ancestor を source とする
mv
[、cat、file、grep、head、jq、less、ls、more、rg、sed、stat、tail、test、wc が含まれます。sed は -i または --in-place で in-place edit しない場合だけ対象です。Grep や Glob などの read-only tool は完全に除外されます。
Policy file を編集する
次のいずれかを選択します。- Dashboard を使用する。
cc-safety-net guiを実行します。dashboard は正しい permission でファイルを書き込み、validation に失敗するファイルを修復できます。ファイルに error がある間、form にはファイル内の有効な値ではなく、完全な既定値が表示されます。ファイルを修復するまで保存できません。修復では、認識された有効な設定を維持し、無効な field を破棄します。この修復動作を使用しない場合は、ファイルを手動で編集してstatusで確認してください。 - JSON を直接編集する。 editor でファイルを開き、手動で変更します。runtime は次の tool call で変更を読み取ります。再起動は不要です。
degraded verdict は、ファイルの一部が拒否されたことを意味します。npx cc-safety-net doctor は、該当する field を正確に示します。runtime が policy.json を自動的に書き換えることはありません。無効なファイルは、修正するか dashboard の repair action を使うまで、変更されずに残ります。
完全な policy の例
すべての field とその既定値を次に示します。version だけです。その他の field はすべて省略でき、省略時は上記の既定値を使用します。ファイル自体がない場合も、CC Safety Net はこの既定値で動作し、ready のままです。
root object は strict です。認識されない top-level key は error です。safety、workflow、destructive_command_protection、secret_protection、audit 内の認識されない key も error です。
Schema リファレンス
integer
必須
Schema version。
1 である必要があります。唯一の必須 field です。値がない、または誤っている場合の diagnostic は version must be 1 です。string
デフォルト:"standard"
安全 preset。
"standard"、"strict"、"paranoid" のいずれかです。各 preset は継承する機能の既定値を提供します。strict は fail_closed を有効にし、paranoid は fail_closed、paranoid_rm、paranoid_interpreters を有効にします。各機能の変更点については安全レベルを参照してください。boolean
preset に関係なく、fail-closed 機能を上または下に明示的に設定します。preset から継承するには key を省略します。
boolean
paranoid
rm 機能を上または下に明示的に設定します。preset から継承するには key を省略します。boolean
paranoid interpreter 機能を上または下に明示的に設定します。preset から継承するには key を省略します。
boolean
デフォルト:"false"
確認済みの linked worktree 内で、ローカル変更を破棄する Git ルールを緩和します。検出は fail-closed です。working directory が linked worktree であると明確に判定できない場合は、より厳しい既定のルールが有効なままです。緩和する操作と、緩和しない操作の正確な一覧については安全レベルを参照してください。
boolean
デフォルト:"true"
登録された destructive-command rule の master switch です。
false にすると、すべての登録済みルールを short-circuit します。ただし、常に強制される catastrophic rule は除きます。object
デフォルト:"{}"
登録済みの destructive-command rule id を key にする、ルールごとの状態です。値は
"on" または "off" です。機能から算出した状態の上に適用されるため、"on" は preset が無効にしたルールを有効化でき、"off" は preset が有効にしたルールを無効化できます。string[]
デフォルト:"[]"
destructive-command rule から除外するパスです。項目は absolute path、または
~/ で始まる必要があります。boolean
デフォルト:"true"
secret protection の master switch です。
false にすると、利用者の deny_paths を含む secret stage 全体を skip します。object
デフォルト:"{}"
登録済みの secret-protection rule id を key にする、ルールごとの状態です。値は
"on" または "off" です。多くの secret rule は secret protection が有効なときに有効であるため、通常は "off" を使用します。既定で無効な Coding CLI config tierは既定で無効です。これらのルールを使うには、明示的に "on" を指定します。integer
デフォルト:"30"
sweep が削除するまで audit history を保持する日数です。
1 から 365 までの integer である必要があります。安全レベルと機能 override
safety.level が preset を選択し、次に safety.overrides が個別の機能を明示的に設定します。機能を下げられるのはここだけです。environment flag は上げることしかできません。
paranoid preset を使用しますが、interpreter one-liner は対象にしません。最終的な機能の組み合わせがどの preset にも一致しない場合、報告される有効レベルは custom になります。
環境は policy のレベルを上げ、機能を強制的に有効にできますが、逆の操作はできません。
policy.json と環境の完全な優先順位(worktree_mode の OR と legacy SAFETY_NET_* alias を含む)については、環境変数を参照してください。破壊的コマンドの保護
destructive_command_protection.overrides は、次のように組み込みルールを id で指定します。
unknown destructive command rule id "<id>" で拒否されます。"on" または "off" 以外の値は、destructive_command_protection.overrides.<id> must be "on" or "off" で拒否されます。
Catastrophic rule は常に強制され、利用者は設定できません。 enabled: false と "off" override を無視します。これらは、/ またはホームディレクトリの削除、Git metadata の削除、および対応する PowerShell と find の操作を対象にします。各ルールの動作についてはブロック対象コマンドを参照してください。
Allow path
destructive_command_protection.allow_paths は、特定の場所を destructive-command rule から除外します。validation は deny path より厳格です。
シークレット保護
secret protection は、資格情報を含むファイルの読み取りと書き込みをブロックします。この section は設定の仕様です。すべての id、保護対象パス、除外を含む組み込みルールの完全な一覧は、シークレット保護リファレンスを参照してください。secret_protection.overrides は、個別の組み込みルールを id で指定し、値に "on" または "off" を使用します。"off" は既定で有効なルールを無効にし、"on" は既定で無効な tier のルールを有効にします。
unknown secret protection rule id "<id>" で拒否され、その他の値は secret_protection.overrides.<id> must be "on" or "off" で拒否されます。
既定で無効なルール
多くの組み込み secret rule は、secret protection が有効な場合に有効です。1 つだけ例外があります。対応するコーディングエージェントの settings file と MCP configuration file を対象にする Coding CLI config rule です。これらのファイルは資格情報を inline で含む場合がありますが、エージェントが通常の作業で編集する場合もあります。そのため、この tier は既定で無効です。ルールごとに明示的な"on" override を指定して有効にします。有効にした config rule は、エージェントの user-level config file と、任意の .mcp.json など、任意の repository root で名前が一致する project-level file も保護します。
既定で無効な 10 個の id、既定で有効な対応する Coding CLI credential rule、各ルールが保護する正確なパスは、シークレット保護リファレンスに記載されています。
Deny path
secret_protection.deny_paths は、組み込みの機密パスに加えて独自の保護対象を追加します。deny path は組み込みルールより先に確認され、一致すると rule id secret.deny-path による hard stop になります。
Validation:
relative 項目を受け入れる理由は、ファイルの保存時には不明な各 session の working directory を基準に解決するためです。拒否される分類は、home、home より上位のパス、
/ です。これらに正当な解釈はなく、home 下のほぼすべての workspace ですべてのコマンドをブロックします。
**有効な deny path の保護範囲:**パス自体とすべての descendant です。比較前に、target は execution working directory を基準に、設定済みパスは config working directory を基準に正規化されます。
次の 2 つの制限があります。
- deny path は
secret_protection.enabledがtrueの場合だけ適用されます。falseにすると、secret stage のその他すべての保護と一緒に無効になります。 secret.deny-pathは登録済みの secret rule id ではないため、secret_protection.overridesでは無効にできません。無効にできるのはsecret_protection.enabled: falseだけです。
Audit retention
audit.retention_days は、retention sweep が削除するまで audit record を保持する期間を設定します。既定値は 30 日で、許容範囲は 1 から 365 です。
retention は policy のその他の部分とは別に解決されます。sweep はこの 1 field をファイルから直接読み取るため、別の場所で validation に失敗する policy でも pruning を実行します。値がない、integer ではない、または使用できない場合は 30 に戻ります。
1 未満は 1 に、365 より大きい値は 365 に clamp されます。そのため、範囲外の値では 2 つの動作が同時に発生します。schema は値を拒否して runtime を degraded にし、sweep は値を clamp します。"retention_days": 1000 は diagnostic に表示され、365 日で pruning します。無効な policy の動作
無効なpolicy.json は通常の作業をブロックしません。runtime は degraded に移行し、fallback を使用します。
salvage は意図的に保護的です。そのため、壊れたファイルでは通常、設定より多くの拒否が発生します。
設定の復旧では、degraded state の完全な仕様、報告方法、
ready に戻す方法を説明します。
関連ページ
安全レベル
各安全機能の変更点と、worktree mode が緩和する操作。
環境変数
policy level を上げる変数を含む、すべての変数。
カスタムルール
独自の blocking rule 用の、別の
rule.json および rulebook schema。設定の復旧
Ready と degraded、fallback matrix、repair sequence。