VN Vu NguyenModel Capabilities / live application Resume
Member of Technical Staff / Model Capabilities

Same model, five ways of asking. What a System One critic can and can't do in an agent harness.

One decision I actually pay for — will this coding agent's edit pass its test suite? — put to Jev, two open models, and Claude Sonnet 5 on 1,554 graded Pillbox runs. Asked the obvious way, Jev showed weak overall discrimination (AUC 0.50; Brier 0.279, which a constant base-rate guess beats at 0.250), though its 107 highest-confidence predictions all passed — high observed precision, across two tasks. Asked as fixed falsifiable atoms with weights fit on a held-out split, it reached better observed AUC and Brier than Claude Sonnet 5 on these six test tasks (0.66 vs 0.63; 0.246 vs 0.315) at about 1/46th the per-call cost. The failures are on the page too; the reproduction bundle regenerates every number.

How to read this. Pick one of 1,554 real coding-agent runs from Pillbox and replay it edit by edit. After each edit, a Jev critic looks at the files so far and estimates whether the run will pass its tests. If that estimate drops below θ, the run is killed right there — no more agent time spent. Then the page reveals what actually happened when the run finished, and how many seconds the kill would have saved (or whether it killed a winner).
pillbox / §0 · session log
not started

Start a five-minute session.

Then pick a real agent run on the right and press replay. The critic's verdict after each edit appears here — keep paying or kill — then what the run actually did and what the kill would have saved. Under the hood this is a Pillbox-shaped session: every step is a numbered, attributed event you can inspect with the toggle above.

no run yet
Scorecards · test split

Four deciders, one question, calibration first.

Accuracy tells you if a decider is right. Brier and ECE tell you whether its confidence means anything — the number a cascade actually routes on. Jev returns a probability natively; the LLM tiers verbalize one, which is the thing TypeSafe says not to trust. Latency and cost are measured per call from the vendor's own usage report.

Experiment 1 · confidence-gated cascade

Spend the frontier model only where the cheap one hesitates.

Walk the tiers in order; accept the first answer at least τ away from a coin flip; the last tier always accepts. Slide τ and the whole frontier recomputes in the browser from the published per-item scores. If the cheap tier is calibrated, the curve hugs frontier accuracy at a fraction of the cost. If it isn't, you can see exactly where it lies.

Accuracy vs $ per 1,000 decisions

Experiment 2 · best-of-N selection

Ghost with a cheap critic: pick the winner before paying the verifier.

Several test-split tasks have dozens to hundreds of independent attempts from the same cheap coding model. Every selector draws from the same candidate pool with the same seeded draws (rows scored by all four tiers), picks its argmax, and we count whether the pick passed — against a random pick and an oracle (any passer in the draw). This is Pillbox's dispatch --critic-policy select, simulated on runs already paid for.

Selected pass-rate vs N

Experiment 3 · how you'd actually iterate on Jev

Same model, five ways of asking. Each rung measured against the last.

The baseline asked one holistic question over a flat diff — a System Two question ("simulate the tests") put to a System One model. The ladder changes one thing per rung: structure the state; add the reconstructed final files; add the tests the agent could see; then replace the holistic question with atomic ones and fit the weights on the task-disjoint dev split. The last rung gets cute: a cheap open model (Qwen3-30B) reads the task and writes the checks itself, Jev answers them, and the loop is closed three ways. Nothing here touches the test split until scoring.

Experiment 4 · the decision that has money on it

Should we keep paying for this worker?

"Will this pass?" asked after the run is cheap trivia — the verifier is seconds away. The decision worth 150 ms is the one made while the agent is still running. Across the test runs replayed here, — of the agents' wall-clock went to runs that ended up failing (54% across all 1,554 runs), and the first edit lands about halfway through a run. So: cut every run at every edit, score the prefix with the composite atoms, fit a combiner on dev runs only, and sweep a kill threshold on test runs. The output is a trade: agent-minutes not spent on losers vs winners wrongly killed. Result: killing on the first edit is no better than a coin flip (winners and losers killed at the same rate). From the second edit on there is a real but modest signal — at a conservative threshold, about 8% of failing-run time saved for 4.6% of winners killed, roughly two losers per winner — and only about 41% of runs live long enough to get a second edit. Mid-run prefixes are where the composite discriminates best in this whole study (AUC 0.79), which points at where a critic belongs: not at the door, in the middle.

Kill policy: minutes saved vs winners killed

In the harness, not beside it

The critic is a flag on pillbox dispatch.

Pillbox's Ghost loop forks k workers, grades each with a verifier, and pulls the winner. The verifier is the reward — exact, exit-derived, unforgeable — and also the slow last step. --critic typesafe puts a predicted probability in front of it, and because the verifier still runs on every graded worker, every dispatch becomes a labeled (p, passed) pair: the harness measures its own critic for free.

# the verifier still decides; the critic reorders what it's spent on
export TYPESAFE_API_KEY=…
pillbox dispatch --from-bookmark seg-3 -k 4 --rubric grade.txt \
  --agent opencode --temperature 0.7 \
  --critic typesafe --critic-policy order \
  -- "Implement the parser for segment 3."

# verdict --json (additive; byte-identical without --critic)
"critic": { "kind": "typesafe", "policy": "order",
            "model": "jev-latest",
            "verifier_runs": 1, "verifier_runs_saved": 3 }
"workers": [ { "session": "…", "status": "scored",
               "critic": { "p": 0.91, "latency_ms": 180, … } },
             { "session": "…", "status": "unverified",
               "critic": { "p": 0.12, … } }, … ]

# and on each worker's own §0 log, class=signal (poolable)
pillbox session log <id> --type artifact | grep critic_verdict

Three policies. record scores every worker before each grade and changes nothing — measurement. order settles all forks to idle, grades in descending p, and stops at the first passer; the rest are unverified. select grades only the argmax — if it fails there is no winner, and the exit code says so. The honest cost of trusting the critic is visible, not hidden.

Same state, offline and live — which is necessary, not sufficient. The critic sees the worker's edits from its own §0 log, rendered exactly the way this page's harness renders them (a golden test pins the format). That makes the offline numbers the right starting estimate; whether they hold on live dispatches is a distribution-shift question the record policy exists to answer, one labeled pair per run. Under order/select only the graded workers get labels, so those pairs are selection-biased and shouldn't be pooled with record's.

Rust, unit-tested over the mock driver like the rest of the loop: record leaves sends/grades identical; order stops at the first passer and falls through when the critic is wrong; select can end with no winner; a critic HTTP failure never turns a gradeable worker into an errored one. Docs updated first, per the repo's own rule.

github.com/vu1n/pillbox ↗ · docs/dispatch.md §Critic ↗

The data

1,554 graded agent runs, published.

Every row is a real Pillbox session: an opencode worker's final edits on an aider-polyglot / sensitivity / toolz task, and the rubric verifier's verdict from the session's own scored event. Paths and injected memory preambles stripped; grader output dropped (it leaks the label). Split is by task, so no decider can pad its score on near-duplicate attempts.

Files
Dataset
What would make this wrong
  • Verbalized vs native confidence. LLM tiers are asked for a number; Jev returns one. That asymmetry is the point of the comparison, and it's stated.
  • Shell writes aren't recovered. cat > f / sed -i edits don't appear in the state. Same blind spot for every decider.
  • Truncation. States over 14k chars are cut from the edit tail; the count is in results.json.
  • One generator. Almost every run is opencode on a small set of tasks. Ranking within a task is what best-of-N measures; generalization across generators is not claimed.
  • Prices move. $/1k uses each vendor's billed or listed price on the run date, recorded per row.

Building the measurement is the job. This page is the measurement.

Data platforms at MetaMask and Meta, an eval-and-observability harness for a production data agent at Phantom, and a shelf of agent runtimes that treat calibration as the ship gate.