ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

【Bug已解决】Claude Code 会话恢复失败:--continue 失效的 settings.json 配置排查与修复

【Bug已解决】Claude Code 会话恢复失败:--continue 失效的 settings.json 配置排查与修复 1. 会话恢复失败到底卡在哪claude --continue报No previous session found或者claude --resume提示No sessions available to resume这类问题在本地开发环境里出现频率不低。它的本质不是 Claude Code 坏了而是会话恢复机制依赖三个条件同时成立会话文件存在、工作目录匹配、JSON 结构可解析。任意一个不满足--continue就会退化成新建会话你之前聊了半小时的上下文直接归零。我先把结论放前面--continue查找的是「当前工作目录关联的最近会话」不是全局最近会话。很多人换了终端目录、或者用 IDE 内置终端打开项目根目录之外的路径就会命中这个坑。另一个高频原因是会话文件被磁盘清理工具或手动rm删掉以及 Claude Code 升级后旧会话格式不兼容。这篇文章面向在终端里用 Claude Code 做日常开发的同学尤其是已经配了自定义 API 通道、想稳定恢复长会话的人。我会给出可复制的settings.json骨架、TaoToken 统一 Key 的接入配置以及从复现失败到确认恢复成功的逐步验证动作。你跟着做基本能定位到具体是哪一类原因。需要先明确一点会话恢复失败和模型请求失败是两回事。前者是本地文件与目录逻辑问题后者才涉及 API 通道。但两者经常被混在一起排查所以下面会把配置层和会话层分开讲避免你改错地方。2. 前置TaoToken 统一 Key 与 API 通道在排查会话问题之前先把模型请求通道固定下来否则你无法判断「恢复后无法正常工作」到底是会话坏了还是 Key 失效了。TaoToken 提供统一的 API 入口Claude Code 通过环境变量指向它即可不需要在多个 Key 之间切换。官网地址是 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content API 基址是 https://taotoken.net/api 。注意 API 地址不带 UTM 参数直接写进配置就行。你需要先在控制台创建一个 Key。打开 https://taotoken.net/console?utm_sourcetaotoken_aicg_blog_endutm_contentconsoleutm_campaignrewrite 在 API Keys 页面生成然后到 https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi-keysutm_campaignrewrite 确认 Key 状态是启用。这一步别跳过很多「恢复后请求 401」其实是 Key 被禁用或额度耗尽。环境变量建议写进 shell 配置文件而不是每次手动 export。以 zsh 为例# ~/.zshrc export ANTHROPIC_BASE_URLhttps://taotoken.net/api export ANTHROPIC_API_KEYsk-你的TaoTokenKey改完执行source ~/.zshrc然后用echo $ANTHROPIC_BASE_URL确认生效。如果你用的是 bash对应~/.bashrc或~/.bash_profile。Windows 终端则在系统环境变量里加同名项。注意不要把 Key 硬编码进项目仓库的.env并提交会话文件里可能残留请求元信息泄露风险更高。通道固定后会话恢复失败就只剩本地文件与目录问题排查范围立刻缩小。3. 可复制的 settings.json 骨架Claude Code 的配置分两层全局配置在~/.claude/settings.json项目级配置在项目根目录的.claude/settings.json。会话恢复相关的行为主要受全局配置影响但项目级配置会覆盖部分字段。下面这份骨架可以直接复制字段含义我逐行标注。{ apiKeyHelper: , env: { ANTHROPIC_BASE_URL: https://taotoken.net/api, ANTHROPIC_API_KEY: sk-你的TaoTokenKey }, permissions: { allow: [], deny: [] }, session: { autoSave: true, maxSessions: 50, resumeStrategy: directory }, telemetry: false }env块把 TaoToken 的基址和 Key 注入 Claude Code 进程这样即使你忘了在 shell 里 export配置也能兜底。session.autoSave必须为true否则退出时不会写会话文件--continue自然找不到东西。resumeStrategy设为directory表示按工作目录匹配会话这也是--continue的默认查找逻辑。maxSessions控制保留的会话数量设太小会导致旧会话被自动清理。如果你经常做长周期任务建议调到 100 以上。telemetry关掉可以减少无关网络请求对排查干扰更小。项目级.claude/settings.json建议只放权限和项目特定参数不要重复写env避免和全局配置冲突。一个最小项目级配置{ permissions: { allow: [Bash(git:*), Read, Write] } }改完配置后用claude --version确认 CLI 能正常启动。如果启动就报配置解析错误说明 JSON 有语法问题用python3 -m json.tool ~/.claude/settings.json验证。4. 逐步验证从复现失败到恢复成功这一节是核心操作流程按顺序执行每一步都有明确的预期输出。不要跳步否则你无法判断问题出在哪一层。4.1 复现失败并记录报错先在一个测试目录里制造一次失败确认你遇到的是哪类报错。mkdir -p ~/tmp/cc-test cd ~/tmp/cc-test claude --continue预期会看到Error: No previous session found因为这个目录从没跑过 Claude Code。记下这条报错它对应「目录不匹配」或「会话文件不存在」。再试指定 ID 恢复claude --resume abc-123预期Error: Invalid session ID。这说明--resume不会模糊匹配ID 必须精确。4.2 检查会话文件是否存在会话文件默认在~/.claude/sessions/下按工作目录路径转义后分目录存放。ls -la ~/.claude/sessions/你会看到若干以路径转义命名的目录比如_Users_you_project。进入对应目录ls -la ~/.claude/sessions/$(pwd | tr / _)/如果这个目录不存在说明当前工作目录从未产生过会话--continue必然失败。如果目录存在但没有session-*.json说明会话文件被清理了。4.3 验证会话文件 JSON 格式找到会话文件后逐个验证 JSON 是否可解析find ~/.claude/sessions/ -name session-*.json -exec python3 -m json.tool {} \; /dev/null 21 echo exit code: $?返回非 0 说明有文件损坏。定位具体文件for f in $(find ~/.claude/sessions/ -name session-*.json); do python3 -m json.tool $f /dev/null 21 || echo corrupted: $f done损坏文件直接删除Claude Code 会跳过它继续找上一个可用会话rm ~/.claude/sessions/*/session-corrupted.json4.4 在原工作目录执行 --continue这是最关键的一步。--continue只认当前目录所以必须cd回你当初启动 Claude Code 的那个路径。cd /path/to/your/project claude --continue如果恢复成功你会看到之前的对话历史被加载终端顶部显示会话 ID。如果仍然失败用--resume指定 IDclaude --resume --list列出可用会话后挑一个 ID 恢复claude --resume session-id4.5 确认恢复后请求正常恢复成功后发一条测试消息确认模型请求走的是 TaoToken 通道# 在 Claude Code 会话内输入 回复 channel-ok 四个字如果返回正常说明会话层和 API 层都通了。如果报 401 或超时回到第 2 节检查 Key 和基址。这一步能帮你区分「会话恢复成功但请求失败」和「会话根本没恢复」。5. 本篇常见错排查下面这些是我在实际排查中反复遇到的按出现频率排序。报错No previous session found但目录里明明有文件。检查文件权限~/.claude/sessions/及其子目录需要当前用户可读写。用ls -la看 owner 是否是你自己。如果是 root 创建的chown -R $USER ~/.claude修一下。--continue恢复了但上下文全丢。这通常是会话文件被截断或只写了元数据。用python3 -m json.tool看文件里有没有messages数组。如果只有sessionId和createdAt说明写入中断这个会话救不回来只能开新会话并引用之前保存的总结文件。多终端同时--continue导致冲突。两个终端恢复同一会话会互相覆盖写入。建议一个终端用--continue另一个开新会话。如果必须并行用--resume 不同ID各恢复各的。升级 Claude Code 后旧会话打不开。会话格式可能变了。先备份~/.claude/sessions/然后临时降级查看旧会话内容把关键信息导出到文件再升回最新版。降级命令npm install -g anthropic-ai/claude-code旧版本磁盘空间不足导致会话写入失败。用df -h ~检查。空间紧张时清理旧会话find ~/.claude/sessions/ -name session-*.json -mtime 30 -delete/clear之后--continue行为异常。/clear清空当前上下文但会话文件可能保留。恢复后可能回到清空前的状态也可能不行取决于版本实现。重要内容不要依赖/clear后的恢复退出前手动写文件更稳。settings.json 里session.autoSave被项目级配置覆盖成 false。检查项目.claude/settings.json有没有写session块。有的话删掉让全局配置生效。6. 把会话成果落到文件比依赖恢复更稳排查到最后你会发现--continue失效的根因里会话文件被删和目录不匹配占了大多数。这两个都不是配置能彻底解决的因为磁盘清理、换目录、多终端操作都是日常行为。所以我的习惯是每个阶段结束前让 Claude Code 把关键决策写进项目里的docs/decisions.md而不是指望下次--continue能完整恢复。具体做法是在会话里直接说 把刚才讨论的接口设计和字段约定总结到 docs/decisions.md文件进 git比会话文件持久得多。下次开新会话时第一句就是参考 docs/decisions.md 继续上下文立刻接上还不受目录和版本影响。如果你需要长期跑编码任务、频繁恢复会话建议把 Coding Plan 用起来配合固定工作目录和自动保存恢复成功率会高很多https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentcoding-planutm_campaignrewrite 。模型对话调试入口在 https://taotoken.net/chat?utm_sourcetaotoken_aicg_blog_endutm_contentchatutm_campaignrewrite 接入文档在 https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewrite 。Claude Code 相关的 Anthropic 兼容配置参考 https://taotoken.net/claude-code-anthropic?utm_sourcetaotoken_aicg_blog_endutm_contentclaude-code-anthropicutm_campaignrewrite 。最后留一个我踩过的坑--continue和--resume不要混用同一个会话。先用--continue恢复再用--resume 同一个ID可能触发写入冲突导致会话文件损坏。选定一种方式坚持用到底。
返回列表