Judgewright
calibration instrument · in-browser workerCalibrate your LLM judge against human raters — chance-corrected agreement, confusion heatmaps, and failure inspection with zero server egress.
Drop your verdict file (.jsonl / .csv)
Parsed locally in Web Worker · zero server egress
No verdict data loaded
Load or paste verdicts in Step 1 to generate the reliability verdict.
No matrix available
Load or paste verdicts in Step 1 to generate the confusion matrix and reliability metrics.
Load verdicts first in Stage 1.
Load verdicts first in Stage 1.
Load verdicts first in Stage 1.
Why Judgewright
Judging a judge is usually done in a spreadsheet that stops at raw accuracy, or on a platform that wants your evaluation set uploaded. Judgewright keeps the arithmetic — chance-corrected agreement, the deflation against raw agreement, reproducible error bars — inside your browser, off the main thread, with no account and no upload.
| Capability | Judgewright | Spreadsheet | Hand-rolled script | Eval platform |
|---|---|---|---|---|
| Privacy & ads | 100% in-browser · zero ads | Stays local, no statistics | Local scripts, drift-prone | Uploads your eval set |
| Chance correction | κ and α with the agreement-to-κ deflation | Raw accuracy only | Whatever you remembered to implement | Accuracy dashboards |
| Uncertainty | Seeded bootstrap CIs, byte-reproducible | None | Only if you wrote it yourself | Aggregate significance claims |
| UI stays responsive | Off-thread worker · watchdog · honest fallback | n/a | Blocks the tab on large sets | Server-bound round trips |
| Reproducibility receipt | Every number carries one | Not available | Not available | Not available |
| Account required | Not required | Not required | Not required | Required |
Reading a verdict set, and reading a reliability number
The input shapes Judgewright accepts, the column aliases it maps automatically, and the arithmetic behind chance-corrected agreement — written so a skeptic can recompute every figure from the paste alone.
The verdict row Judgewright reads
One JSON object per example, one example per line. Only three fields are required: an id, what the judge said, and what the humans said. Everything else — critiques, scores, extra raters — is optional and only unlocks more of the report.
{"example_id":"ex-001",
"judge_label":"pass", // what your judge emitted
"human_label":"pass", // what the human(s) said
"judge_critique":"optional", // shown side-by-side in the table
"human_critique":"optional",
"judge_score":0.93, // optional, in [0,1]
"human_labels":["pass","pass"] // optional: ≥2 raters unlock the human ceilingFrequently answered questions
What Judgewright measures, how it keeps your verdicts in the browser, why raw agreement is not the headline, and how to reproduce every number it prints.