Where does the bug appear (feature/product)?
Cursor IDE
Describe the Bug
Where does the bug appear (feature/product)?
Cursor IDE — Canvas (rendered .canvas.tsx) over Remote-SSH
Describe the Bug
On a Windows Cursor client connected to a Linux host via Remote-SSH, opening any canvas shows “Canvas could not load”.
The canvas file is valid (TypeScript check: no errors) and lives in the managed directory:
~/.cursor/projects/<workspace>/canvases/<name>.canvas.tsx
The Linux remote extension host never starts the canvas server. Every registration attempt is rejected:
Rejected canvas registration for invalid path {“kind”:“source”,“reason”:“path-not-managed-canvas”}
Root cause: the Windows client rewrites the remote POSIX path with Windows backslashes before sending it to the Linux extension host, e.g.
\home.cursor\projects\canvases.canvas.tsx
Steps to Reproduce
- On Windows, open Cursor and Remote-SSH into a Linux machine.
- Have the agent create a
.canvas.tsxunder~/.cursor/projects/<workspace>/canvases/. - Open the canvas (chat link, Canvas view, or the
.canvas.tsxfile). - Observe “Canvas could not load”.
- On the remote host, check
~/.cursor-server/data/logs/<session>/exthost*/anysphere.cursor-agent-exec/*.logforpath-not-managed-canvas.
Expected Behavior
The Linux host should receive a POSIX path (/home/.../foo.canvas.tsx) and register the canvas. The canvas server should start (Canvas server started / Registered canvas) and the panel should render.
Operating System
Linux
Version Information
- Cursor 3.19.13 (stable)
- Remote server commit:
dd066f332fcea7382764400fde902f61920648d0
Additional Information
Suggested fix
Either (or both):
- Client: do not convert a remote POSIX path to Windows
\when talking to a Linux extension host. Keep/for remote paths. - Remote validator: before
path.isAbsolute(), normalize\→/for paths that are not Windows drive-letter paths (^[A-Za-z]:[\\/]). Then run the existing checks unchanged (managed-canvas regex, regular file, not a symlink, re-validaterealpath).
Drive-letter local-Windows paths should stay untouched. Directory-escape attempts and non-.canvas.tsxfiles should still be rejected (we verified that after separator normalization).
Does this stop you from using Cursor
No - Cursor works, but with this issue