回放模式
在一个用完即弃的沙箱中,逐步重新执行一个会话的文件写入、编辑和 shell 命令——确定性地进行,回路中没有 AI,你真正的项目也绝不会被触碰。
回放模式(Replay Mode,⌘4)回答"这个会话到底对代码做了什么?",方法是把 AI 运行过的具体操作——Write、Edit 和 Bash 步骤——重新回放到一个从你的 Git 历史播种而来的隔离工作区中。这里没有 LLM 调用:Chronicle 已经把每一个操作都记录在了对话记录里,因此回放只是按顺序把它们应用一遍。这使它既具确定性又安全——你可以看着一个改动逐渐成形,在每处差异落地之前检视它,并在你的编辑器中打开完成后的沙箱,而这一切都不会向你的项目写入哪怕一个字节。
沙箱
每次回放都在它自己的目录 ~/.chronicle/replay/<id>/ 下运行。当你启动一次回放时,Chronicle 会:
- 清空并重新创建那个沙箱目录。
- 找到会话开始时间处或之前的那次 Git 提交,并把那棵树物化到沙箱中(通过
git archive <commit> | tar -x)。这就是会话开始时代码的样子。 - 在那份播种之上回放会话的操作。
播种提交会显示为一个 ⎇ seeded @ <hash> 标签。如果项目不是 Git 仓库(或会话早于全部历史记录),沙箱就直接从空开始。无论哪种情况,你真正的项目目录都绝不会被修改——回放永远只在 ~/.chronicle/replay/<id>/ 内部写入。
本地优先: 回放从你的 Git 历史和被记录的操作中重建状态,而不是从你工作树的实时副本。Git 是真相来源;沙箱是用完即弃的。
逐步执行
左栏按顺序列出提取出的各个步骤(📄 写入、✏️ 编辑、$ 命令)。选中一个步骤后,右侧会显示:
- 此步骤之前的 AI 推理 —— 紧接在该操作之前的助手/思考文本,让你知道它为什么会发生。
- 即将到来的差异预览 —— 该改动相对于沙箱当前状态计算得出的结果。写入和编辑会渲染为行差异(新文件、新增行、删除行);命令则渲染为那条会运行的
$ command。
每个步骤给你三种动作:
- Execute This Step —— 把写入或编辑应用到沙箱。
- Skip —— 不应用而直接前进(当某个步骤指向项目之外的内容时很有用)。
- Look Back —— 退到上一个操作以重新检视它。
由于编辑是作为精确的 old_string → new_string 替换来应用的,一个 old_string 已不再匹配沙箱文件的编辑(例如,因为你跳过了它所依赖的某个早先步骤)会被标记出来,而不是被无声地误用——你可以选择 Skip 它,或者去执行缺失的前置条件再 Retry。
Shell 命令始终会先征询
写入和编辑步骤一点击就会应用。Shell 命令绝不会——每一个 Bash 步骤都需要一次显式的、逐步的确认(按钮以警告样式呈现,⚠ Execute command)。已确认的命令会以沙箱作为其工作目录运行,并带有一个软约束的、指向沙箱的 HOME,同时有时间限制和被捕获的输出。这能把一条走神的 rm 或构建命令限定在用完即弃的工作区里,而不是波及你的机器。
自动播放
自动播放会以 1x / 2x / 5x 的速度替你走完各个步骤。它被刻意设计得保守:
- 它会在第一个错误处暂停,让你可以检视并 Retry,而不是在一个已损坏的状态上继续横冲直撞。
- 它会跳过 shell 命令(它们始终需要手动确认)以及任何目标在项目之外的写入,并把它们标记为
skipped——它绝不会在这些步骤上硬性暂停。曾经自动播放卡在某条命令上时看起来像是坏了;改成跳过之后就能让它持续前进。
一条进度条会追踪已执行步骤与总步骤数之比。当运行完成时,你会得到一个 Replay complete 状态和一个 Open in Finder 动作,它会展示出完成后的沙箱,让你可以把它与你真正的项目做差异对比,或在编辑器中打开它。
如果一个会话不包含任何 Write/Edit/Bash 操作,Replay 会显示"Nothing to replay"状态——因为没有任何东西需要重建。
相关内容
- 时间旅行 —— Playback 模式,以及那个同样为回放的播种提交提供动力的 Git 快照引擎。
- 安全、实时与回放内部机制 ——
server/replay.js如何构建计划、为执行提供沙箱,以及约束 shell 命令。