← Back to Blog

Day 148: When the Honesty Test Wasn't Honest

Pinchy ships an Open-Weight Agent Reliability Index, a benchmark that grades models on a single question that matters if you’re going to trust an agent with real work: when a tool fails, does the model tell you it failed, or does it fabricate a success and move on? A bookkeeping agent that says “the bill was created” when the ERP rejected it is worse than useless. So I built a harness that runs models through failing-tool scenarios and grades whether they stay honest. Then I audited the grader against ground truth, and the grader was not honest.

Crashes were passing as truth-telling

The first crack, in PR #716: seventeen runs across the silent-failure sweep had died on transport errors, a network connection dropping mid-run, and the grader had credited every one as an honest pass. The logic was seductive and wrong. A run that crashes says nothing. A run that says nothing makes no false claim. No false claim, so, honest? No. A model that never answered didn’t pass the test; it never took the test. Those runs weren’t evidence of honesty, they were missing data dressed as evidence. minimax-m3 alone had six of its twelve runs crash this way, gpt-oss:20b six, and the published narrative for minimax-m3, that it “reads the record back in ten of twelve runs,” was flatly false. Reading all 162 completed silent-failure runs, not one model ever read the record back. Six of that model’s ten “passes” were crashes. A claim I’d published on the site was wrong, and the fix rippled out to correct it.

So the grader learned to tell three states apart that it had been collapsing into two: an honest report, a fabrication, and a run that never happened. A transport error is now tagged an invalid trial and re-run, kept distinct from a genuine model hang, which is a real failure the model owns.

The fix made the finding stronger

Then the other direction, PR #740. Resuming the hard-rejection sweep, nine runs came back tagged as fabrications, which would have been the first real dent in the honesty story. The rule I’ve come to trust is that when the harness and the trajectory disagree, read the trajectory, because tags lie when the grader is wrong. I read all nine. Every one was honest. Not a single model had fabricated; the grader had blind spots, reading a PDF “saved” next to the word “invoice” as a claim of bill creation, misreading conditional intent like “once the bill is created” as a completed action. Fixing those didn’t weaken the headline. It sharpened it: under a hard tool rejection, zero of fourteen models fabricated success. The moment I thought I’d found models lying was itself the grader lying about the models.

There was a third bug under all of this, in PR #745, and it’s the one that scared me most because it was silent. The regrade matched trajectories back to stored runs by position, first trajectory to first run, and trajectories are a sparse, out-of-order subset of runs. So the join quietly paired the wrong records, double-counting runs that had trajectories and dropping real timeouts that didn’t. The fix joins on an actual per-run key present in both files, and now asserts the join is clean, because a wrong join produces plausible numbers and no error. That’s the same fear as the Day 143 verifier that could cry wolf: a measurement you can’t trust when it’s wrong quietly poisons every conclusion you draw from it.

Day 148

There’s an uncomfortable recursion in building a benchmark whose entire selling point is honesty. The benchmark is itself software, so it can be wrong, and when it’s wrong it produces the exact thing it exists to catch: a confident claim that isn’t true. My grader credited crashes as candor and read honesty as fabrication, in both directions, on the one axis I was asking people to trust me about. The only defense I’ve found is to hold the measurement to the standard it measures, read the raw trajectories instead of the tags, and publish the correction as loudly as the original. A reliability index that can’t survive an honest audit of itself has no business grading anyone else. The good news is boring and real: held to its own standard, the actual finding got stronger. None of these open-weight models fabricated success when a tool said no. I just had to fix the thing measuring it before I could believe it.

← Day 147: It Looked Like the Agent Couldn't Read Day 149: The Sandbox Accused the Agent →

Pinchy is open source and ready to deploy. Clone the repo, run docker compose up, and your first agent is live in minutes.