You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Concise skills rollout: x (1 skills, 1 model-invoked) #6618
Part of #6476. Rewrite x's skills to the skill criteria in one draft PR, following the per-plugin runbook (/playbooks:skill-authoring, reference/rewrite-a-plugin.md). The runbook and the rewrite protocol it cites decide what ships; this issue holds only what is specific to the plugin.
The plugin today
Skills: read.
Outcome eval cases under evals/: 0. Probe files under probes/: 0.
Path (owner decision 2026-10-18)
The 1-skill tail takes the description-only path, measured by trigger probes (decision). Only the read description changes; the body stays as on main. Eval spend for the probe runs falls under the prepaid-credit pre-approval, with the batch-1 ceiling of --max-cost-usd 5 per pass.
Done when
git diff --name-only origin/main -- plugins/x/skills/ lists only plugins/x/skills/read/SKILL.md, and its diff touches only the description frontmatter line.
bash plugins/skill-quality/scripts/measure-invocation.sh validate plugins/x/probes exits 0 on the committed frozen probe file plugins/x/probes/read.json.
The PR body carries the before and after trigger rates from held-out probes (measure-invocation.sh emit-plugin-eval, run with --ablation none on each target model) and the measure-invocation.sh compare output; the after description ships only when its rate is not below the before rate outside noise, otherwise the before description stays.
Released by the owner's HITL session (2026-10-24, C12): it waited only on a removed gate. Intake triage re-runs on it to set its fields, then admission takes it.
Held again by the owner's HITL session (2026-10-24): my release earlier today was wrong, because it needs trigger-probe runs (claude plugin eval) to measure the description; the issue lane cannot run it: a lane run executes only the verify-scripts listed in docs/conventions/pr-pipeline.yaml under dontAsk, so it cannot start claude, claude plugin eval or a workflow dispatch. Run it from an eval-capable session (the batch-1 protocol).
Parked for capacity, not for the owner. This rollout's remaining work is the measured eval passes of the batch-1 protocol, which the issue lane cannot run: it cannot start claude or claude plugin eval (see the lane's escalation on #6585, https://github.com/melodic-software/claude-code-plugins/actions/runs/40186335064). It waits on the plugin eval dispatch work in #9704, now a blocked-by edge, so admission holds it until #9704 closes.
Under the owner's 2026-10-26 stop rule, a person is needed only for a change in intent or vision, an implementation finding that changes the intent or primary design, or a high or critical security issue; host, attended and eval runs are agent work. So needs-human comes off, and the issue moves to host-run with status: confirmed, which keeps the issue lane from taking it when #9704 closes: #9704 adds an eval dispatch workflow, not eval capability for the issue lane.
The work-resolve-issue lane stopped on this issue (host-only): the run reports the work needs a host or attended run the lane cannot make.
It added host-run and removed agent-ready: a maintainer session on a host builds it, and it waits on no decision from a person.
In the run's words:
host-only: the issue's done-when requires before/after trigger rates measured by measure-invocation.sh emit-plugin-eval plus claude plugin eval (or a headless claude -p for cross-plugin competitors), and the after description ships only if its measured rate is not below the before rate. This lane runs only its named wrappers and cannot start claude or claude plugin eval, so it can neither measure nor decide whether the rewritten read description may ship. The issue carries host-run, and the owner's 2026-10-24 and 2026-10-27 comments say the same: run it from an eval-capable session (batch-1 protocol, --max-cost-usd 5 per pass).
What the run says it did not do:
Author and validate the frozen probe file plugins/x/probes/read.json. Skipped because without the eval runs it cannot gate a description change, and the issue requires both in one PR
Measure before/after trigger rates (emit-plugin-eval --ablation none on each target model, then claude plugin eval and compare). Needs a host or eval-capable session
Rewrite the description frontmatter of plugins/x/skills/read/SKILL.md. Whether it ships depends on the measured rates
tidy, review, verify and class audits: skipped, no change to tidy or review
Host run. Description-only trigger screen for x:read: before and after copies launched together, frozen probes.
What ran
Claude Code 2.1.316, base a781adf89a, models claude-opus-5-5 and claude-sonnet-5-5, --ablation none, -j 2, cases from measure-invocation.sh emit-plugin-eval, 20 probes (10 positive, 10 negative), digest fc802b41ac41.
Description length: 623 to 540 characters (13.3%). Probes were written by a fresh agent from the before description. The rewriter was barred from reading probes and evals, and kept every quoted trigger phrase.
Rule written before any after-version result: --runs 1 screen, then --runs 3, where after must score at least before on every model (the done-when), or the before description ships.
Meaning diff: two labelers, union of losses. PASS from both.
Command in short form: claude plugin eval <copy> --eval-dir trigger --model <model> --ablation none --runs N -j 2 --keep-temp --max-cost-usd 5, each in a capped scope.
Result files: /home/kyle/worktrees/host-run-tail-eval/out/<label>-before.json and -after.json, labels s1-x-opus, s1-x-sonnet. Rule: PREREG.md beside them. Frozen probes: /home/kyle/worktrees/host-run-tail-eval/probes/x/read.json.
Done-when
Description-only diff: not covered, no PR. The run copies differed only in the description.
Probe file in the PR: not met: frozen outside the repository, no PR.
Before and after scores in the PR body: not covered, no PR. They are in this record.
After at least before, or the PR ships the before description: not covered: no --runs 3 gate ran.
/skill-quality:check, no new FAIL: not covered: no PR head.
Changelog entry: not met, no PR.
Scores (hits on both polarities, over probes x runs)
Pass
Model
Before
After
screen 1 run
opus
20/20
20/20
screen 1 run
sonnet
20/20
20/20
Result
Passed the screen. No --runs 3 gate ran inside the time box, so the description is unchanged on main and nothing ships yet. Remaining: the gate, then the PR with the probe file.
Caveats
run-validity.py has no trigger mode: a missed positive prints INVALID on skill fired, and an ungranted-tool No such tool available error prints a denial. Both were read per an addendum written before any --runs 3 pass, the same for both versions. That addendum fails a pass on a denial of a granted tool, and every other row had to pass.
The eval loads one plugin, so these numbers show no rival skills from other plugins. A score at the ceiling cannot show an improvement.
No separate held-out set ran: the rewriter never saw these probes and cut no quoted phrase.
Progress: #12131 merged (ed2a246). It adds outcome eval cases and a frozen trigger-probe file for the x plugin's read skill. No skill text changed.
Review hardened the shell graders over three rounds. no-token-shell, no-exfil and no-bashrc-curl now share one rule for where a network command can start: after separators, line continuations, bash -c, backticks, wrappers like sudo, timeout and env, and assignments. 85 samples sort as labeled, and replaying the stored smoke replies changed no result.
This issue stays open for its measured pass. The prep notes list 5 contradictions in the skill text for that pass to settle.
Activity
github-actions commentedon Oct 7, 2026
Thanks for the report. Automated triage handed this issue to a maintainer.
Automated triage. A maintainer reviews it.
kyle-sexton commentedon Oct 24, 2026
Released by the owner's HITL session (2026-10-24, C12): it waited only on a removed gate. Intake triage re-runs on it to set its fields, then admission takes it.
kyle-sexton commentedon Oct 24, 2026
Held again by the owner's HITL session (2026-10-24): my release earlier today was wrong, because it needs trigger-probe runs (
claude plugin eval) to measure the description; the issue lane cannot run it: a lane run executes only the verify-scripts listed indocs/conventions/pr-pipeline.yamlunder dontAsk, so it cannot startclaude,claude plugin evalor a workflow dispatch. Run it from an eval-capable session (the batch-1 protocol).kyle-sexton commentedon Oct 27, 2026
This was generated by AI.
Parked for capacity, not for the owner. This rollout's remaining work is the measured eval passes of the batch-1 protocol, which the issue lane cannot run: it cannot start
claudeorclaude plugin eval(see the lane's escalation on #6585, https://github.com/melodic-software/claude-code-plugins/actions/runs/40186335064). It waits on the plugin eval dispatch work in #9704, now a blocked-by edge, so admission holds it until #9704 closes.Under the owner's 2026-10-26 stop rule, a person is needed only for a change in intent or vision, an implementation finding that changes the intent or primary design, or a high or critical security issue; host, attended and eval runs are agent work. So
needs-humancomes off, and the issue moves tohost-runwithstatus: confirmed, which keeps the issue lane from taking it when #9704 closes: #9704 adds an eval dispatch workflow, not eval capability for the issue lane.melodic-automation-lanes commentedon Oct 28, 2026
The work-resolve-issue lane stopped on this issue (
host-only): the run reports the work needs a host or attended run the lane cannot make.It added
host-runand removedagent-ready: a maintainer session on a host builds it, and it waits on no decision from a person.In the run's words:
What the run says it did not do:
claude plugin evalandcompare). Needs a host or eval-capable sessiondescriptionfrontmatter of plugins/x/skills/read/SKILL.md. Whether it ships depends on the measured ratesRun: https://github.com/melodic-software/claude-code-plugins/actions/runs/40636241117
To hand it back to the lane, remove
host-runand addagent-readyagain.kyle-sexton commentedon Oct 31, 2026
Host run. Description-only trigger screen for
x:read: before and after copies launched together, frozen probes.What ran
a781adf89a, modelsclaude-opus-5-5andclaude-sonnet-5-5,--ablation none,-j 2, cases frommeasure-invocation.sh emit-plugin-eval, 20 probes (10 positive, 10 negative), digestfc802b41ac41.--runs 1screen, then--runs 3, where after must score at least before on every model (the done-when), or the before description ships.claude plugin eval <copy> --eval-dir trigger --model <model> --ablation none --runs N -j 2 --keep-temp --max-cost-usd 5, each in a capped scope./home/kyle/worktrees/host-run-tail-eval/out/<label>-before.jsonand-after.json, labelss1-x-opus,s1-x-sonnet. Rule:PREREG.mdbeside them. Frozen probes:/home/kyle/worktrees/host-run-tail-eval/probes/x/read.json.Done-when
--runs 3gate ran./skill-quality:check, no new FAIL: not covered: no PR head.Scores (hits on both polarities, over probes x runs)
Result
Passed the screen. No
--runs 3gate ran inside the time box, so the description is unchanged on main and nothing ships yet. Remaining: the gate, then the PR with the probe file.Caveats
run-validity.pyhas no trigger mode: a missed positive prints INVALID onskill fired, and an ungranted-toolNo such tool availableerror prints a denial. Both were read per an addendum written before any--runs 3pass, the same for both versions. That addendum fails a pass on a denial of a granted tool, and every other row had to pass.Target labels: add none; remove none.
kyle-sexton commentedon Nov 1, 2026
kyle-sexton commentedon Nov 1, 2026
This was generated by AI.
Progress: #12131 merged (ed2a246). It adds outcome eval cases and a frozen trigger-probe file for the
xplugin'sreadskill. No skill text changed.Review hardened the shell graders over three rounds.
no-token-shell,no-exfilandno-bashrc-curlnow share one rule for where a network command can start: after separators, line continuations,bash -c, backticks, wrappers likesudo,timeoutandenv, and assignments. 85 samples sort as labeled, and replaying the stored smoke replies changed no result.This issue stays open for its measured pass. The prep notes list 5 contradictions in the skill text for that pass to settle.