Claude Desktop hangs on quit (Cmd+Q) - requires force quit
Bug Report: Claude Desktop Hangs on Quit (Cmd+Q)
Summary
Claude Desktop 1.0.2339 hangs when attempting to quit via Cmd+Q. The quit cleanup handlers complete successfully and readyForQuit is marked, but the app never actually exits. Force quit is required every time.
Environment
- Claude Desktop Version: 1.0.2339
- macOS Version: Darwin 24.5.0 (Sequoia)
- Hardware: Apple Silicon Mac
Steps to Reproduce
- Open Claude Desktop
- Use the app normally (optional - happens with or without activity)
- Press Cmd+Q to quit
- App hangs indefinitely - windows may close but process stays alive
Expected Behavior
App should quit cleanly.
Actual Behavior
App hangs. Must force quit via Activity Monitor or pkill -9 -f "Claude.app".
Log Analysis
From ~/Library/Logs/Claude/main.log:
Successful quit (rare):
13:30:59 [info] Successully ran all onQuitCleanup handlers, marking readyForQuit
13:33:15 [info] beforeQuit handler fired, going down
13:33:15 [info] willQuit handler is ready for quit, so quitting
Failed quit (typical):
13:44:58 [info] beforeQuit handler fired, going down
13:44:58 [info] willQuit handler is not yet run, preventing quit and cleaning things up
13:44:58 [info] Starting onQuitCleanup
13:44:58 [info] Running onQuitCleanup: mcp-shutdown
13:44:58 [info] Running onQuitCleanup: quick-entry-cleanup
13:44:58 [info] Running onQuitCleanup: prototype-cleanup
13:44:58 [info] Shutting down MCP Server: tavily
13:44:58 [info] Shutting down MCP Server: repomix
... [all MCP servers shut down successfully]
13:44:58 [info] Successfully run onQuitCleanup: quick-entry-cleanup
13:44:58 [info] Successfully run onQuitCleanup: prototype-cleanup
13:44:58 [info] Successfully run onQuitCleanup: mcp-shutdown
13:44:58 [info] Successully ran all onQuitCleanup handlers, marking readyForQuit
[HANGS HERE - never reaches "willQuit handler is ready for quit, so quitting"]
Additional Issue: Chrome Extension Exacerbates Problem
When "Claude in Chrome" browser extension is active, it triggers MCP reconnection requests during quit:
13:19:35 [info] Successully ran all onQuitCleanup handlers, marking readyForQuit
13:19:39 [info] MCP Server connection requested for: filesystem
13:19:39 [info] Suspending MCP launch due to active quit: filesystem
13:19:39 [info] MCP Server connection requested for: Claude in Chrome
... [all servers try to reconnect]
Disabling the Chrome extension stops the reconnection requests, but the core hang persists.
Process State During Hang
When hung, these processes remain alive:
/Applications/Claude.app/Contents/MacOS/Claude(main process)Claude Helper (Renderer)(multiple instances)Claude Helper (GPU)Claude Helper(network utility)- MCP server disclaimer wrappers
Root Cause Hypothesis
The Electron app's quit sequence:
beforeQuitfires correctlyonQuitCleanuphandlers all complete successfullyreadyForQuitis marked- BUG: The code path that should call
app.quit()afterreadyForQuitis never reached - Renderer processes remain alive indefinitely
There appears to be a race condition or missing callback between marking readyForQuit and the actual app.quit() call.
Workarounds
- Force quit via Activity Monitor
pkill -9 -f "Claude.app"from terminal- Disabling "Claude in Chrome" extension reduces but doesn't fix the issue
Impact
- Must force quit every time
- Potential for orphaned MCP server processes
- Poor user experience
Requested Fix
Audit the quit handler code path between readyForQuit and app.quit(). Ensure the final quit actually executes after cleanup completes.
This issue has 9 comments on GitHub. Read the full discussion on GitHub ↗