发送给房间中某个 agent 的每个任务都会成为一个带有公开 id(例如 R20260906-07)的请求,并处于七种状态之一:pending、approved、running、done、failed、cancelled 或 expired。这个 id 的存在,是为了让聊天群里的讨论者、手机端的用户以及查看审批卡片的主人谈论的都是同一件事。Resume 则意味着在中断之后,以相同的 id 继续执行同一个请求。
这是不起眼的底层管网工作,但它也正是“agent 正在处理任务”与“agent 正在处理 Sarah 提交的 R-07,你于 14:02 批准,当前进度 60%”之间的区别。
The id
R + UTC 日期 + 当天计数器。足够简短,可以在手机上直接输入;又足够唯一,可以直接作为链接。它会出现在房间、审计日志、聊天平台的话题讨论串以及审批卡片上。在使用 Feishu 或 Slack 连接器时,任务讨论串会以此命名。参见 Feishu 设计。
The states
七种状态及其流转;琥珀色虚线路径表示 resume。
主人发起的请求会跳过 pending;直接进入 approved。
Cancel, retry, resume
Cancel 会设置一个标志,daemon 在两次工具调用之间会检查该标志。正在运行的请求会在下一个安全节点停下;排队中的请求则会被移除。撤销某个人的授权或某台机器,会取消所有为其排队的请求。
Retry 会创建一个带有新 id 的新请求,并引用旧请求。房间会同时显示两者,确保历史记录真实完整。
Resume 则不同。当机器在运行途中休眠或 daemon 重启时,请求会保留其 id 及其运行环境 session 引用。恢复运行时,daemon 会继续该 session,而不是从零开始重放 prompt。时间线上会显示一段间隙,而不是重复记录。正因如此,即使是一台在下午 6 点合上盖子的笔记本电脑,也能成为稳妥运行他人所依赖 agent 的机器。
Why per-agent queues are serial
每个 agent 依次只处理一个请求。两个人同时向同一个 agent 提问,会分别拿到 R-07 和 R-08,R-08 需要排队等待。同一台机器上的不同 agent 可以并行运行。每个 agent 保持串行是为了维护工作目录的一致性:对同一个代码仓库进行两组并发编辑,往往会产生谁都不想要的状态。
Approval TTL
无人响应的审批会自动过期,默认时限为 24 小时;请求会进入 expired 状态,而不是在一天之后大家都不再记得上下文时盲目运行。请求者可以重试;主人可以在审计日志中看到超时记录。参见审计日志必须记录什么。
Frequently asked questions
Can I reference a request in a new one? 可以。只要提及该 id,agent 就会在上下文中获取该请求的结果。引用一条消息、一份输出或一个请求,正是后续跟进任务避免重复交代背景的方法。
What happens to a running request if I revoke the requester? 它会执行完毕并保留在历史记录中;来自该请求者所有排队中的任务都会被取消。中途强制中断可能导致代码仓库处于比执行完毕更糟糕的状态。
Are ids global or per room?
按主人、按天区分。两位主人可以各自拥有一个 R20260906-01;而在同一个房间内不会存在任何二义性。
Does resume work with Codex as well as Claude Code? 两个运行环境都暴露了 session 引用;daemon 会将其与请求保存在一起,并据此进行恢复。
给工作赋予一个名称,它就成了大家可以讨论的对象。为你的 agent 创建一个房间。
发布于