Cloudflare Computer v0.7.0: replay after crashes, pause for approval mid-run
Cloudflare Computer v0.7.0 lets agent-run JavaScript resume after deploys or crashes and pause for human approval. For builders on Durable Objects.
Picture a two-person dev shop that built an agent to triage GitHub issues for a client. The agent writes small JavaScript programs that read the repo, draft a reply and post a comment. It works on a quiet afternoon. Then someone deploys mid-run, the run dies halfway through, and nobody knows which comments went out. The client also wants a human to sign off before anything gets posted publicly, so the team has bolted on a queue, a status table and a polling loop. Now they maintain an approval system as well as an agent.
That is the gap Cloudflare's changelog for @cloudflare/computer v0.7.0, dated October 26, 2026, targets. Code an agent runs in a Computer workspace can now "resume after a deploy or crash, and pause on an external action, for example to approve a tool call." The catch is in the same post: replay can repeat a call whose result wasn't recorded before the interruption.
What it is
Computer is Cloudflare's agent workspace library. According to the GitHub repo, it is "a virtual filesystem that lives inside a Durable Object," with state held in SQLite and code run through one execution surface, workspace.runtime. Three backends ship: a container, an isolate shell, and an isolate JavaScript backend that runs an ECMAScript module in a fresh Dynamic Worker. An outside overview from Flowtools describes it as infrastructure for your agent "rather than a ready-made personal assistant."
v0.7.0 adds two things, per the changelog:
- Replay on interruption (the deploy-kills-the-run pain). Set
onInterrupt: "replay"onWorkerJavaScriptBackend, or on a single run. On recovery, "the JavaScript runs again from the beginning, reusing recorded results for completed calls without printing previously recorded output again." Recovery starts on the next call toworkspace.runtime. To recover without waiting for traffic, callworkspace.runtime.recover()from a Durable Object alarm. - Approval pauses (the hand-rolled queue pain). You expose your own functions to agent code through custom modules. A function can call
ctx.interrupt()to pause the run until your app supplies a decision. The changelog's example is a GitHub module whosepostCommentwaits for approval. The agent calls it "like any other function." Your app fetches pending calls withworkspace.runtime.pending()and resolves them withrespond(). Waiting time "does not count toward its timeout," the wait "survives deploys," and the run continues once all pending calls are resolved.
Alternatives, each from its own source:
- LangGraph
interrupt(): the LangChain docs offer approve, edit, reject and respond decisions through middleware. You run the checkpointer yourself, for exampleAsyncPostgresSaverorMongoDBSaverin production. - Temporal Signals and Updates: a workflow waits on
condition(). Cadenya's comparison notes that a Signal arriving before the wait is still recorded. The cost is running four services plus a database, or paying for Temporal Cloud. - Inngest
step.waitForEvent(): it has an explicit timeout and returns null on expiry, per the same comparison. An approval sent before the run reaches the wait is lost. - Cloudflare Agents SDK
this.waitForApproval(): Cloudflare's own option, in anAgentWorkflowbacked by Cloudflare Workflows. It is answered withapproveWorkflow()orrejectWorkflow(), per Cadenya's LangGraph.js guide.
Who it's for
Pick this up if you already run agents on Workers and Durable Objects, use Computer's JavaScript backend, and let agent-written code call your functions that touch the outside world: posting comments, writing records, sending mail. You get crash recovery and an approval gate without adding Postgres or a workflow engine.
Skip it if you're not on Cloudflare. Skip it if your approval is one step in a longer workflow you already run on Temporal or Inngest. Skip it if you're on LangGraph with a checkpointer that works. And skip it if your agent mainly runs shell commands in the container backend, which the repo marks as experimental.
Before and after
Before, for the issue-triage agent:
- The agent writes a JavaScript module and it runs in the workspace.
- A deploy or crash kills the run. You dig through logs to find which calls finished.
- For approval,
postCommentwrites a row to your own table and returns early. The run ends. - A human approves in your UI. You re-trigger the agent and rebuild its context.
- You hope the re-run doesn't post twice.
After, as the changelog describes it:
- Set
onInterrupt: "replay"on the backend. postCommentin your custom module callsctx.interrupt(). The run pauses there.- Your UI lists
workspace.runtime.pending()and callsrespond()with the decision. - The run continues once all pending calls are resolved, even if you deployed in between.
- If the run is interrupted, it replays from the top on the next
workspace.runtimecall, or from a Durable Object alarm callingrecover(). Recorded results are reused. - For calls that must never run twice, you still have to handle retries. The changelog points to its "Calls that must not run twice" page and
unsafeToRepeat().
Try it
The Cloudflare Agents file system docs give the setup:
npm i @cloudflare/computer zod
- Your Worker needs the
nodejs_compatcompatibility flag. - Create a
Workspacein your Durable Object class and pass it thestorageobject. - Configure the Durable Object binding and a SQLite migration in your Wrangler configuration.
- Add a
WorkerJavaScriptBackend, which needs a Worker Loader binding. The docs note that the module must have a default export, and that file access at the top level of the module fails the run.
Then set onInterrupt: "replay" and copy the changelog's postComment approval example as your first gated function. The repo's examples directory includes examples/worker-javascript, which mirrors the shell example but evaluates an ECMAScript module. The sources don't say which Workers plan this requires.
Where it breaks
- Replay can repeat a side effect. The changelog says plainly that if a call's result "was not recorded before the interruption, recovery may repeat the call — even if its action already succeeded." A comment could post twice. Modern Workspace Pro's writeup says the run carries on "without repeating calls it already made." That is cleaner than the primary source. Trust the changelog. LangGraph has the same class of problem: on resume the node restarts, so side effects before
interrupt()should be idempotent, per Cadenya's approval comparison. unsafeToRepeat()is unconfirmed. We couldn't confirm whether it throws, skips, or surfaces the call for manual resolution on replay. Read that doc page before trusting it with money or public posts.- No documented expiry or deny path. The sources describe
respond()but no maximum wait or timeout path. Inngest has an explicit timeout, and LangGraph has arejectdecision that skips the tool. Whether Computer has equivalents is open. - Billing while paused is unknown. The sources don't say whether a waiting run accrues Durable Object duration or storage charges.
- Recovery is lazy. Without a Durable Object alarm calling
recover(), an interrupted run waits for the nextworkspace.runtimecall. - Scope. The changelog names
WorkerJavaScriptBackend. Whether replay and interrupt work on the container backend isn't stated. The repo marks the container backend, and the container and Worker shell backends in the package's status table, as experimental. - API churn. The package is pre-1.0. An issue in pawaca/dsh-edge documents 0.4.0 splitting the container backend in two. It says there is no in-place switch and that Durable Object storage is not transferred to the new class. The repo also warns that its
docs/spec is "forward-looking." - No hands-on reports yet. Outside coverage of v0.7.0 we found restates the changelog. Nobody independent has published results from real replay or approval use.
Sources
- Cloudflare Computer now helps agents recover from interruptions and wait for approval · Changelog · Cloudflare
- GitHub - cloudflare/computer: Give your agent a computer 👾 · GitHub
- Cloudflare Agents Workers Can Pause and Resume · Modern Workspace Pro
- Cloudflare Computer: Persistent files and execution tools for agents – flowtools · Flowtools
- Human-in-the-loop approvals for AI agents (2026): tool approval, durable execution, and wait for event compared — Cadenya · Cadenya
- File system · Cloudflare Agents docs · Cloudflare
- Container: evaluate Computer's durable_object-scheduled ContainerBackend · Issue #385 · pawaca/dsh-edge · GitHub
- Inngest vs Temporal for AI agents (2026): durable execution and human-in-the-loop approvals — Cadenya · Cadenya
- LangGraph.js human-in-the-loop in TypeScript (2026): interrupt, Command resume, PostgresSaver checkpointer, and Mastra vs Inngest AgentKit — Cadenya · Cadenya
- Human-in-the-loop - Docs by LangChain · Docs by LangChain