Problem
The plugin ships a duplicate upstream/SKILL.md inside 10 of the customized skill directories:
skills/ai-sdk/SKILL.md
skills/ai-sdk/upstream/SKILL.md <- duplicate
skills/chat-sdk/SKILL.md
skills/chat-sdk/upstream/SKILL.md <- duplicate
... (8 more: next-cache-components, next-forge, next-upgrade, nextjs,
react-best-practices, vercel-cli, vercel-sandbox, workflow)
Claude Code's harness scans recursively for SKILL.md and registers both files as the same skill name. Second-pass registration drops the description from the available-skills list, so the model can no longer auto-route to the skill via keyword triggers — only explicit invocation via the Skill tool works.
Repro
cd ~/.claude/plugins/cache/claude-plugins-official/vercel/0.42.1/skills
find . -name SKILL.md | awk -F/ '{print $(NF-1)}' | sort | uniq -c | sort -rn | awk '$1>1' → shows upstream 10x
- Check Claude Code's available-skills list —
vercel:ai-sdk, vercel:chat-sdk, etc. show no description.
Suggested fix
Either:
- Move
upstream/ outside skills/ (e.g., vendor/upstream/<name>/SKILL.md or docs/upstream-source/<name>.md), or
- Rename the upstream copy from
SKILL.md to UPSTREAM.md so the harness skip-scan is not triggered, or
- Add a
.claudeignore-equivalent if Claude Code supports one.
Workaround
Local SessionStart hook prunes upstream/ dirs in cache after each session start (until plugin update).
cc @vercel
Problem
The plugin ships a duplicate
upstream/SKILL.mdinside 10 of the customized skill directories:Claude Code's harness scans recursively for SKILL.md and registers both files as the same skill name. Second-pass registration drops the description from the available-skills list, so the model can no longer auto-route to the skill via keyword triggers — only explicit invocation via the Skill tool works.
Repro
cd ~/.claude/plugins/cache/claude-plugins-official/vercel/0.42.1/skillsfind . -name SKILL.md | awk -F/ '{print $(NF-1)}' | sort | uniq -c | sort -rn | awk '$1>1'→ showsupstream10xvercel:ai-sdk,vercel:chat-sdk, etc. show no description.Suggested fix
Either:
upstream/outsideskills/(e.g.,vendor/upstream/<name>/SKILL.mdordocs/upstream-source/<name>.md), orSKILL.mdtoUPSTREAM.mdso the harness skip-scan is not triggered, or.claudeignore-equivalent if Claude Code supports one.Workaround
Local SessionStart hook prunes
upstream/dirs in cache after each session start (until plugin update).cc @vercel