先看证据

当前版本为0.0.x,处于实验阶段关键事实
许可证为Apache-2.0关键事实
适配5种harness关键事实
包括Pi、OpenCode、fx关键事实
也包括Claude Code、Codex关键事实
自托管要求Node.js 22+关键事实

云函数结束时,Agent 的状态也可能一起消失

Vercel 发布的 durable-harness 是一个开源 npm 包,为 Pi、OpenCode、fx、Claude Code 和 Codex 等编码 Agent harness 提供适配器。它面向一个具体问题:许多 Agent 原本作为本地长进程运行,模型对话、工具调用和工作区状态留在进程内存或本机文件里;迁到云端后,一次超时或实例退出,可能让正在进行的任务失去上下文。

这次发布值得技术负责人读,不是因为“Agent 能在云上运行”本身,而是因为它把可靠性问题从单个进程,挪到了持久化与恢复机制上。云端实例可以被替换,但接手者必须知道哪些调用已经完成、哪些尚未开始,以及哪些调用处在结果不确定的中间态。durable-harness 尝试把这些状态变成可恢复的记录,而不是寄希望于原进程活得足够久。

意图、结果与队列构成恢复路径

durable-harness 将每一轮任务交给 Workflow SDK 的 World 管理。World 把存储、队列和流封装在一个接口后面;每次模型或工具调用执行前,系统先记下意图,完成后再记录结果。每轮任务还由 Vercel Queues 中的消息支撑,函数退出时,队列可以把工作交给新的函数继续处理。

因此,恢复不是简单地从头重跑整个对话。新实例读取日志后,可以区分已完成、正在执行和未启动的步骤;已经完成的模型与工具调用从日志中读取,不需要再执行,也避免已完成的模型调用再次计费。对于结果不确定的调用,系统需要按工具的重放策略处理,而不是把所有操作都当成无副作用的查询。

真正难处理的是副作用,不只是重复计算

工具重放策略是这套设计里影响最大的边界。材料把查询类工具列为 replay: 'safe',允许在恢复时重跑;退款一类操作则设为 replay: 'never',避免重复执行。后一种情况下,Agent 会被告知调用可能已经发生,这能避免武断重试,却也意味着系统不能仅凭日志替业务判断外部操作究竟成功与否。

这一区分对接入团队有直接含义:工具不能只按“能不能重跑”分类,还要检查调用超时、外部系统确认、幂等键和补偿流程。持久日志可以保存执行轨迹,却不会自动让支付、发布或数据变更变成事务。若外部系统没有提供可查询的结果或幂等保障,恢复层仍可能把不确定性留给 Agent 或人工处理。

工作区也有不同的耐久程度

调用日志之外,Agent 还需要能够接续工作的文件与命令环境。durable-harness 提供几种选择:virtual() 把文件留在会话日志中,提供兼容 bash 的 shell,但没有网络,容量约为 500 个文件;virtual({ durable: false }) 使用每轮清空的内存临时空间;sandbox() 则为会话提供 Vercel Sandbox,工作目录位于 Drive 上。类型化 JSON 文档也可以进入日志,但每份上限为 64 KB。

这些选项不是同一套持久化能力的不同名字,而是把容量、隔离、网络和状态保留做了不同取舍。小型文本任务可以考虑虚拟工作区;需要更完整命令环境的任务可能需要 Sandbox,但也要承担对应的部署依赖。Claude Code 和 Codex 依赖本地磁盘状态,因此材料说明它们只能运行在 Vercel Sandbox 中,即使采用自托管部署也是如此。

可迁移不等于已经适合生产

部署路径包括 Vercel Functions 加 Vercel Queues、Node.js 22 及以上版本配 Postgres,以及本机文件运行。Pi、OpenCode 和 fx 覆盖了更灵活的运行方式;Claude Code 与 Codex 则受 Sandbox 限制。这个组合显示,durable-harness 试图让 Agent 逻辑跨 World 运行,但各 harness 并没有因此获得相同的部署自由度。

现阶段的证据也需要谨慎看待:包处于 0.0.x 阶段,Claude Code 和 Codex 适配仍属实验性,材料没有提供延迟或吞吐基准,恢复能力的说法来自 Vercel 自述。技术负责人可以把它当作一个具体、可评估的恢复架构候选,但应先核对工具重放语义、工作区限制和故障演练结果;在证据补齐前,不宜把“durable”直接等同于任务端到端不丢失。