Halo Record 代理审计轨迹
为 AI 代理生成可由客户独立校验的防篡改审计轨迹。
- Star 数
- ★ 80
- 最近更新
- 11 天前
- License
- Apache-2.0
- 主语言
- Python
- FA 评分
- 85/100 · 表现良好
30 秒速览
- 运行形态
- 可在哪里用
- 通用 · 跨平台Codex · Claude Code · OpenAI API · Claude API
- 费用
- 免费,无需付费服务
- 上手难度
- 低 · 几分钟可跑通
- 开始前需要
- 典型场景
- 向客户安全团队交付 AI 代理处理其数据的可校验 Runtime Report,而不是仅提供文字说明的软件供应商。
- 不适合
- 需要证明所有真实动作均被记录的团队
- 要求内置保留、裁剪或彻底删除链上个人数据的团队
- 无法为并行写入者建立独立链或互斥锁的系统
- 源码审查
- 85/100 · 表现良好
这个 Agent 能做什么,适合哪些场景?
Halo Record 是一个零运行时依赖的 Python 参考实现,用哈希链记录 AI 代理的工具调用、模型调用、数据访问、审批及运行边界。它提供 Recorder、trace、record_call、框架适配器、验证器、见证客户端、报告服务器和 CLI,并可接入 MCP、LangChain/LangGraph、OpenAI Agents SDK、Claude Agent SDK、OpenTelemetry GenAI、LiteLLM、Langfuse及网关日志。记录以追加式 JSONL 链保存在本地文件系统,可渲染成在浏览器内重新校验的 Runtime Report,也可导出 CSV 与绑定源链头的清单。外部见证检查点可发现已提交历史被重写或预期检查点缺失,RFC 3161 时间戳还能证明某个链头不晚于特定时间存在。它是证据层而非认证或执行网关:哈希不能证明每个动作都被捕获,验证状态也只是集成代码所报告的结果。核心功能可在本地运行;网络仅用于主动调用的远程见证、读取检查点或时间戳服务。
应用在动作边界调用 Recorder、trace()、record_call() 或框架适配器,将调用输入的规范哈希、经过尽力脱敏且最多 200 字符的摘要、结果、主体、来源、父记录以及可选的 verification 和 authority 块封入记录。每条记录使用 RFC 8785 规范化后计算 SHA-256,并通过 integrity.prev_hash 连接前一条记录;halo verify 会重新计算哈希并检查格式和链接。halo report 生成自校验 HTML,halo serve 按客户提供受控报告,halo export 输出日期范围内的 CSV 和清单,halo policy 对声明式策略包给出通过、违规或证据缺口。halo anchor 将链头、链根、记录数和主体 ID 提交给本地或远程见证,并可附加 RFC 3161 时间戳;记录正文不会随见证请求发出。现有系统还可通过 MCP 客户端拦截、LangChain 回调、OpenTelemetry GenAI spans、LiteLLM 回调、Langfuse 导出、网关日志以及 Claude Code 或 Codex 的 PostToolUse 事件写入同一记录格式。
- 向客户安全团队交付 AI 代理处理其数据的可校验 Runtime Report,而不是仅提供文字说明的软件供应商。
- 需要为 SOC 2、AIUC-1、AICM、ISO 42001、EU AI Act 或 NIST AI RMF 评审准备日志证据和日期范围导出的合规团队。
- 运行 LangChain、LangGraph、MCP 或 OpenTelemetry GenAI 工作负载,并希望把不同来源的动作统一封入一条链的平台团队。
- 希望记录 Claude Code 或 Codex 文件修改、Shell 命令和 MCP 调用,又不想修改代理代码的工程团队。
- 需要由客户或其他外部方持有周期性检查点,以发现已提交历史被改写或检查点中断的高信任场景。
- 需要把特定工具调用范围导出成 CSV 和校验清单,再上传至 Vanta、Drata 等 GRC 平台的审计团队。
如何安装或部署这个 Agent?
本地演示不需要代理、账户或 API 凭据。使用 uv 可直接运行:
uvx --from halo-record halo demo --serve也可以通过 pip 安装后启动:
pip install halo-record
halo demo --serve演示会创建虚构供应商及两个客户的记录,使用本地见证文件建立检查点,启动 Runtime Report 服务并打开操作台。Apache-2.0 包本身可免费使用;只有主动选择远程见证或 RFC 3161 时间戳时才需要网络。
如何使用这个 Agent?
在自己的 Python 代理入口记录运行边界:
from halo_record import trace
agent = trace(run_my_agent, profile="my-agent", log="audit.jsonl")要捕获具体工具调用,需要在每个工具边界增加 record_call() 或使用适配器:
from halo_record import Recorder, record_call
rec = Recorder("audit.jsonl")
with record_call(rec, "crm.lookup", {"account": "acct-9"}) as call:
call.result = crm.lookup("acct-9")
with record_call(rec, "payments.refund", {"amount": 120},
parent_id=rec.last_record_id()) as call:
call.result = payments.refund(120)随后验证并生成报告:
halo verify audit.jsonl
halo report audit.jsonl -o report.html如需浏览一个目录内按客户隔离的报告,可运行:
halo serve ./records --port 8721Claude Code 可将以下内容加入 ~/.claude/settings.json:
{
"hooks": {
"PostToolUse": [
{"matcher": "*", "hooks": [{"type": "command", "command": "halo hook"}]}
]
}
}Codex 可将以下内容加入 ~/.codex/hooks.json:
{
"hooks": {
"PostToolUse": [
{"matcher": ".*", "hooks": [{"type": "command", "command": "halo hook"}]}
]
}
}两种钩子默认写入 ~/.halo/audit.jsonl,可用 HALO_LOG 改写路径;HALO_HASH_ONLY=1 可关闭摘要。若要承诺已提交历史,可建立并检查见证点:
halo anchor audit.jsonl witness.jsonl
halo anchor audit.jsonl witness.jsonl --check这个 Agent 有哪些优点和局限?
- 运行时仅使用 Python 标准库;核心记录和本地验证无需外部服务或网络。
- 开放记录格式、RFC 8785 规范化和 SHA-256 链允许第三方独立实现验证器,无需持有密钥。
- 同时覆盖原生边界捕获和现有遥测摄取,并通过
source标签公开证据来自何处。 - 外部检查点明确加强历史完整性;还支持 RFC 3161 时间证明,而不会向见证发送记录正文。
- 可交付自校验 HTML、策略判定结果,以及带源链头和文件哈希清单的 CSV 审计证据。
- 项目明确记录完整性、捕获完整性和可信捕获之间的边界,避免把哈希链描述成全面证明。
- 自持链只能相对既有链头发现编辑;在链头交给外部方之前,操作者仍可能删记录后重新封链。
- 任何哈希链都不能证明所有真实动作经过记录器;完整性仍取决于插桩位置和捕获边界。
- 默认脱敏是正则和熵检测的尽力措施,姓名、邮寄地址及自由文本等内容可能永久进入追加式链。
- 没有内置保留或裁剪功能;删除链内记录会破坏后续验证,个人数据治理需要外部假名映射纪律。
- 链要求单写者语义;绕过
Recorder的并行写入必须自行持有等效互斥锁或使用每进程独立链。 - 框架回调默认故障开放,写入失败时动作仍会执行且记录可能永久丢失;只有周期性见证才能暴露链停滞。
这个 Agent 与同类方案有什么区别?
与相关度最高的同类 agent 并排比较关键指标。
| Agent | 源码审查 | 形态 / 费用 | Star | 最近更新 | 主语言 | 完整支持的平台 |
|---|---|---|---|---|---|---|
| Halo Record 代理审计轨迹 当前 | 85 · 表现良好 | 命令行工具免费 | ★ 80 | 11 天前 | Python | Codex · Claude Code · OpenAI API · Claude API |
| OpenInference | 71 · 存在缺口 | 代码库 / SDK免费 | ★ 1.2k | 1 天前 | Python | OpenAI API · Claude API |
| Cordum Agent Control Plane | 64 · 存在缺口 | 自托管服务免费 | ★ 508 | 4 天前 | Go | Claude Code |
| TruLens 智能体评测与追踪 | 51 · 缺口较多 | 代码库 / SDK免费 + 模型费 | ★ 3.6k | 1 天前 | Python | OpenAI API |
FollowAgents 如何评估这个 Agent?
查看各维度的扣分理由
项目明确采用本地、无运行时依赖的记录器,网络行为仅限显式调用的见证锚定、检查点读取和 RFC 3161 时间戳,并准确披露各自发送的字段,因此最小权限、数据流和外部影响说明充分。工具参数默认保存哈希及最多 200 字符的尽力脱敏摘要,也提供纯哈希模式;但文档明确承认姓名、地址、自由文本和调用方提供的结果字段可能未被脱敏,且猜测性输入仍可通过哈希得到确认,所以敏感数据处理未获满分。网络操作由调用者主动启用,但没有统一的交互式确认机制,故用户确认扣分。零运行时依赖降低了供应链面,但构建依赖使用开放下界,工作流 action 也未固定到提交摘要,故依赖安全为 2。追加链没有内建删除、保留或修剪,且已经封存的数据难以撤回,因此回滚仅为 1。作者、许可证、记录来源标签、安全联系方式和采集层级均有清晰归属;发布者身份虽未经企业注册表验证,但按规则仅视为未知,不单独扣分。
README 对完整性、完整性缺口、外部见证、单写者约束以及 fail-open/fail-closed 行为的描述彼此一致,所给锚定和访问控制测试也覆盖正常、篡改、截断、过期和错误输入等路径,因此自洽性较强。Python 3.8+、标准库运行时和普通 pip/uv 安装提供了良好可用性,但 setuptools 构建依赖、可选 TSA/OpenSSL/curl 以及多个外部框架路径仍带来环境依赖,故未满分。失败模式被明确解释,部分适配器会向 stderr 报警并计数丢失记录,验证结果也会说明截断原因;但所给材料没有系统展示所有 CLI、网络、磁盘和格式错误的用户消息,故失败消息为 2。
材料明确面向代理开发者、安全审查者、客户和合规场景,并提供原生包装器、显式调用、LangChain、MCP、OpenTelemetry、网关日志及编码代理 hook 等多种接入方式,环境适配较全面。能力边界表述尤其清楚:哈希链不证明全部动作都被捕获,验证块不证明检查真实发生,时间戳检查本身也不验证 TSA 签名。触发配置和采集时点有说明,但通配 hook、纯编排操作跳过规则及不同适配器的精确覆盖主要依赖文档陈述,所给测试未全面验证这些触发边界,因此 trigger_precision 扣为 2。
README 从威胁边界、演示、安装、集成、失败模式、隐私到合规用途组织清晰,并提供可复制命令、代码样例和常见误用说明;已明确指向 LIMITS、PRIVACY、RETENTION 和 REVIEWERS 文档,且当前摘录本身也详细列出限制。完整 Apache-2.0 文本与项目元数据一致。命名方面同时存在 halo-record、halo_record 和 halo,并明确承认 halo 的 PyPI 冲突以及 record 函数遮蔽模块,虽然有规避指导,稳定性仍扣分。版本 0.2.45 和 Alpha 状态可见,但材料未提供变更日志、发布历史或兼容性政策,因此版本与变更日志仅为 1。作者、漏洞邮箱和 issue 路径明确,并承诺回复窗口,但没有展示多人维护、治理或长期更新安排,故维护责任为 2。
产物是可交付的 JSONL 链、自验证 HTML 报告、检查点及明确的验证命令,且来源标签、验证块和模型调用字段使审计输出可直接供安全审查使用,输出可用性充分。相较普通日志,其哈希链、外部检查点和独立验证流程提供了明确增量价值。成本方面,零运行时依赖、一行包装和多种适配器降低接入成本;但可靠的历史完整性仍要求可信外部见证,完整捕获依赖正确插桩,并需承担单写者、存储、隐私、TSA 验证和保留策略的运维成本,项目又标记为 Alpha,因此成本收益为 2。
核心声明被分解为可检验的编辑检测、已承诺历史检测和捕获完整性三层,并反复关联到具体限制章节、命令、字段和测试场景;测试材料对检查点、链根、截断、异链和访问控制提供了交叉支持。README、SECURITY、pyproject、CI 和测试之间关于零运行时依赖、网络边界、身份信息、许可证与验证流程基本一致。项目明确区分代码能证明的事实、操作方提供的声明、外部信任假设和未来商业设想,因此事实与推断分离充分。满分仅表示静态材料在这些标准上表现完整,不代表本评估执行过代码或独立验证过声明。
- 不要把自持哈希链当作完整历史证明;在可信外部方持有检查点之前,操作方仍可删除记录并重新封链。
- 脱敏是尽力而为而非数据丢失防护。姓名、地址、自由文本、结果字段和可猜测值的哈希可能泄露或确认个人信息;生产环境应优先使用纯哈希模式和可删除的外部映射。
- 追加链没有内建删除、修剪或保留执行机制。写入个人数据前必须先设计保留、隔离和删除映射策略。
- 框架回调和事后 hook 可能 fail open;磁盘写入失败时动作可能已执行却没有记录,正常通过链验证也不能发现这种遗漏。
- 必须保证每条链只有一个受锁保护的写入者;跨进程或跨语言的直接写入可能产生分叉。
- 内置时间戳检查不验证 TSA 签名;生产审计需要使用独立标准工具和适当的 TSA 信任链。
- 项目标记为 Alpha,且所给材料未包含变更日志或兼容性政策;升级前应固定版本并审查格式与 CLI 变化。
- 本结论仅基于所给静态文件,未执行测试,也未独立确认 PyPI 包、示例报告、外部文档或网络行为。
常见问题
本地使用是否需要付费服务或模型 API 密钥?
它能证明代理的每个动作都被记录了吗?
记录器失败时,代理会不会停止?
trace() 原生包装器故障关闭,写入异常会传播并中断动作。LangChain 等框架适配器故障开放:动作继续执行,丢失记录会通过警告和计数器报告,但链本身无法显示从未写入的事件。工具参数和客户数据会发送到外部见证吗?
能否让多个工作进程写同一个链文件?
Recorder 自带侧边锁;直接写文件的并行进程应使用等效锁,或分别写入独立链。