Poisson Labs · Platform
Sangfroid is in pre-release.
The lab’s three open-source tools against your agent on every pull request: the conditions that break it, the step that failed, and a check that fails when a change makes things worse.
We’re opening it to a small number of teams first. In the meantime the tools run on your own machines, and the lab runs audits.
5 conditions got worse.
- 8 safer
- 5 worse
- 1 no significant change
checkpoint 2250 against checkpoint 5999, 14 conditions, 100 trials each, same seeds on both sides. Too small to see: anything under 8pp where nothing moved.
report.md microduck-walking@v1
A real run and real numbers. The pull-request check around them is in pre-release.
What we runThree open tools, in order.
An eval gives you one number. These three give you a place to look and a way to know whether looking helped. Each is open source and works on its own; Sangfroid runs them as one pipeline so you do not have to.
-
1Break
Find the failures you didn’t think to test.
Your test suite covers the cases you imagined. This throws tool errors, timeouts and truncated outputs at your agent, then searches for the combinations that break it, so compute goes where the failures are. What it finds is confirmed on fresh seeds.
Tool returns 503Tool times outOutput truncatedMalformed JSONSchema changedSlow responseRetry stormEmpty resultIllustration. The fault types are the ones the tool injects; no run is shown. -
2Trace
See the step that failed, not just the run.
“The agent failed” is not something you can fix. Trace reads every run over OpenTelemetry or LiteLLM and points at the steps where runs are being lost, so the fix starts in the right file.
Both runs, identical
- 0 user message
- 1 agent message
- 2 user message
- 3 agent
get_reservation_details
Call 4: the runs part. The agent is given the same 3,659 tokens in both runs. It writes 96 tokens in one and 129 in the other.
Run R 20260915T210140Z-4847
- 4 agent message
- 5 user message
- 6 agent
transfer_to_human_agents - 7 agent message
- 8 user message
Passed solved · COMMUNICATE 1 · DB 1
Run R′ 20260915T211148Z-965d
- 4 agent message
- 5 user message
- 6 agent
cancel_reservation - 7 agent message
- 8 user message
- 9 agent
transfer_to_human_agents - 10 agent message
- 11 user message
Failed unsolved · COMMUNICATE 1 · DB 0
A real pair from the R.1 study: one τ²-bench task, same seed, run twice. The runs part at call 4, and the one that fails makes a tool call the other never makes. Drawn from the stored spans by a script, not by Trace, which is still being built. -
3Prove
Find out whether the fix worked.
A fix that helps one case can quietly hurt five others. Prove reruns the same conditions on the same seeds, before and after, and shows every condition that got better, every one that got worse, and what was too small for the run to detect.
5 worse 1 no significant change 8 safer coloured only at q<0.05, corrected across every condition
LATERAL PUSH, m/s → ↑ FRICTION μ 100 TRIALS PER CELL PER VERSIONA real run: a walking policy at two checkpoints, 14 conditions, on the same seeds in both, tested by McNemar's test per condition and corrected across all 14. The later one is better in 8 (green) and worse in 5 (purple, hatched). report.md
What is sold
The running of it. The three tools are open source and stay that way: you can run all of this yourself, on your own machines, and nothing is sent home.
Sangfroid is for teams who would rather not. It sells the hosted pipeline: the compute, the search that spends it well, the check on your pull requests, and the record your team keeps.
If you would rather hand over the whole job, the lab runs audits.
Try it on a robotLive. One rollout per world.
The same loop, on a system you can watch fail. This is the quadruped from the Go1 study: 400 worlds of floor friction and sideways push, mapped, retrained, mapped again. Pick a world and shove it. The map on the left is the study’s result, and it marks the cell you landed in.
0 worse 340 no significant change 60 safer coloured only at q<0.05, corrected across every condition
Push it yourself.
Pick a floor friction and a sideways push, and watch one rollout of the policy in that world. Worlds someone has already probed replay instantly. A new one runs on a GPU, about 3 seconds warm and 25 cold.
A 3D viewer, about 53 MB. It loads only when you ask.
The two maps use the same seeds, and the comparison is corrected across all 400 conditions. The replay is one rollout at one fixed seed; the counts beside it are over all 32 trials in that cell. A policy in a simulator, not a robot on a floor.
What we do for you while we run it
- We run the compute.
- A real test is thousands of runs of your system. We send them out in batches, collect them as they finish, and never rewrite a result once it is stored.
Out — 400 conditions × 32 trials is 12,800 rollouts, chunked into 200 batches of 64. Every shade in the upper strip is one batch, tinted by its place in that plan. Back — the same batches in the same tints, in the order they actually finished. The gradient is gone, and that scramble is the whole point: no batch waits for another and none of them share state, so the store fills in an order nothing chose. Each one is appended as a part and never rewritten. Only at the end, over the whole stack, does anything read it — Aalen–Johansen per cell, then Fisher exact and Benjamini–Hochberg across all 400, giving 60 safer · 0 worse.
Batch count, batch size and rollout count are this run's. Arrival order is illustrative —
the golden fixture's wall_time is synthetic, so there is no real
completion order to draw.
- We decide where to look.
- Testing everything evenly spends most of the budget where nothing happens. The search puts runs where your agent is likely to break, and anything it finds is rerun on fresh seeds before it is reported.
- We guard every pull request.
- The same test runs on each change. If any condition comes back significantly worse, the check fails and names it. If the test was too small to tell, it says that instead of passing.
- name: Crash-test the agent
run: |
proofload sweep agent.toml \
--target my_agent:rollout \
--pair-with <main-run> --yes
proofload check <main-run> <this-run> \
--event violated --fail-on worse - We keep the record.
- Every result is kept as a receipt: what was run, on which seeds, what moved, and what the run could not have detected. Here is a real one.