Skip to content

Measure Whether the Fleet's Skills Actually Trigger, Rather Than Assuming Their Descriptions Do #1447

Open

Description

@ptr727

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 the repo-worktree failure 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.

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

  1. Which harness, given none is first-party and a suite is a maintenance commitment.
  2. The prompt-set size and who authors it. Descriptions written by the same seat that writes the
    prompts will score better than they deserve.
  3. 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.
  4. 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

  1. added
    decisionA question waiting on the maintainer, alone or beside whatever else the issue carries
    on Sep 8, 2026
  2. ptr727 commented on Sep 18, 2026

    @ptr727
    OwnerAuthor

    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_eval is 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 toolchain CODESTYLE.md already sets for this repository rather than a second one. Its suite_thresholds gating 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_eval is 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-harness was 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.

  3. removed
    decisionA question waiting on the maintainer, alone or beside whatever else the issue carries
    on Sep 18, 2026
  4. ptr727 commented on Nov 1, 2026

    @ptr727
    OwnerAuthor

    Decision triage split the undecided item out of this issue into #3753, which carries the decision label. Everything else here stays as ordinary work an agent can do without the maintainer.

  5. ptr727 commented on Nov 1, 2026

    @ptr727
    OwnerAuthor

    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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions