diff --git a/src/content/changelog/agents/2026-02-20-codemode-sdk-rewrite.mdx b/src/content/changelog/agents/2026-02-20-codemode-sdk-rewrite.mdx new file mode 100644 index 000000000000000..f9a8ec5556ae0a4 --- /dev/null +++ b/src/content/changelog/agents/2026-02-20-codemode-sdk-rewrite.mdx @@ -0,0 +1,74 @@ +--- +title: "@cloudflare/codemode v0.1.0: a new runtime agnostic modular architecture" +description: "The Code Mode SDK has been rewritten with `createCodeTool()`, `DynamicWorkerExecutor`, and a new `Executor` interface that allows for Bring Your Own (BYO) sandbox." +products: + - agents + - workers +date: 2026-02-20 +--- + +import { TypeScriptExample, WranglerConfig } from "~/components"; + +The [`@cloudflare/codemode`](https://www.npmjs.com/package/@cloudflare/codemode) package has been rewritten into a modular, runtime-agnostic SDK. + +[Code Mode](https://blog.cloudflare.com/code-mode/) enables LLMs to write and execute TypeScript that orchestrates your tools, instead of calling them one at a time. This can (and does) yield significant token savings, reduces context window pressure and improves overall model performance on a task. + +The new `Executor` interface is runtime agnostic and comes with a prebuilt `DynamicWorkerExecutor` to run generated code in a [Dynamic Worker Loader](/workers/runtime-apis/bindings/worker-loader/). + +## Breaking changes + +- Removed `experimental_codemode()` and `CodeModeProxy` — the package no longer owns an LLM call or model choice +- New import path: `createCodeTool()` is now exported from `@cloudflare/codemode/ai` + +## New features + +- **`createCodeTool()`** — Returns a standard AI SDK `Tool` to use in your AI agents. +- **`Executor` interface** — Minimal `execute(code, fns)` contract. Implement for any code sandboxing primitive or runtime. + +### `DynamicWorkerExecutor` +Runs code in a [Dynamic Worker](/workers/runtime-apis/bindings/worker-loader/). It comes with the following features: + +- **Network isolation** — `fetch()` and `connect()` blocked by default (`globalOutbound: null`) when using `DynamicWorkerExecutor` +- **Console capture** — `console.log/warn/error` captured and returned in `ExecuteResult.logs` +- **Execution timeout** — Configurable via `timeout` option (default 30s) + +## Usage + + + +```ts +import { createCodeTool } from "@cloudflare/codemode/ai"; +import { DynamicWorkerExecutor } from "@cloudflare/codemode"; +import { streamText } from "ai"; + +const executor = new DynamicWorkerExecutor({ loader: env.LOADER }); +const codemode = createCodeTool({ tools: myTools, executor }); + +const result = streamText({ + model, + tools: { codemode }, + messages, +}); +``` + + + +## Wrangler configuration + + + +```jsonc +{ + "worker_loaders": [{ "binding": "LOADER" }], +} +``` + + + +See the [Code Mode documentation](/agents/api-reference/codemode/) for full API reference and examples. + +## Upgrade + +```sh +npm i @cloudflare/codemode@latest +```