用途
orca-replay 用于基于某次智能体运行的录制记录(trace)来回答关于这次运行的问题,并对该运行进行重放或分叉,而不是依赖记忆或他人转交的转录文本。资料强调:录制是证据,记忆和转录文本都不是,因为它们缺少工具结果、退出码,以及无人提及却发生变化的文件。规则是:当问题涉及已经发生的事,先读轨迹再回答,不要重建。
适用提问包括:"你为什么要删除/覆盖/移动 X?""是什么改动了这个文件?""哪一步导致构建失败?""你能复现昨天的故障吗?""换一个模型能否做对?"如果用户想开始录制而非读取过去运行,应使用 orca record <agent>,而不是本技能。
安装与检查
要求 Node 20+,可通过 npm 全局安装:
node --version
which orca || npm install -g orcareplay
orca list
至少需要存在一个运行记录可读。
主要能力与工作流
-
查找运行:orca_list_runs 按从新到旧列出运行,并标注每个分叉来自哪次运行;除明确指最近一次外,各工具默认 run: "last"。
-
缩小到产生被询问事项的因果链:orca_show_run 给出完整时间线,包括模型轮次及 token 数与停止原因、带参数和结果的工具调用、带退出码的 shell 命令,以及运行改动的每个文件,适合整体了解;orca_graph 通常更合适,返回因果边(哪个事件产生了哪个事件),传入 to: <event seq> 可只获取产生某一事件的链条。
-
区分"录制"与"推断":每条边都有标签,recorded 表示记录器实际观察到并写入轨迹,inferred 表示刚刚依据某条规则推导得出、轨迹并不为其背书。回答时须保留这一区别,依赖推断边时应说明所用规则。
-
先复现再解释:orca_replay 重新运行录制并报告无法复现之处(分歧和录制无法提供的请求)。应传入 worktree: true,在临时副本中重放;否则重放期间会用录制的文件系统覆盖工作区,未提交的工作会暂时消失,若中断则持续缺失。首次重放前应先检查哪些内容会重新执行:模型响应来自轨迹、不联系模型提供方,但智能体进程会真实再跑一遍,因此其发出的每条 shell 命令也会真实执行。仅读取文件和编辑仓库的运行是免费且可重复的;触及 /tmp、Docker、数据库、包管理器或其他主机的运行则不是,需要明确批准或容器。reused=3/5 通常不是部分失败,因为执行环境会为自己发起调用(如配额探测、会话命名请求),重放不会重复这些调用。匹配的重放不等于确定性结果——模型没有被重新询问,只是回放录制的答案;若用户想知道全新运行是否以同样方式失败,应说明重放无法回答。
-
之后才考虑模型比较:orca_compare 将一次运行从同一检查点分叉到多个模型,文件与对话前缀相同,模型是唯一变量;用 orca_checkpoints 选择分叉点,用 verify(以退出码为判定的 shell 命令,优先使用仓库已声明的如 npm test、npm run typecheck,而非 npx <tool>)评分。需要三种独立批准:披露——每个被点名模型会收到运行的文件和对话前缀,运行触及的内容会发送给这些模型背后的每个提供方,轨迹不宜原样发送时先用 orca scrub;副作用——每个分叉都是真实运行的智能体,从分叉点起模型被真实询问、shell 命令真实执行;成本——模型数乘以分叉数,花费真实金钱。不要为满足用户未表达的猎奇而运行。
无录制记录时
应直接说明没有录制,并提议开始录制:
orca record claude # 或 codex、opencode、openclaw、grok
不要退回到凭记忆重建会话。以 argv 携带提示启动的运行(orca record claude -- -p "…")可精确重放;有人手动输入的会话只能近似重放,因为这些提示从未上过网络,是从执行环境自身转录中恢复的,orca replay 会指出属于哪种。
分享运行
orca export last -o run.html 写出单个自包含文件。轨迹包含运行所包含的一切,因此先运行 orca scrub,并将其视为尽力而为:它匹配已知密钥形态和高熵字符串,但无法知道某个内部主机名或客户名称属于机密。导出前应让用户查看将要发出的内容。
限制
只能看到被录制的内容,未录制的会话无法恢复;inferred 边不是证据,只是对轨迹的解读而非记录器目击;并非所有执行环境都可录制,不读取 base-URL 变量并固定自身来源的智能体需要 --tls-intercept,有些则完全无法接入;重放不是沙箱,它阻断模型提供方的出网,但不阻断网络,运行自身的 shell 命令会真实触达外部世界。