SessionStart hooks fire for disabled plugins (settings.local.json override ignored)
Resolved 💬 11 comments Opened Jan 21, 2026 by richard-scott Closed Feb 28, 2026
Bug Description
When a plugin is disabled via settings.local.json, its SessionStart hooks still execute, causing startup errors.
Steps to Reproduce
- Have a plugin enabled in
~/.claude/settings.json:
``json``
"enabledPlugins": {
"superpowers@claude-plugins-official": true
}
- Disable it via
~/.claude/settings.local.json:
``json``
"enabledPlugins": {
"superpowers@claude-plugins-official": false
}
- Start Claude Code
Expected Behavior
- The
settings.local.jsonoverride should be respected - Hooks from disabled plugins should not execute
- No startup error should occur
Actual Behavior
- Error displayed:
SessionStart:startup hook error - The plugin's
SessionStarthook still fires despite being disabled in local settings - The hook file exists and is valid (
~/.claude/plugins/cache/claude-plugins-official/superpowers/4.0.3/hooks/session-start.sh)
Environment
- Platform: Windows 11
- Claude Code: Latest version
- Plugin: superpowers@claude-plugins-official
Analysis
It appears the hook registration/execution happens before settings.local.json overrides are merged with global settings, or the plugin cache doesn't check the enabled state before running hooks.
Workaround
Disabling the plugin in the global settings.json instead of settings.local.json prevents the error.
This issue has 11 comments on GitHub. Read the full discussion on GitHub ↗