Research

AI Agent Evaluation: Test the System, Not the Model

Report

Every month a new leaderboard ranks the frontier models, and every month teams pick the winner, wire it into an agent, and watch it fail at jobs the benchmark said it could do.

The leaderboard was not lying. It was answering a different question. Public benchmarks measure models under idealized conditions. Your agent is a system: a model plus your prompts, your tools, your data, and your definition of done. This report describes how we evaluate that system, which looks much more like software testing than like reading a leaderboard.

Short answer

AI agent evaluation means testing the full system, the model plus your prompts, tools, and data, against your real tasks with command-checkable definitions of done. Run three layers, static checks, task-level tests, and end-to-end runs, and have a checker separate from the worker grade the results. Benchmark leaderboards only shortlist candidate models; they cannot tell you whether your agent works.

Chalk illustration of a stick figure watching its work pass through three test gates while a separate inspector grades the result with a blue checkmark
Three layers of verification, and the checker is never the worker.

Why Do Benchmark Scores Not Transfer to Production Agents?

Benchmark scores measure a model under curated conditions, while a production agent is a full system of model, prompts, tools, and data. The same model can succeed in one system and fail in another, so a leaderboard rank only shortlists candidates. It never predicts whether your specific agent works.

A public benchmark holds everything constant except the model: curated tasks, clean inputs, a fixed scoring script. Your production agent holds nothing constant. It runs on your messy documents, calls your tools with your descriptions of them, follows your instructions file, and serves a goal the benchmark authors never imagined. Two systems built on the same model can sit at opposite ends of the reliability spectrum, and we have seen the weaker model outperform the stronger one inside a better-built system. The public record shows the same effect at scale: when SWE-bench launched, the best frontier model resolved just 1.96 percent of its real GitHub issues, and within a year SWE-agent lifted that to 12.5 percent using the same generation of models, purely by redesigning the interface the model worked through.

So benchmarks earn exactly one job in our process: shortlisting candidate models. Everything after that is system evaluation, run on your tasks, in your environment, against your definition of success. The interface lesson cuts the other way too: most agent failures trace to what the model saw, not what the model could do, which is the subject of our report on context engineering.

BenchmarkWhat it measuresReported result
SWE-bench (2023)Resolving real GitHub issues across 12 Python repositoriesBest model at release (Claude 2) resolved 1.96% of issues
SWE-bench via SWE-agent (2024)The same issues, with the model wrapped in a purpose-built agent interface12.5% pass@1, state of the art at the time
tau-bench (2024)Tool-using agents serving simulated customers under policy rulesGPT-4o succeeded on fewer than 50% of tasks
tau-bench pass^8 (2024)The same task passed eight runs in a row, a reliability measureBelow 25% in the retail domain
Source: Jimenez et al., arXiv:2310.06770; Yang et al., arXiv:2405.15793; Yao et al., arXiv:2406.12045

How Do You Evaluate an AI Agent?

Evaluate an AI agent in three layers: static checks that outputs parse and validate, task-level tests where every task has a command-checkable definition of done, and end-to-end runs of the full pipeline as a real user would trigger it. The system passes only when all three layers pass.

We evaluate agents the way disciplined teams test software, in three layers that catch different failure classes. A system passes when all three pass, not when a demo looks good.

  1. Static checks. Before judging behavior, verify structure: outputs parse, schemas validate, required fields exist, code lints and type-checks. These checks are cheap, instant, and catch the failures that should never reach a human reviewer.
  2. Task-level tests with verification commands. Every task the agent performs gets a command-checkable definition of done. Not "the summary looks good" but "the test suite passes," "the file exists at this path with these fields," "the reply contains no banned phrases per the linter." If success cannot be expressed as a command someone can run, the task is not specified well enough to evaluate.
  3. End-to-end runs. The full pipeline, executed as a real user would trigger it, from inbound request to delivered outcome. Task-level tests are blind to boundary defects: every component can pass alone while the handoffs between them fail. End-to-end runs are the only proof of system-level correctness.

Most teams stop after a casual version of layer two. Almost every painful production surprise we have investigated lived in layer three.

Chalk illustration of an agent's work passing through three stacked gates labeled static, tests, and end to end, with rejected work falling into a bin at each gate
Each layer catches a failure class the one before it cannot see.

Where Should the Eval Set Come From?

Evaluation tasks should come from the real workflow the agent will run: actual emails, documents, and tickets, anonymized where needed. Twenty genuine cases, including the messy ones, beat two hundred invented ones, because synthetic tests inherit the blind spots of whoever wrote the prompts. Add every production failure back into the set.

We pull test tasks from the actual workflow the agent will run, never from imagination. Synthetic test cases written by the same people who wrote the prompts inherit the same blind spots, so they pass tasks the real world fails. A small eval set of twenty genuine cases, including the ugly ones with missing fields and contradictory instructions, beats two hundred invented ones. When we evaluate an AI receptionist build, for example, the eval set is real call transcripts and after-hours messages, not scenarios we wrote for it to ace. Every production failure that slips through later gets added to the set, which is how the eval suite compounds instead of staling.

Why Must the Checker Be Separate From the Worker?

Agents systematically over-grade their own output, claiming success whether the work is excellent or quietly broken, so self-report has to be treated as noise. The entity that grades must never be the entity that worked. Use a deterministic script or a separate adversarial agent, and only verification output can mark a task as passing.

The most consistent finding from our lab work: agents over-grade their own output. Ask an agent whether it finished the job and it says yes with the same confidence whether the work is excellent, half-done, or quietly broken. This is not occasional. It is systematic enough that we treat self-report as noise.

An agent's claim that the work is done is a hypothesis, not a result. Only a verifier the agent does not control can promote it.

Public reliability data points the same direction. On tau-bench, which tests tool-using agents against simulated customers under policy rules, GPT-4o completes fewer than half the tasks on a single attempt, and Sierra's analysis reports its retail-domain score dropping to roughly 25 percent when the same task must pass eight runs in a row. An agent that passes once is not yet an agent that passes.

Operationally that means the entity that grades is never the entity that worked. Sometimes the checker is a deterministic script. Sometimes it is a second agent prompted adversarially, instructed to refute the claim that the work is done rather than confirm it. In our task tracking, the worker can mark a task ready for review but can never mark it passing. Only verification output flips that state.

What Counts as Evidence That an Agent Works?

Evidence means auditable artifacts: the exact command that ran, its output, the commit hash, and timestamps. A claim like it worked when we tried it cannot be audited weeks later. Every passing evaluation should leave a record a third party could inspect and reproduce without trusting anyone's memory.

Every passing evaluation produces artifacts: the command that ran, its output, the commit hash, timestamps. "It worked when we tried it" is not a record anyone can audit three weeks later. When a client asks why we trust an agent with a workflow, the answer is a folder of evidence, not a feeling. This standard is built into every system we ship through our custom AI agent engagements, because the client inherits the evaluation harness along with the agent.

What Is the Difference Between Outputs and Outcomes?

Outputs are what the agent produces; outcomes are what that work achieves. An agent can pass every test and still write emails nobody answers or reports nobody reads. Production agents need outcome instrumentation: response rates, resolution times, human edit rates, and downstream conversions, because moving the real number is the final test.

There is a final layer that no test command reaches. An agent can produce flawless outputs that achieve nothing: emails that pass every style check and never get a reply, reports nobody reads, tickets routed correctly into a queue nobody works. Output quality is what the three layers verify. Outcome quality is whether the work moved the number the system exists to move.

So production agents get outcome instrumentation: response rates, resolution times, human edit rates on agent drafts, downstream conversions. The edit rate has been especially honest with us. When humans stop correcting an agent's drafts, that is a stronger pass than any benchmark score, and when edits climb, something drifted no matter what the tests say. The same instrumentation belongs in any workflow automation pipeline, agent-driven or not, because a pipeline that runs perfectly toward the wrong number is still a failure.

How Should a Team Start Evaluating AI Agents Today?

Start by writing the verification command for one task you actually need done, not by asking which model is best. Build the smallest agent that can attempt the task, run static checks, task tests, and an end-to-end pass, then let the evidence decide. Teams fail by never defining what passing means.

Do not begin by asking which model is best. Begin by writing the verification command for one task you actually need done. Build the smallest agent that can attempt it, run the three layers, and let the evidence decide. The teams that struggle are not the ones with weak models. They are the ones who never wrote down what passing means. If you are not sure which task to start with, that selection problem is exactly what an AI readiness assessment is for.

Evaluation is also not a phase you finish. It is the harness the agent lives inside for as long as it runs, the same way a test suite outlives the sprint that wrote it. We treat the eval suite as a deliverable with the same standing as the agent itself, and the full doctrine around that is in our report on harness engineering.

Chalk illustration of gauges and charts tracking an agent's response rates, edit rates, and outcomes on an operations dashboard
The eval suite outlives the build. It runs for as long as the agent does.

Common Questions

How is agent evaluation different from model evaluation?
Model evaluation compares base capabilities on standardized tasks. Agent evaluation tests one specific system, the model plus your prompts, tools, data, and verification, against your real tasks. The first tells you what is possible. The second tells you whether your thing works.
Can another LLM be the checker?
Yes, with two conditions: it must be a separate run from the worker with an adversarial instruction to refute completion, and its judgment should be anchored to checkable criteria rather than overall impressions. Deterministic checks still come first wherever they can be written.
How often should a production agent be re-evaluated?
Continuously for outcome metrics, and on every change to the model, prompts, or tools for the test layers. Agent behavior drifts when anything in the system moves, so the evaluation suite runs like a CI pipeline, not like an annual audit.

Sources

SourcePublisherLink
SWE-bench: Can Language Models Resolve Real-World GitHub Issues?Jimenez et al., ICLR 2024 (arXiv)arxiv.org
SWE-agent: Agent-Computer Interfaces Enable Automated Software EngineeringYang et al., NeurIPS 2024 (arXiv)arxiv.org
tau-bench: A Benchmark for Tool-Agent-User Interaction in Real-World DomainsYao et al. (arXiv)arxiv.org
tau-bench: Benchmarking AI Agents for the Real WorldSierrasierra.ai
SWE-bench LeaderboardsSWE-benchwww.swebench.com

Keep Exploring

Chalk stick figure in a hard hat presenting a little machine of blue gears it just built

Bring us the bottleneck.
We’ll build the system.

No Dreaming. Just Building.