Where did my Cursor chat history go?
Cursor splits chat history across three surfaces: the editor sidebar fills from an index kept in workspace storage, the Agents Window reads transcripts from disk, and the CLI keeps its own history. The sidebar's index is also keyed to a workspace identity, not just the folder path, so the same project opened another way can look empty even though the chats are still there.
A local conversation leaves a transcript file with the messages and tool calls, and a separate index that fills the chat list. In the reports cited below, the chats are still in the transcript files; the list has stopped pointing at them.
Run Cursor → About Cursor, and agent --version in the CLI. The Agents Window arrived with Cursor 3 on 2 April 2026, and the release notes listed 3.27 when checked on 27 October 2026; history behaviour changed several times across 3.x.
Checked against Cursor's documentation, help pages and release notes on 27 October 2026.
Status, 27 October 2026: the editor, Agents Window and CLI docs do not say where their chat history lives. (The Agent SDK is a different surface: its local session state lives under --state-root in the sessions reference.) A staff reply in #175609 (open, updated 21 October 2026, Cursor 3.25.9) says editor history follows the workspace, not its folders; one in #162757 (open, updated 29 July 2026) says the sidebar is an index in workspace storage, with no rebuild from the transcripts.
Three failures that look the same#
| What you see | What it means | Check first |
|---|---|---|
| The sidebar is empty, but the Agents Window lists the chats | The sidebar's workspace index is missing or detached. | Open the exact workspace, then search the Agents Window. |
| Chat titles now say "New Agent" | Cursor reopened a different workspace identity. | The bottom-left workspace name, then the saved .code-workspace file. |
| The transcript file exists, but the sidebar has no row for it | The index was pruned or reset; the transcript was not. | Find the .jsonl under ~/.cursor/projects and open it directly. |
The transcript and the index are different things#
The Agents Window is Cursor's agent-first interface, generally available since Cursor 3 on 2 April 2026. It works across projects and environments. A staff reply in #165382 (10 July 2026, Cursor 3.11.13) puts it plainly: the Agents Window reads conversations "directly from disk", while the IDE sidebar "stores history per workspace and depends on exactly how the folder is opened."
Staff replies and reports put them here:
| Store | What it does | Where it usually is |
|---|---|---|
| Transcript | The conversation, one JSON object per line, including messages and tool calls. | Under ~/.cursor/projects/<encoded-path>/agent-transcripts/, either directly or in a <session-id>/ subfolder depending on build (reported June–July 2026) |
| Sidebar index | The list the editor shows. A database row, not a scan of the transcript folder. | state.vscdb in Cursor's User storage (globalStorage and per-workspace workspaceStorage) |
<encoded-path> is usually the project path with separators turned into dashes. On Windows the transcript folder is under %USERPROFILE%\.cursor\projects\; on macOS and Linux it is under ~/.cursor/projects/. To see where the files actually landed, run find ~/.cursor/projects -name '*.jsonl'; on Windows, search %USERPROFILE%\.cursor\projects for *.jsonl.
A staff reply in #162757 (10 June 2026) described the consequence: when the index falls out of sync after an update, the sidebar can show only the current session while every transcript is still on disk. There is "no built-in way to rebuild the sidebar from the on-disk transcript files." Opening a .jsonl file lets you read it; it does not restore the sidebar row. Do not edit state.vscdb to reinsert a chat: a later staff reply (29 July 2026) warned that it is shared across windows and its schema changes.
Same folder, different workspace#
Cursor keys history to a workspace identity. It is not simply "the folder I think I opened."
- For a single-folder window, a staff reply in #156422 (1 April 2026) described a workspace ID computed from the folder path, with the folder's inode number (the filesystem's ID for that directory) mixed in on Linux. Renaming or moving the folder, or deleting and recreating it, produces a different ID.
- For a multi-root window, the identity is the
.code-workspacefile itself. A staff reply in #175609 (21 October 2026) says changing the folder list inside one saved workspace keeps the history; opening the folders by hand as a new workspace does not. - The same folder opened locally, over SSH, through WSL (Linux on Windows), or through a different SSH alias can be a different workspace. Use the same path and alias, and do not mix a
\\wsl$path with a Remote-WSL connection (#165382, 10 July 2026). - A chat started with no folder open lives under a transient workspace, and will not appear after you open a folder (#156422, 1 April 2026).
- Opening a single file with File → Open File, instead of the folder, gives you a new context without the folder's history (#149896, 26 January 2026).
The untitled-workspace trap#
If the title bar said "Untitled (Workspace)" and you chose Don't Save when quitting, the chats are still tied to it. The staff reply in #175609 gives the macOS recovery: quit Cursor, find the ~/Library/Application Support/Cursor/User/workspaceStorage/*/workspace.json entry whose workspace value points at ~/Library/Application Support/Cursor/Workspaces/<id>/workspace.json, recreate that file with the same folders, then restart and open it. On Windows and Linux the equivalent sits under Cursor's application-data folder (%APPDATA%\Cursor or ~/.config/Cursor), but the exact path is untested. File → Save Workspace As keeps a multi-root workspace stable.
The Add Folder trap#
"Add Folder to Workspace" can move the list without moving the chats. A staff reply in #171245 (11 September 2026, Cursor 3.12.17) explains: Cursor turns the folder window into an unsaved workspace, then attaches the existing chats when the list is next saved. Choosing Don't Save deletes that workspace, so the folder looks empty; the chats are still in the Agents Window. A later reply says a fix was shipping (14 September 2026); check your build.
Check the workspace, then the Agents Window#
If a chat is missing, start with the exact workspace: read the bottom-left status bar, then use File → Open Recent, or File → Open Workspace from File for a saved .code-workspace.
Then open the Agents Window (Cmd+Shift+P; Ctrl+Shift+P on Windows/Linux; then "Open Agents Window") and search with Cmd+K (Ctrl+K). The conversation search page says the local index scales to thousands; search a phrase from the chat, not its title. If it opens there, that is your working copy; the editor sidebar is what is missing.
For local chats, the Agents Window is the wider view, but it is still local. The docs do not describe chat history syncing between machines; a shared link is not a sync. Treat a second machine as separate history, and move work with an export or a handoff file. Cloud agents (agents that run on Cursor's machines) have their own transcript view.
If the sidebar still disagrees with the transcripts, report it with Cursor → About Cursor. That panel carries the version and a Layout: line recording how the window was opened; a staff reply in #162757 asks for both when the sidebar and transcripts disagree.
Asking the agent whether it remembers the old chat is not proof. It may retrieve past conversations through search, but it cannot tell you whether the sidebar index or the transcript file is intact.
Forks and side chats: what copies what#
Cursor uses "fork" for two different cuts, and people often fork when they mean "shorten this chat." A subagent is a helper agent Cursor starts in its own context window; custom ones live in .cursor/agents/ (subagents reference), and a fork carries the subagents attached to the copied messages.
| Action | What you get |
|---|---|
| Fork the whole chat | Every message and subagent, from the tab menu, sidebar or command palette. |
| Fork from a message | The conversation through that message. Everything after it is dropped, including subagents attached to later messages. |
| Side chat | A child conversation that uses the parent as hidden reference context. It keeps its own visible transcript; it is not a fork. |
| Restore Checkpoint | The files at that point. It never removes messages from the conversation. |
The side-chats help page now states the fork rule directly; a staff reply in #169458 (25 August 2026, Cursor 3.17.19) confirmed it after the docs contradicted each other. To trim, fork from the last message you want to keep. Restore Checkpoint will not do it.
A side chat starts with /side or /btw, from "Ask in Side Chat" on a selection, or with Shift+Cmd+S (Shift+Ctrl+S on Windows/Linux). The parent history is hidden context, not part of the side chat's transcript.
Closing a side chat archives it. The Help page does not describe reopening. A staff reply in #167761 (10 August 2026) said there was no UI then. Cursor 3.25's release notes say Back in the Agents Window reopens a recently closed tab, including a side chat. On older builds, a reply in the same thread describes plus → Side Chats (30 August 2026). Check your build.
The CLI has its own history#
The CLI is the agent command in a terminal; the CLI docs use it for every example. Older posts call it cursor-agent.
agent about # version and account
agent ls # open the chat picker
agent resume # resume the latest chat
agent --continue # continue the previous session (alias for --resume=-1)
agent --resume="<id>" # resume a specific chatInside the interactive CLI, /resume opens recent chats, /fork forks the current chat, and /rename names it; the slash-command reference has the rest.
CLI history is separate from editor history. A staff reply in #159779 (5 May 2026, Cursor 3.2.21) says CLI and editor sessions "are stored separately and don't sync across surfaces." Copying transcript files into ~/.cursor/chats did not change the editor list, because the app uses its own index. A second staff reply in #161787 (28 May 2026) says the CLI and desktop app "don't share chats." Nothing in the current docs describes a merge.
--resume also restores the saved mode. If a resumed thread comes back read-only in Ask mode, the workaround from a staff reply in #161003 (11 September 2026) is to open it interactively with agent --resume <id>, switch to Agent mode with Shift+Tab or /ask, then exit. The mode is saved with the thread, so the next resume should start in Agent mode. --mode itself only accepts plan and ask; there is no --mode=agent flag to force it.
Export, share and back up#
Export Transcript is a reading copy. A staff reply in #150214 (21 May 2026, Cursor 2.4.21 and later) says thinking blocks and collapsed items such as terminal input/output and tool calls are intentionally left out, because they are not chat messages. Text replies and file changes should be there. Compare the exported file with the chat before treating it as complete.
Share creates a read-only copy on Cursor's side. The shared-transcripts page says Share offers a team or public share link (Enterprise defaults to team only), shares the full conversation including tool calls and results, and redacts secrets best-effort. Teams and Enterprise only, not with No Storage privacy mode. "Fork to Cursor" lets a recipient continue. A link is not a backup you control.
Back up the files. With Cursor and any CLI session closed, copy both stores:
~/.cursor/projects(Windows:%USERPROFILE%\.cursor\projects) for the transcripts.- Cursor's
Userfolder, or at leastglobalStorageandworkspaceStorage, for the sidebar index. On macOS that is~/Library/Application Support/Cursor/User; on Windows%APPDATA%\Cursor\User; on Linux~/.config/Cursor/User.
Restore by putting the folders back with Cursor closed. Keep the transcript folder even if the index is broken; it is readable on its own and is the part no rebuild can recreate. CLI sessions are separate; include ~/.cursor in a full backup if you use both surfaces.
state.vscdb.backup is a rolling copy. During the Cursor 2.2 chat-loading incident, a staff reply in #145834 (12 December 2025) pointed people at it, with the warning to copy the current state.vscdb first. Check its timestamp before relying on it; a long-running Cursor can have overwritten it since the chats disappeared.
Where to go next#
- Cursor guides — the rest of the set.
- Back up coding-agent sessions — where each tool keeps its session files.
- Context compaction — when the chat is there but its middle is not.
- Hand off work between Claude Code and Codex — when the work has to move to another tool or machine.