"N skill descriptions dropped" — empty descriptions for duplicate SKILL.md between plugins/marketplaces/ and plugins/cache/
Bug: "N skill descriptions dropped" warning — empty descriptions in available-skills list when plugin SKILL.md exists in both plugins/marketplaces/ and plugins/cache/
Summary
After installing a marketplace plugin, the startup banner shows N skill descriptions dropped (in my case 7 skill descriptions dropped). The affected skills still appear in the in-session available-skills list, but with no description text — only the name. Auto-trigger and /skill invocation become unreliable for those skills because the trigger phrases live in the description.
Environment
- Claude Code: latest (Opus 4.7, 1M context)
- macOS Darwin 25.4.0 / zsh
- One marketplace plugin enabled:
claude-seo@agricidaniel-seo(v1.9.0)
Reproduction
- Install a plugin from a marketplace:
/plugin install claude-seo@agricidaniel-seo - Restart Claude Code
- Observe startup warning:
7 skill descriptions dropped - In session, request the available-skills list — several
claude-seo:seo-*entries appear as- claude-seo:<name>with no description
What I found
The plugin's SKILL.md files exist in two scan paths that Claude Code controls:
~/.claude/plugins/marketplaces/agricidaniel-seo/skills/<name>/SKILL.md(git checkout of the marketplace source)~/.claude/plugins/cache/agricidaniel-seo/claude-seo/1.9.0/skills/<name>/SKILL.md(installed cached copy)
All 23 SEO skills exist in both. diff -q returns byte-identical for every pair, including for the 5 affected skills:
seo-drift: IDENTICAL
seo-schema: IDENTICAL
seo-images: IDENTICAL
seo-google: IDENTICAL
seo-backlinks: IDENTICAL
So 18 of 23 skills load with full description and 5 do not, despite content being identical between the two scan paths. The remaining 2 dropped descriptions in my count belong to built-in review / security-review skills (no SKILL.md visible in any user-controlled path — those may share the same loader bug or be unrelated).
Expected behavior
One of:
- Scan only one of
plugins/cache/<plugin>/<version>/orplugins/marketplaces/<plugin>/per enabled plugin — not both. - Deduplicate by (plugin-id, skill-name) cleanly and always keep the description from the winning copy.
- If a duplicate is dropped, the kept copy's description must survive.
Actual behavior
23 skills appear in the available list, but 5 of them have an empty description string. The warning counts dropped descriptions, not dropped skills, so the warning is hard to action — the skills are still present but unusable for auto-trigger.
Workaround
Removing the marketplace git checkout silences the warning until the next /plugin update:
rm -rf ~/.claude/plugins/marketplaces/agricidaniel-seo
But Claude Code recreates the path on next plugin sync, so the issue returns.
Diagnostic command
find ~/.claude -maxdepth 7 -type f -name SKILL.md \
| xargs awk '/^name:/{print FILENAME":"$2; nextfile}' 2>/dev/null \
| awk -F: '{print $2}' | sort | uniq -c | sort -rn | awk '$1 > 1'
This surfaces every duplicate SKILL.md name across the ~/.claude/ scan tree. On my machine every claude-seo skill duplicates between marketplaces/ and cache/, plus three extensions (banana/, dataforseo/, firecrawl/) add additional duplicates for seo-image-gen/seo-dataforseo.
Related prior incident on this machine
On 2026-05-14 the same warning fired (8 skill descriptions dropped) because legacy backup directories under ~/.claude/ (gsd-user-files-backup/skills/ and a nested ~/.claude/.claude/skills/) introduced duplicate SKILL.md files. That was a user-side fix (move backups outside ~/.claude/). The current case is different — both duplicate paths are Claude Code-managed and not user-controllable.
This issue has 3 comments on GitHub. Read the full discussion on GitHub ↗