Repository navigation
Description
The fleet ships 24 skills whose description frontmatter decides whether they fire, and nothing
measures whether they actually do. Every description here has been hand-tuned against intuition,
and two known failures say the tuning is not reliable on its own: a skill's procedure losing to a
generic session instruction, and repo-worktree needing its rule re-learned as "start every task
in its own worktree" after the skill itself did not surface it at task start.
A skill that does not trigger is indistinguishable, from inside a session, from a skill that does
not exist. That is the failure this would measure.
What the measurement is
Skill activation as a classification problem, one labeled prompt set per skill, scored as precision
and recall.
- Recall is the under-trigger problem: of the prompts this skill owns, how many actually fire
it. This is therepo-worktreefailure above. - Precision is the over-trigger problem: when it does fire, how often it should have. This is
what a suite catches that no amount of reading a description does, because a description written
to fire more reliably fires on its neighbours' prompts too. - Negative prompts are the part most easily skipped and the reason the suite is worth building:
prompts inside the fleet's domain that no skill should own. Without them a description can be
widened until recall is perfect and the skill fires on everything.
Prompts must be realistic user phrasings rather than paraphrases of the description, or the suite
measures string similarity instead of triggering.
Candidate harnesses
None is an Anthropic project, so "official" is not available here and the choice is a judgment
about maintenance risk rather than a lookup.
UiPath/coder_eval: YAML config, one success criterion
per skill per row, aggregates precision, recall, F1 and a confusion matrix, and gates a build on
suite_thresholdssuch as a recall minimum. Published to PyPI. The writeup behind it is
https://coder-eval.com/blog/does-your-claude-skill-trigger and its case study ran 1,001 prompts
over 20 skills with roughly 50 negatives, which is close to this fleet's shape.adewale/skill-eval-harness: paired variants,
trace artifacts, runner adapters.- OpenAI's eval-skills writeup for the method
rather than as a runnable harness. - SkillTester benchmarks utility and security of agent skills,
a different question, listed so it is not mistaken for this one.
Scope boundary, so this is not confused with the reviewer question
This measures triggering in an agent that already loads the skills tree, which is Claude Code,
Codex and opencode. It says nothing about whether GitHub's hosted Copilot reviewer reads
.github/skills/ at all, because every harness here drives a local agent that is handed the
directory. That question needs a live review and is being measured separately under #1321.
Why it is worth deciding now
#1321's Option 1 retires four carried documents and keeps .github/skills/ as the surface that
carries the rules a reviewer and an on-host agent must honor. That option is only sound if the
skills reliably fire. Today that is an assumption, and this issue is what would turn it into a
number.
Open questions
- Which harness, given none is first-party and a suite is a maintenance commitment.
- The prompt-set size and who authors it. Descriptions written by the same seat that writes the
prompts will score better than they deserve. - Cadence and cost. A four-figure prompt suite on every pull request is not affordable, so this is
plausibly a manual gate before a skill description changes, or a scheduled run, rather than a
pull request check. - Which model tier the suite runs against, since triggering is a model behavior and a result on
one tier does not transfer to another.
Activity
ptr727 commentedon Sep 18, 2026
Decision (ptr727, 2026-09-18): adopt
UiPath/coder_eval, and keep the labeled prompt set in a harness-neutral form in this repository.This settles open question 1, which harness. Open question 2, the prompt-set size and who authors it, is not settled here and stays with the implementation.
The two halves of this work have different lifetimes, and the choice is made on that rather than on the harnesses' feature lists. The labeled prompt set, realistic phrasings per skill plus the negatives, is where the judgment goes and is what gets maintained for years. The harness is a runner and a scorer around it.
coder_evalis the runner because it answers the question in the form this issue asks it, precision, recall, F1 and a confusion matrix naming which neighbouring skill a prompt fired instead, rather than in traces a reader then has to interpret. It is Python on PyPI, which is the toolchainCODESTYLE.mdalready sets for this repository rather than a second one. Itssuite_thresholdsgating is the same shape as every other fleet gate. And its published case study, 1,001 prompts over 20 skills with roughly 50 negatives, is close enough to this fleet's 24 skills that the shape is known to work at this size.The maintenance risk this issue names is real, and the answer is to design around it rather than to choose against it. The prompts are committed as this repository's own data, one row per prompt carrying the skill it should fire, and
coder_evalis what reads that data. If it goes unmaintained, a replacement reads the same rows and the expensive half survives the swap. That is the condition on this decision rather than a note beside it: a prompt set authored into a harness-specific shape does not satisfy it.adewale/skill-eval-harnesswas not chosen because it inverts that trade, more per-prompt visibility in exchange for authoring against its own shape. A hand-rolled scorer was not chosen because the confusion matrix is the part worth having and it is the part a hand-rolled scorer is least likely to grow.ptr727 commentedon Nov 1, 2026
Decision triage split the undecided item out of this issue into #3753, which carries the
decisionlabel. Everything else here stays as ordinary work an agent can do without the maintainer.ptr727 commentedon Nov 1, 2026
Maintainer answer to the split decision #3753 (decision triage, 2026-11-01): Option 1: a small blind pilot. Start with the skills that have known failures. Use about 10 owned and 5 near-neighbour prompts per skill plus a shared in-domain negative set, authored by a seat that never sees the description text and reviewed by the maintainer for realism. Run manually on any description change and in full on a spec/model-tiers.json change, at frontier and standard.