Why evals, why now
You have spent b1-b7 making the Daybreak Ops Agent capable: tools, memory, planning, guardrails. Tonight you make it measurable. An agent without an eval harness is a demo; an agent with one is a system you can improve on purpose. Everything here comes from the newest layer of the official canon - Anthropic's agent-evals essay, LangSmith's trajectory evals and the agentevals package, and Arize's evaluation course - taught on the golden set you have been climbing since b1.
The vocabulary that unlocks the literature 8 min live
Anthropic's agent-evals essay gives the field its shared words. A task is one unit of work with a defined success condition ("what was March 2026 revenue?"). A trial is one attempt at that task - agents are non-deterministic, so one trial proves nothing. A grader decides whether a trial passed. The transcript (or trace) is the full record of the trial - every thought, tool call, and result. The outcome is the final state of the environment after the agent is done - not what it said, but what is now true. Learn these five and every evals doc, paper, and product suddenly reads clearly.
LiveThree grader types - and what each one costs5 min▶
Every grader in existence is one of three kinds. The essay's advice is not to pick one - it is to combine them and know each one's failure mode:
- Code-based graders - assert the answer contains "150", check a row landed in the database. Fast, objective, cheap to run thousands of times - and brittle: a correct answer phrased as "$150.00" can fail a naive string check, and a lucky wrong answer can pass one.
- LLM-judge graders - a model grades the transcript against a written rubric. Handles open-ended answers code cannot - but judges need calibration against human labels before you trust them, and every rubric needs an "Unknown" escape clause so the judge can abstain instead of guessing when the transcript is ambiguous.
- Human graders - the gold standard. Too slow and expensive to run on every trial, so their real job is to calibrate the other two: label a sample by hand, then check your code graders and LLM-judges agree with the humans.
The judge that always said yes. A team wired an LLM-judge with the rubric "is this answer helpful?" and watched their eval pass rate hit 98% while users kept complaining. The judge had never been calibrated - it graded fluency, not correctness, and it had no way to say "I cannot tell." A rubric with concrete pass criteria plus an Unknown clause dropped the score to 61% - the honest number they could finally improve.
Self-studyWhy one trial proves nothing2 min read▶
Agents are non-deterministic twice over: the model samples its tokens, and the environment (tool latency, data state, ordering) shifts under it. That is why the unit of evidence is the trial, and why every score in this course is reported over N trials, never one. The gap between pass@k and pass^k on the same task is a direct reading of that variance - in the homework you will measure it on your own agent and treat it as a debt to pay down, not a dice roll to accept.
Outcome vs trajectory 7 min live
Anthropic's essay is firm: grade outcomes over process. The pitfall it names is over-specifying tool sequences - if your grader demands query_sales then top_products in that order, you will fail perfectly good agents that found another valid route to the right final state. But outcome-only grading has a blind spot too: an agent that gets the right answer while silently calling send_email twice looks identical to a clean run. That is what trajectory checks are for - and it is exactly the split LangSmith's agentevals package implements.
| Outcome eval | Trajectory eval | |
|---|---|---|
| What it grades | The final environment state - did the right answer land, did the right row change | The path taken - which tools were called, with what arguments, in what shape |
| What it catches | Wrong answers, hallucinated numbers, tasks silently left half-done | Silent weirdness on the way: redundant calls, skipped guardrails, tool loops, side effects the answer hides |
| When it lies | Right answer by luck or by a dangerous route still passes - the path is invisible | Over-specified sequences fail good agents that found a different valid route - the Anthropic pitfall |
| Use it for | Your primary pass/fail signal on every task | A second lens on action tasks and regressions - loose modes first, strict only when order truly matters |
LiveThe agentevals trajectory modes4 min▶
The agentevals package (LangSmith's trajectory-evals toolkit) ships four match modes plus an LLM judge, each a different strictness dial against a reference trajectory:
- strict - same tool calls, same order. The most brittle; reach for it only when order is the requirement (approve before send).
- unordered - same tool calls, any order. Right for "it must have checked both months" tasks.
- subset - the agent called no tools outside the reference set. Catches rogue extra calls.
- superset - the agent called at least the reference tools. Catches skipped required steps.
- create_trajectory_llm_as_judge - a rubric-driven judge over the whole trajectory, for the qualities no matcher can express ("did it re-check before acting?").
Arize's course teaches the same idea as decomposition: evaluate the router (did it pick the right tool?), each skill (did the tool step succeed?), and the trajectory separately - then improve the LLM-judge itself against human labels.
Self-studyThe five pitfalls that quietly ruin eval suites4 min read▶
From the Anthropic essay's field notes - check your harness against all five before trusting any number it prints:
- Eval saturation - your suite hits 100% and stops teaching you anything. Add harder tasks from fresh failures; a saturated eval is a retired eval.
- Brittle grading - the string check that fails "$150.00", the judge that punishes formatting. Calibrate graders against transcripts you have read yourself.
- Shared state between trials - trial 3 passes because trial 2 already wrote the row. Reset the environment between trials or your pass^k is fiction.
- Ambiguous task specs - if two reasonable humans disagree on what "done" means, your grader is guessing. Tighten the success condition, not the agent.
- Positive-only test sets - every task has a happy path. Add tasks the agent SHOULD refuse (b7's injection trap belongs in the golden set too).
Formalize the golden set ★ 24 min · everyone builds
Since b1 you have been clicking through the 12-task scorecard - 1 → 5 → 7 → 10 → 12 as the levers came on. Tonight that scorecard stops being a widget and becomes your spec. The box below is the reference: 12 tasks, all four levers on, 12/12. Your job is to rebuild it as a Python harness around your own b2 loop - tasks, trials, graders, and both pass numbers per task.
Open the scorecard below with all levers on and read all 12 task descriptions - each one is a task spec: a prompt plus a success condition your grader must encode.
Write the harness from the code card: a tasks list, N trials per task through your b2 loop, one grader per task.
Start with code-based graders (assert the number is in the answer), then add ONE LLM-judge for the open-ended dip-diagnosis task - rubric plus Unknown clause.
Run K=5 and read the two columns. Any task where pass@5 is true but pass^5 is false is a flaky task - that gap is what b9's staged rollout will gate on.
LiveThe ~30-line harness10 min · type along▶
Everything from Parts 1-2 in one file. run_agent is your b2 loop unchanged - the harness wraps it, never reaches inside it (grade outcomes, remember):
import anthropic
client = anthropic.Anthropic()
K = 5 # trials per task - one trial proves nothing
def run_agent(prompt: str) -> str:
"""Your b2 loop: model + Daybreak tools, returns the final answer."""
... # unchanged from b2 - the harness only sees what comes out
# --- graders ------------------------------------------------------
def grade_march(answer: str) -> bool: # code-based: fast, brittle
return "150" in answer # March 2026 revenue is $150
RUBRIC = (
"PASS if the answer names BOTH the March refund and the cancelled "
"subscription as causes of the March dip. FAIL if it invents causes. "
"UNKNOWN if the answer is too ambiguous to grade - never guess."
)
def grade_dip(answer: str) -> bool: # LLM-judge: rubric + escape
verdict = client.messages.create(
model="claude-opus-5", max_tokens=5,
messages=[{"role": "user",
"content": RUBRIC + "\n\nAnswer to grade:\n" + answer}],
).content[0].text.strip()
return verdict == "PASS" # UNKNOWNs get queued for human review
# --- golden set ---------------------------------------------------
TASKS = [
{"prompt": "What was March 2026 revenue?", "grader": grade_march},
{"prompt": "Why did revenue dip in March?", "grader": grade_dip},
# ... grow toward the full 12, then past it with real failures
]
for task in TASKS:
wins = [task["grader"](run_agent(task["prompt"])) for _ in range(K)]
print(task["prompt"], "| pass@5:", any(wins), "| pass^5:", all(wins))
any(wins) is pass@k, all(wins) is pass^k - the whole metric split is two builtins. The work is in the graders, which is exactly where the essay says the work should be.
Try it yourself - this week ◐ 30-40 min total
- Add 3 tasks to your golden set drawn from your agent's own real failures - moments in b2-b7 where it got something wrong. Real failures make better evals than invented ones.
- Write one LLM-judge rubric with concrete pass criteria and an Unknown escape clause. Grade five transcripts by hand first, then check the judge agrees with you.
- Run every task at K=5 and compare pass@5 vs pass^5 per task. The gap between the two columns is your reliability debt - write down which lever you suspect for each flaky task.
Official sources covered
This session teaches the working core of the agent-evals canon. Certificates, videos, and graded assessments stay on the official sites (linked each session). This page covers:
Three questions before you go 🎯 ◐ 90 seconds
1 · Your agent scores pass@5 = yes but pass^5 = no on a task. What does that tell you?
pass@k asks "did it succeed at least once in k trials?"; pass^k asks "did it succeed in all k?". A yes/no split is the signature of a flaky task - the capability exists, the reliability does not. That gap is what you pay down before shipping.
2 · Why does Anthropic say to grade outcomes rather than the agent's process?
The named pitfall is over-specifying tool sequences: demand one exact route and you punish agents that found another valid one. Outcome is the primary signal; trajectory checks (in their looser modes) are the second lens for silent weirdness, not the gate.
3 · Which grader type needs calibration against human labels AND an "Unknown" escape clause?
LLM-judges handle open-ended answers but must be checked against human labels before you trust them, and every rubric needs an Unknown clause so the judge can abstain instead of guessing. Humans ARE the calibration standard; code graders are objective but brittle in a different way.