explanatory-output-style plugin SessionStart hook hangs all input in 2.1.132
Summary
The explanatory-output-style@claude-plugins-official plugin registers aSessionStart hook that hangs the Claude Code harness for 5 seconds,
30 seconds, or up to the 600s hard timeout before resolving. While the
hook is alive, no user input is processed — including built-in slash
commands like /exit. The hook's script body is trivial
(cat << EOF { ... } EOF; exit 0), so the hang appears to be in the
harness's hook invocation rather than the plugin script.
Affects every new claude process — fresh sessions, --resume, and--continue — making the harness effectively unusable for users with
the plugin enabled.
Symptoms
- Slow first prompt on a new session (apparent freeze)
- Slash commands typed during the freeze appear to silently fail (input
box clears, no command dispatches)
- Eventually the session "thaws" and behaves normally
- Sessions started prior to today's marketplace refresh continue working
normally — the hook only fires at session start
Evidence
From four stillborn session JSONLs all dated 2026-05-07:
| Session | Hook duration | Outcome |
|---|---|---|
| bc49f1cc… | 29,948 ms | hook_non_blocking_error |
| 0e4d5f88… | 5,384 ms | hook_non_blocking_error |
| a253ec97… | 600,061 ms | hook_cancelled (10-min cap) |
| 5658b76e… | 600,054 ms | hook_cancelled |
Confirmed live by ps: multiple bash session-start.sh processes from
the plugin in S state (sleeping), oldest from 9:18 AM today. They
never exit on their own.
Reproduction
- Install
explanatory-output-style@claude-plugins-officialfrom the
official marketplace.
- Confirm it's enabled in
~/.claude/settings.jsonenabledPlugins. - Start a new claude process:
claudeorclaude --continue. - Try any prompt or slash command at the first prompt.
- Observe: input is queued but doesn't dispatch until the hook resolves
(5s–600s).
Suspected root cause
The plugin's hook script is trivially fast:
#!/usr/bin/env bash
cat << 'EOF'
{ "hookSpecificOutput": { "hookEventName": "SessionStart", "additionalContext": "..." } }
EOF
exit 0
Running this script directly from a shell takes ~5 ms. The hang is in
how the harness invokes the hook, not the script. Hypothesis: a
recent change in 2.1.131 or 2.1.132 altered hook subprocess setup
(stdin/stdout pipe handling, ${CLAUDE_PLUGIN_ROOT} resolution, or
similar). The plugin's files haven't been modified since 2026-03-30;
the regression aligned with today's marketplace refresh (~09:20 PT,
2026-05-07) when installed_plugins.json was rewritten.
Worth noting: even though the hook is registered withoutblocking: true, the harness still waits for it to complete or die
before unblocking input. A non-blocking hook arguably shouldn't gate
user input on its own lifecycle.
Workaround
Disable the plugin in ~/.claude/settings.json enabledPlugins (remove
the "explanatory-output-style@claude-plugins-official": true entry).
Sessions become responsive immediately for new launches.
Environment
- claude-code: 2.1.132
- macOS: Darwin 25.4.0
- Marketplace:
claude-plugins-official - Plugin:
explanatory-output-style@claude-plugins-officialv1.0.0 - Plugin script unchanged since 2026-03-30
---
(Issue drafted by Claude Code 🤖 but reviewed by me before posting)
This issue has 3 comments on GitHub. Read the full discussion on GitHub ↗