Claude Code Desktop crashes with exit code 3221225477 (STATUS_ACCESS_VIOLATION) on Windows ARM64 — x64 winpty-agent.exe incompatibility
Environment
- OS: Windows 11 Pro (Build 26200), ARM64 hardware (Samsung Galaxy Book4 Edge)
- Claude Code Desktop version: 1.3883.0 (also tested on 1.3561.0 and 1.3109.0)
claude.exearchitecture: x64 (confirmed via PE header inspection)winpty-agent.exearchitecture: x64 (confirmed via PE header inspection)- Hardware: ARM64 device — x64 processes run under ARM64 emulation
Bug Description
Claude Code Desktop crashes with exit code 3221225477 (0xC0000005 STATUS_ACCESS_VIOLATION) on Windows ARM64. The crash happens on session start or on the very first command issued, before any user code runs.
The crash is deterministic and reproducible across multiple fresh sessions and multiple app versions.
Root Cause (Confirmed)
Both claude.exe (the Electron app shell) and winpty-agent.exe (node-pty native module) are x64 binaries running under ARM64 emulation.
PE header inspection confirms:
app-1.3883.0\claude.exe → x64 (0x8664)
app-1.3883.0\resources\app.asar.unpacked\node_modules\node-pty build\Release\winpty-agent.exe → x64 (0x8664)
When the Electron process initializes its PTY via node-pty, it spawns winpty-agent.exe as a subprocess. Under ARM64 emulation, this native x64 module triggers a STATUS_ACCESS_VIOLATION in the main Electron process, causing the entire app to exit with code 3221225477.
Hooks compound the problem: Claude Code fires SessionStart, UserPromptSubmit, PreToolUse, PostToolUse, and Stop hooks on every interaction — each involving PTY I/O that re-triggers the winpty path.
What We Investigated and Ruled Out
We spent significant time ruling out subprocess-level causes before confirming the crash is in the Electron process itself:
1. Hook subprocess architecture (ruled out)
- Replaced NVM-managed Node.js (x64 v22.22.2) with ARM64 Node.js v24.13.0
- Created ARM64
python3.cmdshims pointing to Python 3.12 ARM64 native binary - Created
node.cmdshim in NVM_HOME as PATH intercept - Fixed broken MCP server node path
- Result: Crash persisted.
2. Hookify plugin (ruled out)
- Disabled
hookify@claude-plugins-officialentirely - Result: Crash persisted.
3. External MCP server (ruled out)
- Removed
@21st-dev/magicMCP server - Result: Crash persisted.
4. All custom hooks disabled (ruled out)
- Renamed
hooks→hooks_disabledin~/.claude/settings.json - Result: Crash persisted.
5. CLI workaround (WORKS — confirms Electron/winpty is the issue)
Running Claude Code via ARM64 Node directly, bypassing Electron and winpty entirely:
C:\nvm4w\nodejs\node.exe "C:\Users\...\AppData\Roaming\npm\node_modules\@anthropic-ai\claude-code\cli.js"
This works without crashing, confirming the fault is in the Electron/node-pty/winpty layer.
Crash Signature
- Exit code:
3221225477(decimal) =0xC0000005(hex) =STATUS_ACCESS_VIOLATION - Timing: On session start, before any user interaction, or on the first PTY write
- Frequency: ~100% reproducible on this hardware
- Affected versions: All tested (1.3109.0, 1.3561.0, 1.3883.0)
Requested Fix
Provide a native ARM64 Windows build of Claude Code Desktop with ARM64-compiled Electron and ARM64-native node-pty/winpty-agent.
Both Electron and node-pty have ARM64 Windows support available upstream. The fix would be to add an ARM64 Windows target to the build pipeline.
Workaround (for other affected users)
Use the Claude Code CLI directly via an ARM64 Node.js binary:
"C:\path\to\arm64\node.exe" "C:\Users\%USERNAME%\AppData\Roaming\npm\node_modules\@anthropic-ai\claude-code\cli.js"
This is functional but lacks desktop integration.
This issue has 3 comments on GitHub. Read the full discussion on GitHub ↗