evals
Skill61 starsChanged 7 days agoMITView on GitHub
Author an Interlock eval case from an observed model-behaviour failure, and read a completed eval results run. Use when you have a reproduced failure — an archived proposal, a changelog entry, a run artifact, or a transcript — worth regression-testing against a real model, or when an eval run has finished and you need to know whether it is a regression, run-to-run variance, or no signal. Authoring needs cited evidence; the verdict comes from `interlock evals triage`, never from your own reading.
7 other projects use a version of this.
Adopted by
Most recently taken up by
- scottlivingston/claude-skillstheir own version, first seen Nov 8, 2026
- jstilb/ai-assistanttheir own version, first seen Nov 1, 2026
- rterakedis/leanwheel-skillstheir own version, first seen Oct 17, 2026
- muggl3mind/career-managertheir own version, first seen Oct 1, 2026
- Troy-LL/Unfurnishedtheir own version, first seen Sep 25, 2026
- johnviklund/agent-skillstheir own version, first seen Sep 12, 2026
Other versions7 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 7
- muggl3mind/career-manager★ 24same name
- johnviklund/agent-skills★ 2same name
- rterakedis/leanwheel-skills★ 2same name
- scottlivingston/claude-skills★ 1same name
- Troy-LL/Unfurnished★ 1same name
- jstilb/ai-assistant★ 0same name
- mj-deving/pai-skills★ 0same name
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository16 other files it gives its agents.
- .claude/CLAUDE.mdCLAUDE.md
- bootstrapSkill
- commitSkill
- dispatchSkill
- docs-digestSkill
- explain-codeSkill
- exploreSkill
- fix-testsSkill
- graphSkill
- manual-test-planSkill
- reportSkill
- review-artifactsSkill
- review-codeSkill
- settleSkill
- shipSkill
- specSkill
The file
We split this skill into the rules it gives an agent
10 rules. 0 are common, 8 are distinctive, and 2 are very specific to this project.
0
Common
Most of the 7 edited versions we read keep these.
8
Distinctive
This author's own choices. Worth a look.
2
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 44
If no observed failure is offered, say so and stop: Do not author a speculative case.
- Very specific: line 56
Every case pins schema_version and lives in its own directory under evals/ — never under skills/, agents/, commands/ or workflows/, which …
- Distinctive: line 69
Pick the cheapest grader that expresses the assertion: If the assertion is set-membership, tool-invocation, file-existence, or ordering …
- Distinctive: line 96
When triage reports a regression, explain which recent change to the surface under test plausibly caused it — the prompt sentence, the …
- Distinctive: line 101
When triage reports variance, report it as variance and say what would confirm it (further runs failing the same judged grader).
- Distinctive: line 103
When triage reports no signal — a partial run, an interrupted run, a rejected credential — report that evals could not run.
- Distinctive: line 107
Never restate, override, or soften a verdict triage gave you.
- Distinctive: line 134
Use the none form when you read no transcript — never omit the line, because a reader cannot otherwise tell an unexamined result from an …
- Distinctive: line 142
When a case fails, your output is a report: the case, the grader that failed, and the sentence in the surface under test that plausibly …
- Very specific: line 156
When the harness refuses because early access is not enabled, report the prerequisite and where to set it (the environment, or the CI job's …
“Common” is measured: kept by at least 6 in 10 of the 7 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
This skill covers the two jobs the eval harness does not do for you: turning an
observed failure into a case, and reading a finished run. Everything with a
correct answer — is this a regression? — belongs to interlock evals triage, not
to you. Your job is evidence, grader choice, and explanation.
1. Authoring a case — only from an observed failure
A case regression-tests a reproduced failure: a model read correct instructions and did the wrong thing anyway. Before you write anything, require the evidence:
- an archived proposal (
openspec/changes/archive/*/proposal.md## Why), - a
CHANGELOG.mdentry, - a run artifact or a transcript,
- a captured skeleton —
interlock evals capture --run <runId> [--task <id>] --out <dir>turns a recorded ship-run trajectory into a case draft whose provenance names the trajectory and the events it was derived from, or - a
file:linespan in the prompt or skill under test that shows the surface the model talked past.
A captured skeleton is a draft, not a finished case. It is admissible
evidence because it is a run artifact and a reader can follow its citation back
to the trajectory. But every value capture derived rather than read carries a
CONFIRM marker — the grader pattern when no value could be quoted, and the
prompt when the trajectory recorded none. Resolve every CONFIRM marker
against the cited trajectory, or ask the user, before authoring the case. Never
author a case that still carries one, and never move a skeleton into evals/
unresolved: an unconfirmed pattern is a regression test for a failure nobody has
shown happened.
If no observed failure is offered, say so and stop. Do not author a
speculative case. A suite of hypotheticals teaches the team to ignore it, which
is the one thing an advisory gate cannot survive. A case that only duplicates an
existing node:test assertion is refused for the same reason — the unit suite
already covers it deterministically.
Record the citation in the case (provenance: in case.yaml, plus a comment
explaining what went wrong). The structural gate test/evals.test.mjs fails a
case with no provenance.
The case files
Every case pins schema_version and lives in its own directory under evals/ —
never under skills/, agents/, commands/ or workflows/, which would shadow
a component. Follow evals/handoff-status-enum/ as the format exemplar; it was
written to establish these conventions. Where a case needs a fixture workspace,
use case.yaml with context.scaffold_script and run with --scaffold;
otherwise the same case.yaml shape without it.
2. Choosing a grader — cheapest that expresses the assertion
The harness has six grader types. Four are free and deterministic — regex,
tool_used, tool_order, file_exists — and two call a judge — llm,
baseline.
Pick the cheapest grader that expresses the assertion. If the assertion is
set-membership, tool-invocation, file-existence, or ordering shaped, it is
deterministic and a judged grader is the wrong tool — more expensive, and prone
to run-to-run variance triage will (correctly) refuse to call a regression. The
strongest seed case, handoff-status-enum, needs no judge at all: the status is
in a fixed set, so a regex decides it.
When you do reach for a judged grader, state in the grader body which part of the assertion could not be expressed deterministically. If you cannot name that part, the assertion was deterministic and you chose the wrong grader.
A case you intend to run per-pull-request tag smoke, and a smoke case uses
only deterministic graders — the gate enforces this. A grader that asserts a
skill fired (tool_used: Skill) is marked arm: with-only: it is a
plugin-fired indicator, reported against the baseline arm, not part of the score.
3. Reading a run — triage owns the verdict
Given a finished results file, get the classification from
interlock evals triage --results <file>, do not derive it yourself. Its exit
code is the verdict: 0 pass, 1 regression, 2 no signal, 3 configuration.
This is deliberate — the one gate whose rule a model could re-argue on each run
would be exactly the wrong gate to ship in a suite built to catch models
re-arguing rules.
Your contribution is explanation, not classification:
- When triage reports a regression, explain which recent change to the surface under test plausibly caused it — the prompt sentence, the skill edit, the contract change. Do not reclassify it as variance because it looks flaky; triage already separated a single judged dip (variance) from a judged majority (regression).
- When triage reports variance, report it as variance and say what would confirm it (further runs failing the same judged grader).
- When triage reports no signal — a partial run, an interrupted run, a rejected credential — report that evals could not run. Do not present any case as passing or failing.
Never restate, override, or soften a verdict triage gave you.
Read a transcript before you explain a judged case
For every case whose score depends on a judged grader, read at least one transcript for that case before you write your explanation of it. A score is the outcome; the trace is the only place the cause is visible. The failure this closes is a model that satisfied a judge by narrowing the task rather than by doing it — the score moves, every other step in the loop sees a number, and nobody sees why.
Reading is for explanation and never for reclassification. If the transcript suggests a different classification than triage produced, report what you saw in the trace and leave the verdict alone — the rule above still holds without exception.
A run whose graders are all deterministic needs no transcript: the tool trace the grader already read is the evidence.
Your report carries a transcripts read: line, always present:
transcripts read: <case>/<id>, <case>/<id>
transcripts read: none
transcripts read: unavailable, because <what stopped you reading one>Use the none form when you read no transcript — never omit the line, because a reader cannot otherwise tell an unexamined result from an examined one. Use the unavailable, because … form when the run produced no readable transcript, and in that case do not present your explanation as transcript-grounded. Degradation is spoken.
4. A failing case is a report, never a prompt edit
When a case fails, your output is a report: the case, the grader that failed, and the sentence in the surface under test that plausibly caused it. Do not edit the skill, shared contract, agent definition, or prompt under test to make a case pass. Changing the surface under test is a separate, explicit decision the user makes — silently editing a prompt to turn a case green is exactly the "edit the test until it passes" failure the suite exists to prevent, one layer up.
5. When the harness is gated
The host command claude plugin eval prints that it is currently in early access and
does nothing until CLAUDE_CODE_WALNUT_SPIRE=1 is set in the environment — never
in committed .claude/settings.json, which would produce a suite that looks
configured and does not run.
When the harness refuses because early access is not enabled, report the
prerequisite and where to set it (the environment, or the CI job's env:
block). Do not report an empty run as a passing suite. Authoring a case and
triaging an existing results file both work without the harness enabled — only
running a suite needs it.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

