Hook settings are cached and changes don't take effect until session restart

Resolved 💬 3 comments Opened Feb 3, 2026 by fffokazaki Closed Feb 6, 2026

Description

When modifying hook settings in .claude/settings.json or .claude/settings.local.json during a session, the changes don't take effect until the session is restarted. The old hook configuration continues to be cached and used.

Steps to Reproduce

  1. Configure a PostToolUse hook in .claude/settings.json (e.g., "matcher": "Bash")
  2. During the session, modify the setting (e.g., change to "matcher": "mcp__plugin_github_github__create_pull_request")
  3. Run a Bash command - the old hook (matching all Bash) still fires

Expected Behavior

Changes to hook settings in .claude/settings.json or .claude/settings.local.json should take effect immediately without requiring a session restart.

Actual Behavior

Hook settings are cached at session start. Any modifications to the settings files during the session are ignored until a new session is started.

Workaround

  • Restart the Claude Code session after modifying hook settings
  • Or completely disable hooks and start a new session

Environment

  • Claude Code version: Latest (as of Feb 2026)
  • OS: macOS (Darwin 25.2.0)

Impact

Medium - This affects the developer experience when iterating on hook configurations, but can be worked around by restarting the session.

Suggested Solution

Consider implementing one of the following:

  1. File watching: Watch .claude/settings.json and .claude/settings.local.json for changes and reload hook configurations automatically
  2. Manual reload command: Add a /reload-hooks or similar command to manually reload hook configurations
  3. Per-invocation loading: Load hook settings on each tool invocation instead of caching at session start (may have performance implications)

View original on GitHub ↗

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