Remote-SSH extension host crashes every 30-60s — colleague on same server unaffected

Where does the bug appear (feature/product)?

Cursor IDE

Describe the Bug

Remote Extension Host terminates every 30-60 seconds on Remote-SSH connections (“Remote Extension host terminated unexpectedly 3 times within the last 5 minutes”). Integrated terminals die at the same time with “connection to the shell process was lost”. Remote work is unusable.

Remote is Ubuntu 22.04.5 shared hosting, project is an OpenCart PHP codebase. Full details of what I already ruled out are in Additional Information below.

Request ID: 7df8a27a-c37f-4268-9f25-abec1b20d05c

Steps to Reproduce

  1. Connect to a remote host via Remote-SSH
  2. Open the project folder
  3. Wait 30-60 seconds, with or without running the agent
  4. Extension host terminates; notification appears

Expected Behavior

The Remote Extension Host stays alive for the duration of the session.

Operating System

MacOS

Version Information

IDE: Cursor
Version: FILL IN (Cursor → About Cursor)
Release Track: stable
OS: macOS FILL IN

Additional Information

Remote Extension Host dies every 30-60 seconds over Remote-SSH (“terminated unexpectedly 3 times within the last 5 minutes”). Terminals die too.

Remote is Ubuntu 22.04 shared hosting, OpenCart PHP project.

Already ruled out: two different WiFi networks, server limits (ulimit unlimited, inodes at 2%), IP not blocked (confirmed by host), .cursorignore for large dirs, ServerAliveInterval 15, clean reinstall of ~/.cursor-server and local globalStorage, VPN extension disabled. Happens with and without the agent running, and on a second unrelated server too.

A colleague uses the same server, account and project without any issue, so it looks client-side on my machine.

No error in the Remote-SSH log before it dies — keepalives succeed, commands exit 0, then the host is gone.

Does this stop you from using Cursor

Yes - Cursor is unusable

Hey @Daniel_Demes, thanks for the detailed report. From what we can see, the remote extension host on your server is being force-killed (a SIGKILL) from the server side, not by Cursor. That lines up with it surviving a reinstall, happening with and without the agent, and showing on both servers. It’s not something you’ve misconfigured, and it’s something we’re looking into on our side. It usually traces back to a per-account memory/CPU/process limit or a resource monitor on shared hosting.

To pin down which limit, reproduce once, then from a plain terminal (not the Cursor terminal) SSH in and share:

  1. ps -u $(whoami) -o pid,rss,etime,cmd --sort=-rss | head -n 20
  2. grep -h "Extension Host Process exited" ~/.cursor-server/data/logs/*/remoteagent.log | tail -n 5
  3. Anything your hosting panel shows under CPU/memory/entry-process limits (and any recent “limit reached” counts).

Also handy: your colleague’s Cursor version (Cursor → About Cursor) and whether they log in as the same Linux user. The most reliable fix will be host-side (asking your provider to raise the per-account limit); trimming remote extensions can help a bit too.

Thanks — here’s what I found.

Extension Host Process exited with code: null, signal: SIGKILL
(five occurrences today: 09:34:25, 09:35:15, 11:08:38, 11:08:52, 11:09:32)

ps output during a normal session:

PID 2665964 RSS 406 640 kB 06s bootstrap-fork --type=extensionHost
PID 2665634 RSS 337 994 kB 26s bootstrap-fork --type=fileWatcher
PID 2664053 RSS 123 928 kB 02:58 server-main.js

So the extension host reaches ~406 MB within six seconds and the
file watcher ~337 MB within 26 seconds. Combined that’s over 850 MB,
which is almost certainly what trips the shared hosting limit.

The project has a 59 GB image directory with ~300k files in one
subfolder. I added .cursorignore for it (which measurably reduced
agent search counts) and files.watcherExclude in Remote Settings,
but the file watcher still grows to the same size — the exclusions
don’t seem to affect it.

My colleague logs in as the same Linux user and does not hit this.

hi @Daniel_Demes ! Tarun here from the engineering team.

In your files.watcherExclude settings, have you set the path relative to the workspace / folder that you are opening ?
For example, if you have opened my-proj and there’s a /image folder within it, you need to only add "image/**": true under the file watcher settings.
Basically its not converting the absolute path into a relative one, was a bug i just realized, up’g the fix.

Also, weird that your colleague’s client runs fine. Is he also opening the same folder ??
Can you check and see what version of the app that he’s running.