Skill Eval
Overview
This skill owns the repository's skill-eval test operation through
skills/skill-eval/scripts/eval_runner.py. The runner keeps executor and grader
separate, records artifacts and metrics, and aggregates with_skill versus
without_skill results. Never hand-run prompts, hand-record results, let one
agent execute and grade the same answer, or estimate metrics.
Critical CLI Contract
For any command-drafting response, reproduce these exact shapes before adding
explanation:
| Purpose |
Command shape |
--eval-id |
| Static validation |
validate <suite-json> |
Forbidden |
| Partial diagnostic |
run <suite-json> ... --eval-id E17 |
Allowed |
| Full closing run |
run <suite-json> ... |
Omitted; do not enumerate all ids |
| Existing-result report |
report <iteration-dir>, optionally --compare <other-iteration-dir> |
Forbidden |
There is no --evals or --iteration-dir alias. validate ... --eval-id and
filtered full-suite substitutes are invalid.
validate also prints delivery-mode warnings: performed-action wording such
as Writes … or Adds … in an expectation whose prompt is response-only.
Warnings never fail validation and never block a run; they are eval-design
signals for the quality owner, not skill defects.
A partial diagnostic must remain visibly non-closing: unknown or empty ids fail
before iteration creation or provider launch; manifests and benchmarks record
selected ids and full-suite size; benchmark.md says REVIEW REQUIRED; and the
skill, prompt, assertions, fixtures, and proof path must be frozen before a later
unfiltered closing run. Keep the earlier official aggregate unchanged when an
artifact-level correction is only diagnostic.
When To Use
Use this skill for:
- validating, running, grading, aggregating, or reporting a suite under
evals/<skill-name>/;
- verifying a comparative result before reporting a delta;
- deciding runner workspace, provider/model passthrough, run bounds, artifact
capture, metric provenance, or executor/grader proof boundaries.
Do not use it for general skill creation or for deciding what skill/eval contract
to change from a result. This skill owns execution and result verification, not
the quality-change decision.
Eval Run Authorization
Do not launch eval_runner.py run, provider subprocesses, or a new iteration
unless the current user explicitly asks to run evals, run a benchmark, or
execute the runner. Editing a skill, inspecting results, validating a suite, or
proving quality does not implicitly authorize a fresh run.
When fresh execution is not authorized, use static validation or existing
artifacts as appropriate and report evals not run or an equivalent absence
status. Mark rerun-dependent improvement, regression, token, timing, and
reliability claims Unproven.
Executor, Grader, And Workspace Invariants
- The executor receives the task without assertions. A fresh grader receives the
recorded output and assertions and returns a structured verdict.
- Use the shared runner so this separation is code-enforced; there is no inline
grading shortcut.
- Keep definitions under
evals/<skill-name>/ and generated runs under
evals/<skill-name>/workspace/<agent>/.
with_skill uses the authoritative skills/<skill-name>/SKILL.md; never use
.agents/skills, .claude/skills, a host skill tool, or a cached copy.
- Provider executors run in isolated copied repositories; graders run in
separate empty working directories. Do not work around sandbox setup failure
by executing in the source checkout.
- Generated workspaces are local artifacts and are not committed unless the user
explicitly asks.
Detailed Runner Contract
Read references/runner-and-result-contract.md before:
- executing
run or drafting a detailed run command sequence;
- changing or interpreting provider/model, preflight, sandbox, fixture,
artifact-capture, change-manifest, grader-output, stderr, or metric behavior;
- diagnosing
REVIEW REQUIRED, failed/unparseable/timeout cells, dirty fixtures,
scored 0%, candidate-below-baseline, or missing metrics;
- reporting a benchmark, corrected reading, exclusion, or comparative claim.
That reference is mandatory when its conditions apply and retains the complete
runner, artifact, provider, metric, and result-verification contract.
When drafting a full-suite run sequence, the response must preserve the
reference's literal positional suite path and flags, keep the requested configs
in one runner invocation, and include the result-verification and reporting
fields from that reference. Do not reconstruct the CLI or closure checklist from
memory.
Result Closure
After every authorized run:
- Read
benchmark.md, benchmark.json, error_run_count, and sanity status.
- Start from the
Failed assertions section of benchmark.md, then inspect
the recorded executor and grader outputs for every flagged cell before
attributing the failure to the skill.
- Keep infrastructure/grader failures and diagnostic corrections separate from
the official aggregate.
- Report agent and model, full or selected coverage, configs/runs, scored and
excluded counts, pass rates/delta, and all anomalies or
no anomalies.
- Do not claim improvement, regression, or a clean delta until flagged
anomalies are explained and the required closing evidence exists.
Local Snapshots And Release
Operate on tracked skills/<skill-name>/ packages. Managed .agents/skills/
and .claude/skills/ copies are read-only unless the user explicitly requests
the repository sync workflow. Do not bump skill versions or assign a release
version during eval work; record notable changes under ## [Unreleased] until a
release is explicitly requested.
1---2name: skill-eval3description: Use when running, grading, aggregating, or reporting repository skill evals with skills/skill-eval/scripts/eval_runner.py, when verifying a with_skill/without_skill result before reporting it, or when deciding eval workspace placement, executor/grader separation, model passthrough, or metric capture for an eval run. Do not use for editing the eval suite schema or general skill creation.4---56# Skill Eval78## Overview910This skill owns the repository's skill-eval test operation through11`skills/skill-eval/scripts/eval_runner.py`. The runner keeps executor and grader12separate, records artifacts and metrics, and aggregates `with_skill` versus13`without_skill` results. Never hand-run prompts, hand-record results, let one14agent execute and grade the same answer, or estimate metrics.1516## Critical CLI Contract1718For any command-drafting response, reproduce these exact shapes before adding19explanation:2021| Purpose | Command shape | `--eval-id` |22| --- | --- | --- |23| Static validation | `validate <suite-json>` | Forbidden |24| Partial diagnostic | `run <suite-json> ... --eval-id E17` | Allowed |25| Full closing run | `run <suite-json> ...` | Omitted; do not enumerate all ids |26| Existing-result report | `report <iteration-dir>`, optionally `--compare <other-iteration-dir>` | Forbidden |2728There is no `--evals` or `--iteration-dir` alias. `validate ... --eval-id` and29filtered full-suite substitutes are invalid.3031`validate` also prints delivery-mode warnings: performed-action wording such32as `Writes …` or `Adds …` in an expectation whose prompt is response-only.33Warnings never fail validation and never block a run; they are eval-design34signals for the quality owner, not skill defects.3536A partial diagnostic must remain visibly non-closing: unknown or empty ids fail37before iteration creation or provider launch; manifests and benchmarks record38selected ids and full-suite size; `benchmark.md` says `REVIEW REQUIRED`; and the39skill, prompt, assertions, fixtures, and proof path must be frozen before a later40unfiltered closing run. Keep the earlier official aggregate unchanged when an41artifact-level correction is only diagnostic.4243## When To Use4445Use this skill for:4647- validating, running, grading, aggregating, or reporting a suite under48 `evals/<skill-name>/`;49- verifying a comparative result before reporting a delta;50- deciding runner workspace, provider/model passthrough, run bounds, artifact51 capture, metric provenance, or executor/grader proof boundaries.5253Do not use it for general skill creation or for deciding what skill/eval contract54to change from a result. This skill owns execution and result verification, not55the quality-change decision.5657## Eval Run Authorization5859Do not launch `eval_runner.py run`, provider subprocesses, or a new iteration60unless the current user explicitly asks to run evals, run a benchmark, or61execute the runner. Editing a skill, inspecting results, validating a suite, or62proving quality does not implicitly authorize a fresh run.6364When fresh execution is not authorized, use static validation or existing65artifacts as appropriate and report `evals not run` or an equivalent absence66status. Mark rerun-dependent improvement, regression, token, timing, and67reliability claims `Unproven`.6869## Executor, Grader, And Workspace Invariants7071- The executor receives the task without assertions. A fresh grader receives the72 recorded output and assertions and returns a structured verdict.73- Use the shared runner so this separation is code-enforced; there is no inline74 grading shortcut.75- Keep definitions under `evals/<skill-name>/` and generated runs under76 `evals/<skill-name>/workspace/<agent>/`.77- `with_skill` uses the authoritative `skills/<skill-name>/SKILL.md`; never use78 `.agents/skills`, `.claude/skills`, a host skill tool, or a cached copy.79- Provider executors run in isolated copied repositories; graders run in80 separate empty working directories. Do not work around sandbox setup failure81 by executing in the source checkout.82- Generated workspaces are local artifacts and are not committed unless the user83 explicitly asks.8485## Detailed Runner Contract8687Read `references/runner-and-result-contract.md` before:8889- executing `run` or drafting a detailed run command sequence;90- changing or interpreting provider/model, preflight, sandbox, fixture,91 artifact-capture, change-manifest, grader-output, stderr, or metric behavior;92- diagnosing `REVIEW REQUIRED`, failed/unparseable/timeout cells, dirty fixtures,93 scored `0%`, candidate-below-baseline, or missing metrics;94- reporting a benchmark, corrected reading, exclusion, or comparative claim.9596That reference is mandatory when its conditions apply and retains the complete97runner, artifact, provider, metric, and result-verification contract.9899When drafting a full-suite run sequence, the response must preserve the100reference's literal positional suite path and flags, keep the requested configs101in one runner invocation, and include the result-verification and reporting102fields from that reference. Do not reconstruct the CLI or closure checklist from103memory.104105## Result Closure106107After every authorized run:1081091. Read `benchmark.md`, `benchmark.json`, `error_run_count`, and sanity status.1102. Start from the `Failed assertions` section of `benchmark.md`, then inspect111 the recorded executor and grader outputs for every flagged cell before112 attributing the failure to the skill.1133. Keep infrastructure/grader failures and diagnostic corrections separate from114 the official aggregate.1154. Report agent and model, full or selected coverage, configs/runs, scored and116 excluded counts, pass rates/delta, and all anomalies or `no anomalies`.1175. Do not claim improvement, regression, or a clean delta until flagged118 anomalies are explained and the required closing evidence exists.119120## Local Snapshots And Release121122Operate on tracked `skills/<skill-name>/` packages. Managed `.agents/skills/`123and `.claude/skills/` copies are read-only unless the user explicitly requests124the repository sync workflow. Do not bump skill versions or assign a release125version during eval work; record notable changes under `## [Unreleased]` until a126release is explicitly requested.