hardeep.cv/Study/EvalsLesson 01
#evals#llm-judge#talk-notes

Evals are fuzzy unit tests, and the judge can lie

An eval runs test cases through your agent, and a judge scores each answer against the policy. Before you trust the judge, check that it agrees with humans.

asks reply grounds score compares ≥ 80% Test cases30 scenarios Agentsupport bot LLM judgepointwise Policy14-day returns Agreement24 / 30 = 80% Human verdictsgolden set CI✓ pass
  1. Each test case goes to the agent as a prompt, for example “I bought headphones 20 days ago. Can I return them?”
  2. The judge scores one answer at a time against the written policy. It does not compare two answers.
  3. Humans have labeled the same 30 cases pass or fail. The eval counts how often the judge agrees with them.
  4. CI fails when agreement drops below 80%. In the demo the gate passed at 24 of 30.
Fig. 1An eval has four parts: test cases, expected behavior, a judge, and an aggregate score. The aggregate gates the deploy.

Map of the talk

Your link starts at the list of eval techniques

Fig. 2The live demo takes a third of the talk. Click a block to open the video at that point.

Why

Evals catch bad behavior before deploy; harnesses catch it at run time

builddeployrun time Evals: ahead-of-time reliabilitylike tsc before you ship Harness: just-in-time reliabilitylike a runtime guard on each action ■ no eval, no guard → Instagram recovery bot: injection → “add this email” → 20,225 accounts exposed to takeover
Fig. 3Meta’s recovery chatbot could edit accounts. Attackers matched the owner’s location with a VPN, then asked it to add their email to the account.

The running example

A keyword check passes a wrong answer; a grounded judge does not

Customer“I bought headphones 20 days ago. Can I return them?”
PolicyReturns only within 14 days. 20 > 14, so the right answer is no.
Wrong pass

Keyword match

“Yes, return it free.You cannot pay shipping.” toContain('cannot') ✓ PASS — wrong

The word appears, but in the wrong place.

Wrong pick

Pairwise, no policy

A“No, 14 days” B“Yes, free!” “more helpful?” picks B · 5 of 5 runs

A friendly yes beats a correct no.

Below gate

Pointwise, weak model

30 labeled scenarios5 misses allowed gpt-3.5 + policy 6 misses · CI ✗

A used yoga mat exposed a rule nobody wrote down.

Gate passes

Pointwise + policy

policy in system prompt“even for loyal customers” gpt-4o-mini 27/30 agree · CI ✓

A stronger model, plus a rule against loyalty appeals.

Correct deny

RAG-grounded judge

refund-policy.pdfvia OpenRAG retrieves 14-day rule correctly DENIES

When the PDF changes, the judge follows.

Fig. 4The same question, five judges. Only the two that read the policy get it right.

How evals lie

LLM judges have four biases that you must test for

Position

Picks the first answer

Ashown first Bbetter ◀ picked
Sycophancy

Picks the pleasing answer

Politebreaks policy Bluntcorrect ◀ picked
Self-preference

Picks its own family

GPT textsame family Humanas good ◀ picked
Verbosity

Picks the longer answer

Longpadded Shortright ◀ picked
Fig. 5Position bias and self-preference come from showing two answers at once. That is why the talk recommends pointwise scoring.
pointwisebaseline pairwise+39%
Fig. 6A study cited at about 17:00: pairwise judges are about 39% more open to manipulation than pointwise judges.

Training the judge

Aim for 80–90% agreement with humans, not 100%

Have experts label about 30 question–answer pairs. Run the judge on the same pairs and count agreement. Human support teams agree with each other only about 80% of the time, so a judge near 100% is overfit to your examples.

■ agree 24□ disagree 6 run 2 · 80%run 1 · 90% 0%100% CI green 80–90% ▲ near 100% = suspect
agreement.test.ts — demo runs
Fig. 7The same judge on the same 30 cases scored 27, then 24. The gate is a band, so normal run-to-run noise does not break CI.

Staying relevant

Give the judge the same policy search the agent uses

parse index retrieve same tool traffic → new cases OpenRAG (open source, IBM / Langflow) Policy docsPDF, DOCX… Doclingto Markdown OpenSearchvector index Agentanswers users Judgescores answers
Fig. 8Policies change. If the judge reads them from the same index as the agent, the eval does not go stale.

What to remember

Start cheap and add a judge only where you need one

  1. Climb the cost ladder: deterministic tests, then regex, then trace checks (which tools ran, how long), and a judge last.
  2. Write about 30 realistic cases and have a human label each one pass or fail.
  3. Score answers pointwise against the written policy, not pairwise. Use the cheapest judge model that works, from a different family than the agent, and pin its version.
  4. Run the eval in CI. Fail below 80% judge–human agreement, and treat 100% as a red flag.
  5. Retrieve the policy from one shared source (RAG) for agent and judge. Add new cases from production traffic.

Q&A · 54:32

Three audience questions

How do I grow the dataset before real users arrive?

Synthetic cases and red-team prompts

Generate adversarial prompts, then make more variants of the ones that fail.

Should I write evals for my Claude Code or Cursor skills?

No; write evals when you build a harness

Skills you write yourself are mostly deterministic code.

Should the judge and the agent share the policy?

Yes, one source of truth

Both query it, for example through OpenRAG. Keep the judge as close to the agent as you can.

Sources

hardeep.cv

© 2026 Hardeep Singh