Skip to content

fix(plugins): name each skill after its plugin directory - #1361

Merged
potiuk merged 1 commit into
apache:mainfrom
potiuk:fix/skill-name-matches-plugin-dir
Sep 23, 2026
Merged

potiuk merged 1 commit into
apache:mainfrom
potiuk:fix/skill-name-matches-plugin-dir

Conversation

@potiuk

@potiuk potiuk commented Sep 23, 2026

Copy link
Copy Markdown
Member

Summary

  • Plugin skills autocompleted with a stuttering name. Claude Code and Codex invoke a plugin skill by its frontmatter name:, so name: magpie-setup-isolated-setup-verify surfaced as /magpie-setup:magpie-setup-isolated-setup-verify instead of /magpie-setup:isolated-setup-verify. docs/setup/marketplace.md claimed the magpie- prefix was ignored; it is not (Claude Code docs: "Set the frontmatter name field to control the skill's invocation name"; Codex codex-rs/skills/src/parser.rs).
  • Every name: is now the family-plugin directory name (75 skills), which is also what the Agent Skills specification requires (name must match the parent directory). Before this, every skill failed that rule, and a strict Agent Plugins client must skip non-conforming skills.
  • Repository installs (snapshot, self-adoption) keep their commands. Claude Code and VS Code invoke a repository skill by its magpie-<flat-name> directory; they now list it under the shorter frontmatter name as its display label. Documented in the "Skill names differ" notes and the self-adoption section.
  • Aliases are now unique across families. Gemini CLI keeps skill names in one flat registry, so the pull-request family's triage / stale-sweep become pr-triage / pr-stale-sweep (the issue family keeps the bare names). check-family-plugins.py rejects a cross-family repeat; the skill validator now requires name: to equal the directory a SKILL.md really lives in (symlinks resolved).

Per-harness behaviour this is based on (verified from source where open, docs otherwise):

Harness Name from Marketplace result after this PR
Claude Code (plugin) frontmatter name: /magpie-setup:isolated-setup-verify
Claude Code (repository skill) directory; name: is the display label /magpie-setup-isolated-setup-verify (unchanged)
Codex frontmatter name:, namespaced by the owning plugin magpie-setup:isolated-setup-verify
VS Code / Copilot directory unchanged (already short)
Gemini CLI frontmatter name:, flat registry isolated-setup-verify (hence cross-family uniqueness)
Cursor not verifiable (closed source); docs require name = folder conforms now

Type of change

  • Skill change — frontmatter name: only, plus link paths into the two renamed magpie-pr-management directories
  • Python package (tools/skill-and-tool-validator, list-skills script)
  • Documentation (docs/setup/marketplace.md, install-method notes, setup install.md, validator README, marketplace spec)
  • CI / dev loop (check-family-plugins.py, check-doc-sync.py stutter guard now accepts a live alias such as pr-triage)

Test plan

  • prek run --all-files passes (rebased on a2751351)
  • uv run pytest for tools/skill-and-tool-validator (new cases: prefixed name fails, symlinked skill uses the real directory), tools/dev (cross-family uniqueness, every name: equals its plugin directory, live-alias stutter case), and list-skills (repository invocations come from the directory; framework source prefixed magpie-)
  • Eval suites not re-run: no step prompt changes; eval fixtures that quote magpie-… names are self-contained scenarios and stay consistent
  • Not verified interactively: the / menu in each harness after installing from this branch

Upgrade notes

  • /magpie-pr-management:triage → /magpie-pr-management:pr-triage, /magpie-pr-management:stale-sweep → /magpie-pr-management:pr-stale-sweep.
  • The pre-flight reconciliation stamp is keyed by frontmatter name:. Existing stamps keep their old keys until the next /magpie-setup reconcile re-stamps under the new names; until then the per-skill fingerprint check stays silent rather than nagging.

RFC-AI-0004 compliance

  • Vendor neutrality — the naming now conforms to the Agent Skills spec across harnesses instead of Claude Code's repository-skill behaviour alone

Linked issues

None.


Generative-AI disclosure: drafted with Claude Code (Claude Opus 5); reviewed by the submitter.

🤖 Generated with Claude Code

Claude Code and Codex invoke a plugin skill by its frontmatter `name:`,
so the `magpie-<flat-name>` names surfaced as
`/magpie-setup:magpie-setup-isolated-setup-verify` instead of the
de-stuttered `/magpie-setup:isolated-setup-verify`. Every `name:` is now
the family-plugin directory name, which is also what the Agent Skills
specification requires.

Repository installs are unchanged: Claude Code and VS Code still invoke
them by their `magpie-<flat-name>` directory, and now list them under
the shorter name as the display label.

Gemini CLI keeps skill names in one flat registry, so aliases must be
unique across families: the pull-request family's `triage` and
`stale-sweep` become `pr-triage` and `pr-stale-sweep`. The skill
validator now requires `name:` to match the directory a SKILL.md really
lives in, and check-family-plugins rejects an alias repeated across
families.

Generated-by: Claude Opus 5
@potiuk
potiuk merged commit f4df452 into apache:main Sep 23, 2026
13 checks passed
@potiuk
potiuk deleted the fix/skill-name-matches-plugin-dir branch September 23, 2026 16:45
potiuk added a commit that referenced this pull request Sep 24, 2026
Reconciles the spec-loop specs with the functionality that shipped
between 5c75abd and bcd8b7f:

- agent-isolation-sandbox: the hardware-key touch policy (sig cached +
  aut off with OpenPGP signing, aut cached with gpg.format=ssh) (#1367);
  touch-watcher owner is the harness (#1365); macOS overlay closes on
  deactivation (#1325); whole-user git hooks allowRead and dispatcher
  flavour (#1364, #1322, #1358); agent-guard finds the git subcommand
  past global flags (#1330); agent-guard plugin counts as a complete
  install (#1323); per-tool cooldown_days, bubblewrap 0.13.0 (#1360).
- sandbox-diagnostics: ten catalogue entries (prek/uv not found, git
  hooks silently skipped) (#1359, #1364); doctor probes as scripts, with
  probes 7 and 8 (#1336, #1362, #1364); verify's 12 checks and
  conditional-checks.md (#1334).
- vetted-command-surface: HTTP read backend with the OSV and CVE.org
  operations (#1326); the vetted-op-read recipe spelling (#1339); the
  plugin copy resolves standalone (#1357).
- cve-tooling: tools/osv (contract:security-cross-ref) and the cve-org
  check through vetted-ops (#1297, #1326).
- security-issue-lifecycle: step 2b proposes going ahead on a quiet
  reporter (#1340); the post-advisory security-pages update (#1355).
- meta-and-quality-tooling: name: must match the skill directory
  (#1361); skill-evals fixture containment and grader retry (#1315,
  #1341); optimize-skill budgets, eval gate, rewrite and extract-code
  passes (#1331, #1332, #1335, #1338); diff-scoped prek CI (#1317).
- marketplace-distribution: substrate plugins (#1368, #1357).
- adversarial-review (new): the tool and substrate plugin as shipped
  (#1368), with its known gaps.

Generated-by: Claude Opus 5
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant