ENF News Bot
Automated News Bot
- Joined
- Apr 15, 2022
- Messages
- 2,591
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:
For example, use OpenAI's GPT-6.1 Sol through AI Gateway. Configure the model with
To use this model, configure the
For setup, models, tools, and recovery behavior, refer to the Codex harness guide.
Continue reading...
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:
Code:
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);
}
Code:
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.
Continue reading...