logs を使って読みます。
ログの配置
レコードは、プロジェクトごと、月ごとのパスに書き込まれます。CC_SAFETY_NET_AUDIT_HOME で、監査ルートを置くホームディレクトリを変更できます。CC Safety Net はディレクトリをモード 0700、ファイルをモード 0600 で作成します。書き込みに失敗しても、許可やブロックの判定が変わることはありません。
~/.cc-safety-net/logs/ の直下にあるフラットな *.jsonl ファイルは、以前のバージョンのレガシー配置です。logs はこれらも読み取り、保持期間による削除の対象にもなります。今すぐ削除するには、logs --prune-legacy を参照してください。
各レコードには 1 つの判定が入る
各行には、許可またはブロックしたコマンドの判定が 1 件記録されます。内容は、コマンド、判定の決め手になったセグメント、理由、一致したルールです。- CC Safety Net は、コマンドの出力、モデルへのプロンプト、ツールの結果、会話の内容を読み取ることも保存することもありません。
- 拒否は常に記録します。
- 許可の判定を記録するのは、コマンドのツール呼び出しだけです。許可されたファイルの編集や読み取りは記録されません。
- フェイルクローズのパスによるブロックも記録します。これは、解析に失敗して判定に到達できないため、CC Safety Net がコマンドをブロックした場合です。このレコードには
failureStageとerrorCodeが設定され、logs --suspectはこれらのフィールドを使います。
レコードスキーマ
レコードの例:
segment、toolName、cwd の値を切り詰め、レコードに truncated: true を設定します。長い command も同じように切り詰めますが、failureStage を持つレコードではコマンド全体を残します。このフラグが false として書き込まれることはありません。
failureStage の値
failureStage は、フェイルクローズになった検査を示します。検査は仕組みに示した順に実行されます。
入力の上限、宣言したコマンド用ツールの検査、ポリシーファイルの保護、Git メタデータの保護による拒否は、ポリシーを読み込む前に発生します。そのため、これらのレコードには
level も configFallback もありません。
記録内容:監査の対象範囲
CC_SAFETY_NET_AUDIT_SCOPE は、拒否に加えて許可されたコマンドの判定もログに記録するかを決めます。
対象範囲の設定で拒否の記録が止まることはありません。この設定が決めるのは、許可の判定を記録するかどうかだけです。
保持期間
無効な値の扱いは、監査ログの保持期間を参照してください。同じ値が
logs --since の上限になり、ダッシュボードのアクティビティ画面で選べる期間も制限します。
CC Safety Net は、次に動作したときに期限切れのレコードを削除します。具体的には、レコードを書き込んだ後と、logs、doctor、ダッシュボードがログを読み取る前です。タイマーで動く処理はないため、CC Safety Net が動いていない間は期限切れのレコードがディスクに残ることがあり、logs --id で見つかる場合もあります。
シークレットのマスク処理
CC Safety Net は、レコードを書き込む前に、コマンド、セグメント、ツール名、作業ディレクトリをマスクします。次の値を認識すると<redacted> に置き換えます。
- 名前に
TOKEN、SECRET、PASSWORD、PASS、KEY、CREDENTIALSを含む環境変数の代入 - データベース接続の変数(
DATABASE_URL、POSTGRES_URL、MYSQL_URL、REDIS_URL、MONGODB_URL、およびそのほかの DSN、URL、URI、接続文字列の変数) - PEM 形式の秘密鍵ブロック(
-----BEGIN ... PRIVATE KEY-----) - シークレットを含む HTTP ヘッダー(
Authorization、Cookie、X-API-KEY、API-KEY) - URL 内の資格情報(
scheme://user:pass@hostとscheme://token@host)と-u user:pass - 署名付き URL の署名クエリパラメーター。
x-amz-signature、x-goog-signature、sig、signatureの値 - 決まった一覧にあるプロバイダーのトークン形式(
ghp_...、gho_...、xoxb-...、npm_...、sk_live_...、rk_live_...、pypi-...など) - JWT(
eyJ...)と AWS のアクセスキー ID(AKIA.../ASIA...)