Tracekit 会在你的代理执行每次工具调用之前进行检查,将每次调用和决策签名写入哈希链,
并为每次运行生成一个 .tkb 文件,任何人都可以离线验证。
8 / 8篡改攻击被捕获480 次试验,带见证者(E1) |
570 / 570有害调用被阻止11 个类别,738 次中 1 次误报(E17) |
< 1 ms每次工具调用增加的开销p99 为 0.91 ms,签名器往返(E9) |
8 / 8内部攻击被捕获每个 PR 上的合并门禁(E8) |
构建方式类似 Certificate Transparency:签名记录写入仅追加日志,由独立见证者联署
开放文件格式 · Python 和 TypeScript 验证器 · MIT · 在你自己的机器上运行
当代理做了不该做的事时,你会问三件事:它做了什么,是否被允许,以及你是否能信任 这份记录? 代理自己的日志无法回答第三个问题,因为代理可以编辑它。下面是一次运行,用两种方式 记录:
同一次运行,已录制:数据库、签名器、查看器和两处编辑都是真实的;模型是脚本化的。带声音观看(1:47)
在此演示中,签名器以 agent 自身的用户身份运行(开发模式),因此一个知道方法的 agent 本可以读取密钥并重新签名日志。将签名器运行在 agent 无法触及的地方,并配备见证者,它就无法做到。
uvx --from tracekit-ai tracekit demo --server
无需 API key,也无需通过 uv 安装任何东西。在 Mac 上从空缓存开始,耗时 5 秒(在全新的 venv 中执行 pip install tracekit-ai 则为 10 秒)。包名是 tracekit-ai:PyPI 上的 tracekit 是一个无关项目。一个脚本化 agent 会发起三次调用,你应该会看到:
== agent run (SCRIPTED: fixed tool calls, not a model)
Bash 'ls': allow
Bash 'sudo rm -rf /': deny TK-D001 TK-D004 TK-F003
Bash 'echo "unterminated': ask TK-SHELL-PARSE
...
Integrity: VERIFIED.
== tamper test: rewrite the denied call as allowed in a copy, then verify again
[FAIL] signatures — 11 record(s), keys valid at their position
seq 4: hash does not match the event
Integrity: FAILED.
删除操作在执行前被拒绝,被挂起的调用在获得批准后执行,并且该次运行通过了验证。随后,演示程序在一份副本中将该拒绝改写为允许,验证在它所更改的那条记录处失败。
三行:
pip install tracekit-ai
import tracekit; tracekit.instrument() # the first line of your agent; then run it as usual
tracekit last # Integrity: VERIFIED. / Assurance: dev; ...
tracekit.instrument() 会启动一个开发签名器(或复用正在运行的签名器),并对它找到的框架的每次工具调用和模型调用进行门控和记录。tracekit last 会导出你最近一次运行,对其进行验证并说明其位置。tracekit view --dev 会显示所有运行。在干净的机器上,LangGraph 示例(一个模拟模型,无需 API 密钥)的安装、运行和验证在 27 秒内完成:examples/v2/clean-machine.sh langchain。