Settings watcher only watches dirs that had a settings file at session start (silent hook failure)
Resolved 💬 1 comment Opened Apr 29, 2026 by bradygrapentine Closed May 2, 2026
Problem
When a user creates .claude/settings.json (or .claude/settings.local.json) in a project that didn't have one when the session started, the harness's settings watcher does not pick it up. Hooks defined in the new file silently never fire. There is no error, no log line, no UI indication.
The only fix is to open the /hooks UI menu (which reloads config) or restart the session. This is undiscoverable — users assume their hook config is broken and waste time debugging the hook itself.
Proposed
One of:
- Watch
.claude/directory creation events too, so newly-created settings files in previously-empty project dirs are picked up. - On file write to
settings.json/settings.local.jsonin any project ancestor of cwd, surface a one-time message: "Settings changed — open/hooksor restart to apply." - Auto-reload settings on file write, the same way the watcher already handles edits to existing files.
Reproduction
- Start
claudein a project with no.claude/directory. - Create
.claude/settings.jsonwith a hook (e.g., a PostToolUse Write|Edit formatter). - Trigger the matching tool. Hook does not fire. No error.
- Open
/hooksmenu (which closes the turn). Re-trigger. Hook now fires.
This is documented as a known footgun in the update-config skill — telling users to "open /hooks once, you can't do this yourself" — but it should not need a workaround skill at all.
This issue has 1 comment on GitHub. Read the full discussion on GitHub ↗