Engineering Blog

Evaluating Claude as an AI Interviewer

Opus 4.7, Sonnet 4.6, and Haiku 4.5 as the engine behind a live technical interview

TL;DR

Interview Me runs a live, adaptive technical interview and then writes you a calibrated evaluation. An LLM drives both halves. So we built a harness that grades the interviewer the way we'd grade a candidate, and ran three Claude models through it. Every score below is the averaged verdict of three judges from three different labs: Claude, GPT, and Gemini, because a judge drawn from the same family as the interviewer grades its own house style generously.

Metric (1–10, ↑ better unless noted) Opus 4.7 Sonnet 4.6 Haiku 4.5
Experience quality — is it a good interviewer?7.988.51*8.35
Feedback quality — is the write-up good?9.07*8.898.06
Calibration error vs intended caliber (↓)0.73*0.870.83
Interviewer calibration error vs blind judge (↓)0.21*0.340.52
Candidate fidelity error (↓)0.59*0.770.73
Judge disagreement — experience (↓)0.59*0.630.59*
Judge disagreement — feedback (↓)0.430.571.01

Orange marks a value that leads by a statistically significant margin over the runner-up (paired t-test across the fifteen personas, two-sided, α = 0.05). Bold* marks a value that is numerically best but not significantly ahead of the runner-up. Those rows are ties. A row can still hide a real gap further down. On feedback quality Opus and Sonnet are tied with each other, yet both beat Haiku decisively. See Reading the tables.

The verdict: the quality gaps are small, and they fall in different places for the two jobs. On conducting the interview, Haiku is the cheapest tier to run and is statistically indistinguishable from both larger models overall, while it probes significantly deeper and adapts significantly more than either. It pays for that with a rougher conversational tone. On writing the evaluation, the ordering is the intuitive one and the gaps are large. Opus and Sonnet are clearly better than Haiku, and it isn't close. We think the interesting production answer is to split the job rather than pick one model.

Why you have to evaluate an AI interviewer

An AI interviewer has two jobs, and they fail in different ways:

  1. Conduct the interview. Ask relevant questions, follow up on vague answers, adapt to the candidate, and not leak the answer. A model that nods along and accepts the first thing it hears produces a pleasant, useless interview.
  2. Write the feedback. Turn a transcript into a fair, specific, actionable evaluation with a score and a hire verdict, without hallucinating moments that never happened or going soft.

Vibes don't catch regressions in either. Swap the model, tweak a prompt, raise the turn cap: did probing get better, or did the model just get chattier? Did feedback get fairer, or only more generous? Answering that takes numbers, and the numbers have to mean something. So the harness treats the interviewer as the system under test and grades it on both jobs.

The harness

One eval run takes a synthetic candidate with a known answer key, puts it in front of the real interviewer, and hands the resulting transcript to two panels of judges. Everything below is a detail of this picture.

Flow of one eval run: a persona with an intended caliber drives a mock candidate against the production interviewer; the transcript and generated feedback go to an experience judge and a blind feedback judge, each scored by a Claude, GPT, and Gemini panel, whose scores are merged and written to JSON.
Figure 1 — End-to-end flow of one eval run, from persona to persisted JSON.

Synthetic candidates with a known answer key

Evaluating an interviewer is hard because you normally don't know how good the candidate really was, so you can't tell whether the score was right. We get around that by manufacturing the candidate.

The harness defines fifteen synthetic candidates, each with an intended_overall caliber on a 1–10 scale baked in as ground truth. They span the three interview types, seniority from L4 through L6, and three strengths: weak, mid, and strong. A mock candidate model role-plays each persona and stays in character, so a weak L4 gives shallow, hand-wavy answers while a strong L6 reasons crisply about trade-offs. Because we know what each candidate was supposed to demonstrate, we can ask whether the interviewer's score landed where it should have.

The interview loop

The runner drives the production Interviewer class against the MockCandidate on the same code path real users hit, so what gets evaluated is what ships. The loop alternates until the interviewer emits a "done" sentinel, or until it hits --max-turns as a safety cap.

Letting the interviewer decide when it's done is itself an eval signal, because an interviewer that bails out after two turns regardless of who's in front of it is failing a different kind of probing test. That turns out to be the most revealing thing the harness measures, and it gets its own companion piece.

Two judging jobs, three model families

Each interview is graded twice over, by two different rubrics, and each rubric is scored independently by three models from three labs:

  • The experience judge reads the transcript and rates the interviewer on six dimensions: question_relevance, probing_depth, adaptivity, did_not_leak_answers, professionalism, and coverage.
  • The feedback judge reads the transcript and the generated feedback and rates five dimensions of the write-up: specificity, actionability, grounded_in_transcript, fairness, and internal_consistency.

The feedback judge is blind to the persona's intended caliber. Before it sees the interviewer's score it forms its own estimate of how the candidate performed, recorded as demonstrated_caliber, and that one design choice is what makes the calibration breakdown below possible.

Splitting "the score was wrong" into whose fault it was

The naive calibration metric asks how far the interviewer's score sits from the intended caliber. That conflates two failures: the interviewer mis-scoring a good performance, or the mock candidate having an off run and not delivering its intended caliber. We separate them into three numbers:

  • calibration_error = │interviewer's score − intended caliber│. The headline number, though it mixes both failures.
  • interviewer_calibration_error = │interviewer's score − blind judge's caliber│. The interviewer's own scoring accuracy, independent of whether the candidate drifted.
  • candidate_fidelity_error = │blind judge's caliber − intended│. How far the mock candidate drifted from its brief, which is a property of the test rig rather than the interviewer.
The intended caliber, the blind judge's demonstrated caliber, and the interviewer's score sit on one line; the gaps between them decompose into candidate fidelity error and interviewer calibration error.
Figure 2 — Splitting one calibration metric into two diagnostics that point at different failure modes.

A low interviewer_calibration_error next to a high calibration_error means the interviewer scored the transcript in front of it correctly, and the mock candidate just didn't perform to spec that run.

Why the judges come from three different labs

A judge from the same family as the interviewer grades its own house style generously, so every score here averages a cross-family ensemble: claude-opus-4-8, gpt-5.5, and gemini-3.1-pro-preview, at temperature 0 where the API allows it. Two rubrics × three judges means six independent gradings of every interview, and 540 across the ninety interviews in this post. We also record judge disagreement, the mean absolute deviation of their three overall scores. When judges diverge we treat the result as soft rather than averaging it away.

Every run also records a judges_hash (a fingerprint of the judge prompts plus temperature) and a personas_hash. Change a rubric or a persona and the hash changes, so our reporting tool refuses to diff two runs that weren't graded under identical conditions. A blog post full of numbers is only worth reading if the numbers were produced the same way, and the hashes make that checkable instead of a promise.

Running everything twice

Every configuration is run twice, and every number in this post is the mean of the two runs. This turned out to matter far more than we expected. A single interview's probing_depth score barely predicts what the same interview scores on a rerun, as the reliability section shows.

The experiment

We swapped the interviewer model between three Claude tiers and held everything else fixed. Every run in this post was graded under judges_hash 3b4eac88e05a and personas_hash 05e588ff2c02, with the same Haiku mock candidate and the same 20-turn cap. Those hashes, not a commit SHA, are what certify the comparison: a SHA tells you the code matched, the hashes tell you the grading conditions matched, which is the thing that actually has to hold.

Ninety interviews: three models × fifteen personas (five each across behavioral, system design, and ML system design) × two replicates.

The aggregates are macro-averaged across the three interview types (each type weighted equally, five personas apiece), so a type with a wider score spread can't dominate the headline. Where we claim a difference, we report a paired t-test across the fifteen personas, two-sided, α = 0.05.

Results

The tiers land within half a point of each other

There is no cliff on the interview itself, and the quality difference is fractions of a point. Haiku is statistically indistinguishable from both larger models at conducting the interview. Haiku − Sonnet is −0.16 (t = −1.48) and Haiku − Opus is +0.37 (t = +1.44). Our production recommendation rests on that null: the cheapest tier is not measurably worse at the live job.

One experience-quality gap does clear the bar, Sonnet over Opus at +0.53 (t = +2.17), and it clears it by a hair against a threshold of 2.145. We read it as a hint rather than a result. It's the kind of marginal finding a third replicate would be most likely to erase.

The price gap is smaller than the rate card suggests

Opus lists at five times Haiku's per-token price. That is not what you pay per interview, because Haiku is the model that won't stop asking questions. It takes 14.5 interviewer turns to Opus's 8.8, and every turn re-reads the whole transcript, so context cost grows quadratically in turn count. Running the live conversation on Opus costs 1.8× what it costs on Haiku, not 5×. Sonnet is the most expensive of the three to run the conversation, more expensive than Opus, because it talks 42% more for a 40% lower token price.

Probing costs turns, and turns cost tokens. Haiku's relentlessness is exactly what erodes its own price advantage.

A note on reading the tables

Comparing the columns by eye will mislead you. Each model's mean carries a wide confidence interval, because the personas differ enormously from one another and a weak L4 and a strong L6 drag any average around. Haiku's probing_depth is 8.70 ± 0.50 and Sonnet's is 8.22 ± 0.46. Those intervals overlap heavily, and a reader would reasonably conclude there's no difference.

There is. Every test in this post is paired. It asks whether one model beat another on the same persona, fifteen times over, which cancels the persona variance entirely. The paired difference on probing_depth is +0.48 ± 0.44 (t = +2.33), significant despite the overlapping marginal intervals. Overlapping error bars on the means never imply a null result for paired data. The inference only runs the other way. So we report confidence intervals on the differences, which is what our claims are about.

Experience quality — no significant difference between the three tiers
Opus 4.77.98
Sonnet 4.68.51
Haiku 4.58.35
Feedback quality — Opus and Sonnet tied; Haiku significantly lower
Opus 4.79.07
Sonnet 4.68.89
Haiku 4.58.06
Bars scaled to the full 1–10 range. Mean of two replicates. A bar is coloured only where the difference is statistically significant.

Where the differences actually live: the dimension breakdown

The single "experience quality" number hides the most interesting result. Broken into its six dimensions (macro-averaged over 90 interviews):

Experience dimension Opus 4.7 Sonnet 4.6 Haiku 4.5
question_relevance9.269.33*9.19
probing_depth7.438.228.70
adaptivity7.498.098.63
did_not_leak_answers8.538.73*8.60
professionalism8.61*8.60*7.79
coverage8.398.868.60

Orange = significantly ahead of the runner-up; bold* = numerically best, but the gap to the runner-up is not significant.

Finding 1: cheaper is not worse at the interviewing itself. Haiku out-probes and out-adapts both larger models, and both gaps are statistically significant. It chases vague answers harder and adjusts to the candidate more than Sonnet or Opus do. Its one clear deficit is professionalism, at 7.79 against Opus's 8.61. That's tone and concision rather than substance. Haiku digs like a terrier, but it isn't as smooth about it.
Comparison Difference t (df=14) 95% CI
probing_depth, Haiku − Opus+1.26+3.21[+0.42, +2.11]
probing_depth, Haiku − Sonnet+0.48+2.33[+0.04, +0.92]
adaptivity, Haiku − Opus+1.15+2.53[+0.18, +2.12]
adaptivity, Haiku − Sonnet+0.54+2.46[+0.07, +1.02]
professionalism, Haiku − Opus−0.82−3.15[−1.38, −0.26]

Both comparisons against Sonnet clear significance with little room to spare, and their confidence intervals nearly touch zero. The comparisons against Opus are the robust ones. If a reader takes only one claim from this section, it should be that Haiku probes deeper than Opus.

And the feedback-quality dimensions:

Feedback dimension Opus 4.7 Sonnet 4.6 Haiku 4.5
specificity9.279.158.81
actionability9.098.928.40
grounded_in_transcript9.26*9.008.03
fairness9.03*8.837.99
internal_consistency9.28*9.198.56

Orange = significantly ahead of the runner-up; bold* = numerically best, but the gap to the runner-up is not significant.

Finding 2: the feedback job is where capability buys you something. This is the most robust result in the eval. Haiku's feedback is worse than Opus's by 1.02 points overall (t = −4.91) and worse than Sonnet's by 0.83 (t = −3.75). The largest single gap is grounded_in_transcript, where Haiku − Opus comes to −1.22 (t = −4.66). Haiku is measurably more likely to write feedback about things that didn't happen.

Opus and Sonnet, meanwhile, are indistinguishable from each other on feedback overall (−0.18, t = −1.90). The judges also agree far more about Opus's feedback than Haiku's (disagreement 0.43 vs 1.01), and Haiku's interviewer calibration error is more than double Opus's (0.52 vs 0.21). Haiku probes well but is a less reliable grader of what it found.

The hardest interview for every model: system design

Interview type Metric Opus 4.7 Sonnet 4.6 Haiku 4.5
Behavioralexp / feedback7.70 / 9.168.98 / 9.038.75 / 8.70
System designexp / feedback8.22 / 8.938.17 / 8.778.12 / 7.47
ML system designexp / feedback8.03 / 9.128.38 / 8.878.18 / 8.00
Behavioralcalibration error (↓)0.700.700.70
System designcalibration error (↓)1.101.201.20
ML system designcalibration error (↓)0.400.700.60

Finding 3: system design is where calibration breaks down, and it breaks the same way for every model, through over-generosity to weak candidates. Calibration error roughly doubles on system design (≈1.2) against behavioral (0.70) or ML system design (≈0.55). The two weak personas show it plainly, and both have an intended caliber of 3.

Persona (intended) Opus score Sonnet score Haiku score Blind judge saw
sd_weak_L4 (intended 3)5.04.54.03.8
sd_weak_L5 (intended 3)4.05.05.53.8

Every model rounds a weak system-design answer up, and the blind judges saw it too. Their independent demonstrated_caliber for both personas came in at 3.8, so the candidates really were weak and the interviewers over-credited them. These scores are the interviewer's own rating of the candidate, which reproduces across reruns at r = 0.96, so this table is signal rather than noise. It's the clearest defect the harness surfaced, and the most actionable. Our system-design prompt needs a firmer rubric for what "insufficient" looks like, whichever model we ship.

How much can you trust a single run?

We ran every configuration twice, which let us ask a question most eval write-ups never ask: if you rerun the same persona against the same model, do you get the same score? For the calibration machinery, emphatically yes. For the experience judge, emphatically no.

Quantity Test–retest r across two runs
Blind judge's demonstrated_caliber+0.98
Interviewer's score of the candidate+0.96
professionalism+0.57
adaptivity+0.22
probing_depth+0.17
Experience quality, overall+0.15

The interviewer's score of a candidate is almost perfectly reproducible, and tracks the intended caliber at r ≈ 0.92 for all three models. Every calibration claim in this post rests on that.

A single interview's probing_depth score tells you very little about what the same interview would score on a rerun. Between-persona standard deviation is 0.92, and within-persona, run-to-run standard deviation is 0.86. The noise is as large as the signal. Model-level means over fifteen personas are stable, and Opus's aggregate reproduced to within 0.07 across replicates, but individual cells are not interpretable. Neither is a one-run comparison of two models on a single persona.

This is why the dimension gaps above only became significant after replication, and why we would not have believed them from one pass. It's also the single most transferable lesson here: if you are grading an LLM's behavior (as opposed to its judgment about a fixed artifact) with an LLM judge, measure your test–retest reliability before you believe your effect sizes.

Split the job

The dimension data points somewhere more interesting than a single winner. Each of the two jobs an interviewer does has a different best model.

  • Conducting the interview. Haiku is statistically indistinguishable from both larger models on overall experience quality. On the two dimensions that separate a real interviewer from a polite one, probing and adaptivity, it leads outright and significantly, and it is the cheapest of the three to run.
  • Writing the evaluation. Grounding, fairness, consistency, and calibrated scoring all favour Opus and Sonnet decisively. Haiku's write-up is measurably less anchored to what happened.
The production configuration we're moving toward is a split rather than a single model. Haiku runs the live conversation, where probing matters most and it is no worse than a flagship. The full transcript then goes to Sonnet or Opus to write the feedback, where calibration matters most and a few extra seconds are invisible. You get Haiku's relentless follow-ups, a trustworthy write-up, and you pay flagship prices only on the one offline call where they earn their keep.

Limitations & what's next

  • The candidate is also an LLM. A Haiku mock candidate is consistent and cheap but isn't a human. candidate_fidelity_error (0.59–0.77) quantifies its drift, and we exclude its share from the interviewer's calibration, but it's still a model grading ground for a model.
  • Fifteen personas, not fifteen hundred. Replicates buy confidence in the numbers we have; they do not buy generalization. Whether Haiku still out-probes Opus against candidates unlike our five archetypes is a question this design cannot answer.
  • Judges are LLMs. The cross-family ensemble and disagreement tracking guard against any one model's bias, but the ceiling is still "what three frontier models agree a good interview looks like." Haiku's feedback disagreement of 1.01 is a warning that the judges themselves are least sure exactly where we draw our sharpest conclusion.

Next: ship the firmer system-design rubric and re-run to confirm the calibration error drops; prototype the Haiku-conduct / Opus-feedback split as a first-class configuration and eval it end-to-end; and grow the persona roster so the gaps we're calling "small" come with real confidence intervals across a wider candidate distribution.

Where we're taking this: continuous evals

Our offline harness catches regressions before release, but it runs on synthetic personas we wrote ourselves, which is a closed world. Real users are messier, weirder, and more interesting than any persona we'll ever sit down and write. The roadmap from here is about closing that gap.

Pre-merge eval CI

Any PR that touches a prompt file, the Interviewer class, or a feedback module should automatically run a fast subset of the harness, one persona per interview type, and post the deltas as a PR comment. A calibration regression should behave like a test failure. The current friction of remembering to run evals manually is how regressions sneak in.

Drift monitoring, with a noise floor

Even with prompts and judges held constant, model providers ship quiet updates. We want a small "anchor" suite re-run weekly and charted over time. The reliability numbers above set the bar for what counts as a signal: since a single interview's probing_depth reproduces at only r ≈ 0.17, an alert threshold has to sit above the run-to-run noise, not above zero. Any drift monitor that fires on a one-point move in one dimension on one persona will fire constantly and mean nothing.

Cost and latency as first-class eval dimensions

Judging an interview costs two and a half to four times what the interview itself cost to run, since three frontier judges each apply two rubrics. We work that out after the fact. Attaching tokens-in/out and per-turn p50/p95 latency to each persona result would make the quality-versus-cost trade explicit at the moment we read a result. We have no latency measurements at all today, which is why this post makes no latency claim.

None of this is about maximizing a single number. It's about keeping the harness honest while the product, the prompts, and the underlying models all change underneath us. The day the eval becomes a thing you can game by tweaking a system prompt is the day it stops being useful.

Companion piece: why does the smallest model probe the hardest?

The result that shouldn't happen deserves its own treatment. Haiku probes significantly deeper than Opus at every step of the ladder, and a controlled turn-cap experiment shows that turn budget doesn't explain it: given three times the room to press, Opus stops anyway. Read why the smallest model probes the hardest, with the judges' own rationales and the mechanism we think is behind it.

Want to see the interviewer in action? Start a free practice session, or read why the smallest model probes the hardest.

Feedback