当前位置: 首页 > news >正文

Claude Code 的可恢复性机制

关于 Claude Code 的可恢复性机制,官方并未发布一份名为“续跑协议”的独立技术文档。其实现主要围绕 Checkpoint(检查点) 和 Session(会话) 两个维度展开,以下是根据官方文档和公开资料梳理的核心机制。

🛡️ 一、核心机制:Checkpoint(检查点)

Checkpoint 提供了类似“游戏存档”的功能,让你能随时回退到之前的某个状态。

· 触发与内容:每个用户提示都会自动创建一个新的 Checkpoint。它只记录 Claude 通过Write、Edit等工具所做的文件编辑,不跟踪 Bash 命令(如rm)或用户手动更改。
· 存储与生命周期:Checkpoint 在会话之间持久存在,存储在本地~/.claude/projects/目录下,默认30天后自动清理。

💾 二、落盘机制:如何存储与恢复

· SDK 控制:在 SDK 中设置 enable_file_checkpointing=True 即可启用。
· 核心标识:UUID:每个 Checkpoint 都有唯一 UUID。你需要在响应流中捕获它,恢复时调用 rewind_files(checkpoint_id)。
· 代码示例(Python):

# 1. 启用并捕获 checkpoint_idoptions=ClaudeAgentOptions(enable_file_checkpointing=True)asyncwithClaudeSDKClient(options)asclient:awaitclient.query("重构认证模块")# 从消息中获取 checkpoint_id 和 session_id# 2. 恢复文件asyncwithClaudeSDKClient(ClaudeAgentOptions(resume=session_id))asclient:awaitclient.rewind_files(checkpoint_id)# 根据 UUID 恢复

🔄 三、续跑机制:如何恢复会话

这里的“续跑”指恢复整个对话上下文,主要靠 Session 机制。

· 手动恢复:
· /resume:在会话中输入,选择历史会话恢复。
· claude --resume :启动时直接恢复指定会话。
· claude --continue:恢复当前目录下的最近会话。
· 外部存储:高级场景下可通过 SessionStore 将会话镜像到 S3 或数据库,实现跨主机恢复。
· 恢复选项:执行/rewind后,可选择:
· 恢复代码和对话:完全回退。
· 仅恢复对话:回退消息,保留代码。
· 仅恢复代码:回退文件,保留对话。
· 从此处/到此处总结:将对话压缩为摘要以释放空间。

⚠️ 重要提示

  1. Checkpoint 是会话级工具,不可替代 Git。
  2. 它不跟踪 Bash 命令(如rm)的更改。
  3. 第三方工具(如 claude-vigil-mcp、Continuum)提供了更丰富的增强功能,可供参考。

总而言之,Claude Code 通过 Checkpoint 机制精确记录文件变更,结合 Session 管理实现对话上下文的恢复,两者共同构成了其核心的可恢复性体系。

Claude Code 的会话持久化主要基于 本地文件系统,辅以可选的 外部存储适配器 来实现跨主机恢复。

🗄️ 核心存储:本地 JSONL 文件

会话数据以 JSONL (JSON Lines) 格式存储。路径为:~/.claude/projects/<项目路径>/<会话ID>.jsonl。

· 项目路径:从工作目录的绝对路径派生,移动项目目录会导致历史记录“丢失”。
· 会话 ID:唯一标识符(如 uuid),恢复时需指定。
· 文件内容:每行是一个 JSON 对象,记录对话轮次、元数据、子代理记录等。

🔄 写入与恢复机制

· 写入(Append-Only):采用仅追加模式。消息通过 parentUuid 字段形成链表结构,支持分支和子代理记录。为提高性能,会话文件在首条消息时才真正创建。
· 恢复(–resume):通过 parentUuid 链重建完整对话。恢复命令有:
· claude --continue:恢复当前目录的最近会话。
· claude --resume:打开交互式选择器。
· claude --resume :按名称恢复。
· /resume:在会话内切换。

🌐 跨主机持久化:外部存储适配器 (SessionStore)

默认存储绑定特定机器,通过 SessionStore 适配器可将记录镜像到 S3、Redis 或数据库。

· 存储是“镜像”而非“替换”:SDK 仍先写本地磁盘,再异步调用适配器 append()。
· 关键接口:需实现 append(写)和 load(读)。
· 适用场景:多主机部署、无服务器函数、CI/CD 等无持久化本地磁盘的环境。

🧹 生命周期与注意事项

· 默认保留:会话和 Checkpoint 默认保留 30 天后自动清理。
· 临时会话:可通过 --no-session-persistence 禁用持久化。
· 外部工具:社区有 ccs、claude-sync等工具可增强管理、加密或跨设备同步能力。

要把 Claude Code 的会话持久化到 PostgreSQL,主要有两种实现路径:一种是原生扩展(基于官方 SDK 的 SessionStore 接口),适合深度定制;另一种是社区工具(通过 MCP 协议),配置更简单,开箱即用。

🧩 路径一:原生扩展(基于官方 SDK)

这是官方推荐的方式,通过实现 SessionStore 接口将会话镜像到 PostgreSQL。

  1. 实现 SessionStore 接口
    你需要用 Node.js/TypeScript 实现包含以下核心方法的类:

· append(key, entries): 必需。本地写入后调用,负责将 entries(JSON对象数组)存入 PG。
· load(key): 必需。恢复会话时调用,从 PG 读取并返回数据。
· listSessions(projectKey): 可选。用于列出项目下的会话。
· delete(key): 可选。删除会话。

注意 key 包含 projectKey(工作目录编码)、sessionId(会话 UUID)和 subpath(子代理记录)。

  1. 在查询中使用
    将你的 Store 实例传入 query 的 options.sessionStore。

🚀 路径二:社区工具(基于 MCP 协议)

如果不想从零开发,这些现成的 MCP 服务器是不错的选择:

· r2mcp:提供 11个MCP工具 和三层记忆(偏好/项目上下文/对话)。支持 pgvector 语义搜索。配置简单,支持 Supabase 和自托管 PG。
· Mnestra:提供 9个MCP工具。支持 Postgres + pgvector,默认使用 Supabase,提供 memory_remember、memory_recall 等工具。
· Throughline:直接解析 Claude Code 本地的 JSONL 会话文件。在本地 PG 中构建知识图谱,实现跨工具记忆。提供 Docker 快速启动。
· code-session-memory:支持多种 AI 编程工具。默认 SQLite,可选 PostgreSQL + pgvector 作为后端。
· memhub: Postgres 驱动的跨机器记忆,数据完全由你掌控。

⚠️ 几点提醒

· 存储是“镜像”而非“替换”:SDK 始终先写本地磁盘,再调用 append() 同步到 PG。如果你不想要本地副本,可将 CLAUDE_CONFIG_DIR 指向临时目录。
· 注意网络环境:使用 Supabase 等云 PG 时,注意选择兼容 IPv4 的连接串(如 Session Pooler),避免在 IPv6-only 网络上连接失败。
· 社区方案注意点:多数社区方案需依赖 pgvector 扩展和 LLM API 密钥(用于生成向量嵌入)。

http://www.jsqmd.com/news/1138102/

相关文章:

  • 15个实用的API文档生成工具,自动化
  • 基于STM32单片机车载儿童防窒息 车载儿童滞留检测安全座椅系统312(设计源文件+万字报告+讲解)(支持资料、图片参考_相关定制)_
  • Understat Python库:构建专业级足球数据分析系统的完整指南
  • FlashAttention 收益边界:注意力优化不是所有模型都能白赚
  • 极简工作流引擎设计:基于状态机的轻量级编排内核实现——不依赖重型框架,用500行代码搭建可控的业务流程引擎
  • AI商业洞察动态简报(2026.07.06)
  • REPENTOGON:如何为《以撒的结合:悔改》安装终极脚本扩展器?
  • 黑苹果配置革命:OpCore-Simplify如何让复杂技术变得像搭积木一样简单?
  • 小龙虾身份配置完整指南
  • 「 简记往来」第二十八篇:从0到被大模型推荐——完整复盘
  • KES 监控与运维自动化实战:性能指标采集、告警体系与智能运维
  • 深入解析Playwright HTML报告源码:定制化与性能优化指南
  • 终极ROS机器人仿真教程:从零开始掌握WPR系列虚拟测试环境
  • 还在手撕XML?个人微信API二次开发如何优雅攻克多模态数据的解析壁垒?
  • 连接器SI仿真精度提升:CST背景材料与边界条件3大关键参数设置
  • 当 GPT-4o 的眼睛遇上 UI 截图:自动检测视觉异常,为何比像素对比更懂页面
  • OpenEuler workflowkits对比分析:与其他命令编排工具的10个关键差异
  • 2026顶尖EMBA含金量排名:国际化商科项目深度评测
  • 高性能火箭仿真架构设计:从六自由度动力学到模块化组件系统
  • Windows下使用Docker搭建SQL注入靶场SQLi-labs的完整指南
  • WS2812与PIC18F87J50嵌入式灯光控制实战指南
  • 拯救你的B站缓存视频:m4s-converter无损转换工具使用指南
  • 免费开源数据库工具 DBeaver 26.1.2 发布,新增 AI 聊天与 Timeplus 数据库支持!
  • 【计算机Java毕业设计案例】基于 SpringBoot 的学生学业过程跟踪考核系统的设计与实现 基于 SpringBoot+Vue 的教师形成性评分管理系统(程序+文档+讲解+定制)
  • 当断点成为战略选择:Mobile First 与 Desktop First 的选型依据,为何不只是代码习惯
  • Nova视觉小说框架:程序员的高效Unity视觉小说开发解决方案
  • openEuler ROS实战:使用colcon构建工具高效管理机器人代码
  • 基于IIM-42652和MKV46F的6DoF运动跟踪系统设计
  • 钢结构厂房各部位名称及代号
  • Nginx安全响应头配置实战:构建Web应用第一道防线