Where does the bug appear (feature/product)?
Cursor IDE
Describe the Bug
Cursor on Enterprise Windows + WSL2: Full Incident & UX Critique Report
Audience: Cursor staff (support / engineering / product)
Environment: Windows Cursor client 3.12.17 (commit 0fb762053c34788bb7760d5673f8a6d4c8589d50) + WSL2 Ubuntu remote (anysphere.remote-wsl)
Org context: Large enterprise with redirected APPDATA (SMB/DFS file share), dual corporate HTTP proxies, Fortinet SSL inspection
Effort: >1,000,000 tokens of agent/assistant work and an entire business day across multiple sessions to get a merely usable classic-editor workflow. This is not a one-off “user error” ticket.
Organizational note: Staff at this company routinely hit these exact same failure modes. The shared experience is a nightmare: uninstalling, reinstalling, rebooting, lighting candles and saying Hail Marys, offering up goats and our firstborn children, and even doing the hokey pokie — none of these help. The problems are structural (profile path, IPC isolation, Glass/Agents vs WSL, proxy/HTTP2, CLI flag handling), not superstition or “have you tried turning it off and on again.”
0. Executive summary
Cursor on this enterprise Windows + WSL setup repeatedly:
- Stores critical SQLite state (
state.vscdb) on a network-redirected%APPDATA%, where it grows to ~1+ GB, corrupts, and crashes or hangs the IDE. - Silently falls back to that network profile whenever a launch path omits
--user-data-dir/ fails to inheritVSCODE_APPDATA, including ordinary WSLcursor <path>via remote-cli (which ignores--user-data-dir). - Defaults / resets toward Agents Window (Glass) layout, which does not properly support WSL, so folder opens show invalid paths, prompts stick on “Planning next moves”, and multi-repo orchestration UX is unusable.
- Makes WSL CLI opens fight the product: hijack existing windows, open Agents instead of editor, open “fake” remotes, or spawn a second Cursor on the wrong profile.
- Interacts badly with corporate proxies + HTTP/2 agent streaming and SSL inspection (
self-signed certificate in certificate chain).
We spent an entire workday and over one million tokens chasing the same classes of bugs in loops because settings, layout preferences, and profile paths keep resetting or being bypassed by alternate launch paths (Start Menu vs WSL CLI vs Start-Process vs remote-cli IPC).
1. Environment facts (authoritative)
| Item | Value |
|---|---|
| OS | Windows 10/11 + WSL2 |
| Distro | Ubuntu (WSL_DISTRO_NAME=Ubuntu; also Ubuntu-24.04 present but stopped) |
| Cursor | 3.12.17 stable, user install under C:\Users\rpicke1\AppData\Local\Programs\cursor |
%APPDATA% |
\\ac2knyc0206\Userdata\rpicke1\AppData\Roaming (network redirect) |
| Default Cursor roaming data | \\ac2knyc0206\...\Roaming\Cursor |
| Intended healthy profile | C:\Users\rpicke1\AppData\Local\CursorUserData (local NTFS) |
| Junction attempt | C:\Users\rpicke1\AppData\Local\Cursor → CursorUserData + User env VSCODE_APPDATA=C:\Users\rpicke1\AppData\Local |
Portable data/ next to Cursor.exe |
Does not work — product.json has "target": "user", which disables VS Code/Cursor portable detection (isPortable = !("target" in product) && exists(data)) |
| Proxies | gmdvproxy.acml.com:8080 (normal IDE/shell); proxy.acml.com:8082 (only for WSL Cursor Server install via wget) |
| SSL | Fortinet / AB CA chain; Node needs NODE_EXTRA_CA_CERTS |
| Agent network mitigations applied | cli-config.json → network.useHttp1ForAgent: true; settings → cursor.general.disableHttp2: true |
2. Problem catalog (detailed)
2.1 Network-redirected APPDATA + gigantic / corrupt state.vscdb
Symptom
- Cursor runs briefly then exits.
- Corrupt DB warnings; restore from
.bak/they.broke.it. - One-prompt-per-conversation then failure; post-reinstall still unstable.
- IDE “Planning next moves” forever; empty/aborted transcripts.
Root cause
- Corporate
%APPDATA%is an SMB/DFS share. - Cursor puts SQLite (
User\globalStorage\state.vscdb, WAL/SHM) there. - Observed sizes: ~1.3 GB on network; after local migration still ~1.1 GB on local disk (history restored from Jul 14 bak; still a landmine).
- SQLite over network file locking is a known footgun; corruption of
cursorDiskKVobserved.
Nuances
- Quarantining network DBs under
...\globalStorage\quarantine-*is necessary but insufficient: any Cursor.exe started without local UDD recreates/writes networkstate.vscdbagain. - Child processes (
--type=renderer|gpu|crashpad) reveal which profile is live via--user-data-dir=.... Main process command lines often omit UDD even when children show network vs local — diagnosis must inspect children, not only the top-level argv.
Mitigations attempted (repeatedly)
- Quarantine network DB + WAL/SHM.
- Create
C:\Users\rpicke1\AppData\Local\CursorUserData. - Restore Jul 14
state.vscdb.bak-pre-denotation-rule(~322 composers / ~128k bubbles); merge auth from a fresh small DB; copyworkspaceStorage. - Start Menu / desktop shortcuts with
--user-data-dir=...\CursorUserData. Start-Cursor-Local.cmd.- User env
VSCODE_APPDATA. - Junction
Local\Cursor→CursorUserData. - Portable
Programs\cursor\data\user-datajunction — blocked byproduct.target=user. - Re-quarantine network DB whenever a bad launch recreated it.
Why it kept coming back
- Launch path diversity: Start Menu (sometimes patched), raw
Cursor.exe, WSL remote-cli (ignores--user-data-dir), PowerShellStart-Process, Chrome “Cursor” PWA shortcut accidentally rewritten once, etc. - IPC is keyed by resolved user-data path string. Network instance and local instance are different apps from IPC’s POV. WSL
cursorattaches to whichever profile remote-cli resolves — often network.
2.2 WSL cursor CLI cannot pass --user-data-dir
Symptom
Ignoring option 'user-data-dir': not supported for cursor.
Root cause
- WSL path:
resources/app/bin/cursor→ remote-wslwslCursor.sh→remote-cli/cursor. - CLI explicitly strips/ignores
--user-data-dirfor thecursorproduct. - User-data path for IPC is resolved via
VSCODE_PORTABLE/VSCODE_APPDATA/ default%APPDATA%\cursor— not via the ignored flag when using remote-cli.
Nuances
- Injecting
--user-data-dirinto the WSL shim is a no-op for profile selection. VSCODE_APPDATAviaWSLENV=VSCODE_APPDATA/usometimes fails to reach the Windows IDE process spawned through remote-cli; observed instances still using\\ac2knyc0206\...\Roaming\Cursordespite User-level env being set.- Therefore the only reliable open path we found for folders was: Windows
Start-Process Cursor.exewith explicit--user-data-dir=C:\Users\...\CursorUserData, plus--classic, plusvscode-remote://wsl+Ubuntu/...URIs — accepting that this bypasses some remote-cli niceties.
2.3 Opening folders via Start-Process --folder-uri without a healthy local profile / remote-cli
Symptom
- Explorer shows the folder name but “path isn’t valid” / no files.
- Looks like a workspace but isn’t a real WSL remote session.
Root cause
- Direct Electron argv with
vscode-remote://is fragile when Cursor is already open / wrong profile / Glass Agents surface. - Known community reports:
--folder-uri vscode-remote://...mishandled when an instance is already running. - Agents/Glass does not activate WSL remote the way classic editor does (forum: “Extension WSL required” loops; Agents doesn’t support WSL properly).
Nuances
- Same URI that works under classic + local UDD fails under Agents or network profile.
- Workspace storage entries appear as
vscode-remote://wsl%2Bubuntu/...(lowercase) while CLI emitswsl+Ubuntu— usually OK on Windows case-insensitivity, but adds confusion when debugging.
2.4 Window hijack: --reuse-window / default IPC focus behavior
Symptom
cursor ~/workspace/.../fiqit-model-ratessteals an already-open deployments (or other) window and switches its workspace.
Root cause
- An earlier “fix” defaulted to
--reuse-windowto “attach to local profile.” - That is the opposite of Linux/
code <path>expectations (-n/ new window by default).
Fix direction
- Default
--new-windowfor path opens. - Still must pair with local UDD +
--classicor you get a new broken Agents/network window instead of a hijack.
Nuance
- User expectation (straight Linux):
cursor <path>always opens that path as a proper IDE window without destroying other work. Meeting that bar on Win+WSL required a custom shim and still fights product defaults.
2.5 Agents Window / Glass as default — opens instead of IDE, prompts do nothing
Symptom
cursor <path>opens Agents Window, not classic editor.- Path not really opened / invalid.
- Agent prompts stuck on Planning / “planning next moves” for hours; transcripts empty or
User aborted requestwith no tool activity. - Meanwhile classic editor in another workspace can still work (e.g.
Fiquants/aihealthy whiledeploymentshung — often while still on network profile).
Root causes (compounding)
- Layout preference stored in SQLite, not only settings.json:
cursor/unifiedAppLayout='agent'cursor/agentLayout.forceToAgentLastValue='true'cursor/userOpenAgentsWindowOnStartupPreference(always/never/default)
- CLI opens without
--classicroute into Glass. - Agents/Glass does not properly support WSL remotes (Cursor forum / docs guidance: use Editor /
--classicfor WSL). - HTTP/2 streaming through corp proxy stalls agent turns → “Planning” forever (mitigated with HTTP/1 flags, but Agents+WSL still broken).
- After kill/restart, layout can feel “reset” if a network profile instance comes up (fresh/default Glass) or if local DB still has
unifiedAppLayout=agent.
Nuances
--classicis documented as forcing classic windows; on some versions / Glass builds, CLI folder opens still get hijacked by Agents routing (community bug reports).- Changing layout in
state.vscdbrequires Cursor not holding the DB; stopping all Cursor processes to write preferences closes every open window (user-visible data loss of session layout — happened during remediation). product.target=userblocks portable mode, so profile pinning is forever argv/env fragile.
2.6 Agents Window UX does not meet “orchestrate many agents” (product/UX)
Even when Glass opens, it fails the orchestration job:
- No multi-conversation visibility analogous to IDE split editors (cannot see two prompt threads at once).
- No global “most recent / active” conversation list across repos for one-click hopping.
- Repo-grouped sidebar: one repo with a large history expands and buries other repos’ active chats; user must scroll / collapse-expand groups.
- Feels like a per-repo chat archive, not a multi-agent control surface.
- Multi-root workspaces in Agents: reported weak/missing for WSL folders on forum.
This is separate from reliability bugs but central to “why did we spend a day fighting Glass.”
2.7 Proxy / SSL / HTTP2 agent hangs
Symptom
- Second prompt hangs on planning.
- Indexing / agent TLS:
self-signed certificate in certificate chain. - Sudden disconnects / CLI death mid-stream.
Root causes
- Dual proxies; wrong proxy used for wrong purpose caused confusion:
proxy.acml.com:8082— WSL server component install (wget) only.gmdvproxy.acml.com:8080— normal operation.
- Early remediation briefly flipped settings/bashrc to 8082 for “everything,” then had to be corrected back.
- Fortinet MITM requires AB CA chain in
NODE_EXTRA_CA_CERTS(~/.certs/node-extra-cas.pem). - HTTP/2 agent streams stall through corp proxies → force HTTP/1 (
useHttp1ForAgent,cursor.general.disableHttp2).
Nuances
- Settings can differ between network profile
Roaming\Cursor\User\settings.jsonand localCursorUserData\User\settings.json. Fixing one does nothing if the live instance uses the other. - Opening entire
$HOMEas workspace (~346k files,.npmcache,.ssh, etc.) compounded load (.cursorignoremitigations). Orphaned extension hosts / stalecursor-serveralso observed.
2.8 Settings / profile “resets” and dual-instance confusion
What “reset” means in practice (not mystical — mechanical):
- User launches Cursor via a path without local
--user-data-dir→ network profile (empty/fresh or half-quarantined) → appears as “settings wiped / Agents default / prompts broken.” - User launches via Start Menu with local UDD → healthy classic settings return — “settings came back.”
- WSL
cursorremote-cli attaches to whichever instance owns the IPC socket for the CLI-resolved user-data path — often the wrong one if both exist. - Two Cursor trees can run concurrently:
- Local:
--user-data-dir=C:\Users\...\CursorUserData - Network:
\\ac2knyc0206\...\Roaming\Cursor
- Local:
- Layout keys in SQLite (
unifiedAppLayout=agent) make Glass return even on local disk until explicitly flipped toeditorand--classicis forced on CLI. - Shortcut edits are fragile (Start Menu under redirected Roaming; OneDrive Desktop; accidental overwrite of Chrome App “Cursor.lnk”).
Staff implication: From the user’s POV, Cursor “keeps resetting.” From engineering’s POV, multiple user-data roots + CLI ignoring UDD + Glass default = intermittent alternate universes.
2.9 Chat history recovery asymmetry
- Pre–Jul 14 IDE history recoverable from bak into local profile.
- Later corrupt network DB: message bodies unreadable (
cursorDiskKVmalformed). - WSL
~/.cursor/projects/**/agent-transcripts/*.jsonlsurvive on disk but are not an official import path into IDE chat UI. - Killing Cursor to patch SQLite layout prefs destroys open window set; restoring workspaces is manual (
Start-Processper folder/workspace).
2.10 Custom shim debt (required to approximate Linux behavior)
To approximate cursor <path> on Linux we ended up with:
~/.local/bin/cursor— forces classic + local UDD open helper for paths;cursor agent→ CLI agent; pass-through for tunnel/help.~/bin/cursor-open-workspace— PowerShellStart-Processwith--user-data-dir,--classic,--new-window,--folder-uri/--file-uri,--remote=wsl+Ubuntu.Start-Cursor-Local.cmd— Windows entry with--user-data-dir+--classic.- Regenerated / reverted
make_code_links.sh/code-*launchers multiple times while discovering remote-cli vs Start-Process tradeoffs.
This should not be necessary. It is unpaid enterprise support work pushed onto the customer.
3. Timeline shape (why “entire day / 1M+ tokens”)
Rough loop repeated across sessions:
- Diagnose crash/hang → find network SQLite / proxy / huge workspace.
- Move profile local → works briefly.
- Open from WSL CLI → attaches to / spawns network or Agents instance → broken again.
- Patch shim / shortcuts / env → different failure (hijack, invalid path, Planning hang).
- Kill all Cursor to edit
state.vscdblayout → user loses all windows → restore set → profile drifts again. - Document Agents UX failure as product issue on top of reliability.
Each loop burns large context (logs, process dumps, SQLite, forum research, shim rewrites). Aggregate >1M tokens, multi-session full workday.
4. What Cursor should treat as bugs / product gaps
Reliability / platform
- Do not store SQLite user state on redirected
%APPDATA%without detecting remote/profile paths — or document mandatory--user-data-dir/ supportVSCODE_APPDATAconsistently through remote-cli and WSL. - Honor
--user-data-dirin WSL remote-cli (or provide an equivalent that remote-cli cannot ignore). - Single-instance profile coherence: refuse to silently start a second profile when one local UDD instance exists; or make WSL CLI always target the same resolved path as the Start Menu launcher.
- WSL support in Agents/Glass — either make it real or never route
cursor <wsl-path>into Agents; default WSL opens to classic editor. - HTTP/2 through corp proxies: default or auto-fallback to HTTP/1 when streams stall; surface errors instead of infinite “Planning.”
- Portable/
datafolder: either support user installs or document thattarget:userdisables it (we wasted time on a dead path).
Agents Window UX (orchestration claim vs reality)
- Global Recent / Active conversation list across repos.
- True multi-pane or pinned always-visible active threads (orchestration ≠ single-transcript archive).
- Repo grouping must not bury other repos’ active work under one project’s history.
- WSL multi-root / remote parity for Agents.
5. Current brittle “working” configuration (as of remediation)
- Live profile:
C:\Users\rpicke1\AppData\Local\CursorUserDataonly (verify via child process--user-data-dir). - Network roaming DB quarantined when discovered.
- Path opens: custom shim →
Start-Processwith--user-data-dir+--classic+--new-window+vscode-remote://wsl+Ubuntu/.... - Layout SQLite:
unifiedAppLayout=editor; Agents-on-startup preferencenever(false);forceToAgentLastValue=false. useHttp1ForAgent: true;cursor.general.disableHttp2: true; Fortinet CA viaNODE_EXTRA_CA_CERTS.- Proxy:
gmdvproxy:8080for normal use;proxy:8082reserved for server install wget.
This is not “fixed.” It is a pile of local workarounds that will break on Cursor update, shortcut reset, accidental Cursor.exe double-click, or another env that doesn’t pass UDD.
6. Ask of Cursor staff
- Reproduce with: Windows + WSL2 +
%APPDATA%on a UNC share +cursor /home/.../repofrom WSL while a local-UDD classic window is already open. - Confirm remote-cli ignores
--user-data-dirand document/fix profile selection for WSL. - Stop routing WSL folder opens into Agents until WSL works there.
- Treat network-APPDATA SQLite as a supported enterprise scenario or hard-warn / auto-relocate.
- Fix Agents sidebar for real multi-repo active-work orchestration (recent/active list; don’t bury chats).
- Acknowledge that “reinstall Cursor” does not address root causes (1)–(5); our entire org already learned that the expensive way.
7. Tone / reality check for prioritization
This report is long because the failure surface is long. Enterprise Windows + WSL + proxy is not exotic — it is how a large fraction of professional developers run Cursor. Burning a full day and over a million tokens to keep the editor from opening the wrong window on the wrong disk profile, while Agents marketing claims multi-agent orchestration it cannot UX-deliver, is an unreasonable tax on customers. Please fix the platform seams; the rituals (reinstall, reboot, candles, goats, firstborn, hokey pokie) have been exhausted and do not work.
Steps to Reproduce
detailed above
Expected Behavior
I expect the app to not suddenly close, and I expect it to be able to execute prompts.
Operating System
Windows 10/11
Version Information
Cursor: 3.12.17 (user setup)
VSCode Version: 1.128.0
Commit: 0fb762053c34788bb7760d5673f8a6d4c8589d50
Real Commit: 0fb762053c34788bb7760d5673f8a6d4c8589d52
Date: 2026-07-17T02:53:53.006Z
Quality / Build Type: stable
Release Track: Default
Target: user
Layout: glass (Agents Window) and classic editor (both involved)
Electron: 40.10.3 (from process annotations)
Arch: x64
OS: Windows_NT 10.0.22631 (Win11 23H2-class)
WSL: 2
WSL distro (active): Ubuntu (Ubuntu 24.04.4 LTS)
WSL kernel: 6.18.33.2-microsoft-standard-WSL2
Remote extension: anysphere.remote-wsl 1.0.13
Cursor Server commit (WSL): 0fb762053c34788bb7760d5673f8a6d4c8589d50
Node (WSL shell): v24.5.0
cursor-agent (local CLI versions present): 2026.07.17-3e2a980 (also 2026.05.16-0338208, 2026.05.05-84a231c)
Also applicable for the report body (not product “versions,” but environment labels staff ask for):
• %APPDATA% redirected to UNC: \ac2knyc0206\Userdata\rpicke1\AppData\Roaming
• Local profile used for remediations: C:\Users\rpicke1\AppData\Local\CursorUserData
For AI issues: which model did you use?
No models work. auto, composer 2.5 fast/no-fast, grok, etc… if it’s broke, it’s broke.
Does this stop you from using Cursor
Yes - Cursor is unusable