agent 动作的审计轨迹,逐行拆开看
2026-10-17 — 一份记录配得上“审计”二字,只有一种情形:事后交到别人手里,它说出来的还是同一件事。这是个朴素得乏味的设计门槛:仅追加、先验、脱敏、可回放。这一篇就是 20131 实际落盘内容的乏味导览。
一行,五个锚点
每个被观测的动作,在本地 JSONL 里占一行,带五个锚点:
- agent 家族——动作来自哪个 agent 运行时(Claude Code、Codex、OpenClaw、经 MCP 接入的工具)
- 进程归属链——被派生进程的链条,子进程的动作仍能指认它的双亲
- 命令形状——尝试动作的归一化形态,以及对着哪类资源
- 时间戳——观测发生那一刻的墙钟
- 策略判定——动作当时生效的评估结果;今天是 would_block 或 allow,绝不静默丢弃
不靠信任的信任
- 写入前强校验:畸形事件被拒绝、零字节落盘。文件可信是因为有这道门,不是因为写它的人做了保证。
- 记录前脱敏:凭证、键值型密钥、密钥文件路径,在操作系统交给我们每个字符串时就先剥掉。“不小心记了敏感内容”不存在。
- 本地仅追加、属主权限、按大小与按日轮转。历史不能被任何拿得到文件的人悄悄改写。
- 采集器零外呼——依赖闭包在 CI 里机器核验,审计面只属于你。
回放:复盘真正要问的“如果”
因为记录是结构化的,你能做的不止 grep。回放引擎拿既有审计语料对着候选规则文件重放,逐事件输出判定——确定性的,跑两遍字节级一致,对运行中的系统零副作用。事故复盘从考古变成 diff:明天的策略,会怎么评价上周二的动作?
在你自己的机器上看一眼
当前构建的只读控制面按落盘原样展示记录——status、audit-tail、timeline。带逐文件 SHA-256 的安装包在<a href="/zh-cn/download/">下载页</a>;<a href="/zh-cn/docs/install/">安装指南</a>带你走完首次运行;<a href="/zh-cn/supported-agents/">支持的 agents</a>按家族如实标注接入深度。这套形状为什么存在的叙事版在<a href="/zh-cn/blog/agent-behavior-provable/">这里</a>。