Summary
When installing the library via the Claude Code plugin marketplace, two packaging issues show up. Both are small manifest/file-placement fixes. Tested on Claude Code (desktop), v0.79.
Issue 1 — Marketplace exposes 47 separate plugins instead of one
.claude-plugin/marketplace.json lists every skill as its own plugins[] entry, each with a source pointing at a skill directory:
{ "name": "acquisition-channel-advisor", "source": "./skills/acquisition-channel-advisor", ... }
But ./skills/acquisition-channel-advisor is a skill folder (a bare SKILL.md), not a plugin folder (no .claude-plugin/plugin.json, no skills/ subdir). Effects:
- The marketplace shows 47 "plugins" instead of one library.
- Installing one drops the skill under the install version directory, so it resolves with the git short-SHA as its namespace, e.g.
70fb6c4e4163:acquisition-channel-advisor, and lands at:
cache/<marketplace>/acquisition-channel-advisor/70fb6c4e4163/SKILL.md
- The repo already has a valid single-plugin layout —
.claude-plugin/plugin.json (product-manager-skills) at the root plus a proper skills/ tree — but the marketplace manifest doesn't use it.
Suggested fix
Collapse the 47 entries into one plugin whose source is the repo root:
{
"name": "pm-skills",
"owner": { "name": "Dean Peters", "email": "dean.peters@productside.com" },
"metadata": {
"description": "47 battle-tested product management skills for Claude Code — discovery, strategy, finance, career, and more.",
"version": "0.79.0"
},
"plugins": [
{
"name": "product-manager-skills",
"source": "./",
"description": "A comprehensive library of PM skills covering discovery, strategy, delivery, finance, AI orchestration, and career leadership.",
"category": "productivity",
"strict": false
}
]
}
After this, one plugin installs with all 49 skills + the 6 commands/ slash commands, namespaced under product-manager-skills:.
Issue 2 — commands/README.md loads as a phantom command
Claude Code loads every .md file in a plugin's commands/ directory as a command. commands/README.md (documentation, no command frontmatter) therefore shows up as a command/skill literally named "README" with trigger "Slash command + auto." It's harmless but clutters the list.
Suggested fix
Move the doc out of the runtime directory — e.g. commands/README.md → docs/commands.md (or repo root). Same applies to any other non-command .md under commands/. (skills/ is unaffected because it discovers by SKILL.md inside named subfolders.)
Optional note
With source: "./", the whole repo (app/, research/, docs/, etc.) is copied into the plugin cache. Claude Code only loads skills/, commands/, agents/, hooks/, so the rest is inert — just disk. If you'd rather ship a lean plugin, move the runtime dirs under a plugin/ subtree and point source (or a git-subdir path) at it.
Environment
- Claude Code desktop, learning output style
- Library v0.79 (
gitCommitSha 70fb6c4...)
- Windows 11
Summary
When installing the library via the Claude Code plugin marketplace, two packaging issues show up. Both are small manifest/file-placement fixes. Tested on Claude Code (desktop), v0.79.
Issue 1 — Marketplace exposes 47 separate plugins instead of one
.claude-plugin/marketplace.jsonlists every skill as its ownplugins[]entry, each with asourcepointing at a skill directory:{ "name": "acquisition-channel-advisor", "source": "./skills/acquisition-channel-advisor", ... }But
./skills/acquisition-channel-advisoris a skill folder (a bareSKILL.md), not a plugin folder (no.claude-plugin/plugin.json, noskills/subdir). Effects:70fb6c4e4163:acquisition-channel-advisor, and lands at:cache/<marketplace>/acquisition-channel-advisor/70fb6c4e4163/SKILL.md.claude-plugin/plugin.json(product-manager-skills) at the root plus a properskills/tree — but the marketplace manifest doesn't use it.Suggested fix
Collapse the 47 entries into one plugin whose
sourceis the repo root:{ "name": "pm-skills", "owner": { "name": "Dean Peters", "email": "dean.peters@productside.com" }, "metadata": { "description": "47 battle-tested product management skills for Claude Code — discovery, strategy, finance, career, and more.", "version": "0.79.0" }, "plugins": [ { "name": "product-manager-skills", "source": "./", "description": "A comprehensive library of PM skills covering discovery, strategy, delivery, finance, AI orchestration, and career leadership.", "category": "productivity", "strict": false } ] }After this, one plugin installs with all 49 skills + the 6
commands/slash commands, namespaced underproduct-manager-skills:.Issue 2 —
commands/README.mdloads as a phantom commandClaude Code loads every
.mdfile in a plugin'scommands/directory as a command.commands/README.md(documentation, no command frontmatter) therefore shows up as a command/skill literally named "README" with trigger "Slash command + auto." It's harmless but clutters the list.Suggested fix
Move the doc out of the runtime directory — e.g.
commands/README.md→docs/commands.md(or repo root). Same applies to any other non-command.mdundercommands/. (skills/is unaffected because it discovers bySKILL.mdinside named subfolders.)Optional note
With
source: "./", the whole repo (app/,research/,docs/, etc.) is copied into the plugin cache. Claude Code only loadsskills/,commands/,agents/,hooks/, so the rest is inert — just disk. If you'd rather ship a lean plugin, move the runtime dirs under aplugin/subtree and pointsource(or agit-subdirpath) at it.Environment
gitCommitSha70fb6c4...)