Compile
JD and resume become atomic requirement and evidence lines, then a gap diff — every gap citing exactly the spans it was built from.
Kubernetes orchestration at scale
Rehearsal compiler · every claim carries a receipt
Paste a job description and a resume. DryRun diffs them into evidenced gaps — every gap citing the JD line that demands it and the resume line that’s silent — then compiles the questions those gaps predict, and debriefs you afterwards by quoting your own answers back to you.
How it works
Compile
JD and resume become atomic requirement and evidence lines, then a gap diff — every gap citing exactly the spans it was built from.
Kubernetes orchestration at scale
Plan
Up to six questions, compiled from the gaps — conceptual for what’s missing, behavioral with STAR hints for what’s weakly evidenced.
Tell me about a time you diagnosed a production outage under time pressure.
Debrief
Every “covered” claim quotes the transcript verbatim, re-located mechanically. What failed to re-locate is dropped, never displayed.
The four stages
Paste a job description and a resume. Every gap cites the JD line that demands it and the resume line that’s silent.
Up to six questions compiled from the gaps, each one traceable back to the gap that produced it.
Answer them live against an AI interviewer that follows up on what you actually said, capped at two follow-ups.
What each answer covered and missed — every covered claim quoting your own words back to you.
A sample debrief · static excerpt
Not a live session — a fixed excerpt from one question, shown to demonstrate the shape of the feedback: what got covered, quoted; what got missed, named without a quote to invent.
q-2 · Tell me about a time you diagnosed a production outage under time pressure.
Names a concrete diagnostic action taken under pressure.
Didn’t say how long the outage lasted or how the fix was verified afterward — no quote is shown here because there is nothing in the transcript to cite.
The receipts
Every target below was locked on 26 Jul, before any of this was built. The engine model was upgraded on 31 Jul only after passing these same gates — the two “not measured” rows are exactly that, not hidden misses.
| Metric | Target | Measured |
|---|---|---|
| Displayed-question grounding | 100% by construction (≥95% pre-guard) | pre-guard 29/29 across 5 pairs (30/30 on the adopted engine); displayed rate guard-enforced |
| Displayed debrief quotes valid | 100% by construction · dropped-rate <10% | every quote a literal slice of the candidate's turn, 0 dropped (live sessions, disclosed n) |
| Gap-set consistency (20 runs/pair) | mean pairwise Jaccard ≥0.6 | 0.881 / 0.770 on the adopted engine (0.794 / 0.900 baseline) |
| Gap precision / recall vs gold | ≥0.8 / ≥0.7 | not measured — descoped 30 Jul; protocol + review sheets committed, CI-green |
| Cost (compile / session) | ≤$0.05 / ≤$0.25 median | not captured — token counts reported; ≈$0.035/compile derivable at posted rates |
| Compile latency (p50) | ≤60s | 16.6–19.1s fixture · 40–45s real JD, production 31 Jul (was 99.65s / 146.3s) |
| Plan latency | ≤20s | 9.4–11.0s production 31 Jul (was 33.4s) |
| First-turn token | ≤3s | 6.9–9.2s — still missed after a 41% prompt trim; partner-gateway-bound, restated |
| Debrief latency | ≤45s | 6.9s production 31 Jul (22.7s baseline) |
| Video quote→timestamp exact mapping | ≥90% | lane no-go'd at its pre-committed gate; substrate dormant, 14 passing tests |
| Zero-shot baseline uncited rate | reported side-by-side | 0.0% audited re-run (100/100 verbatim) · 1.03% on 28 Jul — see the README |
Final as of 31 Jul, from evals/results/ and production probes — targets were locked before building; the full table with sources lives in the README.
Questions
Because an unprovable number is worse than no number. The debrief describes what an answer covered and what it missed, quoting your own words for every covered claim — never a score, a grade, or a readiness percentage.
Nowhere, until you say so. The JD and resume you paste are held in your browser session; compiling sends them to the model that reads them, and nothing stores a copy ambiently. The one exception is the explicit “Save & share debrief” button, which writes a single debrief you choose to publish — anyone with the link can view it.
Agnes AI runs the interviewer lane by default. If a request to Agnes fails, the session automatically fails over to OpenAI, and the transcript labels which one actually answered — never silently.
A verbatim span from a source document or transcript that’s mechanically re-checked to still match it. If a claim can’t be tied to one, it’s demoted to a visible dropped count instead of being shown.
Paste a job description and a resume. Nothing is graded, nothing is displayed without a receipt.
Compile your interview →