[BUG] Plugin install no longer copies symlinked skills to cache (regression in v2.1.117)

Resolved 💬 1 comment Opened Apr 27, 2026 by kkyr Closed May 29, 2026

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

  1. 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"
``

  1. Register the marketplace:

``bash
claude plugin marketplace add <owner>/<repo>
``

  1. Install a plugin that uses symlinked skills:

``bash
claude plugin install my-plugin@<marketplace>
``

  1. Check the cache:

``bash
ls -la ~/.claude/plugins/cache/<marketplace>/my-plugin/*/skills/
# Expected: symlinks or copied skill directories
# Actual: empty directory
``

  1. Verify /skills shows nothing from this plugin.
  1. 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_

View original on GitHub ↗

This issue has 1 comment on GitHub. Read the full discussion on GitHub ↗