HTTP hooks silently fail in second+ concurrent sessions (report success, never send request)
Resolved 💬 2 comments Opened Mar 5, 2026 by tdodd777 Closed Mar 6, 2026
Environment
- Claude Code version: 2.1.69
- OS: macOS (Darwin 25.3.0, arm64)
- Shell: zsh
- IDE: VS Code
Description
When multiple Claude Code sessions are active in the same project, HTTP hooks in the second (and subsequent) sessions report "success" client-side but never actually send HTTP requests to the server. The first session after a VS Code restart works perfectly — all hooks fire and reach the server.
Steps to reproduce
- Run a local HTTP server that logs incoming requests and writes to a database
- Configure HTTP hooks in
~/.claude/settings.jsonforUserPromptSubmit,PreToolUse,PostToolUse, etc. - Force quit VS Code, relaunch it
- Open a Claude Code session (Session A) — hooks work correctly, all HTTP requests arrive at the server
- Open a second Claude Code session (Session B) in the same project
- In Session B, submit a prompt and use a tool (e.g., Read a file)
Expected behavior
Both sessions send HTTP requests for all configured hook events.
Actual behavior
- Session A: All hooks fire correctly —
UserPromptSubmit,PreToolUse,PostToolUserequests all arrive at the server with correct payloads. - Session B:
SessionStartfires correctly (session row created in DB via the HTTP request)UserPromptSubmit— system reminder shows "hook success: Success" but no HTTP request reaches the server (zero rows in DB)PreToolUse/PostToolUse— no HTTP requests reach the server despite tools being used successfully- No other hook events arrive
Evidence
The server is confirmed healthy:
- Direct
curlto all endpoints returns correct responses - All 22 pytest tests pass
/healthendpoint shows server is running- Session A's hooks continue working throughout
The database shows Session B has a sessions row (from SessionStart) but zero tool_events rows — even though UserPromptSubmit should create one and the client reports success.
Additional context
- This is not the same as #30170 (SessionStart HTTP hooks not firing). In our case,
SessionStartis the one that works — everything else fails. - Killing all Claude instances, waiting, and restarting produces a working first session but the bug reappears on the second concurrent session.
- Observed with hooks configured only in global
~/.claude/settings.json(project settings empty{}). - The bug may have first appeared after editing
.claude/settings.jsonwhile a session was active, but it persists across full restarts now.
Workaround
Only use one Claude Code session per project at a time. Force quit and restart VS Code to reset.
This issue has 2 comments on GitHub. Read the full discussion on GitHub ↗