eval-judge
Decide whether ONE answer matches its golden, and say whether you believe the golden.
Skill by malloydata
Install
Works with Claude Code, Claude apps, Codex, Cursor, Gemini CLI, GitHub Copilot, VS Code, OpenCode, Goose, Windsurf. Read the repository before you give any tool access to your data.
npx agentmarket install skill/malloydata-eval-judge
Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.
Get the weekly diff
The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.
About
Use cases: writing
Reviews
Write a reviewNo reviews yet. Installed it? Reviews come from verified installers only. How reviews work
Permissions
What this skill can do and what it asks for, from its SKILL.md. Checked Oct 25, 2026.
- Tools
- No tools found
- Secrets
- None asked for
- Install scripts
- None found
Network hosts it talks to 1
codeload.github.com· found in install command
Files it touches
~/.claude/skills/eval-judge
What's inside
- Skill name
eval-judge- Description
- Decide whether ONE answer matches its golden, and say whether you believe the golden. Read this before emitting any verdict. Covers containment, column pairing, near_match, refusals, and the gold_status judgement. Use when scoring an attempt in an evaluation run; never to conduct a run (eval-loop), diagnose a failure (eval-diagnose) or edit a model (eval-improve).
- License
- MIT
- Instructions
- 242 lines in SKILL.md · view on GitHub
Files (5)
- SKILL.md
- refusal.md · reference/
- retrieval-judge.md · reference/
- suspect-goldens.md · reference/
- writing-rubrics.md · reference/
SKILL.md (first lines)
# The judge
JUDGE_VERSION: 6
This skill IS the judge. One fresh judge subagent is spawned per attempt, with
this skill installed in its workspace and the case materials in its prompt. It
is loaded, not pasted -- so the prompt carries the case and this carries the
doctrine, and a judge that needs to read a Malloy query can reach for the
skills beside it rather than being handed a transcription.
Measured when it stopped being pasted, on the case that had oscillated
(a valued golden against a model with no trace of the concept):
pasted into the prompt match / no_match / match / match
loaded as this skill no_match x4, and the reasoning cites the rule
It costs about 2.5x per verdict, which is the price of the judge actually
reading its own rules.
Record `judge_version` and this file's git blob sha
(`git rev-parse HEAD:skills/eval-judge/SKILL.md`, or the model repo's copy) on
every verdict, so a rubric change never silently rewrites what old scores
meant.
The judge is not blind. It sees the golden. It must never be the same
subagent that answered, and it never edits anything: it returns a verdict
object and stops.
## Read one of these before you decide
This file is the decision procedure. Four situations have their own rules, and
each is a file beside this one. Read the file BEFORE emitting a verdict, not
after -- these are the cases where judging from the general rubric alone gets it
wrong, which is why they are called out rather than summarised.
| If | Read |
|---|---|
| the answer declines, or gives no value at all | `reference/refusal.md` |
| the golden itself looks wrong to you | `reference/suspect-goldens.md` |
| you are judging retrieval, not an answer | `reference/retrieval-judge.md` |
| you are AUTHORING a case rather than judging one | `reference/writing-rubrics.md` |
The first row is the one that catches people. A refusal is only exempt from
containment when `golden.kind` is `unanswerable`; against a golden that holds a
value, an answer containing none of it is `no_match` however well it reasons.
`reference/refusal.md` is the whole rule.
A third kind holds no value: `criteria`, where the case's rubric IS the key
and there is no number to contain. Grade the clauses and nothing else. Do not
manufacture a figure to check the answer against, and do not read the absence
of a value as a missing golden: a `criteria` golden is complete. Report
`gold_status` on it the same way, on the criteria rather than on a number, so
a clause that contradicts the model still surfaces.
## Answer judge
Input, all of it (a judge with only two row sets grades formatting, not
intent):
- the question, exactly as the answerer saw it
- the golden: rows or scalar, plus `canonicalQuery` when present
- the prediction: the rows the CONDUCTOR re-executed from the answerer's
`final_query` (never the answerer's self-reported rows)
- the relevant source and field definitions from the model (docs, join list)
Output, exactly this shape:
```json
{
"verdict": "match | near_match | no_match",
"confidence": 7,
"why": "one short paragraph",
"column_pairing": { "gold_col": "pred_col", ... },
"gold_status": "verified | verified_benign | suspect | verified_wrong",
"gold_note": "why, when not verified"
}
```
### Rubric
1. **Judge intent, not formatting.** The question defines what counts. A
result that answers the question in a different but faithful shape is a
match.
2. **Gold-subset containment.** The prediction must CONTAIN the gold answer.
Extra columns or benign extra context downgrade to `near_match` at worst;
they never make a containing answer `no_match`.
3. **Name the column pairing.** Pair each gold column with the prediction
column that carries the same meaning, using names, the question's role for
the value, and the values together. Never pair numeric columns by value
overlap alone: a year column is not a count column even when magnitudes
overlap. If a gold column has no counterpart, say which.
4. **Rows are a multiset.** Order matters only when the question asks for an
order. For a "top N" with possible ties, check that the boundary value is
right and every returned row legitimately qualifies; any valid tie-break is
a match.
5. **Tolerances.** Numeric equality within small rounding (relative 1e-6, or
the display precision the golden uses). A percentage and its fraction
(50 and 0.5) are the same value in different units when the pairing says
the column is a rate.
6. **Confidence 1 to 10.** 5 or lower means the case needs a human:
the conductor records `needs_human`, which is neither a pass nor a fail.
Do not inflate confidence to be helpful; a wrong confident verdict is worse
than an abstention.
7. **`near_match` is not a soft pass, and it is not a soft fail.** It is a
third outcome meaning *defensibly different*: the answer took a reading the
rubric allows but did not prefer, broke a tie the other way, or buried a
caveat that should have been plain. It is excluded from the pass rate and
from the acceptance check, exactly like `needs_human`.
So do not reach for it to avoid a hard call. If the prediction contains the
gold answer, that is `match` -- extra columns and benign extra context never
reduce it (rule 2). If it does not, and the rubric does not sanction the
reading that produced it, that is `no_match`. Use `near_match` only when you
can name the rubric clause that makes the difference defensible.
**A rubric clause cannot make a wrong VALUE defensible, and a clause that
tries is a defect in the rubric rather than a licence to you.** `near_match`
turns on the answer being right under a reading the QUESTION allows -- a tie
broken the other way, a grain the question left open, a basis the questionFrom malloydata/publisher, MIT.
More from malloydata/publisher
- 0.784score
eval-import
malloydata
Turn a list of questions into an eval set, whatever shape it arrived in: a JSONL a customer sent, a CSV, a spreadsheet export, a markdown doc, an email…
SkillAFreshness: A★ 118Claude Code +9 - 0.784score
malloy-powerbi-review
malloydata
Move a Power BI semantic model (TMDL, PBIP, or .pbix) onto Malloy - read their model, transpile its DAX, and prove the numbers match.
SkillAFreshness: A★ 118Claude Code +9 - 0.784score
eval-improve
malloydata
Make the smallest safe edit that closes a diagnosed gap the model repo owns: a Malloy model edit, or a package skill under skills/.
SkillAFreshness: A★ 118Claude Code +9 - 0.784score
fix-scan-finding
malloydata
Fix a CRITICAL Trivy finding that is failing CI in this repo (a vulnerability, misconfiguration, or secret from security-scan.yml or image-scan.yml), or add…
SkillAFreshness: A★ 118Claude Code +9 - 0.784score
eval-diagnose
malloydata
Diagnose why a scored answer failed and who owns the fix, then cluster the failures by shared root cause.
SkillAFreshness: A★ 118Claude Code +9 - 0.784score
eval-answer
malloydata
Score one analytical answer against a verified golden, and score which of the entities the golden depends on retrieval delivered to the answerer.
SkillAFreshness: A★ 118Claude Code +9 - 0.779score
malloy-getting-started
malloydata
First steps for using a Malloy Publisher deployment through its MCP tools.
SkillAFreshness: A★ 118Claude Code +9 - 0.779score
malloy-analysis-report
malloydata
Combine validated Malloy queries into a report (a linear report, read top to bottom).
SkillAFreshness: A★ 118Claude Code +9 - 0.779score
malloy-materialization
malloydata
Add, confirm and debug Malloy Persistence materializations in a package - persist an expensive source so queries read a pre-built table, in the source's own…
SkillAFreshness: A★ 118Claude Code +9 - 0.779score
malloy-review
malloydata
Malloy semantic-model code review.
SkillAFreshness: A★ 118Claude Code +9 - 0.779score
eval-report
malloydata
Write the summary a person reads after an evaluation run: what ran, what it scored, which failures were the MODEL and which were the EVAL itself (out of…
SkillAFreshness: A★ 118Claude Code +9 - 0.779score
malloy-document
malloydata
Add documentation with #(doc) tags to Malloy models so fields and sources are described in plain language.
SkillAFreshness: A★ 118Claude Code +9
Signals
- Stars
- 118
- Forks
- 31
- Open issues
- 106
- Last commit (this folder)
- Oct 15, 2026 (14 days ago)
- Last release
- Oct 18, 2026 (10 days ago)
From GitHub (fetched Oct 24, 2026).
Details
- License
- MIT
- Repository
- github.com/malloydata/publisher
- First seen
- Oct 24, 2026
- Last checked
- Oct 24, 2026
- Source
- GitHubgithub-graphql
More from malloydata
- 0.784score
eval-import
malloydata
Turn a list of questions into an eval set, whatever shape it arrived in: a JSONL a customer sent, a CSV, a spreadsheet export, a markdown doc, an email…
SkillAFreshness: A★ 118Claude Code +9 - 0.784score
eval-answer
malloydata
Score one analytical answer against a verified golden, and score which of the entities the golden depends on retrieval delivered to the answerer.
SkillAFreshness: A★ 118Claude Code +9 - 0.784score
eval-diagnose
malloydata
Diagnose why a scored answer failed and who owns the fix, then cluster the failures by shared root cause.
SkillAFreshness: A★ 118Claude Code +9 - 0.784score
fix-scan-finding
malloydata
Fix a CRITICAL Trivy finding that is failing CI in this repo (a vulnerability, misconfiguration, or secret from security-scan.yml or image-scan.yml), or add…
SkillAFreshness: A★ 118Claude Code +9 - 0.784score
eval-improve
malloydata
Make the smallest safe edit that closes a diagnosed gap the model repo owns: a Malloy model edit, or a package skill under skills/.
SkillAFreshness: A★ 118Claude Code +9 - 0.784score
malloy-powerbi-review
malloydata
Move a Power BI semantic model (TMDL, PBIP, or .pbix) onto Malloy - read their model, transpile its DAX, and prove the numbers match.
SkillAFreshness: A★ 118Claude Code +9
Cite this page
eval-judge skill. Agent Mart. https://agentmart.dev/skills/malloydata-eval-judge (last updated 2026-10-24)