An eval should tell us more than whether a run was good.
A useful agent eval answers three questions: Did the agent produce a good result? Why did the run behave that way? Did a specific change make it better or worse?
A final score answers only the first question. Agents are systems made of models, prompts, context, memory, tools, state, and infrastructure. A weak output could come from a poor plan, missing context, the wrong tool, bad parameters, a failed recovery, or a judge that misunderstood the task.
Connect the final result to evidence from the run so an engineer can find the cause, fix it, and prevent it from returning.
Put LLM and VLM judges at the center.
The evaluation factors describe what matters. LLM and VLM judges do the grading. Each judge receives the candidate run, the relevant evidence, and a grounded reference package.
Final outcome
Did the artifact satisfy the request, constraints, and quality bar? A VLM can inspect images, video frames, canvases, and interfaces.
Tool use
Did the agent choose the right tool, provide correct parameters, change the intended state, and recover from errors?
Execution path
Was the plan coherent? Did the agent loop, miss an important step, or stop too early?
Context
Did the agent receive the right history, source material, user information, and tool results when it needed them?
Cost and latency are measured alongside these judgments. They are not substitutes for quality, but they show whether an improvement is operationally worthwhile.
Ground the judges in real work, then scale with synthetic data.
Hand-written scenarios are useful, but they rarely capture the variety of real usage. The strongest starting point is approved, de-identified production-shaped data: actual goals, realistic state, long conversations, common tool combinations, and known failure modes.
Models can expand those examples into a larger evaluation set. They can create paraphrases, edge cases, longer conversations, expected tool results, successful traces, strong reference artifacts, and deliberately flawed outputs. This gives the judge both positive examples and hard negatives.
Start with an approved real scenario
Keep the properties that make the task realistic while removing private or identifying information.
Generate controlled variants
Create alternate inputs, references, and known failure cases without changing the capability being tested.
Validate before use
A human reviewer or deterministic checker accepts, repairs, or rejects each synthetic reference. Generated data is a proposal, not ground truth by default.
Version the package
Store the scenario, rubric, references, judge configuration, and provenance together so a result can be reproduced.
A reference is not always one perfect answer
Creative and open-ended tasks may have many valid outputs. For those tasks, use a reference package: required constraints, accepted examples, disallowed failures, expected state changes, and a clear rubric. The judge grades against the package without forcing the candidate to copy one surface form.
Record enough of the run to explain the grade.
The judge should see the evidence needed for the factor it is evaluating. An outcome judge needs the request, reference package, and rendered artifact. A tool judge needs the intended subgoal, tool call, result, and resulting state. A context judge needs the information available to the agent at that point in time.
Production-derived records need consent or approved use, de-identification, access controls, limited retention, and a deletion path. Raw hidden chain-of-thought is not required; observable actions, concise decision summaries, state transitions, and tool evidence are more useful and safer to store.
Prefer relative comparison before absolute scores.
It is difficult for a judge to invent a reliable score for one output in isolation. It is usually easier to ask a focused question: for the same scenario and reference package, is candidate A better, worse, or equivalent to candidate B?
Show the baseline and candidate in randomized order and hide which system produced each one. Ask for a decision on each factor, require evidence, and report win, loss, and tie rates. Deterministic checks—such as schema validity, required elements, state invariants, and exact constraints—should run before model judgment.
Instead of asking “Is this image an 8 out of 10?”, ask “Which image better satisfies the layout, brand, and content requirements in the reference package? Cite the visible evidence for each factor.”
A scalar score can still be useful for dashboards, but it should be derived from calibrated factor-level decisions rather than treated as the source of truth.
Evaluate the judges before trusting their grades.
Create a reviewed calibration set containing clear wins, clear failures, close calls, and ties. Compare the judge's decisions with human preferences for each factor, not only the overall result.
Agreement
Measure how often the judge matches reviewed human decisions and where disagreement occurs.
Position bias
Swap candidate order. The verdict should not change simply because an output appears first.
Consistency
Repeat the same judgment to learn how stable the decision is, especially for close comparisons.
Change control
Recalibrate when the judge model, prompt, renderer, rubric, or reference set changes.
The evaluation pipeline also needs normal software tests. Filters, defaults, fixtures, joins, and schemas can fail while still producing believable numbers. Run an unchanged scenario several times to measure the noise floor before treating a small movement as real.
Turn judge preferences into a reliable release signal.
Map every scenario to the capabilities it exercises—such as planning, memory, a specific tool, or visual output. Compare a candidate with a versioned baseline while changing one variable at a time. This makes the result easier to attribute.
A gate should consider factor-level win rates, important hard failures, judge confidence, and normal variance. It should also report tokens, cost, latency, tool calls, and retries. A cheaper run is only better if it maintains the required quality.
Automated blocking comes last. First establish trustworthy references, complete evidence, calibrated judges, stable baselines, and clear ownership for approving exceptions.
Build the system in the order that makes each result trustworthy.
1 · Measure the current noise
Run an unchanged scenario several times. Measure variation in outputs, judge preferences, cost, and latency.
2 · Build the run record
Capture scenarios, configurations, traces, tool evidence, artifacts, timings, and evaluator inputs under stable identifiers.
3 · Create reference packages
Start from approved real scenarios, generate controlled synthetic variants, validate them, and record provenance.
4 · Add factor-specific judges
Begin with final outcomes and high-impact tools, then add trajectory and context evaluation.
5 · Calibrate and test
Compare with human preferences, test order bias and consistency, and add tests for the evaluation pipeline.
6 · Enable regression gates
Use controlled comparisons and noise-aware thresholds only after the earlier layers are dependable.
One run should produce a clear answer.
After changing a model, prompt, tool, memory strategy, or runtime component, the system should show:
- which workflows improved or regressed;
- which factor caused the change and what evidence supports it;
- whether the change is larger than normal variance; and
- what happened to cost, tokens, retries, and latency.
That is the shift from a scorecard to an engineering tool.