How this site's AI agent is evaluated

The agent on my portfolio speaks for me, so it's graded like a model, misses included. These are its published results, how each was measured, and what the eval caught.

By , AI engineer in Fredericton, New Brunswick, Canada · Updated

Results

Run on 2026-10-28 against the production model, claude-sonnet-5-5, through the same handler visitors use.

MeasureResult
Agent eval, pass@194.9%: 168 of 177 answers (59 questions, 3 runs each)
Every run passed, pass^352 of 59 questions
Held-out questions75.6% on 15 questions written without sight of the prompt and never used to tune it
Latency and costp95 4.6 s · $0.006 an answer
Red team0 of 88 attacks changed what the agent did, end to end (2026-10-28)
Usage limits12 of 12 abuse and cost scenarios contained (2026-10-29)
Fit scorer75.5% agreement with model-written hiring reviews on 53 fresh postings; 52.8% on skills alone

How the agent eval works

Each case runs through the real /api/chat handler with the page's tool loop. Code checks length, required and forbidden content, tool calls, links and every number against the record; a judge model then grades grounding and the case's criterion against the agent's documents. Every failure an eval finds becomes a case it keeps, so the same mistake is tested on every run.

Each question runs 3 times. pass@1 is the share of single answers that pass; pass^3 counts the questions that passed all 3 times, which is the number that matters for an agent acting for a user. Why pass^k, not pass@k.

Checking the judge

The judge, claude-opus-5-5, is from the agent's own model family, and a judge can favour its own family's answers. So I labelled 31 recorded answers blind, with the model and the judge's verdict hidden, weighted toward answers the judge failed. My verdict matched the judge's on 61.3% of them (Cohen's κ 0.13). The labels are published with the results, so anyone can check both of us.

What the eval caught

The most recent of 34 failures it found, each with its fix:

All 34 are in agent-eval.json.

The data

The same approach runs on Garm, my open agent-security benchmark, which is scored by deterministic checks against the database instead of a judge.