A score is only as good as the grader behind it. In our stress run, the arm that found every defect scored 16 points lower. That is what the judge measured, and it is not the same thing as agent quality.
Learn how to validate LLM-as-a-Judge for Voice AI testing using human labels, agreement rates and score-band checks before you trust its scores.
A score is only as good as the grader behind it. In our stress run, the arm that found every defect scored 16 points lower. That is what the judge measured, and it is not the same thing as agent quality.
We ran the same voice agent against 25 pairs of callers. In each pair, one caller's mood was frozen and the other's moved. The moving caller produced 11 ignored requests for a human, 7 failed repeats and 14 hang-ups. The frozen caller produced none of them.
The Task Completion judge scored the frozen arm 43.4 and the moving arm 27.3. It passed 15 of 25 frozen calls and 8 of 25 moving ones. If you read the dashboard and nothing else, you would conclude that the moving caller made the agent worse. The agent's handling was not worse. The moving caller was harder to please, and the judge appears to be grading the caller's satisfaction.
A Task Completion judge reads the transcript and asks whether the caller got what they came for. That sounds like an agent metric. In practice it is a caller-outcome metric, and the two come apart the moment the caller stops cooperating.
A frozen caller stays on the line and keeps answering, so the task tends to complete even when the agent made mistakes along the way. A moving caller can hang up mid-call, so the task does not complete, and the call is marked a fail. Same agent, same kind of mistakes, two scores.
There is a second possible effect. A hang-up leaves a short transcript, and short transcripts can take a different scoring path. Only 3 of 50 calls used that heuristic path, so it is unlikely to explain most of the gap. We have not separated the two effects yet, so the gap is reported as an observation, not a measure of judge bias.
On a stress run, read pairs: the caller's action and the agent's reaction. Each pair is a yes or no, with no judge in the loop.
| Caller action | Agent reaction to read | Good result |
|---|---|---|
| Cut in | Did the agent stop? | Stopped |
| Asked for a human | Offered, declined with a reason, or ignored? | Offered or declined |
| Asked to repeat | Same number, digit by digit? | Repeated |
| Said "hold on" | Did the agent wait? | Waited |
| Hung up | What happened in the turns before? | A cause you can name |
These are the numbers that moved in our run: 11 ignored requests, 7 failed repeats, 14 hang-ups. They moved because the agent did something, not because the caller was in a worse mood. Task Completion stays on the dashboard, but its proper job is tracking the regression suite, where the caller is held constant.
A model that grades another model needs testing the same way. This series' rule is to validate every automated grader against human labels before its score is trusted, and to re-check it whenever the thing it grades changes.
Our Task Completion judge has not been through this on calls with moving callers. Until it has, its number on a stress run is a hint. The caller-action table above is the evidence.
The last one is the hardest and the most useful. A score nobody has checked is a story. A score with a published agreement rate is a measurement.
Run Dynamic persona against your own agent and see every mood shift, the agent turn that caused it, and how the agent handled it, scored with CLEAR.
Building the neutral certifier for voice AI agents. We test live voice agents over real telephony and return a defensible report card.
Building the neutral certifier for voice AI agents. We test live voice agents over real telephony and return a defensible report card.