An evaluation answers a narrow question: did this skill produce a better result
under comparable conditions?
Routing tests and output-quality tests answer different questions. Routing asks
whether the skill should be used. Output-quality testing asks whether using it
improves the completed work.
Package contract
Keep versioned definitions with the skill:
evals/evals.json follows the Agent Skills contract:
SelfTune also supports selftune_assertions for deterministic checks such as
required text, forbidden text, regular expressions, tool calls, and JSON paths.
Paired runs
Every case runs twice in a fresh context:
with_skill uses the current SKILL.md;
without_skill receives no evaluated skill; or
old_skill uses --baseline-skill-path.
The runner copies input fixtures into each arm and sets that arm as the agent’s
working directory. It records the response, duration, token measurement, and
assertion evidence separately.
Reading the benchmark
Each iteration contains:
- per-case outputs and grading evidence;
- mean and standard deviation for pass rate, time, and tokens;
- the delta between the current skill and baseline;
- a blind A/B comparison for every case;
- assertions that always pass or always fail across both arms; and
feedback.json for human review.
Do not select a winner from one aggregate number. Read the failures, check the
grader’s evidence, and revise weak assertions before changing the skill.
A score from a different model, test set, fixture, or grading rule is not a
valid before-and-after comparison.