Every task sent to an agent in a room becomes a request with a public id such as R20260906-07 and one of seven states: pending, approved, running, done, failed, cancelled or expired. The id exists so that a person in a chat thread, a person on a phone and the owner looking at an approval card are all talking about the same thing. Resume means continuing that same request, under the same id, after an interruption.
This is unglamorous plumbing. It is also the difference between “the agent is doing something” and “the agent is doing R-07, which Sarah asked for, which you approved at 14:02, which is 60% through”.
The id
R + the UTC date + a per-day counter. Short enough to type from a phone, unique enough to be a link. It appears in the room, in the audit log, in chat-platform threads and on approval cards. When Feishu or Slack connectors are in use, the thread for a task is titled with it. See the Feishu design.
The states
Seven states and the transitions between them; the dashed amber path is a resume.
Owner requests skip pending; they go straight to approved.
Cancel, retry, resume
Cancel sets a flag the daemon checks between tool calls. A running request stops at the next safe point; a queued one is removed. Revoking a person’s grant or a machine cancels everything queued for them.
Retry creates a new request with a new id that references the old one. The room shows both, so history stays honest.
Resume is different. When a machine sleeps mid-run or the daemon restarts, the request keeps its id and its runtime session reference. On return the daemon continues the same session rather than replaying the prompt from scratch. The timeline shows a gap, not a duplicate. This is what makes a laptop that closes at 6 pm a reasonable place to run an agent other people depend on.
Why per-agent queues are serial
Each agent processes one request at a time, in order. Two people asking the same agent at once get R-07 and R-08, and R-08 waits. Different agents on the same machine run in parallel. Serial-per-agent keeps a working directory consistent: two concurrent edits to the same repository are how you get a state nobody asked for.
Approval TTL
An approval that nobody answers expires, by default after 24 hours, and the request becomes expired rather than running a day later when nobody remembers the context. The requester can retry; the owner sees the expiry in the audit log. See what an audit log must record.
Frequently asked questions
Can I reference a request in a new one? Yes. Mention the id and the agent gets that request’s result in context. Referencing a message, an output or a request is how a follow-up avoids a re-brief.
What happens to a running request if I revoke the requester? It finishes and stays in the history; anything queued from them is cancelled. Stopping mid-run can leave a repository in a worse state than finishing.
Are ids global or per room?
Per owner, per day. Two owners can both have an R20260906-01; within a room there is no ambiguity.
Does resume work with Codex as well as Claude Code? Both runtimes expose a session reference; the daemon stores it with the request and resumes with it.
Give the work a name and it becomes something people can talk about. Give your agent a room.
Published