崩溃续跑解决了什么
云上跑 Claude Code / Codex / OpenCode 时,函数超时或进程挂掉,整轮任务常要重来。Vercel 开源的 durable-harness 从外部包住现有 harness:模型调用与工具调用写入持久日志,挂了由新实例读日志接着跑;已完成的模型调用不重跑,避免同一段 token 计两次费。
这解决的是「跑到第 40 步死掉」——不是模型不够聪明,是 harness 循环太脆。
没解决什么:副作用可能已经发生
社区连续提醒同一点:
- @Real_SlickShady:每个工具要有 replay 策略。查询类标
safe,崩溃后可再跑;退款类标never。 - @Flextor97:标了
never却在执行中被掐断时,恢复后模型收到的是 「possibly run」(可能已经执行过)——于是它得自己判断退款有没有出去。请给它一个查询工具,而不是盲目再调一次退款。 - @Acetrumtech:Durable ≠ exactly-once。 中断的工具调用可能已经改了外部系统;要配套 replay 规则、幂等键、状态检查一起上线。
- @sukin_s:续跑时,邮件、PR 评论、付款若已发出,再跑就是重复;用
run id + step id做键,否则「durable」只是「重复得更稳」。
可执行清单(接长任务 / 云代理前)
- 列出所有有外部副作用的工具:发信、发评论、创建工单、退款、扣款、合并 PR……默认
never或等价策略。 - 为每个
never工具配一个只读查询:订单状态、退款单号、邮件是否已发送。 - 在业务侧做幂等:同一
run/step键只生效一次。 - 不要假设「换了 durable-harness 就不会双花」——日志保证的是会话连续性,不是支付系统的 exactly-once。
对照官方工程博文核对你所用版本的 replay 语义后,再把长任务丢上云。
和「本机 LaunchAgent 保活」的分工
本机用进程保活,解决的是「CLI 挂了谁拉起」;durable-harness 解决的是「云函数死了任务状态怎么续」。两者都不管支付系统有没有扣过款。长任务上云时,先标 never 与幂等,再谈自动恢复,顺序不要反。
如果你想把 Claude Code 放在一台常开、整机独享的新加坡 Mac mini 上长期运行,可以了解 Zumac.Ai,咨询 Telegram @singatao。
