1. 换电脑后,Claude Code 为什么认不出旧会话
我遇到的情况是:挑战杯项目做到一半,需要从笔记本换到台式机继续写。笔记本上那几轮对话已经把项目背景、数据清洗逻辑、图表口径都聊透了,换机器之后,我用 claude 打开项目目录,看到的却是全新会话,之前几十轮上下文像没存在过一样。想用 claude --resume 找回原来的对话,列表里只有零星几个无关会话,项目相关的旧会话直接消失。
这个问题的根源通常有两层,而且很容易混在一起。第一层是 ~/.claude/projects 目录下的路径编码不一致:Claude Code 会把你打开项目时的绝对路径编码成目录名,旧电脑用的是 C:\Users\A\Desktop\挑战杯数据集,新电脑用户名变成 B,编码目录就变成 C--Users-B-Desktop-------,对不上,旧会话自然找不到。第二层是新电脑的 Claude Code 本身还没接入可用的模型通道,就算文件搬对了,模型请求发不出去,会话加载出来也是一副“卡住”的样子。
先说结论:排查顺序应该是先让 Claude Code 能正常调模型,再去看会话文件到底映射到哪个目录。如果你也需要一把能跨电脑用的 API Key,可以直接在 TaoToken 上创建,然后把 Claude Code 的 Base URL 指到 https://taotoken.net/api(末尾不要带 /v1)。这样至少能把“通道通不通”和“会话文件放没放对”这两件事分开。
1.1 会话“蒸发”不是丢了,是目录映射错了
Claude Code 把每个项目的对话记录按项目绝对路径编码存放,目录名不是 挑战杯数据集 这种可读名字,而是一串把冒号、反斜杠、中文都替换成连字符的编码。两台电脑只要用户名、盘符、父目录任一不同,编码目录名就不同,旧对话的 JSONL 文件其实还在迁移包里,但新电脑去找的是另一个名字的目录,自然什么都读不到。
不要急着重新描述一遍需求让 AI 重新生成上下文。先打开旧电脑的 ~/.claude/history.jsonl,搜索你的项目路径,找到对应的 sessionId。这个 ID 是后面所有操作的核心定位点。只要拿到它,就能把对话转录文件准确地放回新电脑的编码目录里。
1.2 通道配置出问题,会伪装成“会话不加载”
另一种常见假象是:会话文件路径根本没动,但新电脑上打开 Claude Code 后输入 /resume,列表里能看到旧会话,选了之后却没有任何历史消息回显,然后马上报连接错误。这种情况多半不是目录问题,而是模型通道没配好——Claude Code 尝试用旧电脑留下的 API 配置去请求模型,Key 失效或者 Base URL 不对,整段对话拉不起来。
所以我会建议,迁移之前先在新电脑上把模型通道跑通。去 TaoToken 注册并创建一把 Key,在 ~/.claude/settings.json 里把环境变量指到 https://taotoken.net/api,再随便开个新会话说一句话,能收到回复再开始处理会话文件。这一步能帮你省掉大量重复排障时间。
2. 先分清两件事:通道配置没跑通,还是路径映射错了
很多人一上来就复制 ~/.claude 整个目录到新电脑,然后发现还是看不到旧会话,就开始怀疑是不是 Claude Code 版本问题。实际上,迁移要拆成两个独立的问题看:一是 Claude Code 能不能调到模型,二是它能不能按旧路径找到对话记录。
第一个问题通常体现在新建会话时:输入 hi 后没有任何回复,或者报 401、404、connection refused。遇到这类错误,检查 ANTHROPIC_BASE_URL 是不是多了 /v1,ANTHROPIC_AUTH_TOKEN 是不是不小心带上了空格,以及 Key 是不是真的从 TaoToken 控制台创建的。第二个问题则表现为:模型已经能正常回复,但 /resume 列表里找不到旧会话,或者找到了加载后是空的。这时候才需要去检查 ~/.claude/projects 下编码目录名和会话 JSONL 文件是否一致。
2.1 用一把 Key 先跑通模型请求
拿到 Key 之后,不需要重新配置 Claude Code 的登录流程,Claude Code 认的是环境变量。在 ~/.claude/settings.json 里写入:
{
"env": {
"ANTHROPIC_BASE_URL": "https://taotoken.net/api",
"ANTHROPIC_AUTH_TOKEN": "YOUR_API_KEY",
"ANTHROPIC_MODEL": "MODEL_ID"
}
}
这里的 YOUR_API_KEY 替换成你在 TaoToken 控制台创建的 Key,MODEL_ID 以模型广场当时列表为准,不要凭记忆填一个带日期后缀的旧 ID。保存后重启 Claude Code,新开一个会话随便问一句“当前工作目录是什么”,能正常返回就说明通道通了。
2.2 通道通了之后,旧会话不显示才轮到路径问题
通道验证通过后,再把迁移包里的对话转录文件放进新电脑的编码目录。如果这时候 /resume 能看到旧会话并还原历史消息,说明整套迁移只需要“对应目录 + 复制 JSONL + 修正 cwd”三步;如果还看不到,就要回过去看编码名是不是算错了。记住:通道问题会挡住所有会话请求,路径问题只影响那一个项目,这两种现象不要混在一起猜。
3. 迁移前先认准 ~/.claude 里的关键目录
要动手搬文件,先知道哪些文件是必须带走的。~/.claude 目录里最核心的结构如下:
~/.claude/
├── settings.json # 全局设置,含模型通道配置
├── history.jsonl # 项目路径与 sessionId 映射
├── projects/
│ └── <编码后的项目路径>/
│ ├── <session-id>.jsonl # 对话转录,核心数据
│ └── memory/ # /memory 保存的持久化记忆
├── sessions/
│ └── <pid>.json # 会话元数据,含 cwd 与 sessionId
├── file-history/
│ └── <session-id>/ # 文件编辑历史,/diff 会用
├── tasks/
│ └── <session-id>/ # 任务内部状态
└── .highwatermark
projects 目录下的 JSONL 是会话恢复的命脉,必须完整复制;sessions 目录里的元数据决定了 Claude Code 把这个会话关联到哪个项目目录;file-history 和 tasks 属于增强项,丢了不会让会话消失,但会导致 /diff 和任务状态在旧会话里不可用。history.jsonl 用于快速定位 sessionId,建议也从旧电脑拷贝一份,方便对照。
4. 方案 A:新电脑项目路径完全一致,直接搬目录
如果你的新电脑用户名、盘符、项目父目录都和旧电脑完全一样,那就最省事。把整个项目文件夹复制到新电脑相同位置,再将旧电脑的 ~/.claude 目录整体拷贝到新电脑对应位置,直接覆盖或合并。然后进入项目目录启动 claude,用 --continue 就能接上旧会话。
这个方案的好处是不需要改任何编码名,也不需要手动创建 sessions 元数据。但它的限制也很明显:只要用户名不同,路径就不一样,目录编码名必然不同。比如旧机器用户叫 zhang,新机器用户叫 li,整个 projects 下的子目录全部要重新映射。多数人都会遇到这种情况,所以方案 B 才是真正常用的处理方式。
5. 方案 B:用户名或盘符不同,按编码名重映射
方案 B 的完整流程是:先找到旧会话的 sessionId,再计算新路径的编码名,把对话转录文件复制到新编码目录下,最后修正会话元数据里的 cwd 字段。下面按步骤走,每一步都能单独验证。
5.1 从 history.jsonl 里定位 sessionId
在旧电脑上打开 ~/.claude/history.jsonl,搜索 挑战杯数据集 这个目录名,结果里会有一行记录包含 sessionId 字段,形如 66762821-xxxx-xxxx-xxxx-xxxxxxxxxxxx。记录下来,后续复制文件、文件编辑历史都靠它。
如果旧电脑上的 history.jsonl 已经被覆盖过,也可以在 ~/.claude/projects/旧编码名/ 下直接看文件名,每个 .jsonl 文件名去掉扩展名就是 sessionId。两个方法任选其一。
5.2 用 Python 算出新路径的编码名
Claude Code 的编码规则是把 :、\、/、?、*、"、<、>、| 以及所有非 ASCII 字符都替换成 -。新电脑的路径如果包含中文,每个中文字符都会变成单独的 -。用下面这段脚本计算:
new_path = r"C:\Users\B\Desktop\挑战杯数据集"
result = []
for ch in new_path:
if ch in ':\\/?"<>|' or ord(ch) > 127:
result.append('-')
else:
result.append(ch)
print('新编码名:', ''.join(result))
运行后在输出里看到类似 C--Users-B-Desktop------- 的字符串,记下来。旧编码名可以从旧电脑的 ~/.claude/projects 目录名里直接拿到,不需要重新算。
5.3 复制对话转录文件到新编码目录
在新电脑上创建目标目录,然后把迁移包里的 JSONL 文件复制过去:
mkdir -p ~/.claude/projects/"C--Users-B-Desktop-------"
cp claude-migration/projects/C--Users-A-Desktop-------/66762821-xxxx-xxxx-xxxx-xxxxxxxxxxxx.jsonl \
~/.claude/projects/"C--Users-B-Desktop-------"/
如果旧项目的 memory 目录非空,也要一并复制:
cp -r claude-migration/projects/C--Users-A-Desktop-------/memory \
~/.claude/projects/"C--Users-B-Desktop-------"/
5.4 修正会话元数据里的 cwd
复制完对话文件后,还要让 Claude Code 知道这个会话属于哪个项目目录。在 ~/.claude/sessions/ 里创建一个元数据文件,文件名可以用原 PID,内容类似:
{
"sessionId": "66762821-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"cwd": "C:\\Users\\B\\Desktop\\挑战杯数据集",
"project": "C:\\Users\\B\\Desktop\\挑战杯数据集",
"status": "running"
}
具体字段会随 Claude Code 版本略有差异,但 cwd 和 sessionId 是关键:前者告诉 Claude Code 在哪个项目恢复,后者把元数据和 JSONL 转录文件关联起来。改完保存后,进入新电脑项目目录,运行 claude --resume,选择对应的 sessionId,历史对话应该就能完整显示出来。
6. 迁移完把 Claude Code 指到 TaoToken 通道做验证
文件搬对了,接下来要让这个恢复出来的会话真正能继续对话。新电脑上如果没有可用的模型通道,旧会话加载后依旧会卡在等待回复的状态。把 ~/.claude/settings.json 里的 env 配置成:
{
"env": {
"ANTHROPIC_BASE_URL": "https://taotoken.net/api",
"ANTHROPIC_AUTH_TOKEN": "YOUR_API_KEY",
"ANTHROPIC_MODEL": "MODEL_ID"
}
}
YOUR_API_KEY 在 TaoToken 控制台 创建;MODEL_ID 去 TaoToken 模型广场 查当前可用的模型 ID,别用官方旧 model 名硬填。这里注意一个细节:ANTHROPIC_BASE_URL 只填 https://taotoken.net/api,不要加 /v1,也不要加任何 UTM 参数,UTM 只用于官网页面链接。
6.1 先用新会话确认通道再加载旧会话
配置保存后,不要直接去开旧会话。先打开一个全新会话,发送一句 hi。如果 Claude Code 正常回复,说明通道已经通了。这时候再退出新会话,进入项目目录,用 /resume 找到旧会话。如果旧会话里能看到完整历史消息并且可以继续追问,迁移就是成功的。
6.2 如果旧会话加载出来了但回复卡住
可能原因是 ANTHROPIC_MODEL 填了一个旧电脑上可以用的模型 ID,但当前通道不支持。回到 TaoToken 模型广场确认实际的模型 ID 列表,改完重启 Claude Code 再试。这类问题通常不会影响历史消息显示,只会影响新消息发送。
7. 验证与排障:会话列表空、401、cwd 错位
迁移完成后,最常见的几种报错和对应的处理方式如下。
7.1 /resume 列表为空
先确认 projects 目录下是不是真的存在新编码名的文件夹,再检查 JSONL 文件名是不是那个 sessionId。如果目录名多了一个或少了一个 -,Claude Code 都会认不出来。可以直接把新旧两个编码名放到一起逐字符对比,重点看用户名部分和中文目录的连字符数量。
7.2 401 或 Base URL 错误
401 Unauthorized 基本可以断定是 Key 和通道配置的问题。检查 settings.json 里 ANTHROPIC_AUTH_TOKEN 是否真的填入了 TaoToken 创建的 Key,有没有复制到换行符或空格。另外确认 ANTHROPIC_BASE_URL 是 https://taotoken.net/api 而不是 https://taotoken.net/api/v1。多余的后缀会直接导致路由找不到,表现就是模型无响应。
7.3 会话能加载,但 /status 显示的目录不对
这属于 cwd 元数据没有修正干净。打开 ~/.claude/sessions/ 下对应的 JSON 文件,把 cwd 字段改成新电脑上的项目完整路径,注意 Windows 路径里的反斜杠要转义,保存后重启 Claude Code 再 /resume。
8. 跑通之后去控制台对一下这次调用
会话恢复不是只看历史消息回来就结束了,还要确认模型请求确实走的是你配置的通道。打开 TaoToken 模型对话,用同一把 YOUR_API_KEY 发一条测试消息,看看是否和 Claude Code 里的模型 ID 一致。若要长期在项目里写代码,可以看一眼 Coding Plan 的用量是否够用;Key 的管理和用量核对都在 控制台 API Keys 页面。把这套配置和环境变量对照关系存好,下次换电脑就不用再重新回忆一遍了。




被折叠的 条评论
为什么被折叠?



