基本概念
| 用語 | 定義 |
|---|---|
| PreToolUse hook | ツールの実行前に動作する hook。CC Safety Net は各エージェントの PreToolUse または同等のイベントを使い、実行前にシェルコマンドを検査します。仕組みを参照してください。 |
| fail closed | ガードが信頼できる判定に到達できない場合、その 1 つのツール呼び出しを許可せず拒否する動作。予期しない解析エラー、不正または大きすぎる hook 入力、空のコマンド、パーサー上限、strict モードで解析できないコマンドが該当します。無効な設定は fail closed ではなく、degraded になります。設計原則とセキュリティモデルを参照してください。 |
| 判定 | 1 つのツール呼び出しに対するガードの許可または拒否の結果。監査ログがコマンド判定を記録するとき、ルール ID、有効な安全レベル、degraded ランタイムのフォールバック状態を含む 1 つの監査レコードを書き込みます。監査ログを参照してください。 |
| セグメント | 複合コマンドをシェル演算子(&&、||、|、;、改行)で分割した 1 つのコマンド。エンジンはセグメントを順に解析し、有効な作業ディレクトリなどの関連状態をセグメント間で引き継ぎます。1 つのセグメントがブロックされると、コマンド全体が拒否されます。解析エンジンを参照してください。 |
| 解析エンジン | コマンド文字列を解析し、ブロックするかを決めるプラットフォーム非依存のコア。すべてのエージェント連携が同じエンジンに入力を渡します。解析エンジンを参照してください。 |
| 連携方式 | CC Safety Net がコーディングエージェント内で動作する方法。標準入力の hook subprocess、エージェントが読み込むプラグイン、プロセス内の拡張機能、イベントプラグインのいずれかです。連携方式によって、エージェントが CC Safety Net を呼び出す方法が変わります。どの連携も同じ解析エンジンを使います。連携アーキテクチャを参照してください。 |
設定
| 用語 | 定義 |
|---|---|
| ポリシー | 設定ドキュメント policy.json。既定では ~/.cc-safety-net/policy.json。安全 preset、機能 override、worktree モード、破壊的コマンド保護、シークレット保護、監査保持を格納します。カスタムルールを格納する場所ではありません。ポリシーを参照してください。 |
| プロジェクトポリシー | プロジェクトルートに置ける .cc-safety-net/policy.json。設定したフィールドだけを持つファイルで、省略したフィールドはユーザーポリシーの値をそのまま引き継ぎます。audit セクションは持ちません。監査設定はユーザースコープ専用です。書き込みはユーザーポリシーファイルと同じく拒否されます。ポリシーを参照してください。 |
| 実効ポリシー | ユーザーポリシーの上にプロジェクトポリシーを重ねた結果。safety.level、workflow.worktree_mode、およびプロジェクトが設定した各 enabled フラグは、プロジェクト側の値が優先されます。ルールごとの override はルール ID 単位でマージされ、allow_paths と deny_paths は両スコープの和集合になります。プロジェクトが緩和したフィールドは、1 行ずつ報告されます。ポリシーを参照してください。 |
| ポリシースナップショット | 各ツール呼び出しで、ユーザーとプロジェクトのポリシーファイル、各スコープの rule.json、および設定した各設定元の rulebook ファイルから構成される有効なランタイムポリシー。読み込み時に書き込み、ネットワーク要求、キャッシュを実行しません。状態は ready と degraded の 2 つだけです。設定の復旧を参照してください。 |
| preset | 継承する機能の既定値を提供する safety.level の値。standard、strict、paranoid のいずれかです。override によってどの preset にも一致しない組み合わせになると、報告される有効レベルは custom です。モードを参照してください。 |
| 機能 | preset から継承され、個別に設定できる保護動作。fail_closed、paranoid_rm、paranoid_interpreters のいずれかです。ポリシーファイルの safety.overrides は機能を上げ下げします。レガシーの環境変数フラグは上げることしかできません。モードを参照してください。 |
| Degraded | 設定元が拒否されたときのポリシースナップショット状態。検証できない設定元は削除されるか、保護的な既定値へフォールバックします。通常の作業は継続し、すべての診断表示で状態が報告されます。もう 1 つの状態は ready です。設定の復旧を参照してください。 |
シェルコマンドの形式
| 用語 | 定義 |
|---|---|
| シェルラッパー | bash -c 'git reset --hard' など、別のコマンドをラップするシェルコマンド。CC Safety Net は、ラップされたコマンドを最大 10 階層まで再帰的に解析します。ブロックされるコマンドを参照してください。 |
| インタープリターの 1 行コード | python -c 'import os; os.system("rm -rf /")' のように、コードをインラインで実行するコマンド。既定で危険なパターンを検出して解析します。ブロックされるコマンドを参照してください。 |
| 動的置換 | $(...)、<(...)、$VAR など、実行時の展開に依存するコマンド値または構造。CC Safety Net は、コマンドの種類と安全レベルに従って動的置換を処理します。一部の形式は standard で許可され、fail closed 動作が有効な場合にブロックされます。解析エンジンを参照してください。 |
再帰削除とパス
| 用語 | 定義 |
|---|---|
| カレントディレクトリ自体を指す対象 | rm -rf . のように、カレントディレクトリそのものに解決される rm -rf の対象。すべての安全レベルでブロックされます。ブロックされるコマンドを参照してください。 |
| 実効カレントディレクトリ | 複合コマンド内の cd や pushd をまたいで追跡される作業ディレクトリ。rm -rf の対象分類と worktree の検出に使います。解析エンジンを参照してください。 |
| カレントディレクトリ配下の対象 | カレントディレクトリ内に解決される、再帰的な強制削除の対象。既定では許可され、paranoid の rm モードではブロックされます。許可されるコマンドを参照してください。 |
モード
| 用語 | 定義 |
|---|---|
| strict モード | fail_closed 機能を有効にする strict preset。安全に解析できないコマンドを拒否します。ポリシーファイルの safety.level を設定するか、CC_SAFETY_NET_STRICT=1 でレベルを上げます。モードを参照してください。 |
| paranoid モード | strict に加えて paranoid_rm と paranoid_interpreters 機能を有効にする paranoid preset。ポリシーファイルの safety.level を設定するか、CC_SAFETY_NET_PARANOID、CC_SAFETY_NET_PARANOID_RM、CC_SAFETY_NET_PARANOID_INTERPRETERS で個別の機能を上げます。モードを参照してください。 |
| worktree の緩和 | ポリシーファイルの workflow.worktree_mode または CC_SAFETY_NET_WORKTREE=1 によって worktree モードを有効にすると、確認済みのリンクされた Git worktree 内で、選択されたローカル Git 破棄コマンドが許可されます。CC Safety Net が worktree を確認できない場合は、緩和を適用しません。モードを参照してください。 |
ルール
| 用語 | 定義 |
|---|---|
| rulebook | カスタムのブロックルール、メタデータ、任意のフィクスチャを収めた JSON ファイル。rule.json で設定元として登録し、そのスコープの .cc-safety-net ディレクトリ配下の rules/<name>/rulebook.json に置きます。ランタイムがツール呼び出しのたびに読み取るため、保存した編集は次のコマンドから反映されます。name は、その rulebook を参照する設定元と一致していなければなりません。rulebook の名前は、ユーザースコープとプロジェクトスコープをまたいで一意に確保されます。カスタムルールを参照してください。 |
| transparent wrapper | rule.json の transparent_wrappers で宣言するコマンド。解析はラッパーを通して、ラッパーが実行する保護対象コマンドに到達します。ラッパーは rulebook ではなく rule.json にあります。そのため、rulebook が削除されてもラッパーは残りますが、rule.json を読み取れないと、そのスコープのラッパーは失われます。カスタムルールを参照してください。 |
| 取り込まれた rulebook | リモートの rulebook を検証したうえで、rule add と rule update が利用側自身の rules/<name>/rulebook.json に書き込むコピー。リポジトリ内の通常のファイルなので、人間がそのまま読めますし、更新の差分もそのまま確認できます。ネットワークに接続するのは rule add と rule update だけで、ランタイムはこのファイルを読むだけです。カスタムルールを参照してください。 |
rulebook、ルール、フィクスチャの正式なスキーマについては、カスタムルールを参照してください。
policy.json のスキーマについては、ポリシーを参照してください。explain --json が返す JSON 形式については、explain トレースを参照してください。