Claude Desktop 换成官方账号后,会话不见了怎么办
Windows 上的 Claude Desktop 在公司网关和个人 claude.ai 账号之间切换,侧边栏的 Code 会话就不见了。原因是两种登录方式各用一套数据目录,会话正文其实一条没丢。两个方向我各实操过一次,这篇讲两套目录、两个方向的差别;具体操作写成了 skill,下载给自己的 AI 照着做。
环境:Windows 11 上的 Claude Desktop,Code 模式。在公司的 API 网关和个人的 claude.ai 账号之间来回切换过。
切换登录方式之后,侧边栏里原来的 Code 会话全不见了。先说结论:聊过的内容一条没丢,丢的只是侧边栏的索引。
两套数据目录
Claude Desktop 按登录方式选数据目录,这是写在程序里的。两套目录互不相通,侧边栏只显示当前那一套里的会话:
| 网关模式(第三方 provider) | 官方账号(claude.ai) | |
|---|---|---|
| 数据目录 | %LOCALAPPDATA%\Claude-3p | %APPDATA%\Claude |
| 侧边栏记录放在 | claude-code-sessions\<账号ID>\<组织ID>\ | 同左 |
| 组织 ID | 固定值 00000000-0000-4000-8000-000000000001 | 真实的账号和组织 ID |
| 会话正文 | %USERPROFILE%\.claude\projects\ | 同一个位置,两边共用 |
侧边栏里的每条会话,就是那个文件夹里的一个 local_<会话ID>.json,记着标题、工作目录、分支和对应正文的 ID。切换登录方式等于换了一个文件夹,自然看不到另一边的会话。正文放在两边共用的位置,所以不受影响。
先别急着搬
先确认 ~/.claude/projects/ 里的 .jsonl 正文还在。确认之后有三条路:
| 做法 | 代价 |
|---|---|
| 切回原来的登录方式 | 零风险,侧边栏原样回来,但用不上新账号 |
不切,在终端里进仓库目录跑 claude --resume 接着聊 | 零风险,只是侧边栏还是空的 |
| 把会话记录从一套目录复制到另一套 | 侧边栏回来,但要直接改 Desktop 的状态文件 |
我第一次就选了第三条,把 54 条全搬了过去,搬得很成功。可官方账号那边的最后一次活动就停在当晚,后来我又回到了网关,那批记录再也没打开过。回头看,直接切回去才是成本最低的。
真要搬:两个方向的差别
搬的方法本身两个方向一样:完全退出 Desktop,把 local_*.json 从有它的那套目录复制到当前这套目录的对应文件夹,再打开 Desktop。会话记录里不含账号 ID 和组织 ID,所以可以原样复制,不用改任何字段。
不一样的是两次碰到的情况:
| 网关 → 官方 | 官方 → 网关 | |
|---|---|---|
| 当时的状况 | 刚切过去,官方那边几乎是空的 | 两边已经同步过一次,大部分会话两边都有 |
| 搬了多少 | 54 条全搬 | 56 条里只有 1 条需要搬 |
| 主要工作 | 确认没有重名,然后整批复制 | 逐条比对差集,挑出真正缺的 |
归档清单 archived-sessions.idx | 目标那边还没有,直接复制,2 条归档会话跟着过去 | 目标已经有了,不能覆盖 |
| 要跳过的 | 无 | 一条工作目录在官方账号那边临时工作区(scratch-workspaces)里的会话,搬过去打不开 |
| 留给自己决定的 | 无 | 一条两边都各自聊过的会话(一边 47 轮,一边 31 轮),已经分叉,谁也不能覆盖谁 |
归档清单记的是「哪些会话被归档了」,是状态不是数据。三周后我量了一下,官方那边记着 2 条,网关那边记着 15 条。拿网关那份盖到官方那边,会平白归档 13 条会话;反过来盖,又会把网关那边 13 条归档的会话放回主列表。哪个方向覆盖都不对,要么只在目标没有时复制,要么手工合并。
所以第一次搬最省事,之后每搬一次都更麻烦:两边各自往前走,重名、归档状态、分叉的会话都会冒出来。搬一次只是一张快照,不是同步,别在两边交替用同一条会话。
还有一个容易白干的地方:Desktop 开着的时候它会改写这些文件,必须从托盘彻底退出再动手,不然拷进去的东西会在它退出时被盖掉。我第一次就是拷完马上看,列表里还是只有 1 条。
顺带的 Git 报错
搬完点开会话,可能会报 Git isn’t working: this session’s branch is checked out somewhere else in this repository。这是另一个问题:每个 Code 会话都有自己的 git worktree 和 claude/* 分支,而「哪个会话用哪个目录、哪个分支」分别记在 git、Desktop 的 worktree 注册表和会话记录三个地方。会话记录里写的目录不存在、它要的分支又正被别的目录占着,Desktop 想重建 worktree 就会被 git 拒绝。
我那次是因为手动给一个 worktree 目录改了名,会话记录还指着旧名字。解法是确认占着分支的那个 worktree 里没有任何改动和独有提交之后,把它删掉,再回到 Desktop 发一条消息让它重建。教训就一句:给 worktree 目录改名或手动删 worktree 之前,先看看会话记录里写的是什么。
交给你的 AI 去做
具体的排查和操作步骤都写在 skill 里,包括怎么比对两边、复制前要查的几项、归档清单怎么处理、删 worktree 前的五项检查。下载放进你的 AI 的 skill 目录(Claude Code 是 ~/.claude/skills/<名字>/SKILL.md),跟它说一句「切换账号后侧边栏会话不见了」,或者把报错贴给它就行。两个方向它都能处理,而且会先让你在三条路里选,不会上来就动文件。
| 下载 | 说明 |
|---|---|
| SKILL.md(英文版) | 给 AI 用,建议用这个 |
| SKILL.cn.md(中文版) | 内容相同,方便自己看 |
备注
如果你的 AI 就跑在 Claude Desktop 里,它没法自己退出 Desktop 再改文件。skill 里让它把操作写成脚本交给你,等你退出 Desktop 后再跑,或者改在终端里用 Claude Code CLI 来做。
评论
评论加载中……