VSCode extension v2.1.139: enabledPlugins:false ignored at hook-load time — disabled plugins still register hooks
Summary
In Claude Code VSCode extension v2.1.139, plugins marked as enabledPlugins: { "<name>@<marketplace>": false } in ~/.claude/settings.json are correctly listed as "disabled" in the plugin count, but their hooks are still loaded and registered at session start.
Repro
- Install multiple plugins via the marketplace (e.g.
hookify@claude-plugins-official,ralph-loop@claude-plugins-official,security-guidance@claude-plugins-official). - Set them all to
falsein~/.claude/settings.json:
``json``
"enabledPlugins": {
"hookify@claude-plugins-official": false,
"ralph-loop@claude-plugins-official": false,
"security-guidance@claude-plugins-official": false
}
- Reload the VSCode window.
- Tail the Claude VSCode extension log (
~/.vscode-server-insiders/data/logs/<TIMESTAMP>/exthost*/Anthropic.claude-code/Claude VSCode.log).
Expected
Only enabled plugins should have their hooks/hooks.json loaded. Disabled plugins should be a no-op.
Actual
Log shows hooks from all installed plugins being loaded regardless of the enabledPlugins: false setting:
[DEBUG] Loaded hooks from standard location for plugin jc-cloud-ingenium: …
[DEBUG] Loaded hooks from standard location for plugin hookify: … ← disabled
[DEBUG] Loaded hooks from standard location for plugin ralph-loop: … ← disabled
[DEBUG] Loaded hooks from standard location for plugin security-guidance: … ← disabled
[DEBUG] Found 28 plugins (11 enabled, 17 disabled)
[DEBUG] Registered 53 hooks from 11 plugins
The plugin count line correctly says 11 enabled / 17 disabled, but the loader still walks every plugin's hooks/hooks.json. The disabled plugins' PreToolUse / PostToolUse / Stop / UserPromptSubmit hooks are then registered and fire on every relevant event.
Impact
For plugins like hookify (which spawns 4 python3 subprocesses on each of UserPromptSubmit / PreToolUse / PostToolUse / Stop), this adds ~100ms latency to every tool call and event for users who deliberately disabled it. Multiplied across the typical session, this is a meaningful slowdown plus log noise.
Workaround
Physically rename the plugin's cache directory so the loader can't find it:
cd ~/.claude/plugins/cache/claude-plugins-official
mv hookify hookify.disabled
mv ralph-loop ralph-loop.disabled
mv security-guidance security-guidance.disabled
# reload window
After this, the Loaded hooks from standard location for plugin … lines for those plugins disappear from the log.
Suggested fix
Gate the loadHooksFromStandardLocation() call on enabledPlugins[<name>@<marketplace>] !== false before walking the plugin's directory tree.
Environment
- Claude Code VSCode extension: v2.1.139
- VSCode Insiders, devcontainer on ARM64/LinuxKit
- Plugins installed: 28 (11 enabled, 17 disabled per settings)
Related issues
- #46936 (Feature: version constraints for enabledPlugins) — different feature ask
- #51118 (enabledPlugins in managed settings does not auto-install) — different bug
- #45323 (CLI: auto-install plugins from managed settings) — different feature
None of these cover the runtime "disabled plugins still load hooks" behavior.
This issue has 1 comment on GitHub. Read the full discussion on GitHub ↗