[FEATURE] Support per-project enabledPlugins in .claude/settings.json
Preflight Checklist
- [x] I have searched existing requests and this feature hasn't been requested yet
- [x] This is a single feature request (not multiple features)
Problem Statement
Problem
enabledPlugins only works in the global ~/.claude/settings.json. There's no way to enable or disable a plugin per project. This means a plugin that's useful in one project loads its full skill descriptions into every project's context — even projects that set all the plugin's skills to "off" via skillOverrides.
The gap
Per-project overrides exist for most settings: permissions, hooks, skillOverrides, env. But enabledPlugins is global-only. This creates an asymmetry:
| Setting | Global | Per-project |
|---|---|---|
| permissions | ✅ | ✅ |
| hooks | ✅ | ✅ |
| skillOverrides | ✅ | ✅ |
| env | ✅ | ✅ |
| enabledPlugins | ✅ | ❌ |
Why skillOverrides: "off" doesn't solve this
Setting a plugin's skills to "off" suppresses auto-triggering but does not prevent the skill descriptions from loading into the system prompt. A project that disables all 28 anthropic-skills via skillOverrides still pays ~4,800 tokens per turn for descriptions it never uses.
Measured impact
From a real project audit (Opus 4, 200k context window):
- 28 plugin skills set to
"off"in projectsettings.local.json - All 28 descriptions still appear in the system prompt every turn
- Cost: ~4,800 tokens/turn (2.4% of context window)
- 6 of those skills duplicate project-level skills, adding ~920 tokens of pure redundancy
On a 200k window this is tolerable. On smaller models or projects that push the context limit, it's a meaningful loss — and it's entirely uncontrollable.
Proposed solution
Allow enabledPlugins in project-level .claude/settings.json (or .claude/settings.local.json), with the same merge semantics as other per-project settings. A project that sets "anthropic-skills": false at the project level would not load that plugin's skill descriptions into context for sessions in that project.
// .claude/settings.json (project-level)
{
"enabledPlugins": {
"anthropic-skills": false
}
}
Proposed Solution
- skillOverrides: "off" should mean off
The simplest change and the one that fixes the most pain. If I set a skill to "off", its description should not load into context.
- Per-project enabledPlugins for bulk control
Individual skillOverrides entries work for fine-grained control. But when I want to disable an entire plugin for a project, I shouldn't have to list all 28 skills one by one. A project-level enabledPlugins: { "anthropic-skills": false } should disable the whole plugin for that project — no descriptions loaded, no skills available.
Alternative Solutions
The only current workaround is disabling the plugin globally in ~/.claude/settings.json, which affects all projects — including ones where the plugin is wanted.
Priority
Critical - Blocking my work
Feature Category
CLI commands and flags
Use Case Example
I use the anthropic-skills plugin globally — it's useful for general-purpose work. But I have one project with its own custom skills that cover the same ground. I don't need the plugin there.
Today:
I set all 28 plugin skills to "off" in my project's settings.local.json.
They still load into context every turn. ~4,800 tokens.
Autocompact can't evict them — they're in the system prompt.
My only option is disabling the plugin globally, which breaks my other projects.
With per-project enabledPlugins:
I add "anthropic-skills": false to my project's .claude/settings.json.
No descriptions load. 4,800 tokens freed.
The plugin still works in every other project.
Additional Context
_No response_
This issue has 5 comments on GitHub. Read the full discussion on GitHub ↗