Skip to content

Concise skills rollout: x (1 skills, 1 model-invoked) #6618

Open

Description

@kyle-sexton

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/check-skill.sh plugins/x/skills exits 0.
  • 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.
  • ci-status is green on the PR.

Generated by Claude Code

Activity

  1. added
    needs-triageNot yet classified. Floor until a type and one priority tier are set.
    on Oct 7, 2026
  2. github-actions commented on Oct 7, 2026

    @github-actions
    Contributor

    Thanks for the report. Automated triage handed this issue to a maintainer.

    Automated triage. A maintainer reviews it.

  3. added
    needs-humanHuman-in-the-loop required; autonomous sessions must not resolve items carrying this.
    on Oct 7, 2026
  4. removed
    needs-triageNot yet classified. Floor until a type and one priority tier are set.
    on Oct 12, 2026
  5. added theissue type on Oct 12, 2026
  6. removed
    needs-humanHuman-in-the-loop required; autonomous sessions must not resolve items carrying this.
    on Oct 24, 2026
  7. kyle-sexton commented on Oct 24, 2026

    @kyle-sexton
    MemberAuthor

    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.

  8. added
    needs-humanHuman-in-the-loop required; autonomous sessions must not resolve items carrying this.
    on Oct 24, 2026
  9. kyle-sexton commented on Oct 24, 2026

    @kyle-sexton
    MemberAuthor

    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).

  10. kyle-sexton commented on Oct 27, 2026

    @kyle-sexton
    MemberAuthor

    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 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.

  11. added
    host-runNeeds an unattended run on a host; the host runner takes it, not a person or the issue lane.
    status: confirmedA maintainer confirmed the item is real and in scope; ready to be worked.
    and removed
    needs-humanHuman-in-the-loop required; autonomous sessions must not resolve items carrying this.
    on Oct 27, 2026
  12. added
    agent-readyFully specified and briefed; eligible for autonomous pickup from the frontier.
    and removed
    agent-readyFully specified and briefed; eligible for autonomous pickup from the frontier.
    on Oct 28, 2026
  13. melodic-automation-lanes commented on Oct 28, 2026

    @melodic-automation-lanes
    Contributor

    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

    Run: https://github.com/melodic-software/claude-code-plugins/actions/runs/40636241117

    To hand it back to the lane, remove host-run and add agent-ready again.

  14. kyle-sexton commented on Oct 31, 2026

    @kyle-sexton
    MemberAuthor

    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.

    Target labels: add none; remove none.

  15. self-assigned this
    on Nov 1, 2026
  16. kyle-sexton commented on Nov 1, 2026

    @kyle-sexton
    MemberAuthor
    No description provided.
  17. kyle-sexton commented on Nov 1, 2026

    @kyle-sexton
    MemberAuthor

    This was generated by AI.

    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.

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

Metadata

Metadata

Assignees

Labels

host-runNeeds an unattended run on a host; the host runner takes it, not a person or the issue lane.status: confirmedA maintainer confirmed the item is real and in scope; ready to be worked.

Type

Fields

No fields configured for Task.

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions