agents
0.29.0 · 20 Oct 2026MIT1.5M / weekRepositorynpmAtom feed
Latest releases
All 205 releases- 0.29.x · latest line
0.29.0
20 Oct 2026- deprecated
Chat recovery now seals a turn after
chatRecovery.maxInterruptedAttemptsinterrupted attempts (default 5), so a turn that exceeds the Durable Object memory limit on every run no longer retries forever;maxOomRetriesis deprecated. See Stream Recovery. Agent Skills read and write a
@cloudflare/computerWorkspace, for both projection andskills.runner(). See Upgrading to a Computer workspace.Browsercreates and closes its Browser Run sessions with the binding's typedacquire()andcloseSession(), falling back to the HTTP API in fully local dev. See Browser.
Minor Changes
Agent Skills read and write a
@cloudflare/computerWorkspace, for both projection andskills.runner(). See Upgrading to a Computer workspace.
Patch Changes
Browsercreates and closes its Browser Run sessions with the binding's typedacquire()andcloseSession(), falling back to the HTTP API in fully local dev. See Browser.- deprecated
Chat recovery now seals a turn after
chatRecovery.maxInterruptedAttemptsinterrupted attempts (default 5), so a turn that exceeds the Durable Object memory limit on every run no longer retries forever;maxOomRetriesis deprecated. See Stream Recovery. createAItakes{ accountId, apiToken }in place ofbinding, to use a gateway in another account or to run outside a Worker. See the models docs.createAItranscribes with@cf/deepgram/nova-3. See the models docs.createAIno longer uses AI Gateway's deprecated Universal Endpoint. Model ids, now including catalog ids likeanthropic/claude-opus-4.8, run onenv.AI.run; model objects go to the provider-native path. AddsbyokAlias, fixes pi-ai catalog models and dynamic routes, and letsagents/models/opencodetake catalog ids. See the models docs.createAIresumes a catalog or dynamic route stream that drops mid-answer, with nothing lost or repeated. See the models docs.agents/models/pi-airesolves Claude ids from pi-ai 1.2's gateway catalog under AI Gateway's spelling,anthropic/claude-opus-4.8. See Models for pi-ai.Support Pi 1.3: the Pi web search, web fetch, browser, and skills tools return
output, and the Pi peer range is now~1.3.0. See Pi harness.PiHarnesssubmit()andsteer()now accept pi-durable'sentryoption, which labels an input with a transcript kind of your own (for exampleapp.approval) instead ofpi.user. Before, the harness had no way to pass it. See Label input the user did not type.openPiSessionStorenow uses pi-durable's own Durable Object SQLite adapter, so several Pi storages in one object share its operation queue. See Pi harness.
- 0.28.x · maintenance
0.28.1
13 Oct 2026createAI(agents/models/ai-sdk,agents/models/pi-ai) adds thezdrgateway option, andvendorKey: "request"for AI SDK models routed with your own vendor key. See docs/agents/models.md.createAI(agents/models/ai-sdk,agents/models/pi-ai) takes AI Gateway dynamic routes asai("dynamic/<route>"). See docs/agents/models.md.Update
@modelcontextprotocol/clientand@modelcontextprotocol/serverto 2.2.0 and@modelcontextprotocol/sdkto 1.31.0. See Model Context Protocol.
Patch Changes
createAI(agents/models/ai-sdk,agents/models/pi-ai) adds thezdrgateway option, andvendorKey: "request"for AI SDK models routed with your own vendor key. See docs/agents/models.md.createAI(agents/models/ai-sdk,agents/models/pi-ai) takes AI Gateway dynamic routes asai("dynamic/<route>"). See docs/agents/models.md.Update
@modelcontextprotocol/clientand@modelcontextprotocol/serverto 2.2.0 and@modelcontextprotocol/sdkto 1.31.0. See Model Context Protocol.Update
@modelcontextprotocol/clientand@modelcontextprotocol/serverto 2.3.1 and@modelcontextprotocol/sdkto 1.32.1. The MCP client transports now follow redirects only within the same origin. See Model Context Protocol.McpAgentnow answers requests for a session ended withDELETEwith 404 straight away, instead of serving it until deferred teardown runs, andcreateMcpHandlerrejects a Legacy request whose factory returns an instance still serving another request without closing that instance. See Transport.OpenCodeHarness:session.events()now returns a stream with a snapshot of the session and then its events, translated into the same kindsPiHarnessreports:run_start/run_end,operation_start/operation_end(with the resultwait()returns),message_start/message_end,text_delta,reasoning_delta,tool_start/tool_end, permissions and compaction. It replaces the async iterable of OpenCode's raw events; those are still available, durable and resumable, fromsession.log(). The OpenCode example now gives the model Workspace tools from@cloudflare/computerin place of OpenCode's local file and shell tools.
0.28.0
9 Oct 2026Add
browserTool()toagents/browser/pi. See Persistent browser.Make
agents/lifecyclestable along with theScheduler(agents/schedules),State(agents/state),WebSockets(agents/websockets) andMCPClientManager(agents/mcp/client) capabilities. See Lifecycle.ThinkHarnessnow keeps its sessions and operations in the sharedagents/harness/store. Migrations are performed on first run. See ThinkHarness: Recovery.
This release adds two new tools,
browserviaagents/browser/{pi,ai-sdk,tanstack-ai}allowing an agent to create and manipulate a persistent browser session andweb_fetchviaagents/webfetch/{pi,ai-sdk,tanstack-ai}that can retrieve most document formats converted into markdown.Minor Changes
Add
browserTool()toagents/browser/pi. See Persistent browser.Make
agents/lifecyclestable along with theScheduler(agents/schedules),State(agents/state),WebSockets(agents/websockets) andMCPClientManager(agents/mcp/client) capabilities. See Lifecycle.
Patch Changes
ThinkHarnessnow keeps its sessions and operations in the sharedagents/harness/store. Migrations are performed on first run. See ThinkHarness: Recovery.Add
agents/webfetch, aweb_fetchtool that reads a URL as Markdown, JSON, or text (HTML, PDF, and Office documents via Worker AI). See Fetch the Web.
- 0.27.x · maintenance
0.27.0
7 Oct 2026- breaking
remove the first pass of
agents/channelsand move Channels toagents/experimental/channels.The
agents/channelsentry points are gone, along withChannelHost, thefallbackandfanoutcomposites, and the AI SDK, TanStack AI and Voice helpers from the first pass. Slack, Telegram and Email move toagents/experimental/channels/slack,agents/experimental/channels/telegramandagents/experimental/channels/email, and keep verified ingress and normalization. Channels is being rebuilt around conversations and turns; the new API is experimental and may change between releases. New experimental harnesses:
AiSdkHarness,ThinkHarness,ContainerHarness(which runs Claude Code or Codex in a Container) andOpenCodeHarness, all with the same shape asPiHarness.New
agents/websearch: aweb_searchtool over Cloudflare's Web Search API for pi, the AI SDK and TanStack AI.
This release adds four new experimental harnesses and a
web_searchtool, and reorganizes the experimental Channels API.New experimental harnesses:
AiSdkHarness,ThinkHarness,ContainerHarness(which runs Claude Code or Codex in a Container) andOpenCodeHarness, all with the same shape asPiHarness.New
agents/websearch: aweb_searchtool over Cloudflare's Web Search API for pi, the AI SDK and TanStack AI.Channels moved to
agents/experimental/channels: Channels is being rebuilt around conversations and turns, and the oldagents/channelsentry point has been removed. The new API includesChannelGateway, the Web Channel and its client, an AI SDK chat transport, and a newnpx agents tuiterminal client.Fixes: Streams, Tasks,
useAgentChatreconnects,WebChannelClient, MCP credential cleanup onremoveServer(), and x402 with MCP SDK v2.
Minor Changes
Add
AiSdkHarnessfrom the newagents/harness/ai-sdkentry point, which runs each message withstreamTextand keeps sessions and transcripts in the Durable Object, soChannels.forHarnesscan serve an AI SDK model. The same entry point exports the AI SDK message conversions it is built on andcreateSendMessageTool, an AI SDK tool that sends a message to a surface through the gateway.Add
Channelstoagents/experimental/channels: a Lifecycle capability that serves an agent harness's sessions as conversations to every surface that joins them, with durable, resumable responses onStreams. Connect a harness withChannels.forHarness(harness, { channels }). The entry point also exports the turn protocol types and a draft harness interface (AgentHarness), which may change.- breaking
remove the first pass of
agents/channelsand move Channels toagents/experimental/channels.The
agents/channelsentry points are gone, along withChannelHost, thefallbackandfanoutcomposites, and the AI SDK, TanStack AI and Voice helpers from the first pass. Slack, Telegram and Email move toagents/experimental/channels/slack,agents/experimental/channels/telegramandagents/experimental/channels/email, and keep verified ingress and normalization. Channels is being rebuilt around conversations and turns; the new API is experimental and may change between releases. Add
ChannelGatewaytoagents/experimental/channels: the Worker entry point that verifies channel webhooks, takes Web Channel upgrades throughweb()fromagents/experimental/channels/web, routes each to the agent object that holds its conversation, and delivers outbound messages. Every Channel that takes ingress needs aparticipantcallback, where the application says who the sender is; Channels never picks an identity. The agent object is the authorization boundary: by default each participant gets one of their own, and aroutecallback can share one between participants or refuse them.Add
WebChannelChatTransport(agents/experimental/channels/web/ai-sdk), an AI SDKChatTransportover the Web Channel, so AI SDK UIs can join a Channels conversation.Add the Web Channel (
agents/experimental/channels/web) and its client (agents/experimental/channels/web/client), which connect browsers and terminals to a conversation over the agent's WebSockets: live transcript and turns, approvals, client tool results, and creating, forking, resetting, listing and following conversations.WebSocketsgainsusefor protocol handlers that run before the configured ones.Add
agents/websearch, aweb_searchtool over Cloudflare's Web Search API for the pi harness, the AI SDK, and TanStack AI. See Search the Web.
Patch Changes
AiSdkHarness:session.wait(operationId, signal)now rejects straight away whensignalis already aborted, instead of staying pending until the operation settles.AiSdkHarnessno longer fails to start when it has stored sessions.onStartlisted sessions while listing each one's pending work, and Durable Object storage allows one openkv.list()at a time, so a restarted agent stopped acknowledging messages.AiSdkHarnesspasses its tools toconvertToModelMessages, so a tool'stoModelOutputalso shapes its results on later turns instead of the model getting the raw output as JSON.browserToolnow has its own tool description instead of codemode's generic one. It covers thecdpAPI, common CDP mistakes, and the run time limit, so the model no longer runscodemode.searchfirst. It also explains how to take a smaller screenshot when one is over the 1 MB result limit. See Persistent browser.Add
npx agents tui <url>, a terminal client for a conversation's Web Channel.It streams the transcript with highlighted Markdown, collapsible reasoning and tool cards, and shows messages and turns from every surface live. It answers approvals inline, lets a person type a client tool's result, and cancels the running turn with Esc.
--headeradds headers to the WebSocket upgrade, andCF_ACCESS_CLIENT_ID/CF_ACCESS_CLIENT_SECRETare sent as an Access service token. Its dependencies are bundled intodist/cli.js, so installingagentsadds none.Add experimental
agents/harness/container,agents/harness/container/daemon,agents/harness/container/runtimeandagents/harness/store. Everything in them may change before it stabilizes.ContainerHarnessruns an agent CLI such as Claude Code or Codex in a Cloudflare Container (ctx.container) and drives it from a Durable Object, with the same interface asPiHarness(prompt,submit,wait,abort,messages,pending,session(id),sessions). Typed presets (claudeCode(),codex(),containerAgent()) say what runs: the harness builds the container fromcloudflare/debian-trixieat runtime and snapshots it, so there is no image to build, andContainerEgressadds credentials (apiKey,baseUrl,headers) outside the container, which only ever sees a placeholder key. The container stops after an idle timeout (five minutes by default) and the next prompt starts a new one in which the CLI resumes its own session; a container lost mid-run settles that run ascontainer_lost(or reruns it withonContainerLost: "retry"), and an object evicted mid-run reattaches and replays what it missed.agents/harness/container/runtimeis the daemon's Node runtime withcliAdapter, for images that bring their own CLI;agents/harness/container/daemonis its runtime-agnostic core; andagents/harness/storeis a session store on the object's SQLite that any harness can use.MCPClientManager.removeServer()(andAgent.removeMcpServer()) now clears the server's saved OAuth state from Durable Object storage: tokens and client information (including those under earlier client IDs), verifiers, pending states and discovery state. This also works when the server's connection was already closed. Other servers' credentials are untouched, and tokens are not revoked at the OAuth provider. Custom auth providers getinvalidateCredentials("all").Add experimental
agents/harness/opencodeandagents/models/opencode.OpenCodeHarnesshosts OpenCode v2 (@opencode/sdk/workerd) in a Durable Object behind the same interface asPiHarness: OpenCode's tables are kept under anopencode_prefix, a Lifecycle wake job per session brings runs back after eviction, and the harness closes OpenCode when it is idle so the object can hibernate.createAI({ binding })fromagents/models/opencodereturns an OpenCode plugin that serves Workers AI models through theAIbinding. Both APIs are experimental and will change.Streams: a live
read/readBatchesno longer misses chunks appended while the consumer is still handling the previous batch. It re-polls before waiting for the next append, so a reader no longer stalls until a later append or the stream's end.Streamsrechecks that the v1 chunk table still exists before using it. Two Streams instances on one object, such as a host's own and the oneThinkHarnesskeeps, each remembered the table separately, so after one folded the last v1 rows and dropped the table the other failed its next append withno such table.A routed Task wake whose owner facet is no longer in the root's registry now ends quietly instead of throwing
Invalid job outcomeon the alarm.Add
ThinkHarnessfrom the new experimentalagents/harness/thinkentry point. It runs Think's agent loop as a Lifecycle capability with the same shape asPiHarness(prompt,submit,wait,abort,sessions,session(id)), and implements the shared harness interface Channels serves.The harness owns its storage: transcripts in the Sessions tables, with
branches(),search()andcompact()on each session, and in-flight model output in the Streams tables, so a host installs only the harness. Each session has one Lifecycle wake job, so a turn interrupted by an eviction picks up from its last durable write: a cut-short model call is rebuilt from its stream and continued in the same message, and a cut-short tool call is reported to the model, or rerun when the tool carriesrecovery: "rerun".ThinkChatserves a session over Think'suseAgentChatWebSocket protocol. See Think harness.agents tuinow handles Cloudflare Access: for a URL behind Access, it gets a token fromcloudflared(logging in through the browser the first time) and sends it on the WebSocket upgrade.CF_ACCESS_CLIENT_ID/CF_ACCESS_CLIENT_SECRETand explicit--headercredentials still take precedence.agents tuidrops a#fragmentfrom the URL it is given, since a WebSocket URL cannot carry one. Previously such a URL made the client exit before connecting.useAgentChatreplaces a cut-off assistant reply with the server's copy after the WebSocket drops mid-stream. Think sends that copy on reconnect; AIChatAgent doesn't yet.WebChannelClient:send()andlistConversations()now reject once the client is closed instead of waiting forever.follow()andclose()also cancel a reconnect still waiting after a dropped connection, so it no longer opens a second socket that replaces the followed one or reconnects a closed client.withX402(...).paidToolnow reads the payment from MCP SDK v2 servers, and matches thePAYMENT-SIGNATURE/X-PAYMENTheaders case-insensitively.
- 0.26.x · maintenance
0.26.0
2 Oct 2026Update pi-durable and pi-ai to
^1.0.0. See Pi harness docs for details.
Dependency tracking · free for 3 projects
Know when your own dependencies move
agents had 3 security advisories in the last 12 months. Inlinr emails you the day one touches a project of yours, with the version that fixes it.
Advisories reach you
An email when a critical or high advisory affects a project, before the next install.
Upgrades checked first
Peer ranges, Node, ESM-only and types changes read before you bump.
Only what matters
Majors and breaking notes stay; patches and sibling bumps fold into one line.
Registry facts last checked 22 Oct 2026. Releases and advisories last read 22 Oct 2026.