【免费下载链接】waku
⚡ A native app for all your coding agents.
用 AI 编码代理写代码,最怕的就是它"一竿子捅到底"——一轮改完发现方向错了,代码、新文件、删掉的东西全混在工作区里,手动git checkout又对不上 AI 中途的每一步改动。Waku(一个本地优先的 AI 编码代理原生应用)用逐轮 Git 检查点解决了这个问题:每一轮对话结束都自动存档,你可以像撤回聊天消息一样,把整个工作区一键 Rewind(回退)到任意一条消息之前,也可以从那里 Branch(派生)出一个新任务,换条路继续走。
为什么 AI 改的代码不好手动撤销?
传统git revert只能撤销已提交的 commit,而 AI 代理干活的方式是:
- 直接修改已跟踪文件,同时新建一堆未跟踪文件;
- 一轮对话里可能改十几个文件,中途你还不清楚它具体动了什么;
- 对话进行到第 5 轮才发现问题,但第 2、3 轮其实是对的——你想只回退后半段。
Waku 的答案是把"对话轮次"和"工作区快照"绑定起来:
每一轮任务开始前,Waku 会先拍下工作区的照片;任务结束后再拍一张,并自动算出这一轮的增删行数。照片存在 Git 自己的
refs/waku/命名空间里,不产生任何可见的分支或提交。
整个实现见 checkpoint.rs,几个对新手很友好的细节:
- ✅未跟踪文件也存档:AI 新建但还没
git add的文件,回退时能一起恢复; - ✅不碰你的暂存区:快照使用独立的临时 Git 索引,你
git add过的东西不会被干扰; - ✅每轮改动一目了然:检查点自带按文件的
+增 -删统计(diff --numstat),你知道 AI 每轮到底动了哪些文件。
一键 Rewind:把代码和对话同时拉回任意消息
在对话流里把鼠标悬停在某条用户消息上,会出现一个回退按钮(界面文案"回退到这里"),点击后 Waku 会做四件事:
- 安全快照:先把"当前(可能已经被改坏的)状态"备份一份
refs/waku/rewind-backup-*,保证回退操作本身永远不会把你的现场弄丢; - 恢复工作区:把文件内容、暂存区、未跟踪文件整体还原到那轮任务开始前的检查点;
- 回退代理会话:把 AI 自己的对话历史也截断到对应位置(例如 Claude 会把转录文件重写截断、Grok 通过 ACP fork 会话实现),保证回退后 AI"记得"的上下文和代码状态一致;
- 清理后续检查点:被抹掉的轮次,其检查点引用一并删除,仓库不膨胀。
成功后任务标题会带上"(回退)"标记,提示你这是一条被回退过的对话线。整个流程实现在 daemon.rs 的rewind_session_to_message,UI 侧的回退按钮在 transcript.tsx。
使用 Rewind 的 3 个前提
- 📁 任务所在目录必须是Git 仓库——检查点建立在 Git 对象库之上,非 Git 目录会提示"缺少该消息发送前的 Git 检查点";
- ⏸️ 当前轮次必须已停止(界面会提示"请先停止当前这一轮,再回退对话");
- 🤖 代理需支持会话回退。Waku 已适配 Claude Code、Amp、Grok、Cursor 等;个别代理(如 Fx、Kimi Code)暂时不支持,此时回退/派生入口会被自动隐藏,而不是给你一个会静默失败按钮(各代理的支持矩阵见 providers.md)。
Branch:从任意一轮派生新任务,平行尝试两种方案
Rewind 是"撤销",Branch(界面文案"从此处派生任务")则是"分叉":
- 在任意回复上选择从此处派生任务,Waku 会创建一个新任务,完整继承前 N 轮对话,并把源任务的检查点引用拷贝到新任务名下(
copy_session_refs); - 原任务保持不动,新任务从分叉点继续——比如让 AI"换一种更简洁的重构方案";
- 因为新任务持有独立的 Git 引用,两条任务线各自回退、各自推进,互不干扰。
Claude 的派生会借助其原生转录检查点(claude_session.rs),若检查点缺失会明确报错"Claude 未返回派生任务所需的检查点",而不是生成一个历史残缺的假分叉。
💡 顺带一提:Waku 还有一个"分支"面板,可以查看、切换、一键创建并签出项目的Git 分支(实现在 git_branch.rs)——它管的是代码分支,与对话派生是两个层面的"Branch",配合使用正好:对话 Branch 探索方案,Git 分支落地代码。
这些功能在哪里看源码
| 模块 | 说明 |
|---|---|
| checkpoint.rs | Git 检查点的捕获、恢复与批量引用管理 |
| daemon.rs | Rewind 与 Branch 的服务端编排(含安全快照兜底) |
| claude_session.rs | Claude 原生转录检查点与会话截断 |
| providers.md | 各代理对回退/分支的支持情况与技术细节 |
| transcript.tsx | Web 端对话流中的回退与派生交互 |
小结
- 🕘每轮自动存档:对话轮次 ↔ Git 快照一一对应,未跟踪文件也包含;
- ⏪Rewind 回退:代码 + AI 记忆一起拉回任意消息之前,且自带回退前安全快照,操作不可逆风险为零;
- 🌿Branch 派生:从任意一轮分叉新任务,平行验证不同实现方向;
- 🔒本地优先:所有检查点都写在项目自己的
.git里,不依赖任何远程服务。
下次 AI 又"写坏了代码",先别慌——在 Waku 里,回退它比撤回一条微信消息还简单。
【免费下载链接】waku
⚡ A native app for all your coding agents.
相关推荐
Claude How To:Claude Code 检查点与回退(Checkpoints & Rewind)完整实战指南
Claude How To:Claude Code 检查点与回退(Checkpoints & Rewind)完整实战指南 本指南基于 claude howto
教程文档CodeBurn 按分支(By branch)消费分析:git 分支与 worktree 级 AI 开销归因及 branch-json 报告
CodeBurn 按分支(By branch)消费分析:git 分支与 worktree 级 AI 开销归因及 branch json 报告 本篇技术指南围绕
claude-howto 实战指南:Claude Code 检查点(Checkpoints)与回退(Rewind)完整手册
claude howto 实战指南:Claude Code 检查点(Checkpoints)与回退(Rewind)完整手册 导读:Claude Code 的 C
教程文档
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考