[BUG] Plugin enable/disable ignored - all skills loaded regardless of settings
Preflight Checklist
- [x] I have searched existing issues and this hasn't been reported yet
- [x] I can reproduce this bug with the latest version of Claude Code
Bug Description
tl;dr - plugins need individual folders and individual .claude-plugin/plugin.json to be respected.
When a marketplace defines multiple plugins from the same source directory, disabling one plugin has no effect - all skills from the entire directory are loaded regardless of enable/disable settings.
Reproduction
marketplace.json (from anthropic-agent-skills):
{
"plugins": [
{
"name": "document-skills",
"source": "./",
"skills": ["./skills/xlsx", "./skills/docx", "./skills/pptx", "./skills/pdf"]
},
{
"name": "example-skills",
"source": "./",
"skills": [
"./skills/algorithmic-art",
"./skills/brand-guidelines",
"./skills/canvas-design",
... (12 skills total)
]
}
]
}
settings.json:
{
"enabledPlugins": {
"example-skills@anthropic-agent-skills": false, // DISABLED
"document-skills@anthropic-agent-skills": true
}
}
Expected: Only xlsx, docx, pptx, pdf skills loaded (the 4 from document-skills)
Actual: ALL 16 skills loaded, including document-skills:algorithmic-art, document-skills:canvas-design, etc. from the disabled example-skills plugin
Root Cause Analysis
The skills array in marketplace.json appears to be completely ignored. Claude Code seems to:
- See that
document-skillsis enabled withsource: "./" - Recursively scan the entire
./directory for anySKILL.mdfiles - Load everything it finds, ignoring the explicit
skillsarray whitelist
Impact
- Plugin settings are meaningless - Users can't control which skills are loaded
- Contributes to skill truncation - Extra unwanted skills push useful skills past the 30-skill limit (see #13343)
- Confusing UI - Plugins appear as separate items in the UI but toggling them does nothing
- Broken architecture - The marketplace.json schema implies fine-grained control that doesn't exist
Environment
- Claude Code version: 2.0.60 (Homebrew)
- OS: macOS
- Affected marketplace: anthropic-agent-skills (but likely affects any marketplace with multiple plugins sharing a source directory)
Expected Behavior
Either:
- Respect the
skillsarray - Only load skills explicitly listed for enabled plugins - Or require separate source directories - If sharing source directories isn't supported, enforce separate directories per plugin
Workaround
None currently. Disabling plugins in settings.json has no effect.
Showing cached comments. Read the full discussion on GitHub ↗
9 Comments
Found 2 possible duplicate issues:
This issue will be automatically closed as a duplicate in 3 days.
🤖 Generated with Claude Code
cc @ant-andi @klazuka
Confirming this issue
I'm experiencing the exact same problem with
document-skillsandexample-skillsfromanthropic-agent-skills. Here's my/contextoutput showing the duplicates:Impact
~35-40k tokens wasted on duplicate skills, consuming roughly 17-20% of the context window unnecessarily.
Additional findings
source: "./"pointing to the same repo rootskillsarray filter inmarketplace.jsonis completely ignoredexample-skillsfrominstalled_plugins.jsondoesn't persist - Claude Code automatically reinstalls it on restart because both plugins are defined in the same marketplaceanthropic-agent-skillsmarketplace, which loses all skillsEnvironment
anthropic-agent-skillsConfirming this bug still exists. I noticed duplicate skills showing up in my available skills list and traced it back to the same root cause.
Both
document-skillsandexample-skillsfromanthropic-agent-skillscontain all 16 skills in their cache directories, despitemarketplace.jsonclearly specifying different skill subsets for each:Both show identical contents: all 16 skills
The
skillsarray filter is completely ignored during installation. Would love to see this fixed - it makes the marketplace plugin separation feature unusable.Environment
anthropic-agent-skillsI think I ran into a similar issue: with 5 plugins sharing source: "./", every skill appears under every plugin prefix (35
entries for 7 skills).
Confirmed: Enable/Disable has no effect on token consumption
I just spent a session optimizing my Claude Code setup and can independently confirm this bug.
Test performed:
settings.json:``
json
``{
"enabledPlugins": {
"ralph-wiggum@claude-plugins-official": false,
"ralph-wiggum-enhanced@local-plugins": false
}
}
/contextResult: Token consumption remained unchanged. Disabled plugins still contributed to context overhead.
Workaround we had to implement:
Since disabling doesn't work, we converted 26 agents to skills with
disable-model-invocation: truein the frontmatter. This was the only way to reduce context usage (saved ~9k tokens).This confirms the root cause analysis in this issue: Claude Code appears to scan directories and load everything it finds, completely ignoring the
enabledPluginssettings.Impact on our setup:
A fix for this bug would make the existing plugin management UI actually functional.
Confirming this is still reproducible on Claude Code v2.1.123 on macOS 26.3.1 with
document-skills@anthropic-agent-skills.A clean install of only
document-skillsregisters all 17 skills currently in the source tree under thedocument-skills:namespace, even though the marketplace entry lists onlyxlsx,docx,pptx,pdf.Two details seem important here:
strict: falseas: "the marketplace operator wants full control. The plugin repo provides raw files, and the marketplace entry defines which of those files are exposed as skills, agents, hooks, etc." ([plugin-marketplaces, Strict mode][1]). That matches the allow-list behavior this issue expects, but the implementation does not appear to honor it.With #13344 still present and #53948 introduced, marketplaces that share a top-level
skills/directory no longer seem to have a reliable way to expose only a selected subset. Either theskillsfilter needs to be honored, or the symlink behavior needs to be restored.Happy to share the full repro trace if helpful.
[1]: https://code.claude.com/docs/en/plugin-marketplaces#strict-mode
We hit this same issue with the
pds-agent-skillsmarketplace (NASA-PDS/pds-agent-skills), which defines 8 separate single-skill plugins all pointing at the same"source": "./static/marketplace"root. Installing any one plugin (e.g./plugin install generating-release-notes@pds-agent-skills) results in all 8 skills being registered under that plugin's namespace.We attempted a workaround by giving each plugin a unique subdirectory source path (e.g.
"source": "./static/marketplace/skills/generating-release-notes"with"skills": ["."]), but this hits a second limitation:So the
skillsfilter array is ignored during install, and subdirectory source paths are rejected as unsupported. We had to revert both attempts (see NASA-PDS/pds-agent-skills#18).The net effect is that marketplace authors currently have no way to distribute multiple independent skills from a single repo without all of them bundling together on every install. The only workaround would be splitting each skill into its own repo, which is impractical at scale.
Would love to see either:
skillsfilter array respected during install (so only the declared skill paths are loaded), orsourcepaths supportedRelated: #15439 tracks the subdirectory source limitation.
🤖 Generated with Claude Code
For anyone tracking this: per #76448 the terminal CLI honors the
skillsarray as of ~2.1.206. Desktop/Web still doesn't: