0
Fork 0
mirror of https://github.com/obra/superpowers.git synced 2026-09-25 22:09:05 +00:00

Windows - Superpowers Plugin Freezes Terminal Keyboard Input in VSCode #404

Closed
opened 2026-02-03 20:36:33 +00:00 by timnolanjr · 2 comments
timnolanjr commented 2026-02-03 20:36:33 +00:00 (Migrated from github.com)

This is my first ever issue/bug report so please ask me for any additional context or if I've broken any rules. TIA. I also don't know if it's considered bad form to report a bug for releases beyond stable (CC stable is v2.1.19).

Describe the bug
When superpowers 4.0.3 or 4.1.1 is enabled with Claude Code 2.1.29 or 2.1.30 in VSCode on Windows, keyboard input in the Claude Code panel becomes completely unresponsive. The cursor appears solid (not blinking), and no keystrokes register - including Ctrl+C and Escape. The same setup works fine in terminal.

To Reproduce
Steps to reproduce the behavior (Windows environment):

  1. Windows with VSCode and Claude Code 2.1.29 or 2.1.30 extension installed
  2. Install superpowers 4.1.1: /install superpowers@claude-plugins-official
  3. Close and reopen VSCode
  4. Launch Claude Code in a terminal window within VSCode
  5. Attempt to type in the input area. Nothing appears as if something is "swallowing" the keystrokes.

Expected behavior
Keyboard input should work normally - typing should appear in the input field, and shortcuts like Ctrl+C/Escape should function. The same setup continues to work fine in terminal, and I have nothing VSCode-specific when it comes to Claude.

Logs
N/A - Issue was diagnosed through isolation testing. Setting disableAllHooks: true in ~/.claude/settings.json confirmed hooks were the cause; further testing isolated it to the superpowers SessionStart hook.

Additional context
This fix worked for me locally: Add async: true to the SessionStart hook in hooks/hooks.json:

  {
    "type": "command",
    "command": "${CLAUDE_PLUGIN_ROOT}/hooks/session-start.sh",
    "async": true
  }
This is my first ever issue/bug report so please ask me for any additional context or if I've broken any rules. TIA. I also don't know if it's considered bad form to report a bug for releases beyond stable (CC stable is v2.1.19). **Describe the bug** When superpowers 4.0.3 or 4.1.1 is enabled with Claude Code 2.1.29 or 2.1.30 in VSCode on Windows, keyboard input in the Claude Code panel becomes completely unresponsive. The cursor appears solid (not blinking), and no keystrokes register - including Ctrl+C and Escape. The same setup works fine in terminal. **To Reproduce** Steps to reproduce the behavior (Windows environment): 1. Windows with VSCode and Claude Code 2.1.29 or 2.1.30 extension installed 2. Install superpowers 4.1.1: /install superpowers@claude-plugins-official 3. Close and reopen VSCode 4. Launch Claude Code in a terminal window within VSCode 5. Attempt to type in the input area. Nothing appears as if something is "swallowing" the keystrokes. **Expected behavior** Keyboard input should work normally - typing should appear in the input field, and shortcuts like Ctrl+C/Escape should function. The same setup continues to work fine in terminal, and I have nothing VSCode-specific when it comes to Claude. **Logs** N/A - Issue was diagnosed through isolation testing. Setting `disableAllHooks: true` in `~/.claude/settings.json` confirmed hooks were the cause; further testing isolated it to the superpowers SessionStart hook. **Additional context** This fix worked for me locally: Add async: true to the SessionStart hook in `hooks/hooks.json`: ``` { "type": "command", "command": "${CLAUDE_PLUGIN_ROOT}/hooks/session-start.sh", "async": true } ```
psybuild commented 2026-02-04 10:51:46 +00:00 (Migrated from github.com)

I had the exact same issue with a frozen terminal - worked fine outside of my project directory strangely enough. Isolated to Superpowers and working now with the async: true

Here's what Claude says:

Root cause: The session-start.sh hook runs synchronously by default. The escape_for_json function iterates character-by-character in pure bash (for (( i=0; i<${#input}; i++ ))), which is extremely slow on Windows Git Bash. This blocks the Ink TUI from entering raw mode for stdin.

Fix: Adding "async": true to the hook in hooks/hooks.json:

{
"type": "command",
"command": "${CLAUDE_PLUGIN_ROOT}/hooks/session-start.sh",
"async": true
}

Env: Windows 11, Claude Code 2.1.30, Git Bash, superpowers 4.1.1

I had the exact same issue with a frozen terminal - worked fine outside of my project directory strangely enough. Isolated to Superpowers and working now with the async: true Here's what Claude says: Root cause: The session-start.sh hook runs synchronously by default. The escape_for_json function iterates character-by-character in pure bash (for (( i=0; i<${#input}; i++ ))), which is extremely slow on Windows Git Bash. This blocks the Ink TUI from entering raw mode for stdin. Fix: Adding "async": true to the hook in hooks/hooks.json: { "type": "command", "command": "${CLAUDE_PLUGIN_ROOT}/hooks/session-start.sh", "async": true } Env: Windows 11, Claude Code 2.1.30, Git Bash, superpowers 4.1.1
xiaosongz commented 2026-02-04 14:53:34 +00:00 (Migrated from github.com)

Confirming: This is NOT VSCode-specific — it's a universal Windows issue

I hit the same freeze on Git Bash 5.2.37 (MSYS2) running Claude Code v2.1.30 directly in Windows Terminal — no VSCode involved. The CLI displays SessionStart:startup hook error and then becomes completely unresponsive. Keyboard input is dead, Ctrl+C doesn't work, requires force-kill.

This also reproduces in plain Windows Terminal and PowerShell terminals (see #414 for additional confirmation). So the title may be slightly misleading — this affects all Windows terminals, not just the VSCode integrated terminal.

Root cause analysis

We investigated this in detail and filed anthropics/claude-code#22934 for the Claude Code side of the problem. Here's what we found:

  1. The hook runner blocks the main event loop. When session-start.sh executes synchronously on Windows, it either fails (path issues, bash not in PATH) or runs extremely slowly (the escape_for_json function iterates character-by-character in pure bash — as @psybuild noted). Either way, the Ink TUI never enters raw mode for stdin, so keyboard input is dead.

  2. The async: true fix works because it unblocks the event loop — the hook runs in the background while the TUI renders normally. This is a great local workaround.

  3. Compounding factor: Large accumulated .jsonl session files in ~/.claude/projects/ (370MB+ in our case) make the hang worse. Cleaning them helps: find ~/.claude/projects -name "*.jsonl" -size +10M -delete

Workarounds (from least to most disruptive)

  1. Add async: true to the hook in ~/.claude/plugins/cache/claude-plugins-official/superpowers/4.1.1/hooks/hooks.json (as OP suggested — confirmed working)
  2. Disable the plugin: "superpowers@claude-plugins-official": false in ~/.claude/settings.json
  3. Downgrade to Claude Code 2.1.28 (the freeze is a v2.1.29+ regression)
## Confirming: This is NOT VSCode-specific — it's a universal Windows issue I hit the same freeze on **Git Bash 5.2.37 (MSYS2)** running Claude Code v2.1.30 directly in Windows Terminal — no VSCode involved. The CLI displays `SessionStart:startup hook error` and then becomes completely unresponsive. Keyboard input is dead, Ctrl+C doesn't work, requires force-kill. This also reproduces in plain **Windows Terminal** and **PowerShell** terminals (see #414 for additional confirmation). So the title may be slightly misleading — this affects all Windows terminals, not just the VSCode integrated terminal. ### Root cause analysis We investigated this in detail and filed [anthropics/claude-code#22934](https://github.com/anthropics/claude-code/issues/22934) for the Claude Code side of the problem. Here's what we found: 1. **The hook runner blocks the main event loop.** When `session-start.sh` executes synchronously on Windows, it either fails (path issues, bash not in PATH) or runs extremely slowly (the `escape_for_json` function iterates character-by-character in pure bash — as @psybuild noted). Either way, the Ink TUI never enters raw mode for stdin, so keyboard input is dead. 2. **The `async: true` fix works** because it unblocks the event loop — the hook runs in the background while the TUI renders normally. This is a great local workaround. 3. **Compounding factor:** Large accumulated `.jsonl` session files in `~/.claude/projects/` (370MB+ in our case) make the hang worse. Cleaning them helps: `find ~/.claude/projects -name "*.jsonl" -size +10M -delete` ### Workarounds (from least to most disruptive) 1. **Add `async: true`** to the hook in `~/.claude/plugins/cache/claude-plugins-official/superpowers/4.1.1/hooks/hooks.json` (as OP suggested — confirmed working) 2. **Disable the plugin**: `"superpowers@claude-plugins-official": false` in `~/.claude/settings.json` 3. **Downgrade** to Claude Code 2.1.28 (the freeze is a v2.1.29+ regression) ### Related issues - [anthropics/claude-code#22934](https://github.com/anthropics/claude-code/issues/22934) — Our detailed report on the Claude Code freeze regression - [anthropics/claude-code#22906](https://github.com/anthropics/claude-code/issues/22906) — Community thread confirming the v2.1.30 Windows freeze (5+ users) - #414 — Same freeze, different trigger (bash not in PATH) - #389, #399 — Related `CLAUDE_PLUGIN_ROOT` path issues on Windows
Sign in to join this conversation.
No milestone
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
skills/obra-superpowers#404
No description provided.