Disabled plugins still have their hooks executed

Status Closed — duplicate
Maintainer reply None cached
Activity 3 comments · opened Mar 26, 2026 · closed Mar 30, 2026

Description

Plugins set to false in enabledPlugins still have their hooks (Stop, PreToolUse, etc.) executed by Claude Code.

Reproduction

  1. Install a plugin that registers hooks (e.g., ralph-loop or hookify from claude-plugins-official)
  2. Disable it in ~/.claude/settings.json:

``json
"enabledPlugins": {
"ralph-loop@claude-plugins-official": false,
"hookify@claude-plugins-official": false
}
``

  1. Start a Claude Code session and observe the stop hooks output:

``
⏺ Ran 2 stop hooks
⎿ ${CLAUDE_PLUGIN_ROOT}/hooks/stop-hook.sh
⎿ python3 ${CLAUDE_PLUGIN_ROOT}/hooks/stop.py
⎿ Stop hook error: Failed with non-blocking status code: /bin/sh: .../ralph-loop/hooks/stop-hook.sh: Permission denied
``

Both hooks are from disabled plugins but still execute.

Expected behavior

Hooks defined in a plugin's hooks.json should not be executed when the plugin is disabled via enabledPlugins: false.

Actual behavior

Claude Code loads and executes hooks.json from all installed plugins in ~/.claude/plugins/marketplaces/*/plugins/*/hooks/hooks.json, regardless of the enabledPlugins setting.

Environment

  • Claude Code CLI (latest as of 2026-03-26)
  • macOS (Darwin 25.3.0)

View original on GitHub ↗

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