首页 资讯 下载 教程 Skills 社群

OpenClaw Session Branching 会话分支与恢复教程

什么是 Session Branching

Session Branching 是 OpenClaw v2026.4.7 新增的会话管理能力,允许用户在对话的任意检查点分叉出新的会话路径,并在需要时恢复到之前的状态

这借鉴了 Git 的分支模型:

  • 主会话是 main 分支
  • 从任何时间点可以 fork 出 feature 分支
  • 尝试失败的分支可以丢弃
  • 成功的分支可以合并回主线

底层原理

会话以追加式事件日志(append-only event log)形式存储:

  • 每次对话消息、工具调用都是一个事件
  • 事件带有时间戳和 ID
  • 分支就是从某个事件 ID fork 新的事件流
  • 状态可以通过回放事件日志恢复

这种设计让 Session Branching 具有:

  • 无损:原始会话永不丢失
  • 可追溯:每个分支都有完整历史
  • 可恢复:任何时刻都可以回到之前状态

适用场景

1. 风险重构

尝试重大代码重构但不想污染主会话:

[main] 讨论架构...
  ↓
[main] 开始重构
  ↓ (fork)
[try-new-arch] 尝试新架构
  ↓
[try-new-arch] 失败,回滚
  ↓
[main] 继续原方案

2. Prompt A/B 测试

对比不同指令策略的效果:

[main] 任务描述
  ↓ (fork 3 个分支)
[strict] 严格模式指令
[creative] 创意模式指令
[balanced] 平衡模式指令

对比结果后选最优分支继续。

3. 故障调试

调试生产事故时尝试不同假设:

[main] 收到告警
  ↓ (fork)
[hypothesis-a] 假设是数据库问题
[hypothesis-b] 假设是网络问题
[hypothesis-c] 假设是代码 Bug

验证每个假设后回到主会话报告结论。

基础命令

创建分支

在任意会话中:

/branch create feature-test

或指定 fork 点:

/branch create feature-test --from-event abc123

列出分支

/branch list

输出示例:

* main (当前)
  try-new-arch (2 hours ago)
  prompt-strict (30 minutes ago)

切换分支

/branch switch try-new-arch

删除分支

/branch delete prompt-strict

查看分支历史

/branch history main

CLI 管理

命令行同样支持会话分支操作:

# 列出某个会话的所有分支
openclaw sessions branches <session-id>

# 创建分支
openclaw sessions branch <session-id> --name feature-test

# 恢复到历史事件
openclaw sessions restore <session-id> --event <event-id>

实际案例

案例 1:尝试数据库迁移方案

用户:我想把 MySQL 迁移到 PostgreSQL,但不确定可行性

Agent:[main] 让我先分析当前 schema...

用户:/branch create try-pg-migration

Agent:[try-pg-migration] 已切换到分支
我建议尝试以下迁移方案:
1. 使用 pgloader
2. 手动 dump/restore
3. 逐表迁移

[尝试使用 pgloader]
发现部分字段类型不兼容...

用户:这个方案不太行,我们回去

用户:/branch switch main
Agent:[main] 回到主会话
pgloader 方案遇到字段类型问题,让我们尝试手动迁移...

案例 2:调试复杂 Bug

用户:生产环境 500 错误

Agent:[main] 开始分析日志...

用户:/branch create hypothesis-db
Agent:[hypothesis-db] 假设:数据库连接池耗尽
[检查连接数] 连接数正常,排除

用户:/branch create hypothesis-memory
Agent:[hypothesis-memory] 假设:内存泄漏
[检查 heap dump] 发现某个 Service 持续增长

用户:找到了!/branch switch main
Agent:[main] 根据分支调试结果,问题是内存泄漏

检查点管理

系统会自动在关键节点创建检查点:

  • 每次 /reset 之前
  • 每次 /compact 之前
  • 工具调用失败时
  • 手动触发:/checkpoint create "重要节点"

恢复到检查点:

/checkpoint list
/checkpoint restore <checkpoint-id>

分支合并

简单的合并(将分支的状态更新到主会话):

/branch merge feature-test --into main

这会将 feature-test 的最新事件应用到 main,保留 main 原有历史。

与 Memory-Wiki 配合

Session Branching 和 Memory-Wiki 可以配合使用:

  • 在分支中学到的信息,值得保留的可以写入 Wiki
  • 即使分支被删除,Wiki 中的知识仍然保留
  • 这样既保持主会话简洁,又不丢失探索成果
[try-new-arch] 测试完新架构,决定放弃
  ↓
将测试结果写入 memory/wiki/decisions/2026-04-arch-eval.md
  ↓
删除 try-new-arch 分支
  ↓
主会话中仍可通过 Wiki 访问评估结果

注意事项

  • Session Branching 需要 OpenClaw v2026.4.7 或更高版本
  • 分支过多会增加存储开销,建议定期清理已完成的分支
  • 工具调用的外部副作用(文件修改、API 调用)无法通过分支回滚
  • 对于涉及真实副作用的操作,建议配合 Lobster 的审批门控
  • 合并分支时注意事件冲突,复杂合并可能需要人工介入