1. 换机后 claude --resume 找不到会话,问题到底出在哪
很多人第一次遇到这个场景,是在公司台式机和家里笔记本之间来回切换的时候。白天在台式机上跟 Claude Code 聊了半天的重构方案,晚上回家打开笔记本,敲下claude --resume,结果列表里空空如也,或者只有本机之前那几条旧记录。第一反应通常是「是不是中转站把会话弄丢了」,其实这个方向从一开始就错了。
Claude Code 的会话数据从来不走 API 通道。它把每个项目的对话历史写在本地文件系统里,具体位置是~/.claude/projects/目录下,按项目路径编码成一个个子目录,每个子目录里是若干.jsonl会话文件。中转站或者官方 API 只负责把当前这一轮请求转发给模型,返回结果,它不存储、也不感知你之前聊过什么。所以「换中转站会不会丢会话」这个担心是多余的——你换的只是请求出口,本地那堆 jsonl 文件一个字节都没动。
真正导致跨设备claude --resume失效的原因只有两个:一是新设备上根本没有旧设备的~/.claude/数据,二是两台设备的配置(尤其是 API Key 和 Base URL)不一致,导致新设备连请求都发不出去,自然也就谈不上恢复上下文。前者是数据迁移问题,后者是配置统一问题。这篇就把这两件事一起解决:用 TaoToken 的统一 Key 和 API 通道把两台设备的settings.json对齐,再用claude-sync或手动方式把会话目录搬过去,最后用claude --resume和同步工具双重验证连通。
适合谁看:手上有两台及以上设备、需要频繁切换开发环境的 Claude Code 用户;正在用第三方 API 通道、担心换机后配置要重配一遍的人;以及想搞清楚「会话到底存在哪、迁移到底迁什么」的开发者。下面所有步骤都是可复制的,配置片段直接改路径就能用。
2. TaoToken 统一 Key 与 API 通道的前置准备
在动手迁移之前,先把「统一入口」这件事做掉。跨设备协作最烦的就是每台机器一套 Key、一套地址,改来改去还容易漏。TaoToken 的思路是给你一个统一的 API 通道和 Key,两台设备都指向同一个 Base URL,用同一个 Key,这样配置只需要维护一份,迁移时复制过去就行。
先到官网 https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite 注册并登录,然后在控制台里创建 API Key。控制台地址是 https://taotoken.net/console?utm_source=taotoken_aicg_blog_end&utm_content=console&utm_campaign=rewrite ,进去之后找到 API Keys 页面,新建一个 Key 并复制保存。这个 Key 就是后面两台设备共用的那一把,建议命名成claude-code-shared之类的,方便识别。
API 通道的基础地址是 https://taotoken.net/api ,注意这个地址后面不加任何 UTM 参数,配置里写的就是它。Claude Code 走的是 Anthropic 兼容协议,所以 Base URL 通常要写到/api这一层,具体拼接方式在下一节的settings.json里给出。
这里有个概念要分清:TaoToken 提供的是模型调用的 API 通道,它不替代 Claude Code 这个客户端本身,也不接管你的本地会话文件。它的作用是让两台设备的请求都从同一个出口出去,Key 和地址统一,省得你每台机器单独配。会话数据的迁移是另一条线,靠文件同步解决。两条线分开理解,后面就不会乱。
如果你还想在配置前先验证一下 Key 能不能用,可以打开模型对话页面 https://taotoken.net/models?utm_source=taotoken_aicg_blog_end&utm_content=models&utm_campaign=rewrite 发一条测试消息,确认通道正常。这一步不是必须的,但能帮你提前排除 Key 本身的问题,免得后面排查时分不清是配置错还是 Key 错。
准备好 Key 之后,把两台设备都更新到较新的 Claude Code 版本。版本差异会导致settings.json的字段支持不一致,尤其是涉及env覆盖和模型 ID 的部分。用claude --version看一下,尽量保持一致。前置准备就这些:一个统一 Key、一个统一 Base URL、两台版本接近的设备。
3. 可复制的 settings.json 与统一 Key 配置片段
这一节是整篇的核心,配置写对了,后面基本就顺了。Claude Code 的配置分两层:全局配置在~/.claude/settings.json,项目级配置在项目根目录的.claude/settings.json。跨设备迁移建议把 API 通道相关的配置放在全局层,这样所有项目共用一份,迁移时只搬一个文件。
先看全局settings.json的骨架。路径:macOS/Linux 是~/.claude/settings.json,Windows 是C:\Users\你的用户名\.claude\settings.json。内容如下:
{ "env": { "ANTHROPIC_BASE_URL": "https://taotoken.net/api", "ANTHROPIC_AUTH_TOKEN": "sk-你的TaoToken统一Key", "ANTHROPIC_MODEL": "claude-sonnet-4-20250514", "ANTHROPIC_SMALL_FAST_MODEL": "claude-3-5-haiku-20241022" }, "permissions": { "allow": [], "deny": [] } }几个字段说明一下。ANTHROPIC_BASE_URL填 TaoToken 的 API 地址,注意结尾不要多加斜杠,也不要带任何查询参数。ANTHROPIC_AUTH_TOKEN就是你刚才在控制台创建的那把统一 Key,两台设备填同一个值。ANTHROPIC_MODEL是主模型 ID,ANTHROPIC_SMALL_FAST_MODEL是后台小任务用的快模型,这两个 ID 要跟你账号里可用的模型对上,写错了会报模型不存在。
如果你更习惯用 TOML 风格或者项目级配置,项目根目录的.claude/settings.json可以只覆盖差异部分,比如某个项目想用不同的模型:
{ "env": { "ANTHROPIC_MODEL": "claude-opus-4-20250514" } }项目级会跟全局合并,同名 key 以项目级为准。这样你全局放统一 Key 和 Base URL,个别项目微调模型,迁移时全局文件一复制,项目级跟着仓库走,两边就一致了。
关于 CC Switch 这类配置切换工具,如果你在用,它的配置文件里同样要写全三件套:Base URL、Key、Model ID。以 CC Switch 的配置为例,一个 provider 条目大致长这样:
{ "name": "taotoken", "baseUrl": "https://taotoken.net/api", "apiKey": "sk-你的TaoToken统一Key", "model": "claude-sonnet-4-20250514" }三件套缺一不可,尤其是 Model ID,很多人只填了地址和 Key,结果请求发出去返回model not found,排查半天以为是通道问题。记住:Base URL 决定请求去哪,Key 决定你是谁,Model ID 决定用哪个模型,三者必须同时正确。
配置写完后,两台设备都要做一遍。建议把这份settings.json存到一个你信得过的私有位置(比如加密笔记或者私有仓库),换机时直接拉下来改一下用户名路径就行。下一节验证请求是否真的通了。
4. 验证请求与 claude --resume 恢复会话的完整步骤
配置写完不代表通了,得实际发一次请求验证。先做最小验证:在终端里直接跑一条非交互命令,看通道是否返回正常。
claude -p "回复一句:通道连通测试成功"如果返回了类似「通道连通测试成功」的内容,说明 Base URL、Key、Model ID 三件套都对了。如果报错,先别急着改配置,把报错原文记下来,对照第 5 节的排查表处理。
通道通了之后,处理会话迁移。先确认旧设备上的会话目录长什么样:
ls -la ~/.claude/projects/你会看到一堆以路径编码命名的目录,比如-Users-yourname-code-myproject这种形式,每个目录里是.jsonl会话文件。这些就是claude --resume读取的数据源。
情形一:新设备是全新的,直接覆盖。先在旧设备上打包整个.claude目录:
tar -czf claude-backup.tar.gz -C ~ .claude把claude-backup.tar.gz传到新设备,然后在新设备上先备份再解压覆盖:
mv ~/.claude ~/.claude.bak tar -xzf claude-backup.tar.gz -C ~解压完运行claude --resume,应该能看到旧设备的所有会话列表。选中一条进去,上下文完整。
情形二:新设备已有重要会话,需要合并。这时候别直接覆盖,用claude-sync更省事。先在两台设备都装上:
curl -fsSL https://claude-sync.com/install.sh | bash claude-sync --version旧设备推送:
claude-sync push新设备拉取并合并(不加--force就是增量合并,保留两边数据):
claude-sync pull如果新设备数据不重要、想直接以旧设备为准,加--force:
claude-sync pull --force同步完成后同样用claude --resume验证,检查列表里是否两边的会话都在。如果用的是 Claude Context Sync,流程是导出再导入合并:
# 旧设备导出 claude-context-sync export # 新设备导入并合并 claude-context-sync import --merge它的优势是带智能路径转换,跨 macOS 和 Windows 时路径编码差异能自动处理,适合一次性大迁移。验证时重点看两件事:会话数量对不对,随便点开一条旧会话看上下文是否完整。都正常,迁移就算完成了。
5. 跨设备迁移常见报错排查对照
迁移过程中最容易卡在几个固定报错上,这里按真实报错逐条对照。
401 Unauthorized / authentication_error:Key 不对或没生效。检查settings.json里ANTHROPIC_AUTH_TOKEN是不是完整复制了,有没有多余空格或换行。如果用了 CC Switch,确认当前激活的 provider 是填了 TaoToken 三件套的那个。还有一种情况是环境变量里有个旧的ANTHROPIC_API_KEY覆盖了配置文件,用env | grep ANTHROPIC看一下,有冲突就清掉。
local proxy failed / connection refused:Base URL 写错或本地网络到不了。确认地址是https://taotoken.net/api,结尾没有多余斜杠,也没有被某个本地代理工具改写。如果你之前配过本地代理端口,检查settings.json或环境变量里有没有残留的HTTP_PROXY指向一个已经关掉的端口,有就删掉。
reading 'choices' of undefined / 返回结构解析失败:这类报错通常是请求打到了不兼容的端点,或者 Model ID 写错导致返回体不是预期格式。先确认 Base URL 走的是 Anthropic 兼容协议,再核对ANTHROPIC_MODEL的 ID 是否在账号可用列表里。ID 拼错一个字符就会触发这种解析错误,别怀疑通道,先怀疑 ID。
OAuth error / token expired:如果你之前用官方账号登录过,本地可能残留 OAuth 凭证,跟 API Key 模式冲突。检查~/.claude/下有没有旧的凭证文件,必要时清掉重新用 Key 模式。用统一 Key 之后就不需要 OAuth 流程了,配置里只保留ANTHROPIC_AUTH_TOKEN即可。
claude --resume 列表为空但文件存在:会话文件在,但路径编码对不上。不同设备的项目绝对路径不同,~/.claude/projects/下的目录名是按路径编码的,路径变了目录名就变了,--resume按当前项目路径去找自然找不到。解决办法是用claude-sync的路径转换功能,或者手动把旧目录重命名成新设备对应的路径编码。Claude Context Sync 的--merge也会处理这个。
同步工具报 permission denied:~/.claude/目录权限问题。用chmod -R u+rw ~/.claude修一下,再重新执行同步。Windows 上如果遇到文件占用,先关掉所有 Claude Code 进程再同步。
排查的核心思路就一条:先分清是「通道问题」还是「数据问题」。通道问题看 401、proxy、choices 这几类,数据问题看 resume 列表和路径编码。分清了,改哪里就明确了。
6. 一次配置两台设备通用的长期协作建议
配置和迁移都跑通之后,把它变成长期习惯,后面换机、加设备都是几分钟的事。
第一,把全局settings.json当成唯一配置源。两台设备只维护这一份,Key 和 Base URL 都从 TaoToken 统一出。需要换模型时改一处,同步过去即可。项目级配置跟着代码仓库走,不放进全局。
第二,会话同步用claude-sync做日常增量,用 Claude Context Sync 做一次性大迁移。日常两台设备来回切,claude-sync push和claude-sync pull就够了,增量快。换新机或者要合并两边的历史,再用导出导入那套。
第三,定期备份~/.claude/目录。哪怕有同步工具,本地留一份打包备份也不亏,出问题能快速回滚。备份文件别放公开位置,里面可能有你的项目路径和对话内容。
第四,如果你长期在编码和 Agent 场景里用 Claude Code,可以考虑 Coding Plan 这类方案 https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_content=coding-plan&utm_campaign=rewrite ,把额度管理和多设备使用统一起来,省得每台设备单独算。接入文档在 https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_content=doc&utm_campaign=rewrite ,配置字段有疑问时对着文档核对最快。Key 管理还是回到 API Keys 页面 https://taotoken.net/api-keys?utm_source=taotoken_aicg_blog_end&utm_content=api-keys&utm_campaign=rewrite ,需要轮换或新增时在那里操作。
最后提醒一个容易忽略的点:迁移完成后,在两台设备上各跑一次claude --resume,随便挑一条旧会话继续聊一句,确认上下文真的接上了,而不只是列表里能看到。列表能看到只说明文件在,能接着聊才说明数据完整、通道也通。这一步做完,跨设备协作才算真正闭环。