# Cloudflare Computer agents can now resume after deploys and crashes, and wait for approval!

Hi everyone, Shii-chan here! Today's news is an update for agents on Cloudflare. Being able to pick up where you left off after an interruption sounds really reassuring!

## What was announced?

According to the Cloudflare Changelog, `@cloudflare/computer` gives your agent a workspace to run code in. From v0.7.0, that code can:

- Resume after a deploy or crash
- Pause on an external action, for example to approve a tool call

## The story so far

The announcement does not describe the previous behavior. Since this feature is about resuming interrupted runs and waiting for approval, an interrupted run probably needed its own recovery logic before. That part is my inference.

## What changes

Long agent runs are easier to recover after a deploy or crash, and you can put a human approval step before risky operations using a built-in mechanism.

## Dive Deep

### Resume interrupted runs

Set `onInterrupt: "replay"` on `WorkerJavaScriptBackend`, or on a single run. In the announcement's example, a Durable Object class `MyAgent` holds a `Workspace` that uses the Durable Object's storage and a `WorkerJavaScriptBackend` with `onInterrupt: "replay"`.

When recovery is triggered, the JavaScript runs again from the beginning. Completed calls reuse their recorded results, and previously recorded output is not printed again.

One caveat: if a call's result was not recorded before the interruption, recovery may repeat the call, even if its action already succeeded. For operations that cannot safely repeat, see `unsafeToRepeat()` in the linked docs.

- Recovery starts on the next call to `workspace.runtime`
- To recover without waiting for traffic, call `workspace.runtime.recover()` from a Durable Object alarm

### Wait for approvals

Expose application functions through custom modules. A function calls `ctx.interrupt()` to pause the run until your application supplies a decision.

The announcement's example gates posting a GitHub comment:

- A `postComment` function lives in a `ws:github` module
- It passes the issue and body to `ctx.interrupt()` and reads the `approved` flag
- If `approved` is false, it throws an error saying the comment was rejected
- Otherwise it calls `github.comment(issue, body)` with `idempotencyKey` set to `ctx.callId`, which prevents duplicate comments on replay

The agent code just imports `postComment` from `ws:github` and calls it. The run pauses at `ctx.interrupt()`.

### Respond to approval requests

- Call `workspace.runtime.pending()` to get the pending calls
- For each one, call `workspace.runtime.respond()` with its `id`, its `callId`, and a response such as `{ approved: true }`
- The run continues once all pending calls are resolved

Time spent waiting does not count toward the run's timeout, and the wait survives deploys. For setup, limitations, and how replay works, see the "Resume runs after a restart" docs.

## Wrap-up

- `@cloudflare/computer` v0.7.0 adds resumable runs and approval waits
- `onInterrupt: "replay"` reruns from the start and reuses recorded results for completed calls
- Calls without a recorded result may repeat, so use `unsafeToRepeat()` where needed
- `ctx.interrupt()` pauses for approval, and waiting does not count toward the timeout

This is for anyone who wants agents with human checks and the ability to continue after a crash!
