メインコンテンツへスキップ
CC Safety Net は、コマンドの判定を 1 件ずつ監査ログに記録します。ログはローカルマシンにだけ保存され、アップロードされることはありません。各ファイルは JSON Lines(JSONL)形式で、1 行に 1 つの JSON オブジェクトを記録します。ダッシュボードで読むか、ターミナルで 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 はこれらのフィールドを使います。

レコードスキーマ

レコードの例:
CC Safety Net は、長い 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 はアーカイブもゴミ箱も取り消しもなしに削除します。ダッシュボードでは、値を小さくする前に確認を求めます。

シークレットのマスク処理

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...)
マスク処理の範囲は限られています。決まったパターンの一覧で照合しているだけで、分類器ではありません。ファイルシステムの絶対パス、プロジェクト名やディレクトリ名、ホスト名、IP アドレス、ユーザー名、チケット ID、ファイル名、一覧にない形式の資格情報は、そのまま残ります。reason フィールドもマスクしません。監査ログは機密性のあるローカルデータとして扱い、Issue やチャットに抜粋を貼り付ける前に内容を確認してください。
ファイルの権限は、ログを読める人を制限するだけです。内容をマスクするわけでも、共有して安全な状態にするわけでもありません。
最終更新日 2026年10月22日