The custom .claude-plugin/marketplace.json split skills into 'curated'
and 'experimental' plugin groups for the npx skills picker, but the
groupings turned out to break the CLI tool in practice. Removing the
file (and its generator) restores the picker's default behavior, which
discovers skills directly from the .curated / .experimental priority
dirs without any manual grouping.
Drops the per-discipline split (Curated References / Curated Workflows /
Curated Extractors / Experimental References / etc.). Picker now shows
two sections in order — 'curated' < 'experimental' alphabetically gives
the natural ordering without any prefix tricks.
Removes detectDiscipline + classify helpers from the generator since they
are no longer needed.
1. Curated 38
2. Experimental 137
Still 175 total discoverable, zero orphans.
The npx skills picker sorts groups alphabetically by raw plugin slug
(vercel-labs/skills add.ts:1192-1196 — pluginName.localeCompare). With the
previous slugs (references / workflows / extractors / experimental), the
experimental group sorted FIRST and put 137 items at the top of the picker,
making it unnavigable.
Two consumer-side fixes — no patch to vercel-skills needed:
1. Prefix curated slugs with `curated-` so 'c' < 'e' (experimental). Picker
shows the curated tier first.
2. Split experimental into discipline sub-groups (experimental-references,
-workflows, -runbooks, -extractors) so the largest single group drops
from 137 to 107 skills.
Resulting picker order (alphabetical, fixed by the CLI):
1. Curated Extractors 3
2. Curated References 30
3. Curated Workflows 5
4. Experimental Extractors 6
5. Experimental References 107
6. Experimental Runbooks 6
7. Experimental Workflows 18
Total still 175 — same set of discoverable skills as before. Cosmetic only:
users who installed in the past hour will see mixed group labels in
`npx skills list` until next `update` (pluginName is persisted to
~/.agents/.skill-lock.json:37 for display, but update/sync/remove match
by skill name + source, so no functional break).
Reverses the metadata.internal=true approach from c6f1e4b's predecessor
(8b3b8c9). Experimental skills should be discoverable in `npx skills add`,
not hidden — but visually flagged as experimental.
Mechanism: marketplace.json now lists .experimental/ skills under an
`experimental` plugin entry, which the npx skills picker renders as
an "Experimental" section header (groupMultiselect, vercel-labs/skills
add.ts:1222). Curated skills remain grouped by discipline.
- Update scripts/generate-marketplace.mjs to scan .experimental/ and
emit a 5th plugin entry alongside the 4 curated discipline groups.
- Regenerate .claude-plugin/marketplace.json (175 skills total:
30 References, 5 Workflows, 3 Extractors, 137 Experimental).
- Restore .experimental/*/SKILL.md and metadata.json from parent commit
(removes metadata.internal flag, undoes the patch bumps).
- Remove scripts/mark-experimental-internal.mjs (approach abandoned).
- Add .claude-plugin/marketplace.json grouping the 38 .curated skills
into 4 discipline-based plugins (References / Workflows / Runbooks /
Extractors). npx skills picker renders these as labelled sections.
- Add scripts/generate-marketplace.mjs that regenerates the manifest
from .curated/, mirroring dev-skill validator's discipline detection
(scripts/ -> composition, references/*-tree.md -> investigation,
assets/templates/*.template -> extraction, else distillation).
- Add scripts/mark-experimental-internal.mjs that sets metadata.internal=true
on every .experimental/*/SKILL.md (hidden from default npx skills browse,
still installable by name or via INSTALL_INTERNAL_SKILLS=1) and patch-bumps
the corresponding metadata.json. Idempotent.
- Apply the marker: 137 SKILL.md + 137 metadata.json updated.
Per-skill comparison of last_touch vs last_bump using git log -L for
line-history-based version detection and merge-base --is-ancestor for
topological STALE classification. Distinguishes OK / STALE / DIRTY /
NEVER_BUMPED. Exits 1 in human mode if any non-OK; --json always exits 0.
Includes a tests/check-versions.test.sh integration suite wired into
npm test, covering: fresh-OK, content-change-STALE, post-bump-OK,
working-tree-DIRTY, and never-bumped histories.
The hand-rolled regex parser in scripts/skills-ref silently mishandled
folded block scalars (only the `>` marker was captured, never the body)
and inline YAML comments (everything after `# ` leaked into the value).
Three skills already had descriptions over Anthropic's 1024-char limit
without CI catching them.
- Add js-yaml@4.1.0 and a thin scripts/skills-ref-parse.js helper that
exposes parse/check-yaml/read-properties/to-prompt.
- Replace the four hand-rolled YAML blocks in scripts/skills-ref with
calls to the helper.
- CI now runs `npm install` and the test suite before validate-all.
- Trim effect-ts, marketplace-pre-member-personalisation, and
marketplace-recsys-feature-engineering descriptions under 1024 chars.
- Add regression fixtures for folded block scalars over 1024 chars and
for inline-comment stripping.
Standardize all skill metadata versions from 0.x pre-release to stable
1.x semver, reflecting the improvements and fixes applied across recent
commits. Includes the update-versions script and a new experimental
ios-ui-refactor skill.
Port skills-ref validator from agentskills/agentskills to enable
validation of all skills in this repository.
Features:
- validate: Check a single skill against all validation rules
- validate-all: Validate all skills in the repository
- read-properties: Output skill properties as JSON
- to-prompt: Generate XML prompt blocks for agents
Validation rules:
- Name format (lowercase alphanumeric + hyphens, 1-64 chars)
- No leading/trailing/consecutive hyphens
- Name must match directory name
- Required description field (max 1024 chars)
- SKILL.md under 500 lines
- Reference consistency (Quick Reference entries match files)
- AGENTS.md presence warning for curated skills
Includes test fixtures and test runner for validation logic.