For teams merging agent PRs

Your agents worked all night. Here’s exactly what changed.

Record the run that worked. Replay it deterministically. Every write comes back as a signed receipt.

$npm i -g reelier && reelier init
Install the GitHub App →
Free forever · open source (MIT) · 0 tokens per replay
Dependabot
Renovate
GitHub Actions

Works inside your agent. Records from your sessions. Replays with any model.

Claude
OpenAI
Cursor
Windsurf
VS Code
GitHub Actions
Docker
Google Gemini
Ollama
Groq
OpenRouter
What a silent bump looks like

None of these threw. All of them were found by users.

openai 1.99.1 → 1.99.2

A patch. Tool type mappings changed, so replaying a conversation that contains tool calls throws. The first request in a session still passes, which is why it clears CI and fails in production. the issue →

langchain 0.4 → 1.x

Tool arguments started arriving as stringified JSON, so calls were quietly re-bucketed as malformed. No exception. From the outside the agent simply stopped using its tools. the issue →

crewai 0.165.1 → 0.177.0

Every tool began firing twice, milliseconds apart, with no error and duplicated side effects. Closed as not reproducible, because by the time it was reported the evidence was gone. the issue →

A type-check and a unit test both pass in all three cases. What changed was the sequence of tool calls, and nothing was watching that.

A receipt proves scope and change — never that the change was correct or safe. Nothing certifies that.

The trust ladder

A ladder of graded claims, never a blanket ✓.

Verified replay
✓ passed
weekly-metrics-digestSKILL.md
3/3 steps
Unaltered since pushSignature verifies against registered key `9158fc9cd0fb4e9b`.
TimestampedRFC-3161 imprint matches (freetsa.org).
Produced byHolder of key `9158fc9cd0fb4e9b`.
CI-attestedseldonframe/reelier@8023122 · run 30005279039 — asserted by GitHub Actions.
Tools verifiedManifest preflight passed.
Writes approvedNo writes in this run (read-only replay).
Cross-checkable refs3 request-ids captured.
CorroboratedAccrues as distinct tenants push byte-identical skills.

None of this proves a run wasn’t fabricated before it was recorded — signing proves unaltered-since-push, timestamps prove existed-by-T, attestation proves which CI pushed it. It makes faking expensive, never impossible.

Try it yourself

Don’t trust — verify. Paste any Reelier receipt and check it yourself.

Three commands
$ reelier init
60 seconds: record → compile → replay → your first receipt.
✓ receipt · 2/2 passed · 0 tokens
$ reelier run <name>.skill.md
Replay any skill — deterministic, 0 tokens.
✓ 2/2 passed · 44ms · 0 tokens
$ reelier diff <name>
SAME or DRIFTED, per step — exit 1 on drift, so it gates CI.
⚠ DRIFTED · step 3 · 200 → 401
record an agent run, replay it deterministically at 0 tokens, and reelier diff catches drift and fails CI
The same skill, three questions

Taxonomy due to Mads Hansen’s review.

The measured proof
1,000 / 1,000

replays byte-identical (N=1000 tail-variance test). MEASURED

0 tokens

per replay, verified from the run record rather than assumed.

~50× cheaper · ~59× faster

than the agent re-running the same task. Full method in examples/benchmark.

Bounded before.

Per-step approval hashes and a declared scope, checked before a write goes out — a fail-closed gate built with design partners today. STRUCTURAL

Attested after.

Every run comes back as a signed receipt, graded on the trust ladder — not a blanket “it worked”, a record of what state it left behind. STRUCTURAL

Answerable forever.

Every receipt gets a permalink in a hash-chained audit log, and a badge you can embed — so “what did it do” has an answer months later, not just at merge time. STRUCTURAL

Reelier CloudOptional · free

Local Reelier is complete and free forever. Sign in with GitHub to push receipts to a hosted ledger, run skills on a schedule while your laptop’s closed, and share any receipt as a public permalink with a verified-replay badge — a deterministic, assertion-checked replay, not a cryptographic signature.

Sign in with GitHub →

Gate your next dependency bump.
Let the diff convince you.

$npm i -g reelier && reelier init