Complete Hang - Post Upgrade 2.4.27

Where does the bug appear (feature/product)?

Cursor IDE

Describe the Bug

After upgrade, Cursor does not complete startup.

File lock errors were reported as blocking the upgrade even after killing the cursor processes. Installed upgrade directly with 2.4.27 download, now not able to start Cursor. Have tried with no GPU and no extensions; have tried clean install of 2.4.27.

Steps to Reproduce

While using 2.3.41, prompted to upgrade
Experienced multiple error warnings - unable to complete upgrade due to file lock or process conflicts
Terminated processes, restart PC
Still unable to clear errors but IDE working
Installed 2.4.27 with downloaded executable
Now unable to start

Screenshots / Screen Recordings

Operating System

Windows 10/11

Version Information

2.4.27 prev 2.3.41

Additional Information

Troubleshooting attempts:

  • uninstall all cursor instances and reinstall 2.4.27
  • start cursor --disable-gpu and --disable-extensions (no change)

Was able to restore functionality after deleting UserData/Roaming/Cursor folder.
(I did save the logs)

Does this stop you from using Cursor

Yes - Cursor is unusable

Log analysis (Opus)

Cursor Upgrade Log Analysis — 2026-02-03

Executive Summary

Two distinct but interrelated issues were identified from the logs. The primary cause of both symptoms is the SSH Remote extension’s interaction with the upgrade process, compounded by a missing SSH key file and the askpass dialog being blocked or hidden during update-triggered restarts.


Issue 1: File/Process Lock Issues During Upgrade

Root Cause: Update Applied While SSH Remote Session Active

Timeline of events:

Time Event
16:31:48 Session 163148 starts on Cursor v2.4.22
16:31:59 SSH remote authority resolution begins for vps-remote
16:32:01 SSH key SSHpriv_openssh not found — falls back to password auth
16:32:03 Askpass prompts for password; responded in ~15s
16:32:23 SSH connection established successfully (22s total)
16:32:18 Update detected — state transitions: checkingdownloadingdownloadedupdating
16:32:57 Update state: ready (update applied in ~36s)
16:33:22 Extension host exits with code 0 — session torn down for restart

What happened: The update was applied while an active SSH remote session was running. The update process replaced files in C:\Users\SeanWing\AppData\Local\Programs\cursor\ while the running process still held handles to them. The extension host was then terminated to restart with the new version.

Evidence of File Lock Consequences

After restart (session 163515, window2), the following errors appeared immediately:

  1. ENOENT: no such file or directory, realpath 'c:\Users\SeanWing\AppData\Local\Programs\cursor\bin'

    • The cursor\bin directory was missing or not yet created by the installer

    • This is errno -4058 (ENOENT) on a realpath syscall — the path simply didn’t exist at the time the extension host tried to access it

    • Occurred at 16:36:11, roughly 1 minute after the new session started

  2. Failed to read .git/HEAD: ENOENT ... cursor\.git\HEAD

    • The Git extension tried to read .git/HEAD from the Cursor install directory (not a git repo) — harmless but confirms filesystem access issues
  3. Extension registration conflicts:

    • command 'geminicodeassist.startagent' already exists — duplicate command registration suggesting extensions loaded from both old and new paths

    • callClient: client not ready19 occurrences in window2, indicating the extension host infrastructure wasn’t fully initialized

  4. No Connect transport provider registered — Cursor’s internal IPC/transport layer failed to initialize, blocking:

    • User pricing info fetch

    • Privacy mode check

    • C++ config loading

    • Server creation

Contributing Factor: Extension Cleanup Race Condition

The shared process log shows extension cleanup at startup:

Marked extension as removed anthropic.claude-code-2.1.25-win32-x64
Marked extension as removed atom8n.n8n-atom-v3-3.25.23-universal
Marked extension as removed google.geminicodeassist-2.68.0-universal

These deletions happened at 16:35:23, while window2’s extension host was already trying to load at 16:35:55 — a 32-second gap but the extensions may not have been fully cleaned before the new host tried to register them.


Issue 2: Cursor Hanging on Startup After Upgrade

Root Cause: SSH resolveAuthority Blocking + Askpass Dialog Hidden

This is the dominant issue and directly explains the perceived hanging. The startup sequence blocks on resolveAuthority(ssh-remote) which in turn blocks on the SSH askpass dialog.

Detailed Mechanism

Session 163515, Window 1 (the main hang):

Time Event Duration
16:35:27 resolveAuthority(ssh-remote) invoked 0ms
16:35:27 SSH connection attempted to vps-remote (168.231.103.86:2222)
16:35:29 SSH key SSHpriv_openssh not found 2s
16:35:31 Askpass server receives password prompt 4s
16:35:31 “Pausing timeout; waiting for askpass response”
571 seconds of “waiting…” logged every 1s
16:38:10 Askpass response finally received (~2m39s later) 163s
16:38:10 Connection closed by 168.231.103.86 port 2222
16:38:10 5 retry attempts all fail immediately
16:38:10 Permanent failure declared 163,151ms

The entire Cursor UI was blocked for ~2 minutes 43 seconds waiting for the SSH password dialog. The askpass dialog was likely either:

  • Hidden behind other windows during the update restart

  • Not rendered due to the window manager not giving it focus after the automated restart

  • Dismissed/timed out by the remote server before the user could respond

Second attempt (same window, reload at 16:38:16):

Time Event Duration
16:38:24 Second resolveAuthority(ssh-remote) attempt
16:38:28 Askpass prompt received 4s
17:05:36 Askpass response received 27 minutes later
17:05:37 Connection closed by 168.231.103.86 port 2222

This 27-minute gap is almost certainly the user not seeing the password dialog at all, with the UI appearing frozen.

Ghost Sessions (The “Hanging” Evidence)

  • 20260204T093144/ — directory structure created but no log files

These represent Cursor processes that started, created their log directory structure, but never progressed far enough to write any log output. This is consistent with the process starting, attempting SSH resolution immediately, and hanging before any renderer or extension host logging could begin.


Additional Issues Found

oh-my-claudecode Plugin Errors

The sessionEnd hook from the oh-my-claudecode plugin (v3.7.4) fails consistently:

  • On local windows: Error: The "path" argument must be of type string. Received undefined — the transcript_path is null

  • On remote windows: spawn /bin/bash ENOENT — trying to run bash on a remote path referencing the local Windows plugin directory /C:/Users/SeanWing/.claude/plugins/...

Missing SSH Key (Pre-existing)

Every SSH connection attempt logs: no such identity: C:\\Users\\SeanWing\\.ssh\\SSHpriv_openssh: No such file or directory

This forces password-based authentication for every connection, which requires the askpass dialog, which is the core of the hanging issue.

Filesync Failures on Window 4

Failed to check if file sync is enabled for user
Failed to fetch fsConfig File sync is disabled

The Cursor file sync service couldn’t authenticate — likely related to the transport provider not being registered.

Logs.zip

Wow, this is an excellent breakdown - really appreciate you digging into the logs with this level of detail.

Your analysis is spot on: the combination of an active SSH remote session during the update + the askpass dialog getting hidden after the automatic restart is a nasty edge case.

Quick takeaways for others who might hit this:

  • Avoid upgrading while SSH Remote sessions are active
  • If Cursor hangs after an update with SSH Remote configured, check for a hidden askpass dialog (or use SSH key auth to avoid the prompt entirely)
  • Nuclear option: delete the %APPDATA%\Cursor folder (you’ll lose settings, but it works)

I’ve flagged this with the team - the interaction between updates and SSH Remote sessions could use some guardrails. No timeline on any changes, but your detailed logs help a lot.

Marking this solved since you got it working. Let me know if anything else comes up.