<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Agents-Week on RockB</title><link>https://baeseokjae.github.io/tags/agents-week/</link><description>Recent content in Agents-Week on RockB</description><image><title>RockB</title><url>https://baeseokjae.github.io/images/og-default.png</url><link>https://baeseokjae.github.io/images/og-default.png</link></image><generator>Hugo</generator><language>en-us</language><lastBuildDate>Fri, 08 May 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://baeseokjae.github.io/tags/agents-week/index.xml" rel="self" type="application/rss+xml"/><item><title>Cloudflare Agents Week 2026: Dynamic Workers, Sandboxes GA, and Project Think</title><link>https://baeseokjae.github.io/posts/cloudflare-agents-week-2026/</link><pubDate>Fri, 08 May 2026 00:00:00 +0000</pubDate><guid>https://baeseokjae.github.io/posts/cloudflare-agents-week-2026/</guid><description>Cloudflare Agents Week 2026 shipped Dynamic Workers GA, Project Think, and Browser Rendering updates — a complete platform for production AI agents.</description><content:encoded><![CDATA[<p>Cloudflare Agents Week 2026 shipped five major platform capabilities in a single week: Project Think, Dynamic Workers GA, Browser Rendering API updates, an Agent Leaderboard, and significant Workers AI expansion — transforming Cloudflare from a CDN and edge network into a batteries-included platform for building, deploying, and operating production AI agents at global scale. The numbers behind the event are significant: 20 million requests routed through AI Gateway during the week, 241 billion tokens processed via Workers AI, and more than 3,683 internal users validating the platform at enterprise scale before external developers push their first agents to production.</p>
<h2 id="cloudflare-agents-week-2026-the-platform-announcements">Cloudflare Agents Week 2026: The Platform Announcements</h2>
<p>Cloudflare Agents Week 2026 represents the most coordinated set of platform announcements in the company&rsquo;s history, with every release targeting a distinct gap in the AI agent developer experience. Across April 2026, Cloudflare shipped Dynamic Workers GA for sandboxed code execution, Project Think as a framework for long-running durable agents, Browser Rendering API updates for headless browser automation, an Agent Leaderboard for community showcasing, and a major Workers AI expansion covering more models, lower latency, and expanded regional availability. The 20 million AI Gateway requests and 241 billion tokens processed through Workers AI during the week confirm that the platform absorbs real production load — these are not preview-only services. The architectural logic connecting all five releases is the same: agents in production need more than a serverless function invocation. They need durable execution that survives failures, sandboxed code generation that protects the host environment, browser control for web-native automation, and expanded model options for diverse reasoning tasks. Cloudflare&rsquo;s week of announcements is a deliberate answer to that full stack requirement, delivered on the same global edge network that already handles a significant portion of the world&rsquo;s HTTP traffic.</p>
<h2 id="dynamic-workers-ga-what-ai-safe-code-sandboxing-means-in-practice">Dynamic Workers GA: What AI-Safe Code Sandboxing Means in Practice</h2>
<p>Dynamic Workers reached general availability during Agents Week 2026, marking the end of an extended preview period and the beginning of production-ready support for sandboxed AI-generated code execution. The headline performance metric is approximately 100x faster startup and up to 100x greater memory efficiency compared to container-based alternatives. Dynamic Workers achieve this by building on V8 isolates rather than full Linux container runtimes. Where Docker or AWS Fargate require kernel namespace creation, filesystem mounting, and a full process startup for each execution context, a Dynamic Worker starts as a new V8 context inside an already-running process, sharing the V8 heap allocator while maintaining strict memory isolation between isolates. The security model inverts the default: every Dynamic Worker starts with <code>globalOutbound: null</code>, meaning no network access, no filesystem access, and no credentials. Every capability — a KV namespace, a D1 database, an outbound HTTP binding — must be explicitly granted through a binding declaration. This design makes capability auditing straightforward: the binding list is the complete and exhaustive capability set of the Dynamic Worker. For teams that need to execute LLM-generated code in production, that explicitness is the difference between a defensible architecture and an unauditable one.</p>
<p>The Execution Ladder defines three isolation tiers. Tier 0 runs in-process with the parent Worker, sharing its isolate, with direct SQLite access and zero cold start — suitable for trusted data transformation. Tier 1 runs in a separate isolate with no network access and no npm imports, providing strong isolation for LLM-generated code that only operates on in-memory data. Tier 2 runs in a fully isolated Worker with explicit network and storage bindings, and supports npm package imports via the <code>worker-bundler</code> component, which fetches packages from the registry and bundles them with esbuild at runtime. Selecting the right tier is a security architecture decision: use the lowest tier that satisfies the workload&rsquo;s capability requirements. The <code>worker-bundler</code> approach is also a supply chain security improvement over pre-installed package environments — the code bundle is sealed at execution time rather than sourced from a pre-baked image that may drift from the installed dependencies.</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-typescript" data-lang="typescript"><span style="display:flex;"><span><span style="color:#75715e">// Dynamic Worker execution example — Tier 1 for LLM-generated code
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span><span style="color:#66d9ef">const</span> <span style="color:#a6e22e">result</span> <span style="color:#f92672">=</span> <span style="color:#66d9ef">await</span> <span style="color:#a6e22e">env</span>.<span style="color:#a6e22e">DYNAMIC_WORKERS</span>.<span style="color:#a6e22e">execute</span>({
</span></span><span style="display:flex;"><span>  <span style="color:#a6e22e">code</span>: <span style="color:#66d9ef">llmGeneratedCode</span>,
</span></span><span style="display:flex;"><span>  <span style="color:#a6e22e">tier</span>: <span style="color:#66d9ef">1</span>,           <span style="color:#75715e">// no network, no npm — strong isolation
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>  <span style="color:#a6e22e">timeout</span>: <span style="color:#66d9ef">5_000</span>,    <span style="color:#75715e">// 5 second wall-clock limit
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>  <span style="color:#a6e22e">bindings</span><span style="color:#f92672">:</span> {},      <span style="color:#75715e">// explicit: nothing granted
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>});
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">// Tier 2 for code that needs npm and outbound HTTP
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span><span style="color:#66d9ef">const</span> <span style="color:#a6e22e">resultWithDeps</span> <span style="color:#f92672">=</span> <span style="color:#66d9ef">await</span> <span style="color:#a6e22e">env</span>.<span style="color:#a6e22e">DYNAMIC_WORKERS</span>.<span style="color:#a6e22e">execute</span>({
</span></span><span style="display:flex;"><span>  <span style="color:#a6e22e">code</span>: <span style="color:#66d9ef">agentScript</span>,
</span></span><span style="display:flex;"><span>  <span style="color:#a6e22e">tier</span>: <span style="color:#66d9ef">2</span>,
</span></span><span style="display:flex;"><span>  <span style="color:#a6e22e">timeout</span>: <span style="color:#66d9ef">30_000</span>,
</span></span><span style="display:flex;"><span>  <span style="color:#a6e22e">bindings</span><span style="color:#f92672">:</span> {
</span></span><span style="display:flex;"><span>    <span style="color:#a6e22e">DB</span>: <span style="color:#66d9ef">env.D1_DATABASE</span>,   <span style="color:#75715e">// explicit database grant
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>  },
</span></span><span style="display:flex;"><span>  <span style="color:#a6e22e">packages</span><span style="color:#f92672">:</span> [<span style="color:#e6db74">&#39;zod&#39;</span>, <span style="color:#e6db74">&#39;date-fns&#39;</span>],  <span style="color:#75715e">// worker-bundler fetches at runtime
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>});
</span></span></code></pre></div><p>The GA milestone matters for production teams. Preview services carry API stability caveats that prevent adoption in customer-facing systems. GA Dynamic Workers can now be used in SLAs, compliance reviews, and production incident runbooks. Cloudflare&rsquo;s own Agent Lee — the in-dashboard conversational agent — runs on Dynamic Workers, providing a real production reference implementation that validates the runtime under actual load.</p>
<h2 id="project-think-the-framework-for-long-running-durable-ai-agents">Project Think: The Framework for Long-Running Durable AI Agents</h2>
<p>Project Think is Cloudflare&rsquo;s next-generation Agents SDK framework, designed to replace stateless function invocations with durable execution contexts that persist across network interruptions, model timeouts, and multi-step reasoning chains. The core observation driving Project Think is that production AI agents fail not because the AI models are insufficient, but because the execution infrastructure has no durability guarantees. A 20-step research workflow that hits a model API timeout on step 14 has historically meant restarting from zero. Project Think eliminates that failure mode with three primitives: Fibers for durable execution, Facets for modular sub-agents, and Sessions for tree-structured conversation management. As of Agents Week 2026, Project Think is in preview with APIs subject to change as developer feedback is incorporated. The framework runs on Durable Objects, giving every Fiber access to co-located SQLite storage without cross-datacenter round-trips. Facet-to-Facet RPC latency is comparable to in-process function calls rather than HTTP hops, which makes deeply modular agent architectures practical at scale without accumulating network latency at every coordination point.</p>
<p>Fibers are persistent execution contexts that serialize their local state to Cloudflare&rsquo;s distributed storage whenever they suspend — waiting for an LLM response, a tool result, or a human confirmation. When the blocking operation completes, the Fiber resumes with full context intact, in under a second, with no explicit checkpointing code required in the application layer. An agent orchestrating a 20-step research workflow can pause for 30 minutes waiting for an async tool call and resume transparently. Facets are sub-agents implemented as Durable Objects, addressable by stable identifiers, spawnable in parallel across Cloudflare&rsquo;s global network, and capable of maintaining isolated state. A parent Fiber delegates to Facets for parallelism: one Facet scrapes, another validates schema, a third writes results — with minimal coordination overhead because RPC replaces HTTP. Sessions replace flat conversation histories with tree-structured branching, enabling agents to explore multiple reasoning paths simultaneously and merge results or select the highest-confidence branch.</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-typescript" data-lang="typescript"><span style="display:flex;"><span><span style="color:#66d9ef">import</span> { <span style="color:#a6e22e">createFiber</span> } <span style="color:#66d9ef">from</span> <span style="color:#e6db74">&#39;@cloudflare/agents-think&#39;</span>;
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">export</span> <span style="color:#66d9ef">default</span> {
</span></span><span style="display:flex;"><span>  <span style="color:#66d9ef">async</span> <span style="color:#a6e22e">fetch</span>(<span style="color:#a6e22e">request</span>: <span style="color:#66d9ef">Request</span>, <span style="color:#a6e22e">env</span>: <span style="color:#66d9ef">Env</span>) {
</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">const</span> <span style="color:#a6e22e">fiber</span> <span style="color:#f92672">=</span> <span style="color:#66d9ef">await</span> <span style="color:#a6e22e">createFiber</span>(<span style="color:#a6e22e">env</span>.<span style="color:#a6e22e">FIBERS</span>, <span style="color:#e6db74">&#39;research-task&#39;</span>);
</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">await</span> <span style="color:#a6e22e">fiber</span>.<span style="color:#a6e22e">run</span>(<span style="color:#66d9ef">async</span> (<span style="color:#a6e22e">ctx</span>) <span style="color:#f92672">=&gt;</span> {
</span></span><span style="display:flex;"><span>      <span style="color:#66d9ef">const</span> <span style="color:#a6e22e">research</span> <span style="color:#f92672">=</span> <span style="color:#66d9ef">await</span> <span style="color:#a6e22e">ctx</span>.<span style="color:#a6e22e">llm</span>.<span style="color:#a6e22e">generate</span>(<span style="color:#e6db74">&#39;Research AI infrastructure trends&#39;</span>);
</span></span><span style="display:flex;"><span>      <span style="color:#66d9ef">await</span> <span style="color:#a6e22e">ctx</span>.<span style="color:#a6e22e">sleep</span>(<span style="color:#ae81ff">60</span><span style="color:#a6e22e">_000</span>); <span style="color:#75715e">// pause without timing out the Worker
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>      <span style="color:#66d9ef">const</span> <span style="color:#a6e22e">summary</span> <span style="color:#f92672">=</span> <span style="color:#66d9ef">await</span> <span style="color:#a6e22e">ctx</span>.<span style="color:#a6e22e">llm</span>.<span style="color:#a6e22e">generate</span>(<span style="color:#e6db74">`Synthesize: </span><span style="color:#e6db74">${</span><span style="color:#a6e22e">research</span><span style="color:#e6db74">}</span><span style="color:#e6db74">`</span>);
</span></span><span style="display:flex;"><span>      <span style="color:#66d9ef">await</span> <span style="color:#a6e22e">ctx</span>.<span style="color:#a6e22e">storage</span>.<span style="color:#a6e22e">put</span>(<span style="color:#e6db74">&#39;result&#39;</span>, <span style="color:#a6e22e">summary</span>);
</span></span><span style="display:flex;"><span>    });
</span></span><span style="display:flex;"><span>  }
</span></span><span style="display:flex;"><span>}
</span></span></code></pre></div><p>The shift from &ldquo;SDK primitives&rdquo; to &ldquo;batteries-included execution framework&rdquo; reflects Cloudflare&rsquo;s observation that the hard part of building production agents is not the LLM call — it is everything around it: state persistence, failure recovery, sub-agent coordination, and conversation history management across sessions that span hours or days.</p>
<h2 id="browser-rendering-api-headless-browser-automation-for-agents">Browser Rendering API: Headless Browser Automation for Agents</h2>
<p>The Browser Rendering API received a significant update during Agents Week 2026, expanding from a screenshot-and-PDF service into a full headless browser automation layer designed for autonomous agent workflows. The most significant capability additions are Live View, which streams real-time browser activity directly to the Cloudflare dashboard or embeddable UIs; Human in the Loop, which pauses execution at defined checkpoints for human verification or input before the agent proceeds; full Chrome DevTools Protocol access for advanced automation beyond Puppeteer&rsquo;s public API surface; and session recordings that capture complete interaction histories for debugging and replay. The concurrency improvement is a concrete production enabler: Browser Rendering now supports 4x higher concurrent session limits than its previous version, making large-scale parallel web research agents and scraping pipelines practical without queuing on tight limits. Cloudflare manages the entire browser fleet — security patches, browser version updates, crash recovery — so development teams operating agents on Browser Rendering pay no infrastructure cost for running headless Chrome at scale. For developers who previously ran Playwright or Puppeteer on self-managed Kubernetes clusters of Chrome instances, the Browser Rendering API replaces that entire infrastructure layer while adding observability features — session recordings, live streaming, human-in-the-loop interrupts — that previously required significant custom tooling investment.</p>
<p>Human in the Loop is particularly relevant for enterprise agent deployments that touch authenticated systems. When an agent encounters a CAPTCHA, a two-factor authentication prompt, or a form requiring explicit human authorization before submission, execution pauses and the user receives a notification. The user completes the action directly in the Live View streaming window, and the agent resumes. This makes Browser Rendering compliant with enterprise audit requirements that prohibit fully unattended access to sensitive systems. Session recordings capture every network request, DOM mutation, JavaScript evaluation, and screenshot in a structured format that can be replayed or diffed — when an agent fails on step 37 of a 40-step checkout automation, the recording identifies the exact failure point and DOM state without requiring a re-run.</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-typescript" data-lang="typescript"><span style="display:flex;"><span><span style="color:#66d9ef">const</span> <span style="color:#a6e22e">browser</span> <span style="color:#f92672">=</span> <span style="color:#66d9ef">await</span> <span style="color:#a6e22e">env</span>.<span style="color:#a6e22e">BROWSER</span>.<span style="color:#a6e22e">launch</span>();
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">const</span> <span style="color:#a6e22e">page</span> <span style="color:#f92672">=</span> <span style="color:#66d9ef">await</span> <span style="color:#a6e22e">browser</span>.<span style="color:#a6e22e">newPage</span>();
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">await</span> <span style="color:#a6e22e">page</span>.<span style="color:#66d9ef">goto</span>(<span style="color:#e6db74">&#39;https://example.com/checkout&#39;</span>);
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#75715e">// Pause for human confirmation before a sensitive action
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span><span style="color:#66d9ef">const</span> <span style="color:#a6e22e">approval</span> <span style="color:#f92672">=</span> <span style="color:#66d9ef">await</span> <span style="color:#a6e22e">env</span>.<span style="color:#a6e22e">HITL</span>.<span style="color:#a6e22e">requestApproval</span>({
</span></span><span style="display:flex;"><span>  <span style="color:#a6e22e">message</span><span style="color:#f92672">:</span> <span style="color:#e6db74">&#39;Confirm purchase: $299 for Pro subscription&#39;</span>,
</span></span><span style="display:flex;"><span>  <span style="color:#a6e22e">timeout</span>: <span style="color:#66d9ef">300_000</span>,
</span></span><span style="display:flex;"><span>});
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">if</span> (<span style="color:#a6e22e">approval</span>.<span style="color:#a6e22e">approved</span>) {
</span></span><span style="display:flex;"><span>  <span style="color:#66d9ef">await</span> <span style="color:#a6e22e">page</span>.<span style="color:#a6e22e">click</span>(<span style="color:#e6db74">&#39;#confirm-purchase&#39;</span>);
</span></span><span style="display:flex;"><span>}
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">await</span> <span style="color:#a6e22e">browser</span>.<span style="color:#a6e22e">close</span>();
</span></span></code></pre></div><h2 id="workers-ai-model-expansion-and-performance-improvements">Workers AI: Model Expansion and Performance Improvements</h2>
<p>Workers AI expanded significantly during Agents Week 2026, adding new model options, reducing inference latency, and extending regional availability across Cloudflare&rsquo;s 300-plus data center network. The expansion covers both open-weight models available through the Workers AI inference layer and the models powering AI Gateway routing for third-party providers. The driving goal is to give agent developers access to the right model for each layer of their architecture — a fast, low-latency model for classification and routing decisions, a mid-tier model for summarization and extraction, and a high-capability model for complex reasoning — all within a single platform without requiring separate inference infrastructure for each tier. Lower latency at the edge matters for agent architectures that chain multiple LLM calls sequentially: every millisecond of inference latency compounds across the call graph. Expanded regional availability reduces the geographic distance between the agent&rsquo;s Durable Object state and its inference provider, which is particularly relevant for latency-sensitive user-facing agents. Workers AI&rsquo;s unified billing and quota model also simplifies cost management for teams running multiple agent types: one bill, one quota pool, consistent monitoring across all model usage.</p>
<p>The AI Gateway component processed 20 million requests during Agents Week alone, demonstrating that the routing, caching, and fallback layer is operating at production scale. AI Gateway adds request logging, cost tracking, rate limiting, and provider fallback to any LLM API call routed through it — capabilities that previously required custom middleware or third-party services. For agents that call multiple LLM providers depending on task requirements, AI Gateway provides a single control plane for observability and policy enforcement without per-provider integration work.</p>
<h2 id="the-241-billion-token-milestone-cloudflares-own-ai-infrastructure">The 241 Billion Token Milestone: Cloudflare&rsquo;s Own AI Infrastructure</h2>
<p>The 241 billion tokens processed through Workers AI during Agents Week 2026 is not just a marketing number — it is a validation data point for the platform&rsquo;s production readiness at scale. To put the figure in context: 241 billion tokens at average output token lengths implies billions of individual LLM interactions, processed across Cloudflare&rsquo;s global edge network during a single week. The 3,683-plus internal users leveraging the platform during the same period confirms that Cloudflare&rsquo;s own engineering teams are running real workloads on the infrastructure they are asking external developers to adopt. Internal adoption at this scale is a meaningful signal because internal teams have access to private context about platform reliability, failure modes, and operational characteristics that external developers cannot see before committing to a platform. When Cloudflare&rsquo;s own agents — including Agent Lee, the in-dashboard conversational assistant — run on Dynamic Workers, Durable Objects, and Workers AI, the platform absorbs production traffic patterns, not just benchmark workloads.</p>
<p>The 20 million AI Gateway requests provide a parallel data point for the routing and observability layer. AI Gateway sits between agent code and LLM provider APIs, handling caching, fallback routing, rate limiting, and cost tracking. Twenty million requests through that layer in a week represents a steady production traffic pattern, not a spike from a single large customer. For developers evaluating Cloudflare&rsquo;s agent platform against alternatives, these internal usage figures are the most credible performance evidence available before committing to the platform in production.</p>
<h2 id="building-on-cloudflares-agent-platform-getting-started">Building on Cloudflare&rsquo;s Agent Platform: Getting Started</h2>
<p>Getting started with Cloudflare&rsquo;s agent platform in 2026 means selecting the right combination of primitives for the agent&rsquo;s workload pattern. Stateless, single-step agents that invoke an LLM and return a response can run as standard Workers with a Workers AI binding — no additional primitives required. Multi-step agents that need to survive failures and maintain state across long operations should use Project Think&rsquo;s Fiber primitive, which provides durability with no explicit checkpointing code. Agents that need to parallelize subtasks across multiple specialized components should add Facets, with each Facet implementing a distinct capability as a Durable Object. Agents that generate and execute code as part of their reasoning loop should use Dynamic Workers at the appropriate tier for their security requirements. Agents that interact with web interfaces should use the Browser Rendering API, with Human in the Loop enabled for any workflow that touches authenticated systems or requires human confirmation before consequential actions.</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-typescript" data-lang="typescript"><span style="display:flex;"><span><span style="color:#66d9ef">import</span> { <span style="color:#a6e22e">createFiber</span> } <span style="color:#66d9ef">from</span> <span style="color:#e6db74">&#39;@cloudflare/agents-think&#39;</span>;
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">interface</span> <span style="color:#a6e22e">Env</span> {
</span></span><span style="display:flex;"><span>  <span style="color:#a6e22e">FIBERS</span>: <span style="color:#66d9ef">DurableObjectNamespace</span>;
</span></span><span style="display:flex;"><span>  <span style="color:#a6e22e">BROWSER</span>: <span style="color:#66d9ef">BrowserWorker</span>;
</span></span><span style="display:flex;"><span>  <span style="color:#a6e22e">AI</span>: <span style="color:#66d9ef">Ai</span>;
</span></span><span style="display:flex;"><span>  <span style="color:#a6e22e">KV</span>: <span style="color:#66d9ef">KVNamespace</span>;
</span></span><span style="display:flex;"><span>  <span style="color:#a6e22e">DYNAMIC_WORKERS</span>: <span style="color:#66d9ef">DynamicWorkerBinding</span>;
</span></span><span style="display:flex;"><span>}
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">export</span> <span style="color:#66d9ef">default</span> {
</span></span><span style="display:flex;"><span>  <span style="color:#66d9ef">async</span> <span style="color:#a6e22e">fetch</span>(<span style="color:#a6e22e">request</span>: <span style="color:#66d9ef">Request</span>, <span style="color:#a6e22e">env</span>: <span style="color:#66d9ef">Env</span>)<span style="color:#f92672">:</span> <span style="color:#a6e22e">Promise</span>&lt;<span style="color:#f92672">Response</span>&gt; {
</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">const</span> { <span style="color:#a6e22e">topic</span> } <span style="color:#f92672">=</span> <span style="color:#66d9ef">await</span> <span style="color:#a6e22e">request</span>.<span style="color:#a6e22e">json</span><span style="color:#f92672">&lt;</span>{ <span style="color:#a6e22e">topic</span>: <span style="color:#66d9ef">string</span> }<span style="color:#f92672">&gt;</span>();
</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">const</span> <span style="color:#a6e22e">fiber</span> <span style="color:#f92672">=</span> <span style="color:#66d9ef">await</span> <span style="color:#a6e22e">createFiber</span>(<span style="color:#a6e22e">env</span>.<span style="color:#a6e22e">FIBERS</span>, <span style="color:#e6db74">`research-</span><span style="color:#e6db74">${</span>Date.<span style="color:#a6e22e">now</span>()<span style="color:#e6db74">}</span><span style="color:#e6db74">`</span>);
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">const</span> <span style="color:#a6e22e">result</span> <span style="color:#f92672">=</span> <span style="color:#66d9ef">await</span> <span style="color:#a6e22e">fiber</span>.<span style="color:#a6e22e">run</span>(<span style="color:#66d9ef">async</span> (<span style="color:#a6e22e">ctx</span>) <span style="color:#f92672">=&gt;</span> {
</span></span><span style="display:flex;"><span>      <span style="color:#75715e">// Step 1: Web research via Browser Rendering
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>      <span style="color:#66d9ef">const</span> <span style="color:#a6e22e">browser</span> <span style="color:#f92672">=</span> <span style="color:#66d9ef">await</span> <span style="color:#a6e22e">env</span>.<span style="color:#a6e22e">BROWSER</span>.<span style="color:#a6e22e">launch</span>();
</span></span><span style="display:flex;"><span>      <span style="color:#66d9ef">const</span> <span style="color:#a6e22e">page</span> <span style="color:#f92672">=</span> <span style="color:#66d9ef">await</span> <span style="color:#a6e22e">browser</span>.<span style="color:#a6e22e">newPage</span>();
</span></span><span style="display:flex;"><span>      <span style="color:#66d9ef">await</span> <span style="color:#a6e22e">page</span>.<span style="color:#66d9ef">goto</span>(<span style="color:#e6db74">`https://search.example.com?q=</span><span style="color:#e6db74">${</span>encodeURIComponent(<span style="color:#a6e22e">topic</span>)<span style="color:#e6db74">}</span><span style="color:#e6db74">`</span>);
</span></span><span style="display:flex;"><span>      <span style="color:#66d9ef">const</span> <span style="color:#a6e22e">urls</span> <span style="color:#f92672">=</span> <span style="color:#66d9ef">await</span> <span style="color:#a6e22e">page</span>.<span style="color:#a6e22e">$$eval</span>(<span style="color:#e6db74">&#39;.result-link&#39;</span>, <span style="color:#a6e22e">els</span> <span style="color:#f92672">=&gt;</span> <span style="color:#a6e22e">els</span>.<span style="color:#a6e22e">map</span>(<span style="color:#a6e22e">e</span> <span style="color:#f92672">=&gt;</span> (<span style="color:#a6e22e">e</span> <span style="color:#66d9ef">as</span> <span style="color:#a6e22e">HTMLAnchorElement</span>).<span style="color:#a6e22e">href</span>));
</span></span><span style="display:flex;"><span>      <span style="color:#66d9ef">await</span> <span style="color:#a6e22e">browser</span>.<span style="color:#a6e22e">close</span>();
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>      <span style="color:#75715e">// Step 2: Parallel Facets for summarization
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>      <span style="color:#66d9ef">const</span> <span style="color:#a6e22e">summaries</span> <span style="color:#f92672">=</span> <span style="color:#66d9ef">await</span> <span style="color:#a6e22e">Promise</span>.<span style="color:#a6e22e">all</span>(
</span></span><span style="display:flex;"><span>        <span style="color:#a6e22e">urls</span>.<span style="color:#a6e22e">slice</span>(<span style="color:#ae81ff">0</span>, <span style="color:#ae81ff">5</span>).<span style="color:#a6e22e">map</span>(<span style="color:#a6e22e">url</span> <span style="color:#f92672">=&gt;</span> <span style="color:#a6e22e">ctx</span>.<span style="color:#a6e22e">facet</span>(<span style="color:#e6db74">&#39;summarizer&#39;</span>).<span style="color:#a6e22e">summarize</span>(<span style="color:#a6e22e">url</span>))
</span></span><span style="display:flex;"><span>      );
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>      <span style="color:#75715e">// Step 3: Dynamic Worker Tier 1 for safe data transformation
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>      <span style="color:#66d9ef">const</span> <span style="color:#a6e22e">processed</span> <span style="color:#f92672">=</span> <span style="color:#66d9ef">await</span> <span style="color:#a6e22e">env</span>.<span style="color:#a6e22e">DYNAMIC_WORKERS</span>.<span style="color:#a6e22e">execute</span>({
</span></span><span style="display:flex;"><span>        <span style="color:#a6e22e">code</span><span style="color:#f92672">:</span> <span style="color:#e6db74">`module.exports = (data) =&gt; data.filter(s =&gt; s.length &gt; 50).join(&#39; &#39;)`</span>,
</span></span><span style="display:flex;"><span>        <span style="color:#a6e22e">tier</span>: <span style="color:#66d9ef">1</span>,
</span></span><span style="display:flex;"><span>        <span style="color:#a6e22e">timeout</span>: <span style="color:#66d9ef">5_000</span>,
</span></span><span style="display:flex;"><span>        <span style="color:#a6e22e">input</span>: <span style="color:#66d9ef">summaries</span>,
</span></span><span style="display:flex;"><span>      });
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>      <span style="color:#75715e">// Step 4: AI synthesis
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span>      <span style="color:#66d9ef">const</span> <span style="color:#a6e22e">synthesis</span> <span style="color:#f92672">=</span> <span style="color:#66d9ef">await</span> <span style="color:#a6e22e">env</span>.<span style="color:#a6e22e">AI</span>.<span style="color:#a6e22e">run</span>(<span style="color:#e6db74">&#39;@cf/meta/llama-3-70b&#39;</span>, {
</span></span><span style="display:flex;"><span>        <span style="color:#a6e22e">messages</span><span style="color:#f92672">:</span> [{ <span style="color:#a6e22e">role</span><span style="color:#f92672">:</span> <span style="color:#e6db74">&#39;user&#39;</span>, <span style="color:#a6e22e">content</span><span style="color:#f92672">:</span> <span style="color:#e6db74">`Synthesize these research summaries: </span><span style="color:#e6db74">${</span><span style="color:#a6e22e">processed</span><span style="color:#e6db74">}</span><span style="color:#e6db74">`</span> }]
</span></span><span style="display:flex;"><span>      });
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>      <span style="color:#66d9ef">await</span> <span style="color:#a6e22e">env</span>.<span style="color:#a6e22e">KV</span>.<span style="color:#a6e22e">put</span>(<span style="color:#e6db74">`research:</span><span style="color:#e6db74">${</span><span style="color:#a6e22e">topic</span><span style="color:#e6db74">}</span><span style="color:#e6db74">`</span>, <span style="color:#a6e22e">JSON</span>.<span style="color:#a6e22e">stringify</span>(<span style="color:#a6e22e">synthesis</span>));
</span></span><span style="display:flex;"><span>      <span style="color:#66d9ef">return</span> <span style="color:#a6e22e">synthesis</span>;
</span></span><span style="display:flex;"><span>    });
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">return</span> <span style="color:#a6e22e">Response</span>.<span style="color:#a6e22e">json</span>({ <span style="color:#a6e22e">result</span> });
</span></span><span style="display:flex;"><span>  }
</span></span><span style="display:flex;"><span>};
</span></span></code></pre></div><p>The Workers CLI (<code>wrangler</code>) handles local development, deployment, and secret management for all these primitives. The <code>wrangler dev</code> command runs a local simulation of Durable Objects, KV, D1, and the Workers AI binding, which makes the full agent stack testable without deploying to Cloudflare&rsquo;s network during development.</p>
<h2 id="how-cloudflare-compares-to-aws-and-azure-for-ai-agent-infrastructure">How Cloudflare Compares to AWS and Azure for AI Agent Infrastructure</h2>
<p>Cloudflare&rsquo;s agent platform competes directly with AWS Bedrock Agents and Azure AI Agent Service for the production AI agent infrastructure market, and the comparison reveals meaningful architectural differences. AWS Bedrock Agents provides a managed orchestration layer built on Lambda, with agent definitions stored in a proprietary JSON format and execution backed by AWS&rsquo;s regional container infrastructure. Cold starts on Lambda — even with provisioned concurrency — run in the hundreds of milliseconds range for Node.js runtimes. Azure AI Agent Service follows a similar pattern: managed orchestration, regional execution, container-backed isolation. Both services inherit the IAM permission model of their respective clouds, where Lambda functions and Azure Functions start with broad execution roles that teams then restrict through policy. Cloudflare&rsquo;s approach inverts the default at every layer: isolate-based execution with microsecond cold starts, zero-permission-by-default with explicit binding grants, and a global network that places execution near users without regional routing configuration.</p>
<p>The cost model also differs in ways that favor agent workloads specifically. Dynamic Workers bill on CPU time, not wall-clock duration, which means an agent that waits 10 minutes for an LLM response while suspended in a Fiber pays nearly nothing for that wait — the Worker is not consuming CPU. AWS Lambda bills on duration even when the function is blocked on an awaited promise, which can make long-running agent patterns unexpectedly expensive. Durable Objects bill on storage and compute duration, with storage often dominating for stateful agents — a predictable cost structure that is easier to model than container instance pricing. The tradeoff is ecosystem depth: AWS and Azure offer broader managed service integrations, more mature compliance certifications, and longer enterprise track records. Cloudflare&rsquo;s edge is performance, the isolate security model, and a developer experience designed from the ground up for the agentic workload pattern rather than adapted from traditional serverless.</p>
<h2 id="faq">FAQ</h2>
<p><strong>Q: What is the difference between Project Think and the existing Cloudflare Agents SDK?</strong></p>
<p>Project Think is the next generation of the Cloudflare Agents SDK, upgrading from a lightweight primitives layer to a full execution framework. It introduces Fibers for durable execution that survives failures and timeouts, Facets for modular sub-agents implemented as Durable Objects with low-latency RPC communication, and Sessions for tree-structured conversation management with branching support. The previous SDK required developers to implement state persistence and sub-agent coordination manually. Project Think provides those capabilities at the platform level. As of April 2026, it is in preview with APIs subject to change based on developer feedback.</p>
<p><strong>Q: How does Dynamic Workers differ from container-based code execution like AWS Fargate or Docker?</strong></p>
<p>Dynamic Workers build on V8 isolates rather than Linux container runtimes. Container cold starts involve kernel namespace creation, filesystem mounting, and a full process startup — measured in seconds. Dynamic Worker cold starts spin up a new V8 context inside an already-running process — measured in milliseconds, approximately 100x faster. Memory overhead follows the same ratio: containers carry megabytes of process overhead per instance, while isolates carry kilobytes. The security model is also inverted: Dynamic Workers start with zero permissions and require explicit binding grants for every resource, whereas Lambda and Fargate tasks start with an IAM execution role that developers restrict. The explicit binding model makes capability auditing straightforward for security teams reviewing AI-generated code execution in production.</p>
<p><strong>Q: What does the Human in the Loop feature in Browser Rendering API actually do?</strong></p>
<p>When an agent navigating a website reaches a checkpoint that requires human input — a CAPTCHA, a two-factor authentication prompt, a high-stakes form submission — it pauses execution and notifies the designated user or developer. The Live View streaming window shows the current browser state, and the human completes the action directly in that window before the agent resumes. This is not a polling mechanism: the agent suspends cleanly and resumes with full context once the human signals completion. For enterprise deployments that must comply with audit requirements prohibiting fully unattended access to sensitive systems, Human in the Loop makes Browser Rendering usable in those environments without requiring a separate automation governance layer.</p>
<p><strong>Q: How does Cloudflare&rsquo;s AI Gateway relate to Workers AI, and why does the 20M request figure matter?</strong></p>
<p>AI Gateway is a routing, caching, and observability layer that sits between agent code and LLM provider APIs — both Cloudflare&rsquo;s own Workers AI models and third-party providers like OpenAI, Anthropic, and Google. It adds request logging, cost tracking, rate limiting, semantic caching, and provider fallback without requiring changes to individual LLM API calls. The 20 million requests routed through AI Gateway during Agents Week represent real production traffic across those capabilities, not benchmark load. For agent developers, this confirms that AI Gateway&rsquo;s routing and fallback logic is validated at meaningful scale — critical for agents that rely on provider fallback when a primary LLM API is degraded.</p>
<p><strong>Q: What is the Agent Leaderboard and how do developers submit agents to it?</strong></p>
<p>The Agent Leaderboard is a community showcase of agents built on Cloudflare&rsquo;s platform, launched during Agents Week 2026 to surface real-world implementations across different domains — research agents, automation agents, customer-facing conversational agents, and developer tooling. Developers submit agents through the Cloudflare developer community portal with a description of what the agent does, which platform primitives it uses, and public source code or a demo link. The Leaderboard serves both as inspiration for developers evaluating what is buildable on the platform and as a reference library of working implementations using Project Think, Dynamic Workers, and Browser Rendering in combination.</p>
]]></content:encoded></item></channel></rss>