Reelier
官方智能体做出声明,Reelier 开具凭证——记录一次智能体的工具调用工作流,以零令牌确定性重放,并通过对比运行结果来捕捉偏差。
你可以用 Reelier MCP 做什么?
- 确定性重放已录制的技能 — 要求以 0 tokens 运行保存的
.skill.md文件(reelier run),默认只读,实现字节级一致的重新执行。 - 检测代理运行中的漂移 — 使用
reelier diff将重放结果与原始结果对比,按步骤标记 SAME 或 DRIFTED,如有任何变化则退出码为 1。 - 为依赖升级 PR 设置门禁 — 让助手配置 CI 工作流,针对 Dependabot/Renovate PR 重放你的技能,并在精确漂移的步骤上失败。
- 将现有轨迹转换为技能 — 通过
reelier compile将trace.jsonl或现有SKILL.md编译为可重放技能,并将诚实的缺口列为开放问题。 - 离线验证签名收据 — 运行
reelier verify重新计算推送收据阶梯中的每项声明,显示哪些梯级已被证明,哪些是诚实的缺口。 - 录制前检查代理覆盖范围 — 使用
reelier init --dry-run检查 Path A/B/C 观察覆盖范围和重放候选,不写入或更改任何内容。
文档
Reelier
让你的智能体写代码,并保留凭证。
你的智能体通宵工作。这里记录了具体发生了什么变化。
Reelier 记录下成功运行的轨迹,将其冻结为可重放的技能,并确定性地重放它——每次运行都会生成一份凭证:证明智能体做了什么,以及因此改变了什么。智能体做出声明。Reelier 出具凭证。
在你的智能体 PR 上添加凭证——安装即完成
智能体编写的 PR(Dependabot、Claude、Codex、Cursor 等)会在几秒内收到凭证评论:作者、更改的文件、声明的范围与实际更改的对比、敏感路径标记。无需工作流文件、无需 CLI、无需配置。
→ 安装 Reelier 凭证 GitHub App —— 在公共仓库上永久免费。
Reelier 凭证——智能体 PR 作者:
dependabot[bot]· 更改的文件:2(+119 −41) 声明的范围:无(添加.reelier/scope.yml以启用意外写入检测) 触及的敏感路径:⚠ 1 —package-lock.json证明范围和更改,而非正确性
来自 Reelier 自身仓库的真实凭证——查看一个实例。在 .reelier/scope.yml 中为每个智能体声明范围(或在 PR 正文中添加 reelier-scope 块),凭证将报告意外写入。凭证证明范围和更改,绝不证明正确性或安全性。
为什么
AI 智能体是非确定性的——相同的提示词,每次运行结果不同——而且无论是否真的做了,它们都会声称自己完成了工作。Reelier 记录下成功运行的轨迹,确定性地重放它,并出具一份签名凭证来证明这一点。在一个工作流中将其指向你现有的 CI——它添加了可验证的凭证,而不是替换你的技术栈。
在真实的头对头基准测试中,相同任务、相同数据(完整方法):
- 1,000 / 1,000 次重放字节级一致
- 每次重放都附带签名凭证——证明运行了什么、改变了什么,绝不是声明
- 重放时 0 次 LLM 调用——确定性重新执行,而非重新推理
在同一基准测试中,确定性重放也比重新运行智能体便宜约 50 倍、快约 59 倍。
安装
npm i -g reelier && reelier init
# No Node install needed — same commands via Docker:
docker run --rm ghcr.io/seldonframe/reelier --help
reelier init [--dry-run] 在 Reelier 的三条路径上执行一次带检查点的本地检查:路径 A 的观察覆盖、路径 B 的重放/冻结候选,以及路径 C 的可绑定/可产生结果/仅影子/不支持的连接和候选。它不会部署、门控、分发、上传、复制凭据或重写主机配置。--dry-run 不写入任何内容;正常命令只写入 .reelier/init/ 下方的清理后工件。
作为智能体插件
教你的编码智能体何时使用 Reelier。相同的两个命令,任一主机:
claude plugin marketplace add seldonframe/reelier
claude plugin install reelier@seldonframe
codex plugin marketplace add seldonframe/reelier
codex plugin add reelier@seldonframe
这只会安装两个智能体技能,没有其他内容。reelier-replay 教你的智能体冻结可重复的工具调用任务,并以 0 token 重放。reelier-write-safety 涵盖在授予写入权限前如何限制智能体的写入:记录器看到什么、策略拒绝什么,以及凭证证明什么和不证明什么。它不附带任何 MCP 服务器,因此它本身不会包装、观察或门控任何工具调用;reelier CLI 负责这些,技能通过 npx 驱动它。以 Agent Plugins v1.0.0 格式(plugin/agent-plugins/)和 Claude Code 格式(plugin/claude/)打包,由 scripts/build-plugin-packages.mjs 从单一来源生成。
已在 codex-cli 0.147.0-alpha.1.2 上端到端验证:两种格式都能安装、启用,且技能能触达模型。其他主机未经测试,各主机的状态在 docs/specs/agent-plugins-coverage-v1.md §4 中跟踪,而非在此声称。
如何使用
reelier init --dry-run # inspect Path A/B/C locally; write nothing
reelier init # persist resumable sanitized inspection artifacts
reelier run <name>.skill.md # replay deterministically — 0 tokens (read-only by default)
reelier diff <name> # SAME or DRIFTED, per step — exit 1 on drift
reelier push <name>.skill.md # sync receipts to your ledger (opt-in)
reelier ci # write a workflow: drift-CI + PR receipts, one command
- 检查,然后记录或冻结。
reelier init在不改变路由的情况下揭示观察到的覆盖和本地候选。reelier mcp --wrap "<mcp server>"代理实时工具;reelier scan/from-session冻结支持的历史记录。 - 编译。
reelier compile将轨迹转换为SKILL.md——0 次 LLM 调用、最小化断言、诚实的缺口打印为开放问题。 - 重放。
reelier run在 Level 0 重放它——无 LLM、字节级一致、默认只读(写入需要--allow-writes)。 - 差异对比。
reelier diff报告每一步的 SAME 或 DRIFTED,并以失败的断言作为原因——漂移时退出码为 1。 - 登录。
reelier login通过浏览器中的设备代码将此机器连接到 Reelier Cloud——或为 CI 和自托管设置REELIER_CLOUD_URL/REELIER_CLOUD_KEY。 - 推送。 每次运行都是一份凭证;
reelier push可选地将其同步到账本,以获得永久链接和可嵌入的已验证重放徽章。
已有智能体技能?转换它——你的技能,减去模型:
reelier compile trace.jsonl --from-skill ./my-skill/SKILL.md
三项测试,一个技能
| 测试 | 命令 | 回答 |
|---|---|---|
| 确定性 | reelier run <skill.md> | 它是否仍然做它之前做的事? |
| 恢复 | reelier run <skill.md> --fail N | 如果它坏了,技能会注意到并自我修复吗? |
| 漂移 | reelier run <skill.md> --wrap "<your mcp server>" | 世界是否已从该技能脚下移开? |
分类法归功于 Mads Hansen 对发布帖的评审。 每项测试的完整语义,包括恢复注入和清单护栏:docs/REFERENCE.md。
门控 Dependabot / Renovate 升级 PR
Dependabot 和 Renovate 打开 PR 并运行你的测试套件——但两者都不知道你的智能体在运行时实际做什么,因此一个静默改变工具调用形状的依赖升级(重命名字段、新默认值、不同错误)会在绿色单元测试下顺利通过。这是它们不运行的检查。
将 .github/workflows/reelier-bump-check.yml 复制到你的仓库中,将 skill: 指向你自己记录的 .skill.md 文件,它将:门控来自 dependabot[bot]/renovate[bot](或 dependencies 标签)的 PR,安装升级后的依赖,在 --max-level 0(0 token)下实时重放你记录的技能,并在漂移的确切步骤上使检查失败。
这测试依赖和 MCP 工具调用行为——它不测试模型升级;--max-level 0 从不调用 LLM。完整清单副本和设置:docs/marketplace-listing.md。
证明它
推送的凭证携带一个可独立验证的声明阶梯——而不是一个笼统的“已验证”。根据你开启的内容,它可以被签名、加时间戳、CI 证明,并携带可交叉检查的提供方请求 ID。reelier verify 离线重新计算每个声明,未启用的声明只会呈现为诚实的缺口,绝不会是羞耻的缺口。
查看一个真实实例:reelier.com/r/HWBdmGob9KeHRqXi-OEaRD0z。
完整的 8 级阶梯,每级证明什么和不证明什么:docs/REFERENCE.md。
如果你的技能是员工
| 员工生命周期 | Reelier 对应物 |
|---|---|
| 将会话技能化 | reelier from-session |
| 绩效评估 | reelier run + reelier diff |
| 车队维护 | 定时重放 + 漂移警报 |
| 记录 | 签名凭证 |
“已验证”描述的是记录,绝不是智能体——凭证证明运行了什么和改变了什么,而不是智能体是否擅长其工作。
雇佣合同不会让员工变好——它让员工所做的事可见且有边界。这里也一样:凭证证明范围和更改,绝不证明正确性。
适用对象
- 独立开发者 / OSS 维护者——再次拥有真正的回归测试;漂移不能静默通过。
- 发布智能体更改的团队——“运行干净”变成可检查的 PR 工件,而非声明。
- 为客户运行智能体的代理机构——客户可验证的签名、加时间戳的交付证明。
- 市场买家或卖家——经证实的凭证是无法被刷出来的评论。
- 面向审计的运维——每次写入的签名、CI 证明的轨迹,包括幂等键。
MIT,永久免费(≤0.16.0 版本仍为 AGPL-3.0)。你的数据——技能、轨迹、运行——在 SPEC.md 中规定,因此离开就是复制一个文件夹。
贡献: 欢迎提交 issue 和 PR——SPEC.md 是格式的权威来源;修复代码,而不是规范。PR 前请 npm test。
如果 Reelier 为你省去了一次重新运行,给它加星 ⭐——这是其他构建者发现它的方式。