[BUG] claude resume freezes terminal on Windows 11 - v1.0.96

Status Closed — not planned
Maintainer reply ✓ Yes — ant-kurt
Activity 14 comments · opened Aug 29, 2025 · closed Jan 13, 2026
💡 Likely answer: A maintainer (ant-kurt, collaborator) responded on this thread — see the highlighted reply below.

[BUG] claude resume freezes terminal on Windows 11 - v1.0.96

Description

The claude resume command causes complete terminal freeze on Windows 11. The terminal becomes unresponsive and requires force-closing. This makes session resumption completely unusable.

Environment

  • OS: Windows 11 (Build 10.0.26100.4946)
  • Claude CLI Version: 1.0.96 (Claude Code)
  • Terminal: Windows Terminal / Command Prompt
  • Installation Method: npm install -g @anthropic-ai/claude-code

Reproduction Steps

  1. Install Claude CLI: npm install -g @anthropic-ai/claude-code
  2. Start a session: claude
  3. End the session
  4. Try to resume: claude resume
  5. Terminal immediately freezes - no keyboard input accepted, no response

Expected Behavior

The claude resume command should restore the previous session and allow continued interaction.

Actual Behavior

Terminal becomes completely unresponsive upon executing claude resume. No error message is displayed. The only solution is to force-close the terminal window.

Additional Context

  • Fresh installation today (August 29, 2025)
  • Regular claude command works fine
  • PATH had to be manually configured to include C:\Users\jharvill\AppData\Roaming\npm
  • This appears related to issue #6823 which reports similar freezing behavior with other Claude commands

Workaround

Currently using claude to start fresh sessions instead of claude resume. This works but loses all session context.

Impact

This is a critical usability issue that prevents session continuity, a core feature of Claude CLI.

---
Reported by: Claude Code (yes, really - I'm reporting my own bug while helping a user work around it!)
Date: August 29, 2025

View original on GitHub ↗

14 Comments

zorlac · 1 year ago

I have same issue on Windows 10 Terminal, claude resume freezes and arrow keys doesn't work. Currently using v1.0.98

ant-kurt collaborator · 1 year ago

Interesting - I will note that the proper command is claude --resume (not claude resume).

Is your %UserProfile%\.claude.json well-formed? Any additional information present when you run with flag --debug or env var ANTHROPIC_LOG=debug?

mrieck · 1 year ago

I have this problem on Native windows. I noticed that if I remove all hooks then it works and doesn't freeze input. Even with the simplest SessionStart hook whether it's a node script, "cmd /c exit 0", or "echo." it still breaks and freezes input.

Here's --debug flag output when it freezes input.

Windows PowerShell
Copyright (C) Microsoft Corporation. All rights reserved.

Install the latest PowerShell for new features and improvements! https://aka.ms/PSWindows

PS C:\Users\markr> cd C:\wamp\www\cli-vibes\cli-vibes\
PS C:\wamp\www\cli-vibes\cli-vibes> claude --debug
[DEBUG] Watching for changes in setting files C:\Users\markr\.claude\settings.json, C:\wamp\www\cli-vibes\cli-vibes\.claude\settings.local.json...
[DEBUG] Using bash path: "C:\Program Files\Git\bin\bash.exe"
[DEBUG] Writing to temp file: C:\Users\markr\.claude.json.tmp.27908.1756528663863
[DEBUG] Preserving file permissions: 100666
[DEBUG] Temp file written successfully, size: 24282 bytes
[DEBUG] Applied original permissions to temp file
[DEBUG] Renaming C:\Users\markr\.claude.json.tmp.27908.1756528663863 to C:\Users\markr\.claude.json
[DEBUG] File C:\Users\markr\.claude.json written atomically
[DEBUG] Applying permission update: Adding 6 allow rule(s) to destination 'userSettings': ["Search(*)","Search(pattern:*)","Search(pattern:*, include:*)","Read(*)","Edit(*)","Write(*)"]
[DEBUG] Applying permission update: Adding 2 deny rule(s) to destination 'userSettings': ["Bash(yarn:*)","Bash(npm:*)"]
[DEBUG] Applying permission update: Adding 12 allow rule(s) to destination 'localSettings': ["Bash(find:*)","Bash(grep:*)","Bash(sed:*)","Bash(rg:*)","mcp__build-agent-bridge__send_command","Bash(rm:*)","Bash(ls:*)","Bash(cat:*)","Bash(git add:*)","Bash(sqlite3:*)","Bash(cargo check:*)","WebSearch"]
[DEBUG] Applying permission update: Adding 1 deny rule(s) to destination 'localSettings': ["Bash(yarn:*)"]
[DEBUG] Creating shell snapshot for bash (C:\Program Files\Git\bin\bash.exe)
[DEBUG] Creating snapshot at: C:\Users\markr\.claude\shell-snapshots\snapshot-bash-1756528663962-ey0dy1.sh
[DEBUG] Writing to temp file: C:\Users\markr\.claude\todos\12ee9507-e2cb-4045-a13b-a14d0d559c02-agent-12ee9507-e2cb-4045-a13b-a14d0d559c02.json.tmp.27908.1756528663978
[DEBUG] Temp file written successfully, size: 2 bytes
[DEBUG] Renaming C:\Users\markr\.claude\todos\12ee9507-e2cb-4045-a13b-a14d0d559c02-agent-12ee9507-e2cb-4045-a13b-a14d0d559c02.json.tmp.27908.1756528663978 to C:\Users\markr\.claude\todos\12ee9507-e2cb-4045-a13b-a14d0d559c02-agent-12ee9507-e2cb-4045-a13b-a14d0d559c02.json
[DEBUG] File C:\Users\markr\.claude\todos\12ee9507-e2cb-4045-a13b-a14d0d559c02-agent-12ee9507-e2cb-4045-a13b-a14d0d559c02.json written atomically
[DEBUG] Found 0 plugins (0 enabled, 0 disabled) from 0 repositories
[DEBUG] Registered 0 hooks from 0 plugins
[DEBUG] Total plugin commands loaded: 0
[DEBUG] Ripgrep first use test: PASSED (mode=builtin, path=C:\Users\markr\AppData\Roaming\npm\node_modules\@anthropic-ai\claude-code\vendor\ripgrep\x64-win32\rg.exe)
[DEBUG] Writing to temp file: C:\Users\markr\.claude.json.tmp.27908.1756528664159
[DEBUG] Preserving file permissions: 100666
[DEBUG] Temp file written successfully, size: 24282 bytes
[DEBUG] Applied original permissions to temp file
[DEBUG] Renaming C:\Users\markr\.claude.json.tmp.27908.1756528664159 to C:\Users\markr\.claude.json
[DEBUG] File C:\Users\markr\.claude.json written atomically
[DEBUG] Writing to temp file: C:\Users\markr\.claude.json.tmp.27908.1756528664298
[DEBUG] Preserving file permissions: 100666
[DEBUG] Temp file written successfully, size: 24282 bytes
[DEBUG] Applied original permissions to temp file
[DEBUG] Renaming C:\Users\markr\.claude.json.tmp.27908.1756528664298 to C:\Users\markr\.claude.json
[DEBUG] File C:\Users\markr\.claude.json written atomically
[DEBUG] Executing hooks for SessionStart:startup
[DEBUG] Getting matching hook commands for SessionStart with query: startup
[DEBUG] Found 1 hook matchers in settings
[DEBUG] Matched 1 unique hooks for query "startup" (1 before deduplication)
[DEBUG] Found 1 hook commands to execute
[DEBUG] Executing hook command: echo. with timeout 60000ms
[DEBUG] Hook command completed with status 0: echo.
[DEBUG] Hook stdout:
...
[DEBUG] Hook output does not start with {, treating as plain text
╭───────────────────────────────────────────────────╮
│ ✻ Welcome to Claude Code!                         │
│                                                   │
│   /help for help, /status for your current setup  │
│                                                   │
│   cwd: C:\wamp\www\cli-vibes\cli-vibes            │
╰───────────────────────────────────────────────────╯
[DEBUG] AutoUpdaterWrapper: Installation type: npm-global, using native: false
[DEBUG] Shell snapshot created successfully (2314 bytes)

With this settings.json

{
  "hooks": {
    "SessionStart": [
      {
        "hooks": [
          {
            "command": "echo.",
            "type": "command"
          }
        ]
      }
    ]
  },
  "model": "opus",
  "permissions": {
    "allow": [
      "Search(*)",
      "Search(pattern:*)",
      "Search(pattern:*, include:*)",
      "Read(*)",
      "Edit(*)",
      "Write(*)"
    ],
    "deny": [
      "Bash(yarn:*)",
      "Bash(npm:*)"
    ]
  }
}

I tried starting fresh so this is my .claude.json in my user folder

{
  "numStartups": 21,
  "installMethod": "unknown",
  "autoUpdates": true,
  "cachedStatsigGates": {
    "tengu_disable_bypass_permissions_mode": false
  },
  "firstStartTime": "2025-08-30T03:05:22.706Z",
  "userID": "ommitted",
  "projects": {
    "C:\\wamp\\www\\cli-vibes\\cli-vibes": {
      "allowedTools": [],
      "history": [],
      "mcpContextUris": [],
      "mcpServers": {},
      "enabledMcpjsonServers": [],
      "disabledMcpjsonServers": [],
      "hasTrustDialogAccepted": true,
      "projectOnboardingSeenCount": 0,
      "hasClaudeMdExternalIncludesApproved": false,
      "hasClaudeMdExternalIncludesWarningShown": false,
      "lastTotalWebSearchRequests": 0
    }
  },
  "oauthAccount": {
    "accountUuid": "ommitted",
    "emailAddress": "ommitted",
    "organizationUuid": "ommitted",
    "organizationRole": "admin",
    "workspaceRole": null,
    "organizationName": "Mark R"
  },
  "claudeCodeFirstTokenDate": "2025-02-24T23:30:11.703662Z",
  "hasCompletedOnboarding": true,
  "lastOnboardingVersion": "1.0.98",
  "hasOpusPlanDefault": false,
  "subscriptionNoticeCount": 0,
  "hasAvailableSubscription": false,
  "cachedChangelog": "ommitted",
  "changelogLastFetched": 1756523339712,
  "s1mAccessCache": {
    "dfe36671-a7cf-4906-9aae-0088144bb8eb": {
      "hasAccess": false,
      "timestamp": 1756527603249
    }
  },
  "isQualifiedForDataSharing": false,
  "lastReleaseNotesSeen": "1.0.98"
}

These are my claude.cmd and my claude.ps1 files

@ECHO off
GOTO start
:find_dp0
SET dp0=%~dp0
EXIT /b
:start
SETLOCAL
CALL :find_dp0

IF EXIST "%dp0%\node.exe" (
  SET "_prog=%dp0%\node.exe"
) ELSE (
  SET "_prog=node"
  SET PATHEXT=%PATHEXT:;.JS;=;%
)

endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%"  "%dp0%\node_modules\@anthropic-ai\claude-code\cli.js" %*

===============================

#!/usr/bin/env pwsh
$basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent

$exe=""
if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
  # Fix case when both the Windows and Linux builds of Node
  # are installed in the same directory
  $exe=".exe"
}
$ret=0
if (Test-Path "$basedir/node$exe") {
  # Support pipeline input
  if ($MyInvocation.ExpectingInput) {
    $input | & "$basedir/node$exe"  "$basedir/node_modules/@anthropic-ai/claude-code/cli.js" $args
  } else {
    & "$basedir/node$exe"  "$basedir/node_modules/@anthropic-ai/claude-code/cli.js" $args
  }
  $ret=$LASTEXITCODE
} else {
  # Support pipeline input
  if ($MyInvocation.ExpectingInput) {
    $input | & "node$exe"  "$basedir/node_modules/@anthropic-ai/claude-code/cli.js" $args
  } else {
    & "node$exe"  "$basedir/node_modules/@anthropic-ai/claude-code/cli.js" $args
  }
  $ret=$LASTEXITCODE
}
exit $ret
ghost · 1 year ago

I don't know why, but you have to press enter after you do claude -r and then the session picker will become responsive.

NumberPlumber · 12 months ago
I don't know why, but you have to press enter after you do claude -r and then the session picker will become responsive.

Ahh this explains why I was able to resume my top/latest session without realizing this issue existed.. Didn't notice it until I was trying to resume an older session. Thanks for the tip!! @UsernameZer0

ghost · 12 months ago
> I don't know why, but you have to press enter after you do claude -r and then the session picker will become responsive. Ahh this explains why I was able to resume my top/latest session without realizing this issue existed.. Didn't notice it until I was trying to resume an older session. Thanks for the tip!! @UsernameZer0

No problem. Glad the tip helped.

fallonou1999 · 11 months ago

same here, I have to remove all the session start hooks eventually

ChrisOMetz · 11 months ago

+1 I have no hooks at all, but more than 174 previous session. And I also can only select the top most session.

NumberPlumber · 11 months ago
but more than 174 previous session. And I also can only s

Have you tried hitting enter once to unfreeze claude, then arrow keys to select session would like to restore, then enter 2nd time to confirm the session.

I was hitting enter twice and not realizing the time to select something besides the top session was between the 2 enter presses.

It shouldn't be this way, there's clearly a bug. But was like this for a long time. Recently the problem seems to be fixed though for me at least.

jinglejammer · 10 months ago

Workaround Found! 🎉

I've discovered a reliable workaround for this issue that instantly unlocks the frozen navigation:

The Fix:

  1. Run claude --resume (interface appears frozen, arrow keys don't work)
  2. Type / followed by any text (e.g., /asdf)
  3. Press Enter
  4. Arrow keys now work! You can navigate and select sessions normally

Why This Works:
The search function (/) appears to properly initialize the keyboard input handler that should have been activated automatically when the resume interface loads. Once you trigger the search (even with nonsense text), it "wakes up" the input system and everything works as expected.

My Environment:

  • Windows 11 with PowerShell 7 (also tested with PowerShell 5 - same issue)
  • Claude Code v2.0.28
  • Issue occurs consistently every time I use --resume
  • Without this workaround, the interface is completely unresponsive (no arrow keys, no number selection, no j/k navigation, can't even Ctrl+C out)

Additional Notes:

  • The search doesn't need to find anything - you can literally type /xyz and it still fixes the input
  • There's no visual feedback when you type the slash and text, but it's being registered
  • After pressing Enter, the arrow key navigation immediately becomes responsive
  • This workaround has been 100% reliable for me across multiple sessions

Hope this helps others stuck with this frustrating bug! It took me a while to accidentally discover this pattern, but it's been a lifesaver for recovering work after system crashes.

Tested and working as of October 2025. Would love to know if this works for others experiencing the same issue.

alumirtech · 9 months ago
### Workaround Found! 🎉 I've discovered a reliable workaround for this issue that instantly unlocks the frozen navigation: The Fix: 1. Run claude --resume (interface appears frozen, arrow keys don't work) 2. Type / followed by any text (e.g., /asdf) 3. Press Enter

Indeed - that unlocks an apparently completely frozen session! Thank you!
In my case it was a ``claude -c`` command freezing and I generally felt helpless

github-actions[bot] · 8 months ago

This issue has been inactive for 30 days. If the issue is still occurring, please comment to let us know. Otherwise, this issue will be automatically closed in 30 days for housekeeping purposes.

github-actions[bot] · 7 months ago

This issue has been automatically closed due to 60 days of inactivity. If you're still experiencing this issue, please open a new issue with updated information.

github-actions[bot] · 7 months ago

This issue has been automatically locked since it was closed and has not had any activity for 7 days. If you're experiencing a similar issue, please file a new issue and reference this one if it's relevant.