After updating to 3.3.22, the agent times out on every request when connected via Remote SSH. The file tree loads and shows the remote filesystem correctly, but any agent chat immediately returns ERROR_EXTENSION_HOST_TIMEOUT / deadline_exceeded. Key log line from exthost.log: [error] [resolveAuthority(ssh-remote,1)][0ms] no resolver for ssh-remote undefined
Steps to Reproduce
Connect to Ubuntu EC2 via Remote SSH over Tailscale
Open any project on the remote machine
Send any message in the Agent chat
Agent returns “Agent Execution Timed Out” every time
Expected Behavior
Agent should execute normally on remote SSH connections as it did prior to the 3.3.22 update.
Operating System
MacOS
Version Information
Version: 3.3.22, VSCode: 1.105.1, Commit: 38a27120cfc7419a5efa38420665eaeeed1e7b30, OS: Darwin arm64 25.4.0
For AI issues: which model did you use?
Opus 4.6
For AI issues: add Request ID with privacy disabled
846e7851-9b8b-4052-bbbe-549f02cc2859
Additional Information
Was working fine before updating to 3.3.22. Tried all standard workarounds including: deleting ~/.cursor-server on remote, clearing all local extension caches, force reinstalling anysphere.remote-ssh via CLI, full Cursor reinstall, rollback to 3.3.12 (issue persisted), enabling Legacy Terminal, deleting code.lock, and rebooting the EC2. Remote filesystem browses fine but agent is completely non-functional over SSH.
Try connecting without Tailscale’s MagicDNS — connect using the raw Tailscale IP address instead of the hostname, to rule out DNS resolution delays affecting the SSH handshake timing.
Increase the SSH connect timeout:
"remote.SSH.connectTimeout": 120
Add this to your Cursor settings (Cmd+, > search “connectTimeout”).
If none of those help, could you grab two things that would help our engineering team:
The extension host log from a failed attempt: Cmd+Shift+P > Developer: Show Logs… > select Extension Host from the dropdown, then copy the output
A request ID from a new failing attempt with the above cleanup done (three dots menu in chat > Copy Request ID)
Our engineering team is working on fixes for this class of SSH agent timeout.
Cleaned both sides: removed ~/.cursor-server, killed cursor-server processes on the remote, deleted CachedExtensions and CachedExtensionVSIXs locally, relaunched and reconnected.
Tried raw Tailscale IP instead of hostname — got “Permission denied (publickey)” because the SSH config uses aliases, not IPs. Switched to using the SSH config alias directly instead. Same result either way.
Added “remote.SSH.connectTimeout”: 120 to settings.
Key log line from exthost.log that may help engineering:
[error] [resolveAuthority(ssh-remote,1)][0ms] no resolver for ssh-remote undefined
Note: Cmd+Shift+P does not open the command palette in the new 3.3.22 UI, so I’m unable to access Developer: Show Logs the way you described. If there’s another way to get the extension host log in this version please let me know and I’ll grab it.
Request ID from a fresh failed attempt: 846e7851-9b8b-4052-bbbe-549f02cc2859
Thanks for trying all of those. Since Cmd+Shift+P isn’t opening the Command Palette for you, try pressing F1 instead, that’s an alternative shortcut for the same thing.
If that doesn’t work either, you can grab the extension host logs directly from disk. Open Finder and navigate to:
~/Library/Application Support/Cursor/logs/
(You can paste that into Finder’s Go > Go to Folder dialog.) Inside, find the most recent dated session folder, then look for exthost/exthost.log and the window1/renderer.log file. Those two files from a failed session would give our engineering team the detail they need.
One more thing worth checking: a bloated workspace state database can trigger this class of timeout. Check the file size of:
Important: this file contains your chat history, settings, and workspace state. Before doing anything with it, copy it to a safe location first (e.g., your Desktop). If the file is several GB or larger, that could be a contributing factor. With your backup in place, try renaming it to state.vscdb.bak and restarting Cursor. Cursor will create a fresh one on launch. If it doesn’t help, you can restore the original by renaming the backup back. This has resolved the issue for at least one other user with the same error pattern.
Checked the state.vscdb file — it was 2.5GB. Backed it up and renamed it so Cursor created a fresh one on relaunch. Still getting the same “Extension ‘Remote - SSH’ is required” loop and agent timeout. The bloated database was not the cause.
Here are the logs from a fresh failed session (after state.vscdb reset):
exthost.log:
[error] [resolveAuthority(ssh-remote,1)][8ms] no resolver for ssh-remote undefined
renderer.log:
[error] No remote extension installed to resolve ssh-remote.: CodeExpectedError: No remote extension installed to resolve ssh-remote.
The extension is physically present at ~/.cursor/extensions/anysphere.remote-ssh-1.0.48 and registered in extensions.json, but Cursor’s runtime isn’t loading it. This happens instantly (8ms) on every connection attempt — the extension never activates.
This appears to be a regression where the runtime stopped recognizing the extensions directory, not an SSH timeout issue. Is there a way to force Cursor to load extensions from a specific path, or is there a different extensions directory this version expects?
Thank you for working through the state.vscdb reset - that confirms the bloated database wasn’t the root cause.
One thing that wasn’t cleared in your reset: workspace-specific storage. Cursor stores per-workspace extension state separately from the global database. If the extension was ever marked as disabled for a specific workspace, that state would survive a global state.vscdb reset. Try this:
Quit Cursor completely
Back up and then delete the workspace storage folder:
(You can move it to your Desktop as a backup. This folder contains per-workspace state like chat history for individual projects, so the backup is worth keeping.)
Relaunch Cursor and try connecting to your remote host
To answer your question about forcing extension loading: you can launch Cursor from Terminal with a custom extensions directory:
This explicitly tells Cursor where to find extensions, which can help if there’s a path resolution issue.
If neither of those works, could you open the Developer Console (F1 > type “Toggle Developer Tools” > Console tab) and check for any red errors mentioning “remote-ssh” or “extension” during a connection attempt? That would tell us exactly where in the loading pipeline the extension is being rejected.
ERR Extension ‘anysphere.remote-ssh’ appears in product.json but enables LESS API proposals than the extension wants.
package.json (LOSES): resolvers, tunnels, contribViewsRemote, terminalDataWriteEvent, cursorTracing, cursorNoDeps
product.json (WINS): resolvers, tunnels, terminalDataWriteEvent, contribRemoteHelp, contribViewsRemote, telemetry, cursorTracing
The installed extension version (1.0.48) is being denied the API proposals it needs by the runtime. This appears to be a version mismatch between the bundled extension and the app. Is there a newer version of anysphere.remote-ssh that matches 3.3.30, or does this need to be fixed on your end?
Thanks for sharing those Developer Console logs, Eli — that’s exactly what we needed.
This has been fixed in newer builds. Could you try updating Cursor to the latest version? Cursor Settings > Application > Update (or Cmd+Shift+P > “Attempt Update”). After the update, restart Cursor and try connecting to your remote host again.