Originally published at kunalganglani.com — read it there for inline code, hero image, and live links.
Agent evaluation is the practice of measuring whether an AI agent reliably completes real tasks under real constraints, not whether it can produce a plausible-looking answer. The misconception is that you need an enterprise “LLMOps platform” or academic-style benchmarks to do it well. You don’t. For a 1–3 person team, you need an agent evaluation roadmap for small teams: a sequence of evals that grows with risk, and stays deterministic enough to run in CI.
I’m writing this as a meta strategy post because this site already has deep dives on eval mechanics. What’s been missing is the map. The map is what stops you from doing random eval chores that feel productive but don’t prevent the next incident.
Here’s the differentiator: I’m going to lay out a 2D roadmap (offline vs online vs HITL) × (task success, tool-use correctness, recovery, safety, cost/latency), then give you a time-boxed operating model that fits 30–60 minutes per week.
If you can’t run an eval deterministically in CI, it’s not an eval. It’s a demo with extra steps.
What is AI agent evaluation?
AI agent evaluation is the set of tests and measurements that tell you whether an agent can complete a task end-to-end, including tool calls, state changes, and recovery, without violating safety and cost constraints.
A chatbot eval asks: “Was the final answer good?” An agent eval asks: “Did it choose the right tool, pass the right arguments, handle failures, avoid unsafe actions, stay within budget, and escalate to a human when it should?” That difference matters because agents fail in more ways than they succeed.
In practice, I treat evals as a product surface:
- Before shipping: stop regressions (CI gates).
- After shipping: detect drift, tool breakage, and unsafe behavior (production monitoring + reviews).
- During iteration: shorten the loop between a prompt/tool change and a confidence signal.
If you’re building AI agents, evals are not optional glue. They’re the steering wheel.
What is an “agent evaluation roadmap” (and why it’s not an eval guide)?
[YOUTUBE:trfUBIDeI1Y|LLM as a Judge: Scaling AI Evaluation Strategies]
An eval guide tells you how to write and run tests. A roadmap tells you:
- Which eval types to do first (offline vs online vs HITL).
- What to evaluate (agents, not chatbots).
- What to ignore for now so you don’t drown.
- What artifacts to produce so the program keeps running when you’re busy.
Roadmaps exist because small teams don’t fail from lack of tools. They fail from lack of prioritization.
Most teams I see jump straight to one of two extremes:
- “LLM-as-judge everything” (flaky, hard to debug).
- “Online A/B tests only” (slow feedback, expensive, unsafe without guardrails).
The roadmap below is the boring answer. It’s also the right one.
Offline vs online evaluations (and what you should start with)
Offline evals run on a fixed dataset of tasks and traces. Online evals run against real user traffic in production. HITL (human-in-the-loop) evals involve humans reviewing, approving, or taking over.
Small teams should start offline because offline is the only place you can get fast, deterministic regression signals.
The roadmap table: eval phase × what it’s for
| Phase | Goal | Inputs | What you measure | Typical tooling | Time cost (small team) |
|---|---|---|---|---|---|
| Offline evals | Prevent regressions before deploy | 5–50 real tasks, golden traces | Pass/fail assertions, rubric scores, tool-call correctness | Repo + CI, trace capture/diff | 30–60 min/week |
| Online evals | Catch drift and real-world failures | Production logs, holdout cohorts | Success rate, escalation rate, incident rate, p95 latency | Observability + flags | 1–3 hrs/week |
| HITL evals | Reduce blast radius + create training data | Review queues, approvals, audits | Approval rate, override reasons, policy violations | Review UI + audit logs | 1–2 hrs/week |
Offline first. Online second. HITL whenever the agent can cause damage.
If you want the nuts-and-bolts “how to start” playbook, my deeper post is here: How to Start an AI Agent Evaluation Program (5-Task Scorecard).
What to evaluate (agents, not chatbots)
Rishav Singh’s production-oriented scorecard framing is the cleanest mental model I’ve seen: seven dimensions that actually map to failures you’ll see in production. I use it as the “coverage map” for small teams:
- Task success
- Grounding
- Tool correctness
- Recovery
- Safety/permissions
- Cost/latency
- Human handoff
Those categories are broad enough to be stable, and specific enough to turn into checks.
Now the opinionated part: don’t start by scoring “response quality.” Start by scoring tool and state correctness. In agent systems, “nice prose” is a rounding error compared to “deleted the wrong record” or “emailed the wrong customer.”
Concrete examples of what I mean by “agent” eval targets:
-
Tool selection and arguments: did it call
create_invoice(customer_id=...)or hallucinatecreateInvoice? - State changes: did it write the right record, exactly once?
- Recovery: did it stop after a 429 or spin in a retry loop?
- Permissions: did it attempt a privileged tool without approval?
If you’re building tool-using agents, also read: agent tool-use regression testing. That post is a deep dive on breaking tools on purpose.
Setup: a no-platform eval harness (repo + CI)
You don’t need a vendor platform to start. A “no-platform harness” is just:
- A repo folder with your task bank (inputs + expected outcomes).
- A runner that can replay tasks against a pinned agent version.
- Normalization + golden traces so you can diff behavior.
- CI wiring so it runs on every PR and on a weekly schedule.
I built a multi-agent publishing pipeline for this site, and one lesson carried over hard: deterministic gates before LLM review catch more than doubling the review model’s size. That’s true for blog publishing and it’s true for production AI. If your pipeline can’t fail fast and deterministically, you’re debugging vibes.
Practically, “deterministic enough for CI” means:
- Fix random seeds where you can.
- Pin model versions (or route through a fixed alias).
- Stub tools for offline runs.
- Cap token budgets and tool-call counts.
If you want to go deeper on keeping systems observable, this pairs well with: LLM observability metrics and OpenTelemetry instrumentation for AI agents.
Writing evals: pass/fail assertions
Pass/fail assertions are the backbone of small-team evals because they force you to define success unambiguously.
My rule: assert on artifacts, not prose.
Examples of assertions that don’t turn into religious wars:
- Tool calls are from an allowlist and match a JSON schema.
- The agent produced an idempotency key for state-changing tools.
- The final state matches expected DB rows.
- The agent escalated to a human when policy required it.
LLM-as-judge can help with subjective checks, but it should be layered on top of hard checks. If you start with judges, you’ll end up with flaky tests and no idea what changed.
This is where agent framework choice matters less than people think. Whether you’re using LangGraph, AutoGen, or something custom, you still need deterministic assertions.
Running evals in CI / regression tests
A small-team cadence that works:
- On every PR: run the 5-task “smoke suite.”
- Weekly: run the full regression suite and review diffs.
- Release gate: block deploys if safety/cost checks fail.
From my DEV post, a minimal program can start with ~5 real tasks and a weekly CI regression cadence, with a layered approach: deterministic hard checks, rubric-based judge, and periodic human spot checks.
If you’re looking for adjacent patterns, I’ve found the same gating discipline applies outside AI too. My 7 safer defaults for code review automation is basically the non-AI cousin of “make regressions hard to merge.”
How do you keep evals deterministic enough for CI?
Three tactics that actually work:
- Tool stubs: replace real APIs with deterministic fakes.
- Golden traces: compare normalized traces, not raw text.
- Budget guardrails: stop conditions for cost and infinite loops.
If your agent touches external systems, deterministic simulation matters even more. That’s why I separate “general eval” from “tool-call failure testing.”
Golden traces / trace diffing (concept)
Golden traces are the missing piece in most small-team eval programs.
Instead of asking “did the final answer match?”, you store a canonical representation of what the agent did:
- tool name + arguments
- tool response (normalized)
- state transitions
- retry/backoff decisions
- stop reason
Then you diff today’s trace against last week’s. When something changes, you see what changed.
This is also how you keep LLM-judge systems honest. Judges drift. Prompts change. Model routing changes. Trace diffing is the anchor.
If you want a deep dive on this approach for reliability, see: How to Do Agent Tool Call Failure Testing [2026 CI Harness].
Safety and permissions considerations
Small teams consistently under-invest here because it feels like “enterprise overhead.” That’s a mistake.
Two rules I use:
- Any tool that can cause irreversible damage is a privileged tool.
- Privileged tools require either HITL approval or very tight deterministic constraints.
This maps cleanly to the OWASP GenAI LLM Top 10, which is now maintained under the OWASP GenAI Security Project. The official archive page is here: OWASP Foundation.
On this site, I treat agent security as its own surface area. If you’re building anything that can be attacked via instructions, read: prompt injection, AI security, and AI security leader playbook.
A concrete, testable safety eval: ensure the agent refuses to call delete_* tools without an approval token. That’s not philosophy. That’s an assertion.
Cost and latency considerations
Cost and latency are not “ops metrics.” They are part of correctness.
If an agent is correct but burns $4 in tokens per task, it’s broken. If it’s correct but takes 45 seconds, users will abandon it and you’ll get pressure to remove guardrails.
So your eval program needs budget ceilings:
- max tool calls per task (e.g., <= 8)
- max retries per tool (e.g., <= 2)
- max tokens per task (define a ceiling)
- p95 latency target (define a ceiling)
If you want to get specific about the math, I’ve written about LLM cost and agent costs: AI agent cost per task and agent per-task cost calculation.
One data anchor from my own work: running this blog’s 7-agent pipeline taught me that idempotent, per-step keys matter because retries are inevitable. The same lesson applies to agent tools. If you don’t have idempotency, “recovery” becomes “double-charge the customer.”
Human handoff / HITL
Human-in-the-loop is not a crutch. It’s a design tool.
Define explicit handoff criteria:
- uncertainty above threshold
- privileged action requested
- repeated tool failures
- policy-sensitive content
Then evaluate the handoff:
- Was the handoff triggered when it should have been?
- Did the agent include enough context for a human to take over quickly?
If you need patterns you can copy, I’ve already written: 10 HITL tool approval patterns for AI agents.
How do you design an escalation path?
Treat escalation like an on-call policy:
- Define a “stop and ask” boundary.
- Define who gets paged or queued.
- Log the reason codes so you can reduce unnecessary escalations.
Without reason codes, HITL becomes expensive theater.
The minimum viable program (Day 0 → Week 2 → Month 2)
This is the part most guides skip. Here’s what I’d actually do with 1–3 people.
Day 0 (today): 90 minutes, no excuses
Artifacts:
- A 5-task bank: 5 real tasks from last week’s conversations.
- A scorecard with 7 dimensions (success/tool/recovery/safety/cost/handoff).
- A runner that can execute those tasks offline.
Ritual:
- One owner. If everyone owns it, nobody owns it.
Week 2: make it a CI habit
Artifacts:
- CI job runs on every PR.
- Golden traces for the 5 tasks.
- A “release gate” check for safety + budget.
Ritual:
- 30 minutes weekly to review diffs.
Month 2: add online + HITL where it matters
Artifacts:
- Holdout cohort for online metrics.
- HITL approval queue for privileged tools.
- A versioning scheme for prompts/tools/judges.
Ritual:
- Monthly “eval drift” review: which tasks are stale, which new failures showed up.
This is also where you should start reading your own incident logs. If you don’t have one, you don’t have a reliability program.
Program-level anti-patterns (the stuff that kills evals)
I’ve seen the same failure patterns repeat across teams, regardless of stack:
- Dashboard theatre: beautiful charts, no gating decisions.
- Metric monoculture: optimizing one number while regressions hide elsewhere.
- Flaky online tests without holdouts and without a rollback plan.
- Judge drift: changing models/prompts without versioning.
- Dataset staleness: tasks that no longer match reality.
If you want one north star: evals should change shipping behavior. If nobody blocks a release because an eval failed, you’re cosplaying QA.
Where to go next (the hub-and-spoke plan)
This post is meant to be the hub. The spokes already exist on this site:
- Start here for the step-by-step program: minimal agent evaluation program
- Go deep on reliability regression: agent tool-use regression testing
- Build better gates across prompts/tools/RAG: AI engineering evals
- Lock down safety testing: prompt injection regression testing
- Make your agent observable enough to debug: AI agent observability logging schema
One external reference I actually recommend bookmarking: the OpenAI Evals repository is a good example of “evals as code” thinking, even if you don’t adopt it directly.
Here’s my prediction: within a year, “agent evaluation” will stop being a niche LLMOps topic and become a default expectation, like unit tests. The teams that win won’t be the ones with the fanciest dashboards. They’ll be the ones that can run a five-task regression in CI and trust the result.
Originally published on kunalganglani.com
Top comments (0)