Pillar guide

Agent evaluation (agent evals)

A plain-English guide to agent evaluation: how evals for AI agents differ from model benchmarks, what an agent evaluation framework should include, how LLM-as-a-judge grading works and where it fails, and how teams keep eval sets aligned with the traffic their agents actually see.

TL;DR

What is agent evaluation?

Agent evaluation — agent evals for short — is the practice of measuring whether an AI agent completes real tasks correctly: whole multi-turn conversations and tool-call sequences, not single model responses. An eval pairs a test case with a grading method (an assertion, a human label, or an LLM judge), and an eval set is only as trustworthy as its resemblance to the production traffic the agent actually sees.

The term shows up under two spellings — agent evaluation in papers and vendor docs, agent evals in the shorthand engineers actually use — and both mean the same thing: tests for an AI agent as a system, graded on task completion rather than text quality. That distinction is what separates the topic from model benchmarking. A benchmark scores a frozen model on standardized questions; an agent eval scores your model plus everything you wrapped around it — prompts, tools, skills, memory — on the jobs your users bring.

This guide covers the ground the search terms ask about: what agent evaluation measures that model benchmarks cannot, the anatomy of a single eval, LLM-as-a-judge grading and its documented failure modes, what an agent evaluation framework should include, and the tools that run all of this. It also argues one position throughout, and flags it as a position: an eval set is a component of the agent harness, and the only eval sets that stay meaningful are the ones continuously rebuilt from production traffic.

We build in this space. Moda is a harness engineering platform — it treats evals as one harness layer among several and changes them from production traces. It is not another platform for running evals, and this page will not pretend the eval runners you already use need replacing.

Updated

Foundations

What AI agent evaluation measures

Model benchmarks score a model's answer to a prompt. Agent evaluation scores a system's completion of a job — a multi-turn conversation, a sequence of tool calls, a change made to some external state. The difference is not cosmetic; it changes what a test case even is.

Single-response metrics — exact match, similarity to a reference answer — assume the unit under test is one piece of text. An agent's unit of work is a trajectory: did it pick the right tool with the right arguments, keep track of what the user said four turns ago, stop when the job was done, and leave the external state the user wanted? An agent can produce a fluent, polite, individually-reasonable transcript and still fail the task, and a per-response metric will grade every message in that transcript highly.

Agents are also non-deterministic. The same input can produce different trajectories across runs, so agent evals report pass rates over repeated runs rather than a single pass or fail, and the failures worth engineering against usually live in the tail runs rather than the median one.

In practice the field splits grading along two axes: outcome evals check whether the end state matches expectations, and trajectory evals check whether the steps taken to get there were reasonable. Both are needed. Outcome-only grading passes agents that succeed expensively or dangerously; trajectory-only grading passes agents that take beautiful steps to the wrong destination.

Anatomy

The anatomy of an agent eval

Strip away the tooling and every agent eval is four decisions: what task to test, what environment it runs in, how the result is graded, and what counts as passing.

  • Task: a single turn, a full conversation, or a scenario driven by a scripted simulated user. The task defines what done means; vague tasks make every grader downstream of them unreliable.
  • Environment: live tools, mocked tools, or replayed production traffic. Live is realistic and flaky; mocks are stable and drift from reality; replaying recorded production conversations sits between the two and is the only option that tests against what users actually did.
  • Grader: deterministic checks (assertions on tool calls, end state, output structure), human labels, or an LLM judge. Mature suites mix all three — cheap assertions everywhere, judges for qualities assertions cannot express, humans to calibrate the judges.
  • Pass criteria: per-case thresholds plus a suite-level bar — which regressions block a change from shipping, and which are logged and watched instead.

The decision that determines whether any of this is worth running is none of the four. It is where the cases come from. A suite whose cases were written from imagination measures the team's imagination; a suite whose cases were pulled from production measures the agent. The rest of this page keeps returning to that distinction because every other design choice is downstream of it.

Method

LLM as a judge

An LLM judge is a model prompted with a rubric, the input, and the agent's output, and asked to score what deterministic checks cannot express: helpfulness, groundedness, whether the agent actually resolved the request rather than talking around it.

The method took over because it scales like code while grading, approximately, like a human. The MT-Bench work that made it credible measured strong LLM judges agreeing with human preferences over 80% of the time — roughly the rate at which humans agree with each other. That result is why LLM-as-a-judge is now the default grader for open-ended agent behavior.

The same research is also the canonical catalog of its failure modes: position bias (favoring whichever answer is shown first), verbosity bias (favoring longer answers), self-enhancement bias (favoring text the judge model itself might have produced), and weak grading of subtle reasoning errors. None of these are exotic. All of them appear in production eval suites that nobody calibrated.

The working discipline is unglamorous. Prefer narrow, binary rubrics per criterion over one 1-to-10 aggregate score. Grade the judge itself against a set of human-labeled examples before trusting it, and re-calibrate whenever the judge model or the rubric changes. A judge nobody has checked against human labels is a random number generator with good grammar.

For agents specifically, judges should read the trajectory, not just the final message — wrong-but-plausible tool arguments and quietly skipped steps are invisible in closing text. And the rubric should be derived from failures observed in production, not imagined ones: a judge tuned to catch failures no user ever hits is a cost center with a confidence interval.

SourcesZheng et al., Judging LLM-as-a-Judge with MT-Bench and Chatbot Arena (arXiv:2306.05685) · Langfuse docs, LLM-as-a-Judge

Framework

What an agent evaluation framework gives you

An agent evaluation framework is the machinery around the cases: somewhere to keep datasets, a runner that executes the agent against them, graders, and a comparison view that says what got better and what got worse between two versions of the agent.

  • Case and dataset management: versioned cases with expected outcomes, tagged by intent and failure mode so results can be sliced.
  • A runner: executes agent configurations against cases with concurrency and repeated runs, including multi-turn scenarios and simulated users.
  • Grader integration: assertions, LLM judges, and human-label queues, reporting per-case results rather than one averaged score.
  • Regression comparison: two agent versions run on the same set, diffed case by case, wired into CI so a regressing change is blocked before deploy rather than discovered after.
  • Reporting over time: pass rates per slice — per intent, per tool, per model — because the single global number hides everything worth knowing.

The real options span a spectrum. OpenAI Evals established the registry-of-benchmarks pattern in open source. Hosted platforms such as Braintrust, Langfuse, and LangSmith ship dataset management, judges, and CI hooks as a product. Open-source libraries like DeepEval and promptfoo suit teams that want the whole suite living in the repository. All of them are competent at the running part.

The trap is the one Hamel Husain's widely-cited essay on evals names directly: tooling makes running evals easy, which lets teams skip the hard part — error analysis, the unglamorous work of reading real transcripts to decide what is worth testing. A framework filled with hand-written cases executes flawlessly and measures nothing.

SourcesOpenAI, Evals framework · Husain, Your AI Product Needs Evals

Tools

AI agent evaluation tools, and the question they leave open

Every tool above answers the question how do we run evals. The question that decides whether the resulting numbers mean anything is different: where do the cases come from, and do they still resemble production? That question is not answered anywhere inside an eval runner.

The standard failure sequence: a team hand-writes an eval set at launch, encoding what they imagined users would do. Traffic arrives and drifts away from those guesses. Six months later the suite is green on every run while users hit failures the suite never modeled. The suite did not rot because the tooling was bad; it rotted because nothing connected it to production.

Moda approaches the problem from the other side. It is not an eval-running platform and does not replace one. Moda is a harness engineering platform: it treats the eval set as one component of the agent harness — alongside prompts, tools, skills, and memory — and changes it from production traces. Behavioral failures detected in real conversations become eval cases. Intent clusters with no eval coverage become new suites. Proposed harness changes are verified against replayed production conversations before they ship.

The practical division of labor: keep whichever runner your team already likes. What changes is the provenance of the cases it runs — evidence from production instead of guesses from launch week.

The position

Evals are a harness layer, not a separate discipline

The framing that keeps eval sets honest is to stop treating them as a QA artifact that lives next to the agent, and start treating them as a component of the agent harness — versioned, owned, and continuously changed from production evidence like every other component.

The harness is everything around the model that makes it your agent: prompts, tools, skills, evals, memory. Every component encodes assumptions about users, and every component drifts as users change. A prompt written for last quarter's traffic goes stale in a familiar way. An eval set written for last quarter's traffic is worse, because the eval set is the instrument that was supposed to detect staleness in everything else. When it drifts, the whole improvement loop reports green while the agent regresses.

Treated as a harness layer, evals get the same operational properties as the rest: cases live in version control next to the prompts and tool schemas they gate; every case traces to evidence — a production failure it reproduces or an intent cluster it covers; the set is refreshed on a cadence tied to traffic shift rather than the calendar; and changes to the eval set itself go through review like any other code.

This is the sense in which Moda works on evals — the same loop it runs for prompts and tools: detect a failure in production traces, attribute it to the responsible harness component, propose a diff, verify against replays. When the component is the eval set, the diff is new cases built from real failures and retired cases that no longer reflect how users behave.

Job one

Holding performance through a frontier-to-open-model switch

The highest-stakes moment an eval set ever faces is a model swap: the team decides to move from a frontier API model to an open-weight model — for cost, latency, or control — and the agent has to hold its production performance through the switch.

What makes the switch dangerous is that the harness was tuned, mostly implicitly, to the old model's dispositions: how literally it follows instructions, how it formats tool calls, how much it hedges, what it does with ambiguity. The new model breaks those assumptions silently. Generic benchmark deltas between the two models say nothing useful here, because your agent's behavior is the model and the harness together, and the benchmark only saw the model.

The only honest gate is an eval set built from your own production conversations: replay the same real traffic through both configurations and compare per intent cluster and per failure mode, not as one aggregate score. An aggregate can hold steady while the three clusters your revenue depends on quietly regress.

The loop that makes the switch survivable is compensate-and-re-gate: run the gate, see which clusters regressed under the new model, fix the harness for it — a prompt adjusted to the new model's instruction-following, a tool schema tightened against its argument habits, a skill added for a workflow it handles differently — and re-run until the gate holds. The switch succeeds or fails on the harness and the evals that gate it, not on the announcement benchmarks of the incoming model.

This is the first job Moda's eval work is built around: hold agent performance through the switch, with the gate built from your traffic and every compensating harness change verified against replayed conversations before it ships.

Playbook

How to build agent evals from production traffic

This is vendor-neutral until the last step. The order matters: teams that start by choosing tooling usually end up with an empty framework, and teams that start by reading traffic usually end up with a suite that catches real regressions.

  • Start with error analysis, not tooling. Read a sample of real failed conversations and name the failure modes that actually occur in your traffic before writing a single case.
  • Turn each observed failure into a case: input drawn from the real conversation, grading derived from what should have happened, tagged with the intent and failure mode it represents.
  • Cover by intent, not by feature list. Cluster production conversations and check eval coverage per cluster; the largest clusters and the highest-failure clusters get cases first.
  • Mix graders deliberately: assertions for tool calls and end state, LLM judges only for qualities assertions cannot express, and every judge calibrated against human-labeled examples before it gates anything.
  • Gate harness changes on replays: run a proposed prompt, tool, or skill change against replayed production conversations and compare per cluster before shipping.
  • Refresh with traffic: new intent clusters and newly observed failure modes become new cases, and stale cases are retired. A suite nobody refreshes becomes a green dashboard over a regressing agent.

Where Moda fits is the supply side of this playbook: the detection of behavioral failures across the whole conversation population, the intent clustering that defines coverage, the attribution that says which harness component a failure belongs to, and the replay verification that gates a change. The runner, the CI wiring, and the deploy pipeline stay yours.

Frequently asked

Questions

What is agent evaluation?

Agent evaluation — agent evals in most teams' shorthand — is the practice of measuring whether an AI agent completes real tasks correctly: full multi-turn conversations and tool-call sequences, not isolated model responses. An agent eval combines a task, an environment (live tools, mocks, or replayed traffic), a grader (assertions, human labels, or an LLM judge), and pass criteria. Because agents are non-deterministic, results are reported as pass rates over repeated runs rather than single scores.

How are agent evals different from model benchmarks?

A model benchmark scores a frozen model on standardized questions and produces a number you can compare across models. An agent eval scores your whole system — the model plus the harness around it: prompts, tools, skills, memory — on your tasks. Two agents built on the identical model can score very differently on the same agent eval because their harnesses differ, which is also why benchmark deltas between two models predict very little about what a model swap will do to your agent.

What is LLM as a judge?

LLM-as-a-judge is a grading method where a model is prompted with a rubric, the input, and the agent's output, and asked to score qualities deterministic checks cannot express — helpfulness, groundedness, task resolution. The MT-Bench research that popularized it found strong judges agreeing with human preferences over 80% of the time, and also documented its standard failure modes: position bias, verbosity bias, and self-enhancement bias. Judges should use narrow rubrics and be calibrated against human-labeled examples before their scores gate anything.

What should an agent evaluation framework include?

Versioned case and dataset management, a runner that supports multi-turn scenarios and repeated runs, grader integration spanning assertions, LLM judges, and human labels, per-case regression comparison between agent versions wired into CI, and reporting sliced by intent and failure mode rather than one global pass rate. The piece most frameworks leave to you is case provenance — a mechanism that keeps the cases resembling current production traffic instead of launch-week guesses.

What are the best AI agent evaluation tools?

There is no single best; the common choices split by how much you want hosted. OpenAI Evals is the open-source registry pattern; Braintrust, Langfuse, and LangSmith are hosted platforms with dataset management, judges, and CI hooks; DeepEval and promptfoo are open-source libraries for teams that keep everything in the repository. All of them run evals competently. The differentiating question is not the runner — it is whether the cases the runner executes still resemble your production traffic, which is the part Moda supplies from production traces.

How many eval cases does an AI agent need?

There is no magic number, because the right measure is coverage, not count. Every major intent cluster in production traffic and every failure mode observed in real conversations should have at least one case, with more cases on the clusters that carry the most traffic or the most failures. A small suite of cases drawn from real production failures beats a large suite written from imagination, and any suite stops being meaningful when traffic drifts away from it.

Can evals keep an agent's performance stable when switching from a frontier model to an open-weight model?

Yes — if the gate is built from production traffic. Replay the same real conversations through both configurations, compare per intent cluster and per failure mode, then compensate in the harness for whatever the new model does differently: adjust prompts to its instruction-following, tighten tool schemas against its argument habits, add skills for workflows it handles differently. Re-run the gate after each change until it holds. Generic benchmark comparisons between the two models cannot substitute, because they never saw your harness or your traffic.

How does Moda handle agent evals?

Moda is a harness engineering platform, and it treats the eval set as one component of the agent harness — alongside prompts, tools, skills, and memory — changed from production traces like every other component. Behavioral failures detected in real conversations become eval cases, intent clusters without coverage become new suites, and every proposed harness change is verified against replayed production conversations before it ships. Moda is not an eval runner and does not replace the one you already use; it changes what that runner runs.

See agent evals built from your production traffic.

Moda is a harness engineering platform: it turns production traces into eval cases that mirror real traffic, attributes failures to the harness component responsible, and verifies every proposed change against replayed conversations before it ships.