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

  1. Have a plugin enabled in ~/.claude/settings.json:

``json
"enabledPlugins": {
"superpowers@claude-plugins-official": true
}
``

  1. Disable it via ~/.claude/settings.local.json:

``json
"enabledPlugins": {
"superpowers@claude-plugins-official": false
}
``

  1. Start Claude Code

Expected Behavior

  • The settings.local.json override 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 SessionStart hook 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.

View original on GitHub ↗

This issue has 11 comments on GitHub. Read the full discussion on GitHub ↗