Install any skill in seconds. Free to start, no credit card required.
Get Started Free →This skill should be used when the user asks to "evaluate LLM output quality", "set up LLM-as-judge", "build an eval rubric", "compare model outputs pairwise", or "measure agent quality".
.claude/skills/borghei-agentic-evaluation-framework/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-04 | ✗→✓ | ▲ Improved | -8% | 0% |
| case-05 | ✗→✓ | ▲ Improved | 53% | 0% |
| case-12 | ✗→✓ | ▲ Improved | 42% | 0% |
| case-17 | ✗→✓ | ▲ Improved | 28% | 0% |
| case-18 | ✗→✓ | ▲ Improved | 41% | 0% |
> Category: Engineering > Domain: AI Engineering
Design and run trustworthy evaluations for LLM and agent outputs: pick the right grading method (programmatic check, LLM-as-judge, or human review), write a scoring rubric that judges can apply consistently, rank competing variants by pairwise comparison, and watch for the biases that quietly corrupt judge scores — position bias, verbosity bias, and self-preference. The goal is an eval that you can trust enough to ship on: calibrated against human labels, cheap enough to run on every change, and tracked alongside cost and latency so you never trade quality away by accident. This skill is model- and vendor-agnostic: it reasons about the evaluation method, not any one provider's API, and its scripts aggregate scores you have already collected — they never call a model.
Before designing or running an evaluation, confirm these inputs. If any is unknown or vague, ASK — do not assume:
criteria and weights)rubric_scorer.py absolute scoring vs pairwise_ranking.py comparison vs human-in-the-loop)Stop rule: ask only the 2-3 that most change the output. If the user says "just draft it," proceed and list your assumptions.
bashcd engineering/agentic-evaluation-framework # 1. Score outputs against a weighted rubric + check inter-rater agreement python scripts/rubric_scorer.py --data rubric_scores.json # 2. Rank competing variants from pairwise (A-vs-B) judgements python scripts/pairwise_ranking.py --data pairwise_matches.json # JSON output for piping into a dashboard or CI gate python scripts/rubric_scorer.py --data rubric_scores.json --json
| Tool | Purpose | Key Flags | |------|---------|-----------| | scripts/rubric_scorer.py | Aggregate per-criterion scores into weighted totals, per-criterion means, pass/fail vs thresholds, and an inter-rater agreement metric | --data, --json | | scripts/pairwise_ranking.py | Turn head-to-head win/loss records into a ranking via Elo + Bradley-Terry, plus a win-rate matrix | --data, --k, --base, --json |
Both scripts: Python 3 standard library only, argparse CLI, --json and human-readable output. They compute over scores you provide and never call a model. Run --help for full usage.
references/llm-judge-methodology.md).rubric_scorer.py input JSON.rubric_scorer.py and read inter_rater_agreement: low agreement means the rubric is ambiguous, not that a grader is wrong — tighten the anchors and re-score before trusting any number.--json → pass/fail), and re-run agreement periodically to catch judge drift.pairwise_ranking.py matches, using "winner": "tie" for disagreements.pairwise_ranking.py to get Elo and Bradley-Terry rankings plus the win-rate matrix; Bradley-Terry is order-independent and preferred for a fixed batch, Elo for a streaming sequence of matches.| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-11 | fail→fail | 13,461 | 9,788 | -27% | 1 | 1 | 0% | 2,023 | 3,222 | +59% | 0 | 0 | — |
case-01 | fail→fail | 20,823 | 17,780 | -15% | 1 | 1 | 0% | 3,877 | 4,309 | +11% | 0 | 0 | — |
case-02 | fail→fail | 21,699 | 17,215 | -21% | 1 | 1 | 0% | 4,219 | 4,401 | +4% | 0 | 0 | — |
case-03 | pass→pass | 16,585 | 14,175 | -15% | 1 | 1 | 0% | 2,703 | 4,087 | +51% | 0 | 0 | — |
case-04 | fail→pass | 15,798 | 4,028 | -75% | 1 | 1 | 0% | 2,613 | 2,402 | -8% | 0 | 0 | — |
case-10 | pass→pass | 13,607 | 10,943 | -20% | 1 | 1 | 0% | 2,167 | 3,498 | +61% | 0 | 0 | — |
case-05 | fail→pass | 14,585 | 9,880 | -32% | 1 | 1 | 0% | 2,190 | 3,349 | +53% | 0 | 0 | — |
case-06 | pass→pass | 14,730 | 14,440 | -2% | 1 | 1 | 0% | 2,371 | 4,003 | +69% | 0 | 0 | — |
case-07 | pass→pass | 10,990 | 8,836 | -20% | 1 | 1 | 0% | 1,720 | 3,080 | +79% | 0 | 0 | — |
case-08 | pass→pass | 12,590 | 11,738 | -7% | 1 | 1 | 0% | 2,126 | 3,805 | +79% | 0 | 0 | — |
case-09 | pass→pass | 13,366 | 11,959 | -11% | 1 | 1 | 0% | 2,014 | 3,598 | +79% | 0 | 0 | — |
case-12 | fail→pass | 8,534 | 2,778 | -67% | 1 | 1 | 0% | 1,561 | 2,219 | +42% | 0 | 0 | — |
case-13 | pass→pass | 18,410 | 13,265 | -28% | 1 | 1 | 0% | 2,999 | 3,755 | +25% | 0 | 0 | — |
case-14 | fail→fail | 17,607 | 14,046 | -20% | 1 | 1 | 0% | 2,787 | 3,810 | +37% | 0 | 0 | — |
case-15 | pass→pass | 9,257 | 7,501 | -19% | 1 | 1 | 0% | 1,502 | 2,883 | +92% | 0 | 0 | — |
case-16 | pass→pass | 13,647 | 12,008 | -12% | 1 | 1 | 0% | 2,192 | 3,669 | +67% | 0 | 0 | — |
case-17 | fail→pass | 9,685 | 2,843 | -71% | 1 | 1 | 0% | 1,701 | 2,175 | +28% | 0 | 0 | — |
case-18 | fail→pass | 17,236 | 15,075 | -13% | 1 | 1 | 0% | 3,002 | 4,225 | +41% | 0 | 0 | — |
case-19 | fail→pass | 12,427 | 2,998 | -76% | 1 | 1 | 0% | 2,136 | 2,273 | +6% | 0 | 0 | — |
case-20 | fail→pass | 5,532 | 2,371 | -57% | 1 | 1 | 0% | 927 | 2,083 | +125% | 0 | 0 | — |
case-21 | pass→pass | 14,454 | 16,480 | +14% | 1 | 1 | 0% | 2,638 | 4,812 | +82% | 0 | 0 | — |
case-22 | pass→pass | 11,664 | 15,698 | +35% | 1 | 1 | 0% | 2,207 | 4,551 | +106% | 0 | 0 | — |
case-23 | pass→pass | 13,504 | 9,498 | -30% | 1 | 1 | 0% | 2,321 | 3,406 | +47% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 23 cases were attempted. The headline lift of +30 percentage points is the difference between those two pass rates over the 23 comparable cases.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.