[BUG] Plugin install no longer copies symlinked skills to cache (regression in v2.1.117)
Preflight Checklist
- [x] I have searched existing issues and this hasn't been reported yet
- [x] This is a single bug report (please file separate reports for different bugs)
- [x] I am using the latest version of Claude Code
What's Wrong?
Starting in v2.1.117, claude plugin install and claude plugin marketplace add no longer copy symlinked skill directories into the plugin cache. The skills/ directory inside ~/.claude/plugins/cache/<marketplace>/<plugin>/<version>/ is created but left empty. Skills don't appear in /skills.
Bisected across both Docker Desktop sandbox and sbx CLI runtimes with identical results. v2.1.116 works correctly, v2.1.117 does not.
What Should Happen?
When a marketplace plugin's skills/ directory contains symlinks (relative or absolute), claude plugin install should copy or re-link them into the cache so that skills are
discoverable via /skills. In v2.1.116, the cache contained absolute symlinks pointing back to the marketplace repo — e.g.:
~/.claude/plugins/cache/sas-plugins/inspection-skills/0.7.0/skills/launchdarkly-api
-> /home/agent/.claude/plugins/marketplaces/sas-plugins/skills/launchdarkly-api
This pattern (symlinks in plugin skill directories) is the recommended workaround for #13344, where the skills array in marketplace.json is ignored and all skills in the
source directory are loaded regardless. Plugins use symlinks to selectively include skills from a shared skills/ directory at the repo root.
Error Messages/Logs
No error messages. The install reports success:
✔ Successfully installed plugin: knowledge-tools@my-plugins (scope: user)
But the cache is empty. Watching the cache directory with `fs.watch` during install shows only directory creation events — no symlink or file copy events:
rename knowledge-tools [dir]
rename knowledge-tools/0.1.0 [dir]
rename knowledge-tools/0.1.0/skills [dir]
Steps to Reproduce
- Set up a marketplace repo with this structure (symlinks used to workaround https://github.com/anthropics/claude-code/issues/13344):
````
repo/
skills/
my-skill/
SKILL.md
claude/plugins/my-plugin/
skills/
my-skill -> ../../../../skills/my-skill
.claude-plugin/
marketplace.json # with "source": "./claude/plugins/my-plugin"
- Register the marketplace:
``bash``
claude plugin marketplace add <owner>/<repo>
- Install a plugin that uses symlinked skills:
``bash``
claude plugin install my-plugin@<marketplace>
- Check the cache:
``bash``
ls -la ~/.claude/plugins/cache/<marketplace>/my-plugin/*/skills/
# Expected: symlinks or copied skill directories
# Actual: empty directory
- Verify
/skillsshows nothing from this plugin.
- Downgrade to v2.1.116 and repeat steps 2–4 — skills are correctly symlinked in the cache.
Claude Model
None
Is this a regression?
Yes, this worked in a previous version
Last Working Version
v2.1.116
Claude Code Version
v2.1.119
Platform
Anthropic API
Operating System
macOS
Terminal/Shell
Terminal.app (macOS)
Additional Information
_No response_
This issue has 1 comment on GitHub. Read the full discussion on GitHub ↗