logs 查看。
日志布局
记录写入按项目、按月划分的路径:CC_SAFETY_NET_AUDIT_HOME 可以更改审计根目录所在的主目录。CC Safety Net 以模式 0700 创建目录,以模式 0600 创建文件。写入失败绝不会改变允许或阻止的决策。
直接位于 ~/.cc-safety-net/logs/ 下的平面 *.jsonl 文件是早期版本的旧版布局。logs 仍会读取它们,保留期清理也仍会删除它们;想现在就移除,参见 logs --prune-legacy。
每条记录包含一个决策
每行记录一条允许或阻止的命令决策:命令、促成该决策的命令段、理由,以及匹配的规则。- CC Safety Net 从不读取或存储命令输出、模型提示词、工具结果或对话内容。
- 拒绝始终会被记录。
- 允许的决策只针对命令类工具调用记录。被允许的文件编辑或读取不产生记录。
- fail-closed 路径上的阻止同样会被记录:分析失败、CC Safety Net 无法得出判定,于是阻止了命令。这类记录带有
failureStage和errorCode字段,logs --suspect正是依据这两个字段筛选的。
记录 schema
示例记录:
segment、toolName 和 cwd 的值过长时,CC Safety Net 会截断它们,并在记录上设置 truncated: true。过长的 command 同样会被截断,只有带 failureStage 的记录例外,这类记录保留完整命令。该字段从不写成 false。
failureStage 的取值
failureStage 指出按 fail closed 处理的是哪一项检查。各项检查的执行顺序见工作原理。
由输入上限、已声明命令工具的检查、策略文件保护或 Git 元数据保护产生的拒绝,发生在策略加载之前,因此记录中没有
level,也没有 configFallback。
记录的内容:审计范围
CC_SAFETY_NET_AUDIT_SCOPE 决定允许的命令决策是否与拒绝一起记入日志。
范围从不抑制拒绝记录,只决定 CC Safety Net 是否记录允许的决策。
保留期
无效值的处理方式见审计保留。同一个值也是
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...)