Skip to content

Commit c1ae807

Browse files
committed
docs: Add audit and plan for Claude plugins Windows hang issue
1 parent 5e9c2f5 commit c1ae807

File tree

1 file changed

+22
-0
lines changed

1 file changed

+22
-0
lines changed

docs/analysis_windows_hangs.md

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
### Analysis & Recommendation for Maintainers
2+
3+
Following up on the great context provided by @L0rdS474n, I've completed a full audit of all `hooks.json` files in the repository.
4+
5+
**Findings:**
6+
The following plugins are confirmed to be missing `"async": true` for their command-based hooks, which is the direct cause of the Windows startup hang:
7+
1. `plugins/hookify/hooks/hooks.json`
8+
2. `plugins/security-guidance/hooks/hooks.json`
9+
3. `plugins/explanatory-output-style/hooks/hooks.json`
10+
4. `plugins/learning-output-style/hooks/hooks.json`
11+
5. `plugins/ralph-loop/hooks/hooks.json`
12+
13+
**Technical Root Cause:**
14+
On Windows, synchronous subprocess calls (especially during the `SessionStart` or `PreToolUse` phases) can block the Node.js event loop before it has established its internal polling for subprocess handles. This results in a deadlocked state where Claude Code is waiting for a process to finish, but the signal that it has finished cannot be processed by the blocked loop.
15+
16+
**Next Steps for Maintainers:**
17+
Since PR #354 was auto-closed due to policy, I recommend that a team member cherry-pick the following changes to restore Windows stability:
18+
- **Add `"async": true`** to every hook entry of type `"command"` or `"shell"` in the 5 files listed above.
19+
- **Investigate the Trivago connector**: As noted by the community, this connector might be inheriting or triggering similar blocking behavior when proxied to Claude Code. If it uses hooks, it likely also needs `async: true`.
20+
21+
**Long-term Fix:**
22+
Consider adding a validation check in the `claude-plugins` system to warn or enforce `async: true` for hooks that don't need to return a block/allow decision (i.e., side-effect hooks).

0 commit comments

Comments
 (0)