Block 发布 Apache 2.0 开源项目 Buzz,支持 AI agent 与人类在同工作区协作,内置 Git 和工作流;展示 AI agent 工程化的新方向。
上周,Block 开源了 Buzz——一个让 AI Agent 与人类并肩待在频道里的工作空间,通过同一个 relay 整合了 git、workflows 和语音功能。它采用 Apache-2.0 许可证,团队迭代速度很快,而且他们的 VISION.md 坦诚得少见。真正让我停下来思考的,是状态表中的这一行:workflow 的审批关卡只完成了一部分,并且“运行一旦执行到 request_approval 步骤,目前就会被标记为 Failed”——他们甚至专门给这个缺口起了一个编号:WF-08。
过去几个月,我一直在为编码 Agent 构建审批关卡。看到一个资源充足的团队免费推出同一类功能,让我终于看清了一个本该更早意识到的事实:
审批关卡正在成为标准化商品,而任务交接并不是。
想象一下:Agent 正执行到一项长时间任务的中途,操作员却合上了笔记本电脑。这并非假设场景——如果你让编码 Agent 在无人值守的情况下运行,这就是再平常不过的星期二。
显而易见的答案是:“让云端 runner 接手。”但这句话掩盖了真正的工程问题:如何保证这项工作始终只有一台机器拥有执行权?
因为真正的故障模式,并不是任务停滞。任务停滞固然烦人,但可以恢复——重新继续执行,只是损失一些时间而已。真正的故障模式,是两个 executor 都认为自己拥有这个线程:写入操作彼此交错,状态开始分叉,git 历史中出现两个作者,而两个人都以为自己是唯一的执行者。任务停滞只会浪费几分钟;一次脑裂运行,却可能让你失去整个工作树。
同一个线程上有两个 executor,比一个都没有更糟。
分布式系统很早以前就解决了这类问题,而答案并不是更智能的 dashboard,而是 lease 和 fencing:
Lease,而不是 lock。所有权如果没有续期,就会自动过期。持有 lease 的机器通过续期来证明自己仍然存活;机器一旦崩溃或离线,就会默认失去所有权,无须任何其他节点主动检测它是否已经崩溃。
较短的过期时间。Lease 的期限决定了最坏情况下的交接延迟上限。90 秒的 lease 意味着:对于线程到底归谁所有,最多只会存在 90 秒的不确定期。
Fencing。新的持有者接管任务时,必须确保旧持有者姗姗来迟的写入无法造成破坏——上一份 lease 已经失效,使用它签发的工作结果不能落地。
这些概念没有一个称得上新奇。新颖之处在于把它们应用到 Agent 运行上:这里的“资源”是一项尚未完成的工作,而“节点”则是你的笔记本电脑和一台 VPS。
在构建这套系统的过程中,最令我意外的一点是:任务交接更适合建模为 queued prompt handoff,而不是进程迁移。你不会把一个正在运行的进程“传送”到另一台机器上;你只是把下一个符合条件的工作单元,交给当前持有 lease 的一方。正是这个区别,让 fencing 变得切实可行。
Buzz 会完成 WF-08——schema、endpoints 和 UI 都已经存在,只是 executor 目前还无法持久化审批状态并在审批后恢复执行。移动端正在积极开发,push notifications 也已经列入计划。这三项功能都会免费并开源。如果你对“Agent 安全产品”的理解还停留在一个审批 prompt 上,那么这种产品模式已经进入了由资金充足的团队所设定的倒计时。
但在他们的 vision 文档中,我找不到任何有关连续性问题的说明:驱动任务的机器离线后,一个正在执行的任务会怎样?没有 lease,没有 failover,也没有 offline policy。我并不是把这一点当作刻意挑错——他们以 relay 为中心的模型有着不同的优先级,而 WF-08 也表明,他们确实在认真对待执行语义。我之所以指出这一点,是因为它标出了真正尚未解决的问题:一个目前还没有人免费提供现成答案的问题。
ThumbGate 是我对 lease 这一半问题的尝试。这个免费的浏览器 dashboard 会通过出站 HTTPS 与机器配对——不需要开放入站端口。只要你的机器在线,它就会持有一份 90 秒的 lease,工作也会继续留在本地。此外还有一个可选的付费 Continuity add-on:当你的机器掉线时,它可以根据你设置的 offline policy,在经过 fencing 保护的 VPS 上接手符合条件的工作。Policy 可以选择 auto,也可以选择 ask-first。
在你自己发现之前,我先说明其中的限制:线上页面写着 Continuity “still proving this out”,这个描述是准确的。在我的测试中,它确实可以工作;但它还没有经历现实世界中所有复杂混乱的情况,我也不打算把它包装成已经做到这一点。
我想请所有会让 Agent 通宵运行的人帮忙回答一个开放问题:你们现在是怎么处理任务交接的?通过 cron 重启,然后听天由命?接受任务停滞?还是有更聪明的方法?我认为目前还没有人彻底解决这个问题。相比推销产品,我更愿意和大家交流实践经验。
另外,免费的 dashboard 可以在 thumbgate.app 使用——直接在浏览器中运行,无须安装任何东西。Buzz 位于 github.com/block/buzz;他们的 VISION.md 值得一读。
对于后续操作,你可以考虑屏蔽此人和/或举报滥用行为。