AI agent evaluations.

An agent that works in a demo can still fail one run in three. Evaluation is how you find out before your customers do: realistic tasks, explicit pass criteria, repeated trials and a gate that blocks bad releases.

Engineering guide8 min readUpdated 19 October 2026

Short answer

AI agent evaluation means running an agent against a fixed suite of realistic tasks, each with explicit pass and fail criteria checked against the final system state and the steps taken, several times per task. Report task success, consistency across repeats (pass^k), harmful-action rate and cost per successful task, and rerun the suite on every prompt, tool or model change before release.

  • Write each task as input, seed state, required outcome, forbidden actions and a step limit.
  • Grade the final system state with code first. Use LLM judges only for open-ended text.
  • Repeat every task several times. Report pass^k, not just one-run success.
  • Penalise bad output explicitly so an agent cannot win by producing more of it.
  • Version tasks, fixtures, graders and judge models together, and gate releases on them.

What should an AI agent evaluation measure?

An agent evaluation measures whether the agent reaches the right end state, by an acceptable path, at an acceptable cost, consistently. Measuring only the final answer misses agents that get there by breaking rules, and measuring a single run misses agents that succeed by luck.

Metric Definition Why it matters
Task success rate Trials where every pass criterion holds, divided by all trials The headline number, but never the only one
pass^k Probability that all k independent trials of a task succeed, averaged over tasks Consistency; the number that decides whether the agent can run unattended
Harmful action rate Trials containing at least one forbidden action, divided by all trials A run can pass its goal and still do damage on the way
Approval compliance Risky actions that correctly requested approval, divided by all risky actions Checks that guard rails fire when they should
Steps and cost per success Mean steps, tokens and USD per successful trial Separates a good agent from an expensive one
Escalation precision Escalated runs that genuinely needed a person, divided by all escalations An agent that escalates everything is safe but useless

With n trials of a task and c successes, an unbiased estimate of that task’s pass^k is C(c, k) divided by C(n, k), the chance that k trials drawn from the n were all successes. The τ-bench paper introduced pass^k because capable function-calling agents were found to be inconsistent across repeated attempts at the same task.

How do you build a task suite with pass and fail criteria?

A task suite is a versioned set of realistic cases, each with an environment to run in and criteria that a program can check. Build it from real work, not from imagination.

  1. Sample real cases. Pull 50 to 150 cases from tickets, inboxes or logs, stratified by type and difficulty. Deliberately include the awkward ones: missing data, conflicting instructions, requests that should be refused.
  2. Fix the environment. Give each task a seed state: database fixtures, mock APIs or a snapshot of documents. Live systems change underneath you and make results impossible to compare.
  3. Write criteria as checks. Required end state, forbidden actions, required approvals and a step limit. If a criterion cannot be checked by code or a calibrated rubric, rewrite it.
  4. Split the suite. Keep a development set you tune against and a sealed holdout you only run before releases and model upgrades.
  5. Version everything together. Tasks, fixtures, graders, judge prompts and judge model versions share one version number, so a score always means the same thing.

A task definition and grader can be this small:

TASK = {
    "id": "refund-017",
    "input": "Order 88412 arrived damaged. Customer wants a refund.",
    "seed_state": "fixtures/orders_v3.json",
    "must": [("refund.created", {"order_id": "88412", "amount_lte": 129.00}),
             ("reply.drafted", {"mentions_refund": True})],
    "must_not": ["email.sent_without_approval", "refund.created_other_order"],
    "max_steps": 10,
}

def grade(task, final_state, trace):
    failures = [m for m in task["must"] if not final_state.satisfies(*m)]
    harms = [e for e in trace.events if e.kind in task["must_not"]]
    over = len(trace.steps) > task["max_steps"]
    return {"passed": not failures and not harms and not over,
            "failures": failures, "harms": harms, "steps": len(trace.steps)}

The grader reads final state and the trace. It never asks the agent whether it succeeded.

When should you use an LLM as the judge?

Use deterministic checks wherever the outcome is visible in system state, and an LLM judge only for qualities code cannot read, such as whether a drafted reply is accurate, polite and complete. LLM judges are useful but biased: Zheng et al. documented position, verbosity and self-enhancement biases alongside high agreement with human preferences on their benchmarks.

Rules we apply to judges:

  • Rubrics with anchors. A 1 to 5 scale where each level is described, or a set of yes/no questions, never “rate the quality”.
  • Evidence required. The judge must quote the passage that justifies each score, which makes disagreements debuggable.
  • Calibrate before trusting. Label a sample by hand, measure judge agreement, and recheck it whenever the judge model or rubric changes.
  • Pin the judge. A silently upgraded judge moves every score. Treat the judge model as part of the suite version.
  • Separate families where possible. Judging with a model from a different provider than the agent reduces shared blind spots.

What does GTM-Bench teach about scoring agents?

Score bad output as harmful, or agents will learn to flood you with it. GTM-Bench, published by Blackpearl Group in June 2026 and co-authored by Levy Street team members, makes this explicit. It contains 72 tasks drawn from a taxonomy of 59,881 real prospecting queries. Each agent produces an inferred offer, an inferred ideal customer profile and a ranked list of buyer records (paper, section 2.5).

Every returned record is graded by LLM match and audit judges and scores plus one if A-grade, zero if B-grade and minus one below that. The task score multiplies offer and profile quality by the sum of those record scores. In the paper’s words, “this design deliberately treats low-quality records as harmful.” The effect shows in the results: several general-purpose agents finished with negative net scores, and the paper records one agent returning 6,342 rows on a single task.

Three lessons transfer to business agents. Penalise false positives in proportion to the work they create for a person. Score intermediate artifacts (here, the inferred offer) as well as the final list, because a wrong early inference poisons everything after it. And state reproducibility limits honestly: the paper notes that its production environment uses Blackpearl’s own data, which limits reproduction outside the benchmark operator. Our write-up of AI agents for go-to-market research covers the domain findings.

How do you run evaluations so the numbers mean something?

Run each task several times at production settings, report intervals rather than single numbers, and budget for the cost. Small suites have wide uncertainty: 40 passes out of 50 tasks gives a 95% Wilson interval of roughly 67% to 89%, so a two-point change between releases is noise.

Cost is easy to estimate. Illustrative example: 60 tasks, 5 trials each, at an average of US$0.40 per agent run is 300 runs and US$120 per full suite, plus judge calls. That is cheap next to a production incident, and it is why we keep a smaller smoke suite for every change.

Keep the suite in your own repository and runner. Hosted evaluation products come and go: OpenAI’s deprecations page lists its Evals platform becoming read-only on 31 October 2026 and shutting down on 30 November 2026, as listed on 19 October 2026. Portable task files and graders survive that kind of change.

Trigger Suite Release gate
Change to a prompt, tool or orchestration code Smoke suite, one trial per task No new failures on previously passing tasks
Planned release Full suite, 3 to 5 trials Success and pass^k at or above the last release; harmful action rate at zero
Model or provider upgrade Full suite plus sealed holdout As above, plus cost and latency within budget
Weekly in production Graded sample of real runs Feeds new failures back into the suite

Versioning prompts and evaluations covers how to tie these runs to releases, and monitoring AI quality covers the production side.

Where do agent evaluations go wrong?

Most broken evaluations fail quietly by measuring something easier than the real task.

  • Grading the claim, not the state. A grader that reads the agent’s final message will pass agents that say “done” without doing it.
  • Leakage. Few-shot examples copied from the test set inflate scores. Keep the holdout sealed and out of every prompt.
  • Environment drift. Tasks that hit live websites or shared databases give different answers each week. Snapshot what you can and record what you cannot.
  • Overfitting. After months of tuning against the same 50 tasks, the suite measures memory of those tasks. Refresh it with new production cases.
  • Synthetic-only suites. Generated tasks are useful for coverage, but they miss the mess of real inputs. See testing AI with synthetic data for where they help.

The NIST AI RMF core puts the principle plainly: AI systems should be tested before deployment and regularly while in operation. For agents built with retrieval, pair this guide with RAG retrieval evaluation. If you want a second pair of eyes on an existing suite, that is the core of our LLM evaluation services, and the AI agent acceptance checklist is a useful sign-off document. The architecture these tests assume is set out in designing reliable AI agents.

  • Tasks come from real cases, stratified by type, with hard and refusal cases included
  • Every task has a seed state, required outcomes, forbidden actions and a step limit
  • Graders check system state and the trace, never the agent’s own claim
  • LLM judges use anchored rubrics, quote evidence, are calibrated and are pinned
  • Bad or unsupported output is penalised, not just ignored
  • Each task runs several times and results report pass^k and intervals
  • Tasks, fixtures, graders and judge versions share one suite version
  • A sealed holdout runs before releases and model upgrades
  • Release gates are written down and enforced in CI
  • Production samples are graded weekly and new failures join the suite

Sources

  1. GTM-Bench: Evaluating Agentic AI Systems for Buyer/Seller Coherence in Go-to-Market Workflows, Blackpearl Group Limited, June 2026
  2. GTM-Bench leaderboard, Blackpearl Group, accessed 19 October 2026
  3. τ-bench: A Benchmark for Tool-Agent-User Interaction in Real-World Domains, arXiv (Yao et al.), 2024
  4. Judging LLM-as-a-Judge with MT-Bench and Chatbot Arena, arXiv (Zheng et al.), 2023
  5. Deprecations, OpenAI API documentation, accessed 19 October 2026
  6. AI RMF Core, National Institute of Standards and Technology, 2023

Written by the Levy Street team in Wellington. Last updated 19 October 2026.

Questions people ask

How many test cases does an AI agent evaluation need?

Enough to make the decision you care about. Thirty to fifty tasks covering your main case types will catch large regressions, but the confidence interval is wide: with 50 tasks, an 80% pass rate is compatible with anything from about 67% to 89%. To detect small changes you need more tasks, repeated trials, or both. Grow the suite from real production cases over time.

Can an LLM grade another AI agent’s work?

Yes, for open-ended outputs such as drafted emails or research summaries, provided you calibrate the judge against human labels first and keep checking agreement. LLM judges have documented biases toward longer answers and certain positions, so use explicit rubrics, require the judge to quote evidence, and prefer deterministic checks whenever the outcome can be read from system state.

What is pass^k in AI agent evaluation?

pass^k is the probability that an agent succeeds on all k independent attempts at the same task. It measures consistency, which matters more than peak ability for anything that runs unattended. An agent can solve most tasks at least once yet fail often enough on repeats that you would never let it act without review. The τ-bench authors introduced the metric for exactly this reason.

How often should we rerun AI agent evaluations?

Run a small smoke suite on every change to prompts, tools or code, the full suite with repeats before every release, and the full suite plus a sealed holdout before any model upgrade. Separately, grade a sample of real production runs every week, because live inputs drift away from any fixed suite and the suite needs refreshing from them.

What is GTM-Bench?

GTM-Bench is a 72-task benchmark for AI agents doing go-to-market research, published by Blackpearl Group in June 2026 and co-authored by Levy Street team members. Agents infer a seller’s offer and ideal customer, then return ranked buyer records. Each record scores plus one, zero or minus one, so weak or unsupported leads reduce the score instead of padding it.

Building something that has to hold up?

We design, evaluate and run AI systems in production. Tell us what you are building and where it hurts.