Run the Codex agent loop in a Cloudflare Durable Object with this experimental Agents SDK example ↗︎. Conversations, files, and completed model and tool results persist across restarts, allowing the agent to recover after interruptions.
The example adapts Codex’s Rust turn-processing code ↗︎ to WebAssembly and uses Agents SDK capabilities for storage and recovery.
The harness combines Agents SDK capabilities for durable execution:
Tasksjournals model calls and tool execution. Completed steps reuse their recorded results after a restart. Interrupted steps can run again.Sessionsstores conversation history and compacts the model context.Streamsstores ordered events for replay after reconnecting.Workspaceprovides tools to read and write persistent files.
For example, use OpenAI’s GPT-6.1 Sol through AI Gateway. Configure the model with createAI and install the capabilities on a Durable Object:
import { DurableObject } from "cloudflare:workers";
import { Workspace } from "@cloudflare/computer";
import { Lifecycle } from "agents/lifecycle";
import { createAI } from "agents/models/ai-sdk";
import { Sessions } from "agents/sessions";
import { Streams } from "agents/streams";
import { Tasks } from "agents/tasks";
import { CodexHarness } from "./codex-harness";
export class Coder extends DurableObject {
tasks = new Tasks();
streams = new Streams();
sessions = new Sessions();
workspace = new Workspace({ storage: this.ctx.storage });
codex = new CodexHarness({
tasks: this.tasks,
streams: this.streams,
sessions: this.sessions,
workspace: this.workspace,
model: createAI({ binding: this.env.AI, id: "default" })(
"openai/gpt-6.1-sol",
),
});
lifecycle = Lifecycle.install(this)
.use(this.tasks)
.use(this.streams)
.use(this.sessions)
.use(this.codex);
}
import { DurableObject } from "cloudflare:workers";
import { Workspace } from "@cloudflare/computer";
import { Lifecycle } from "agents/lifecycle";
import { createAI } from "agents/models/ai-sdk";
import { Sessions } from "agents/sessions";
import { Streams } from "agents/streams";
import { Tasks } from "agents/tasks";
import { CodexHarness } from "./codex-harness";
export class Coder extends DurableObject<Env> {
tasks = new Tasks();
streams = new Streams();
sessions = new Sessions();
workspace = new Workspace({ storage: this.ctx.storage });
codex = new CodexHarness({
tasks: this.tasks,
streams: this.streams,
sessions: this.sessions,
workspace: this.workspace,
model: createAI({ binding: this.env.AI, id: "default" })("openai/gpt-6.1-sol"),
});
lifecycle = Lifecycle.install(this)
.use(this.tasks)
.use(this.streams)
.use(this.sessions)
.use(this.codex);
}
To use this model, configure the default gateway with Unified Billing or a stored OpenAI API key.
For setup, models, tools, and recovery behavior, refer to the Codex harness guide.
Source: Cloudflare


