Serverless Agents

No Machine Owns the Loop。给 agent 一小时任务、合上笔记本五分钟——agent 不该死。把循环放进持久控制平面、把机器降级为工具,loop 即可 serverless。

作者: Ishaan Sehgal (Omnara, YC S25) 2026-07-23 原文 ↗

一句话论点

agent 打破了"程序员停 → 编程停"的同步假设。一个能在你离开后继续工作的 agent,不该继承你设备的生命周期。没有哪台机器应该拥有循环。

病根:local-first 把 agent 和设备绑成一体

Claude Code 2025 年初带起的 local-first 形状,被 Codex / Gemini / Cline / Grok / OpenCode / Cursor / Zed 全员复制。harness 和执行环境是同一个单元,跑在开发者笔记本上。"上云"也只是把笔记本搬进数据中心——架构没变

local-first:harness 与执行环境 = 同一个单元,共享设备生命周期 💻 笔记本 工作树 / 工具 / 凭证 agent 循环 + 执行环境 (同一个进程) 合盖 💀 agent 死
quarter-open laptop 梗的根源:人们夜里把盖子撑开一条缝,好让"异步" agent 不死。

诊断:agent 打破了同步假设

整个编程工具史(包括云端 CDE)都默认一个没人命名的假设:人停即编程停。agent 打破了它——它可以查故障、等 CI、响应外部事件、请求审批,在启动它的那次交互结束很久之后继续工作。

同步假设(过去) 人在键盘前 ✕ 人离开 session 结束 · 编程停 agent 打破它(现在) 人发起 ✕ 人离开 查故障 → 等 CI → 请求审批 → 继续工作… agent 有效生命周期 ≫ 一次终端 session
这一步进变化让 local loop 从"便利"变成"约束"。

解法:拆成两个平面

既然 agent 不该继承设备生命周期,它的连续性得住在别处——一条 durable 事件 log(见姊妹篇 The Log Is the Agent)。由此得出一个干净边界:

控制平面 Control Plane 拥有 durable agent · 设备无关 · 可托管 / 自托管 VPC / 私有 事件历史 (log) 待办 / 审批 model 调用 生命周期 也能直接执行 ↓ 关键反转:机器作为工具暴露给 agent ↓ 执行平面 Execution Plane 动作落地处 · ephemeral · 按需 provision / 并行 / 用完释放 💻 笔记本 (工作树) ☁️ 云机器 (跑测试) 🏠 内网主机 (私有网络) 🎮 GPU (专用硬件)
聊天轮次、调 API、浏览网页、问人——这些都不需要 Linux box。机器只在 agent 需要 OS / 工作树 / 私有网络 / 专用硬件 / 本地数据时才介入。

把每个 agent 绑到一台机器

= 把"偶尔的执行需求"误当成"永久的依赖"。

"Serverless" 到底是什么

"Serverless" 不代表没有机器跑循环,而是没有哪台特定的机器拥有循环。 worker 是 durable state 之上的临时执行者。

消息到达 → 一个临时 worker 认领 agent → 从 log 重建状态 → 问模型下一步 → 记录 → 消失。后续事件到达时,另一个 worker 接着干。agent 因此可以在零个 worker 运行时仍然活着——它只是在等。

durable log · agent 始终存活于此(与 worker 无关) 事件时间线 → worker ① 重建→model→记录 消息到达 零 worker 运行 · agent 仍活着(在等 CI / 审批 / 定时) worker ②(另一个) 从 log 接续 CI 结果到达
"进程死了;agent 没死。" worker 允许失败——另一个从同一 log 重建即可。
# Runs on any worker, whenever an event lands
def advance(agent_id, event):
    with temporary_lease(agent_id):
        append_to_log(agent_id, event)
        state = reconstruct_from_log(agent_id)
        action = model.next(state)
        append_to_log(agent_id, action)
        dispatch(action)          # fire-and-forget
    # worker exits — the agent persists in the log

设备的新角色:从"容器"变成"客户端"

这套架构最打动人的一点:用户体验可以完全不变。仍在 repo 里开终端、输入请求、看命令跑、就地批准。笔记本仍是执行平面的一部分。改变的只是角色——harness 要读文件/跑命令时,把动作路由给笔记本,结果回写进 agent 历史。合上笔记本,依赖本地文件的工作暂停,但 agent 仍在控制平面;机器回来时同一个 agent 可继续用它。

设备作为客户端连接到持久 harness,多界面触达
同一个 durable agent 可经多个界面触达:笔记本发起、手机审批、Slack 跟进、另一台机器审查——多人可 steer 同一 session。(来源:原文配图)

分离后自然落地的四性质

性质本地架构持久控制平面
可用性每次等待都是某台机器的 uptime 要求等待只是 durable state;不必持续运行也能持续可用
韧性一台机器/进程失败 = agent 失败worker 允许失败,另一个从 log 重建接续
可扩展每 agent 一个常驻进程worker 容量 ∝ 并发推进数,machine 容量 ∝ 活跃 OS 工作量(两条独立曲线)
效率持久 agent = 永久沙箱1000 agent 仅 5% 需 shell → 执行平面只需 ~50 活跃负载;空闲 agent 消耗存储而非机器

例外:某些环境仍应保持 warm(大仓库、加载好的模型、重建昂贵的 cache)。区别在于——持久性变成一个显式选择,而非 agent 存在的副作用。

谁拥有循环:可所有权

行业已在此方向移动——Anthropic Managed Agents 分离 harness 与 sandbox;Ramp / Stripe / Sentry / Coinbase 自建内部 background agent。但它们都不提供所有权:跑单 provider 模型在其基础设施上,不可 model-agnostic、不开源、不可自托管。

作者论证:agent 是你将运行的最亲密的软件(它需要你的个人数据、公司数据、工作流、决策)。The Log Is the Agent 已论证"记录层"——provider 持有 log 唯一副本即拥有你的 agent。本文把同一论证向上爬一层:控制平面是 log 居住、harness 运行之处,所以你也应该能拥有控制平面。这正是 Omnara 即将开源其控制平面的动机。

Omnara 的控制平面/执行平面架构示意
Omnara 的实现:控制平面拥有 durable log + lifecycle;机器经出站 daemon 接入执行平面,请求动作的 worker 与执行机器不需同时在线。(来源:原文配图)

结论

把循环放进持久控制平面。让它 serverless。把机器当工具暴露给 agent。其余自然落地:可用性、韧性、可扩展、效率。

这是 Omnara 正在构建的系统——他们即将开源 agent 的控制平面。

原文:Serverless Agents: No Machine Owns the Loop · Ishaan Sehgal (@ishaansehgal), Omnara (YC S25) · 2026-07-23。本文引用其姊妹篇 The Log Is the Agent