【Bug已解决】--continue fails / Session not found — Claude Code 会话恢复失败解决方案
【Bug已解决】--continue fails / Session not found — Claude Code 会话恢复失败解决方案
1. 问题描述
使用claude --continue或claude --resume恢复之前的会话时,终端弹出以下错误:
Error: No previous session found Unable to continue: no session history available或者:
Error: Session not found Session ID 'abc123' does not exist or has been corrupted有时报错为会话文件损坏:
Error: Failed to load session Session file corrupted: invalid JSON in ~/.claude/sessions/2024-01-15/session-abc123.json这个问题在以下场景中特别常见:
- 清理了 ~/.claude/sessions/ 目录后
- 系统崩溃导致会话文件写入不完整
- 从另一台机器复制配置但缺少会话文件
- 会话文件过大或格式损坏
- 多个 Claude Code 版本混用导致格式不兼容
# 典型复现过程 $ claude # 使用 1 小时后退出 /exit $ claude --continue Error: No previous session found # 无法恢复刚才的会话2. 原因分析
核心原理拆解
claude --continue → 查找最近的会话文件 ↓ 会话文件不存在/损坏/格式不兼容 ↓ 无法加载会话历史 ↓ 报错 No previous session found原因分类表
| 原因分类 | 具体表现 | 占比 |
|---|---|---|
| 会话文件被清理 | 手动或自动清理了 sessions 目录 | 约 35% |
| 会话文件损坏 | 系统崩溃导致 JSON 不完整 | 约 25% |
| 版本不兼容 | 旧版会话格式新版无法解析 | 约 20% |
| 路径问题 | HOME 目录变化或软链接 | 约 10% |
| 权限问题 | 会话文件属于其他用户 | 约 5% |
| 磁盘空间不足 | 写入会话文件时失败 | 约 5% |
3. 解决方案
方案一:使用 /recap + /clear 代替 --continue(最推荐)
如果 --continue 失败,在退出前使用 /recap 保存摘要。
# 步骤 1:在当前会话中(退出前) /recap # 生成会话摘要 # 步骤 2:将摘要保存到文件 # Claude Code 会输出摘要内容 # 手动复制到文件或让 Claude 保存 # 步骤 3:退出后新会话中引用摘要 /clear > 参考之前的工作摘要: [粘贴摘要内容]方案二:修复损坏的会话文件
# 步骤 1:找到会话文件 ls -la ~/.claude/sessions/ # 查看最近的会话文件 # 步骤 2:验证 JSON 格式 python3 -m json.tool ~/.claude/sessions/最新日期/session-xxx.json # 如果报错,说明 JSON 损坏 # 步骤 3:尝试修复 JSON # 如果是截断的 JSON,手动补全 # 如果无法修复,删除损坏的文件 rm ~/.claude/sessions/最新日期/session-xxx.json # 步骤 4:使用 --resume 选择其他会话 claude --resume # 列出可恢复的会话方案三:使用 --resume 选择特定会话
# 步骤 1:列出所有可恢复的会话 claude --resume # 会显示会话列表 # 步骤 2:选择一个可用的会话 # 如果最近的会话损坏,选择更早的 # 步骤 3:如果 --resume 也失败 # 说明所有会话文件都有问题 # 需要开新会话 claude方案四:检查会话文件权限和路径
# 步骤 1:检查 HOME 目录 echo $HOME # 确认是正确的用户目录 # 步骤 2:检查会话目录 ls -la ~/.claude/sessions/ # 确认文件存在且属于当前用户 # 步骤 3:修复权限 sudo chown -R $(whoami) ~/.claude/sessions/ # 步骤 4:检查磁盘空间 df -h ~ # 如果磁盘满,会话无法保存方案五:手动保存关键上下文
# 步骤 1:在会话中主动保存关键信息到文件 > 将我们讨论的架构设计保存到 docs/architecture-decisions.md # 步骤 2:退出后在新会话中引用 claude > 参考 docs/architecture-decisions.md 继续开发方案六:更新 Claude Code 版本
# 步骤 1:检查版本 claude --version # 步骤 2:更新 npm update -g @anthropic-ai/claude-code # 步骤 3:新版本可能有更好的会话恢复机制 claude --continue4. 各方案对比总结
| 方案 | 适用场景 | 推荐指数 | 难度 |
|---|---|---|---|
| 方案一:/recap 代替 | 预防性 | ⭐⭐⭐⭐⭐ | 低 |
| 方案二:修复文件 | 文件损坏 | ⭐⭐⭐⭐ | 中 |
| 方案三:--resume | 选择其他会话 | ⭐⭐⭐⭐ | 低 |
| 方案四:检查权限 | 权限/路径 | ⭐⭐⭐ | 低 |
| 方案五:保存到文件 | 长期方案 | ⭐⭐⭐⭐⭐ | 低 |
| 方案六:更新版本 | 版本不兼容 | ⭐⭐⭐⭐ | 低 |
5. 常见问题 FAQ
5.1 --continue 和 --resume 的区别
--continue:自动恢复最近的一个会话--resume:显示会话列表,手动选择恢复哪个
5.2 会话文件保存在哪里
~/.claude/sessions/YYYY-MM-DD/session-<id>.json,按日期分目录存储。
5.3 会话文件保留多久
默认不自动清理,除非手动删除或配置了自动清理。建议定期清理超过 30 天的旧会话。
5.4 为什么退出后会话文件没保存
可能是以下原因:
- 磁盘空间不足,写入失败
- 权限问题
- Claude Code 异常退出(未执行保存逻辑)
- 会话太短(可能不保存极短会话)
5.5 能否跨机器恢复会话
可以,但需要手动复制会话文件:
# 复制会话文件到新机器 scp -r ~/.claude/sessions/ user@newmachine:~/.claude/sessions/5.6 会话文件太大导致加载缓慢
会话文件包含完整的对话历史。如果太大:
# 检查文件大小 ls -lh ~/.claude/sessions/ # 如果超过 50MB,使用 --resume 选择较短的会话 # 或开新会话,手动提供关键信息5.7 Docker 中 --continue 失败
Docker 容器退出后会话文件丢失。挂载 volume 持久化:
docker run -v claude-sessions:/root/.claude/sessions node:22 claude --continue5.8 多个终端窗口同时使用 Claude Code
每个终端窗口是独立的会话。--continue恢复的是最近退出的会话,可能是另一个窗口的。
5.9 会话恢复后上下文不完整
会话文件可能损坏或截断。使用/context检查恢复后的上下文状态。如果不完整,使用/compact重新压缩。
5.10 排查清单速查表
□ 1. 检查 ~/.claude/sessions/ 是否有会话文件 □ 2. 使用 python3 -m json.tool 验证 JSON 格式 □ 3. 使用 --resume 选择特定会话 □ 4. 检查文件权限和所有者 □ 5. 检查磁盘空间是否充足 □ 6. 更新 Claude Code 版本 □ 7. 使用 /recap 在退出前保存摘要 □ 8. 将关键信息写入文件而非依赖会话恢复 □ 9. Docker 中挂载 volume 持久化会话 □ 10. 定期清理旧会话文件6. 总结
- 根本原因:会话恢复失败最常见原因是会话文件被清理(35%)和文件损坏(25%),系统崩溃导致 JSON 写入不完整
- 最佳实践:不要依赖
--continue恢复会话,在退出前使用/recap保存摘要或将关键信息写入文件 - 预防措施:将重要的架构决策和设计讨论写入项目文件(如 docs/ 目录),而非仅保存在会话历史中
- 会话管理:定期清理超过 30 天的旧会话文件,避免
~/.claude/sessions/占用过多磁盘空间 - 最佳实践建议:养成将关键上下文写入文件的习惯——代码设计决策写入 docs/,任务列表写入 TODO.md,这样即使会话无法恢复也能快速恢复工作
故障排查流程图
flowchart TD A[--continue 失败] --> B[检查 ~/.claude/sessions/] B --> C{会话文件存在?} C -->|否| D[开新会话] C -->|是| E[验证 JSON 格式] E --> F{JSON 完整?} F -->|否| G[删除损坏文件] F -->|是| H[使用 --resume 选择会话] G --> H H --> I{能恢复某个会话?} I -->|是| J[✅ 恢复成功] I -->|否| D D --> K[手动提供关键上下文] K --> L[将关键信息写入文件] L --> M[✅ 新会话开始工作] J --> N[使用 /recap 预防下次失败] N --> O[退出前保存摘要] O --> M