最近在使用 Cursor 时,遇到一个不少人都有的情况: 换了项目目录 / 拉了新仓库 / 更新了 Cursor 版本 → 之前的 Chat 记录在 UI 中看不到了。
很多用户第一反应是:
- "是不是被删了?"
- "Cursor 不保存历史?"
- "是不是只能靠截图和复制粘贴了?"
其实,大多数情况下: 👉 记录并没有丢,只是 Cursor 不再显示了。
本文从工程角度解释: 1️⃣ Cursor 的聊天记录究竟存在哪里 2️⃣ 为什么换项目 / 更新版本会"看不到" 3️⃣ 如何安全恢复 / 备份 / 导出
一、Cursor 的历史数据存储在哪里?
Cursor 的数据全部存储在本地(并不是云端),不同平台路径如下:
| Platform | Path |
|---|---|
| macOS | ~/Library/Application Support/Cursor/User |
| Linux | ~/.config/Cursor/User |
| Windows | %APPDATA%\Cursor\User |
目录结构大致如下:
bash
User/
├── globalStorage/ # 全局聊天数据
├── workspaceStorage/ # 每个项目对应独立数据
└── History/
二、核心数据库结构
Cursor 主要通过 SQLite 存储数据。
1️⃣ globalStorage
路径:
bash
globalStorage/state.vscdb
包含:
- AI 全量回复
- 每条消息(bubble)
- Session 元信息
关键表:
cursorDiskKV
Key 格式:
| Key | 含义 |
|---|---|
composerData:<composerId> |
会话信息 |
bubbleId:<composerId>:<bubbleId> |
单条消息 |
2️⃣ workspaceStorage
每个项目一个单独目录:
bash
workspaceStorage/<hash>/
├── state.vscdb
└── workspace.json
重点是:
workspace.json记录真实项目路径state.vscdb记录该项目 Chat 列表和用户消息
三、为什么会"看不到历史"?
因为 Cursor 的设计是:
Chat 绑定的是"工作空间路径",而不是项目名或仓库本身。
于是会发生:
| 场景 | 结果 |
|---|---|
| 换目录 / rename | Hash 变了,历史不再匹配 |
| 复制项目 | 新目录 = 新 workspace,历史不跟过去 |
| 重新打开一个空目录 | Cursor 创建新 workspace |
| 升级版本 | Workspace mapping 可能变化 |
最终结果就是:
👉 历史存在,但 Cursor UI 没法自然关联回去,所以显示不出来。
这也是很多人选择手动复制 workspaceStorage 目录的原因 ------ 但这种方法风险很大,比如:
- SQLite journal 不一致
- 哈希映射不稳定
- 不同 Cursor 版本 schema 不完全一致
四、如果需要恢复 / 备份 / 导出怎么办?
工程上有两种方式:
✅ 方式一:自己读 SQLite
你可以:
阅读:
bash
globalStorage/state.vscdb
workspaceStorage/*/state.vscdb
常见 SQL:
获取 session:
sql
SELECT value FROM ItemTable
WHERE key = 'composer.composerData';
获取消息:
sql
SELECT key, value FROM cursorDiskKV
WHERE key LIKE 'bubbleId:<composerId>:%'
ORDER BY rowid ASC;
能恢复,但工作量较大,且要处理:
- 新旧版本 schema
- tool calls / diffs / thinking 字段
- path mapping
✅ 方式二:使用现成工具(推荐)
如果你不想手动分析/拼接 Cursor 的 SQLite 数据结构(globalStorage + workspaceStorage + composer/bubble 键值映射),更省事的方式是直接使用现成工具完成读取、恢复与迁移。
我基于上述存储结构实现了两个开源项目:
1)cursor-history(CLI / Library)
核心能力是把 Cursor 本地数据库中的内容结构化还原出来,实现:
- 稳定读取 Cursor 本地 SQLite(不依赖云)
- 重建 Session → Message → Bubble(含时间戳、tool calls、diff 等)
- 支持浏览 / 搜索 / 导出(Markdown / JSON)
- 支持备份 / 恢复
- 支持跨 workspace 的会话迁移(项目移动/重命名后依然可追溯)
项目完全开源,逻辑上等价于把 Cursor 历史作为"可查询的数据源"而不是仅仅在 UI 中可见。
2)cursor-history-mcp(MCP Server,面向 Claude 集成)
如果你同时使用 Claude / Claude Code / Claude Desktop,希望用自然语言直接检索历史对话,可以使用 MCP 版本:
- 通过 MCP 把 Cursor 历史暴露给 Claude
- 支持自然语言查询、导出、备份等操作
npx即跑,零安装/零配置- 直接读 SQLite,不需要 embeddings/向量库,更稳定可复现(grep-style 搜索)
MCP 配置示例(Claude Code / Claude Desktop 通用)
在 MCP 配置中加入:
json
{
"mcpServers": {
"cursor-history": {
"command": "npx",
"args": ["-y", "cursor-history-mcp"]
}
}
}
完成后,你就可以在 Claude 里直接"问" Cursor 历史(例如查某个 bug 讨论、找某段 diff、回顾某次设计决策),相当于把本地 chat history 变成可检索的知识库。
五、总结
- Cursor 聊天记录没有"真的消失",只是绑定到 workspace 路径
- globalStorage + workspaceStorage = 完整历史
- 手动复制目录可以,但不太方便