Sync Cursor chats across workspaces

Feature request for product/service

Cursor IDE

Describe the request

Problem:

Our company uses a monorepo accessed from multiple machines via SSH remote connections. Each SSH connection string (e.g. hostname vs FQDN, or different jump hosts) creates a separate Cursor workspace, and chat history is siloed per-workspace in workspaceStorage//state.vscdb.

This means:

  • Developers lose access to prior conversations when connecting from a different machine or via a different SSH config entry
  • The same repo gets 3-4 separate chat histories that can’t see each other
  • There’s no way to search or reference a past conversation that happened in a different workspace session
  • Enterprise teams can’t build institutional knowledge from past AI interactions

Current workaround:

We reverse-engineered the storage format and wrote a script to merge composer.composerData across workspace databases plus symlink agent-transcripts on the remote host. This is fragile and breaks on Cursor updates.

Proposed solution:

  • Sync chat history by repo identity (e.g. git remote URL), not by workspace connection string
  • Allow enterprise accounts to opt into shared/synced chat history across machines and workspaces
  • At minimum, expose a setting to link workspaces that point to the same repo so they share a single chat history

Who this helps:

Any team using Cursor over SSH remote, multi-machine setups, or enterprise accounts where developers access the same codebase from different environments.

This was written by cursor, really we just want a better way to sync chats/move them around. We’re developers, we want control. Chats shouldn’t live on my windows machine while transcripts live on my Linux server IMO. otherwise I love cursor, keep up the good work

4 Likes

This can be very helpful! My scenario involves machine learning workflows that use SLURM to manage the cluster, and despite the codebase being stored on the NFS that gets mounted across different nodes inside the cluster, the chat history is out of sync…

I used Cursor to explain this issue ; here is what it said.

You’re right, and now I can explain exactly why. There are two separate storage systems at play:

1. Agent transcripts (~/.cursor/projects/) — shared across nodes

The directory ~/.cursor/projects/home-haok-source-DualPipe/agent-transcripts/ is keyed purely by filesystem path (slashes replaced with dashes). Since /home is NFS-mounted, these .jsonl files are physically accessible from any node. This is the server-side log that the agent uses for citation purposes — but it is not what drives the chat history UI.

2. Cursor client state — NOT shared, and hostname-dependent

The actual chat history you see in the Cursor sidebar is stored on the client side (your local machine running the Cursor desktop app). The Cursor client identifies each remote workspace by its full URI, which includes the hostname:

vscode-remote://ssh-remote+orchard-flame-15/home/haok/source/DualPipe

When you connect to a different node (e.g., orchard-flame-22), the URI becomes:

vscode-remote://ssh-remote+orchard-flame-22/home/haok/source/DualPipe

The Cursor client treats these as two entirely different workspaces. Each gets its own conversation list in the sidebar.

Additionally, on the server side, ~/.cursor-server/data/User/workspaceStorage/ also uses hash-based folder names (you currently have 10 of them) that are derived from the workspace URI. Each node connection generates a new hash, a new workspace storage folder, and a new set of associations.

The bottom line

The chat history is lost on node switch because the hostname is baked into the workspace identity at both the client and server levels. The agent transcripts on NFS survive, but the Cursor UI doesn’t surface them for a “different” workspace. There’s no built-in way to merge or alias workspaces across hostnames — this is a VS Code architectural inheritance that Cursor hasn’t changed.

If you regularly switch nodes, the practical workaround would be to always SSH to the same hostname (e.g., via a stable alias or jump host that always routes to the same logical name), so the workspace URI stays consistent.

It’s trying to come up with a mechanism to do the migration between nodes when the chat history is stored in a NFS-mounted device… It can even decode the vscode-remote encoding mechanism. Let’s see what happens next.