<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>Writing by Kai Bitterschulte</title>
  <subtitle>AI agents, AI security and architecture on Cloudflare</subtitle>
  <link href="https://kai.zone/feed.xml" rel="self" type="application/atom+xml"/>
  <link href="https://kai.zone/" rel="alternate" type="text/html"/>
  <id>https://kai.zone/</id>
  <updated>2026-10-28T00:00:00Z</updated>
  <author><name>Kai Bitterschulte</name><uri>https://kai.zone/</uri></author>
  <entry>
    <title>AI on Cloudflare: a decision guide</title>
    <link href="https://kai.zone/writing/ai-on-cloudflare-decision-guide/" rel="alternate" type="text/html"/>
    <id>https://kai.zone/writing/ai-on-cloudflare-decision-guide/</id>
    <published>2026-10-07T00:00:00Z</published>
    <updated>2026-10-28T00:00:00Z</updated>
    <summary>Two questions decide which Cloudflare products you need for AI and whether to build an agent. The guide has three parts.</summary>
    <content type="html">&lt;p&gt;This guide covers which Cloudflare products to put in place for AI, and in which order.&lt;/p&gt;
&lt;p&gt;Every AI setup has the same shape: someone acts, the AI runs in a session, it reaches models, tools and private systems through gates, and everything is logged. &lt;a href=&quot;https://kai.zone/writing/cloudflare-ai-choose-your-path/#the-shape-of-every-ai-setup&quot;&gt;Step 1&lt;/a&gt; starts with that picture.&lt;/p&gt;
&lt;h2 id=&quot;start-with-two-questions&quot;&gt;&lt;a class=&quot;anchor&quot; href=&quot;#start-with-two-questions&quot;&gt;Start with two questions&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Do you build AI yourself, or use AI that someone else built? And who is affected, your customers or your employees? The answers give four cases.&lt;/p&gt;
&lt;figure class=&quot;fig diagram&quot;&gt;&lt;svg class=&quot;min&quot; viewBox=&quot;0 0 1280 520&quot; role=&quot;img&quot; aria-label=&quot;First decision: building or adopting AI, and who is exposed&quot;&gt;
        &lt;g class=&quot;edge&quot;&gt;
          &lt;path d=&quot;M560 82 L330 146&quot; marker-end=&quot;url(#ar)&quot;/&gt;
          &lt;path d=&quot;M720 82 L950 146&quot; marker-end=&quot;url(#ar)&quot;/&gt;
          &lt;path d=&quot;M250 212 L175 288&quot; marker-end=&quot;url(#ar)&quot;/&gt;
          &lt;path d=&quot;M390 212 L465 288&quot; marker-end=&quot;url(#ar)&quot;/&gt;
          &lt;path d=&quot;M890 212 L815 288&quot; marker-end=&quot;url(#ar)&quot;/&gt;
          &lt;path d=&quot;M1030 212 L1105 288&quot; marker-end=&quot;url(#ar)&quot;/&gt;
        &lt;/g&gt;
        &lt;g class=&quot;yn&quot;&gt;
          &lt;text x=&quot;420&quot; y=&quot;106&quot;&gt;Building&lt;/text&gt;&lt;text x=&quot;800&quot; y=&quot;106&quot;&gt;Adopting&lt;/text&gt;
          &lt;text x=&quot;62&quot; y=&quot;250&quot;&gt;Your customers use it&lt;/text&gt;&lt;text x=&quot;350&quot; y=&quot;250&quot;&gt;Your staff use it&lt;/text&gt;
          &lt;text x=&quot;682&quot; y=&quot;250&quot;&gt;Your staff use the tools&lt;/text&gt;&lt;text x=&quot;1018&quot; y=&quot;250&quot;&gt;Bots visit your sites&lt;/text&gt;
        &lt;/g&gt;
        &lt;rect class=&quot;q&quot; x=&quot;430&quot; y=&quot;20&quot; width=&quot;420&quot; height=&quot;62&quot; rx=&quot;10&quot;/&gt;
        &lt;text class=&quot;qt&quot; x=&quot;640&quot; y=&quot;47&quot; text-anchor=&quot;middle&quot;&gt;Are you building AI,&lt;/text&gt;
        &lt;text class=&quot;qt&quot; x=&quot;640&quot; y=&quot;68&quot; text-anchor=&quot;middle&quot;&gt;or adopting AI that someone else built?&lt;/text&gt;
        &lt;rect class=&quot;q&quot; x=&quot;170&quot; y=&quot;148&quot; width=&quot;320&quot; height=&quot;64&quot; rx=&quot;10&quot;/&gt;
        &lt;text class=&quot;qt&quot; x=&quot;330&quot; y=&quot;175&quot; text-anchor=&quot;middle&quot;&gt;Who uses what you build?&lt;/text&gt;
        &lt;text class=&quot;s&quot; x=&quot;330&quot; y=&quot;196&quot; text-anchor=&quot;middle&quot;&gt;your customers, or your staff and operations&lt;/text&gt;
        &lt;rect class=&quot;q&quot; x=&quot;790&quot; y=&quot;148&quot; width=&quot;320&quot; height=&quot;64&quot; rx=&quot;10&quot;/&gt;
        &lt;text class=&quot;qt&quot; x=&quot;950&quot; y=&quot;175&quot; text-anchor=&quot;middle&quot;&gt;Who is exposed?&lt;/text&gt;
        &lt;text class=&quot;s&quot; x=&quot;950&quot; y=&quot;196&quot; text-anchor=&quot;middle&quot;&gt;your staff using SaaS AI, or your own sites&lt;/text&gt;
        &lt;a aria-label=&quot;A. AI in your product: where to read next&quot; href=&quot;https://kai.zone/writing/cloudflare-ai-choose-your-path/#a2-the-control-map-which-product-guards-which-traffic&quot;&gt;&lt;rect class=&quot;o-sec&quot; x=&quot;25&quot; y=&quot;290&quot; width=&quot;300&quot; height=&quot;170&quot; rx=&quot;10&quot;/&gt;&lt;/a&gt;
        &lt;text class=&quot;t&quot; x=&quot;175&quot; y=&quot;318&quot; text-anchor=&quot;middle&quot;&gt;A. AI in your product&lt;/text&gt;
        &lt;text class=&quot;s&quot; x=&quot;175&quot; y=&quot;344&quot; text-anchor=&quot;middle&quot;&gt;Public AI endpoints, prompts&lt;/text&gt;
        &lt;text class=&quot;s&quot; x=&quot;175&quot; y=&quot;362&quot; text-anchor=&quot;middle&quot;&gt;from the internet&lt;/text&gt;
        &lt;text class=&quot;m&quot; x=&quot;175&quot; y=&quot;392&quot; text-anchor=&quot;middle&quot;&gt;AI Security for Apps, WAF,&lt;/text&gt;
        &lt;text class=&quot;m&quot; x=&quot;175&quot; y=&quot;408&quot; text-anchor=&quot;middle&quot;&gt;Bots, AI Gateway&lt;/text&gt;
        &lt;text class=&quot;s&quot; x=&quot;175&quot; y=&quot;438&quot; text-anchor=&quot;middle&quot;&gt;Build it with Part B&lt;/text&gt;
        &lt;a aria-label=&quot;B. Internal AI you build: where to read next&quot; href=&quot;https://kai.zone/writing/cloudflare-ai-choose-your-path/#a4-internal-it-and-engineering-the-governed-agent-workspace&quot;&gt;&lt;rect class=&quot;o-rt&quot; x=&quot;335&quot; y=&quot;290&quot; width=&quot;300&quot; height=&quot;170&quot; rx=&quot;10&quot;/&gt;&lt;/a&gt;
        &lt;text class=&quot;t&quot; x=&quot;485&quot; y=&quot;318&quot; text-anchor=&quot;middle&quot;&gt;B. Internal AI you build&lt;/text&gt;
        &lt;text class=&quot;s&quot; x=&quot;485&quot; y=&quot;344&quot; text-anchor=&quot;middle&quot;&gt;Copilots, agents, engineering&lt;/text&gt;
        &lt;text class=&quot;s&quot; x=&quot;485&quot; y=&quot;362&quot; text-anchor=&quot;middle&quot;&gt;and IT automation&lt;/text&gt;
        &lt;text class=&quot;m&quot; x=&quot;485&quot; y=&quot;392&quot; text-anchor=&quot;middle&quot;&gt;Access, AI Gateway, MCP portal,&lt;/text&gt;
        &lt;text class=&quot;m&quot; x=&quot;485&quot; y=&quot;408&quot; text-anchor=&quot;middle&quot;&gt;DLP, Mesh or Tunnel&lt;/text&gt;
        &lt;text class=&quot;s&quot; x=&quot;485&quot; y=&quot;438&quot; text-anchor=&quot;middle&quot;&gt;Cloudflare OS (A6) or Part B&lt;/text&gt;
        &lt;a aria-label=&quot;C. Your staff use third-party AI: where to read next&quot; href=&quot;https://kai.zone/writing/cloudflare-ai-choose-your-path/#a2-the-control-map-which-product-guards-which-traffic&quot;&gt;&lt;rect class=&quot;o-sec&quot; x=&quot;665&quot; y=&quot;290&quot; width=&quot;300&quot; height=&quot;170&quot; rx=&quot;10&quot;/&gt;&lt;/a&gt;
        &lt;text class=&quot;t&quot; x=&quot;815&quot; y=&quot;318&quot; text-anchor=&quot;middle&quot;&gt;C. Your staff use third-party AI&lt;/text&gt;
        &lt;text class=&quot;s&quot; x=&quot;815&quot; y=&quot;344&quot; text-anchor=&quot;middle&quot;&gt;ChatGPT, Claude, Gemini,&lt;/text&gt;
        &lt;text class=&quot;s&quot; x=&quot;815&quot; y=&quot;362&quot; text-anchor=&quot;middle&quot;&gt;Copilot, coding assistants&lt;/text&gt;
        &lt;text class=&quot;m&quot; x=&quot;815&quot; y=&quot;392&quot; text-anchor=&quot;middle&quot;&gt;Shadow IT, Gateway policies,&lt;/text&gt;
        &lt;text class=&quot;m&quot; x=&quot;815&quot; y=&quot;408&quot; text-anchor=&quot;middle&quot;&gt;DLP, CASB&lt;/text&gt;
        &lt;text class=&quot;s&quot; x=&quot;815&quot; y=&quot;438&quot; text-anchor=&quot;middle&quot;&gt;No building involved&lt;/text&gt;
        &lt;a aria-label=&quot;D. AI visits your sites: where to read next&quot; href=&quot;https://kai.zone/writing/cloudflare-ai-choose-your-path/#a2-the-control-map-which-product-guards-which-traffic&quot;&gt;&lt;rect class=&quot;o-mcp&quot; x=&quot;975&quot; y=&quot;290&quot; width=&quot;280&quot; height=&quot;170&quot; rx=&quot;10&quot;/&gt;&lt;/a&gt;
        &lt;text class=&quot;t&quot; x=&quot;1115&quot; y=&quot;318&quot; text-anchor=&quot;middle&quot;&gt;D. AI visits your sites&lt;/text&gt;
        &lt;text class=&quot;s&quot; x=&quot;1115&quot; y=&quot;344&quot; text-anchor=&quot;middle&quot;&gt;Crawlers and agents reading&lt;/text&gt;
        &lt;text class=&quot;s&quot; x=&quot;1115&quot; y=&quot;362&quot; text-anchor=&quot;middle&quot;&gt;content and calling APIs&lt;/text&gt;
        &lt;text class=&quot;m&quot; x=&quot;1115&quot; y=&quot;392&quot; text-anchor=&quot;middle&quot;&gt;AI Crawl Control, Bots&lt;/text&gt;
        &lt;text class=&quot;s&quot; x=&quot;1115&quot; y=&quot;438&quot; text-anchor=&quot;middle&quot;&gt;No building involved&lt;/text&gt;
        &lt;text class=&quot;s&quot; x=&quot;640&quot; y=&quot;494&quot; text-anchor=&quot;middle&quot;&gt;Calling a hosted model API from your own product is still A: you build, the model is hosted. Where the model runs is decided in A3.&lt;/text&gt;
      &lt;/svg&gt;&lt;figcaption&gt;The four cases, A to D. Step 1 lists the products to put in place for each one, in order.&lt;/figcaption&gt;&lt;/figure&gt;&lt;h2 id=&quot;the-reading-path&quot;&gt;&lt;a class=&quot;anchor&quot; href=&quot;#the-reading-path&quot;&gt;The reading path&lt;/a&gt;&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://kai.zone/writing/cloudflare-ai-choose-your-path/&quot;&gt;Step 1: Cloudflare and AI: choose your path&lt;/a&gt;.&lt;/strong&gt; The four cases, which product guards which AI traffic, where models and agent-written code run, how to govern agents inside your company, and when Cloudflare OS fits.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://kai.zone/writing/ai-agents-on-cloudflare-architecture/&quot;&gt;Step 2: Building AI agents on Cloudflare: which architecture when&lt;/a&gt;.&lt;/strong&gt; For cases A and B. Ten ways to build an agent, from a plain Worker to Project Think and VibeSDK, with starter code.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://kai.zone/writing/ai-on-cloudflare-decision-matrix/&quot;&gt;Reference: the decision matrix&lt;/a&gt;.&lt;/strong&gt; The building blocks each situation needs, on one page.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&quot;shortcuts-by-situation&quot;&gt;&lt;a class=&quot;anchor&quot; href=&quot;#shortcuts-by-situation&quot;&gt;Shortcuts by situation&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&quot;table-wrap&quot;&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Your situation&lt;/th&gt;
&lt;th&gt;Read first&lt;/th&gt;
&lt;th&gt;Then&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td data-label=&quot;Your situation&quot;&gt;&lt;strong&gt;A. Your customers use AI that you built&lt;/strong&gt; (a chatbot or AI search in your product)&lt;/td&gt;
&lt;td data-label=&quot;Read first&quot;&gt;&lt;a href=&quot;https://kai.zone/writing/cloudflare-ai-choose-your-path/#a2-the-control-map-which-product-guards-which-traffic&quot;&gt;A2: the control map&lt;/a&gt; and &lt;a href=&quot;https://kai.zone/writing/cloudflare-ai-choose-your-path/#a3-where-does-inference-run&quot;&gt;A3: where inference runs&lt;/a&gt;&lt;/td&gt;
&lt;td data-label=&quot;Then&quot;&gt;&lt;a href=&quot;https://kai.zone/writing/ai-agents-on-cloudflare-architecture/&quot;&gt;Step 2&lt;/a&gt;, then the matrix row A&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td data-label=&quot;Your situation&quot;&gt;&lt;strong&gt;B. Your staff use internal AI that you build&lt;/strong&gt; (agents for engineers and IT, an internal assistant)&lt;/td&gt;
&lt;td data-label=&quot;Read first&quot;&gt;&lt;a href=&quot;https://kai.zone/writing/cloudflare-ai-choose-your-path/#a4-internal-it-and-engineering-the-governed-agent-workspace&quot;&gt;A4: the governed agent workspace&lt;/a&gt; and &lt;a href=&quot;https://kai.zone/writing/cloudflare-ai-choose-your-path/#a6-a-ready-made-start-cloudflare-os&quot;&gt;A6: Cloudflare OS&lt;/a&gt; and &lt;a href=&quot;https://kai.zone/writing/cloudflare-ai-choose-your-path/#a7-another-ready-made-start-vibesdk&quot;&gt;A7: VibeSDK&lt;/a&gt;&lt;/td&gt;
&lt;td data-label=&quot;Then&quot;&gt;&lt;a href=&quot;https://kai.zone/writing/ai-agents-on-cloudflare-architecture/&quot;&gt;Step 2&lt;/a&gt;, then the matrix rows B1 to B4&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td data-label=&quot;Your situation&quot;&gt;&lt;strong&gt;C. Your staff use third-party AI&lt;/strong&gt; (ChatGPT, Claude, Gemini, coding assistants)&lt;/td&gt;
&lt;td data-label=&quot;Read first&quot;&gt;&lt;a href=&quot;https://kai.zone/writing/cloudflare-ai-choose-your-path/#a2-the-control-map-which-product-guards-which-traffic&quot;&gt;A2: the control map&lt;/a&gt;, control C4&lt;/td&gt;
&lt;td data-label=&quot;Then&quot;&gt;The matrix row C. Nothing to build, so skip step 2.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td data-label=&quot;Your situation&quot;&gt;&lt;strong&gt;D. AI visits your sites&lt;/strong&gt; (crawlers and agents reading your content)&lt;/td&gt;
&lt;td data-label=&quot;Read first&quot;&gt;&lt;a href=&quot;https://kai.zone/writing/cloudflare-ai-choose-your-path/#a2-the-control-map-which-product-guards-which-traffic&quot;&gt;A2: the control map&lt;/a&gt;, control C5&lt;/td&gt;
&lt;td data-label=&quot;Then&quot;&gt;The matrix row D. Nothing to build, so skip step 2.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;
&lt;h2 id=&quot;what-to-expect&quot;&gt;&lt;a class=&quot;anchor&quot; href=&quot;#what-to-expect&quot;&gt;What to expect&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Every product claim links to the public Cloudflare documentation, and experimental, beta and paid add-on features are marked. I built the guides from the documentation and checked them on 7 October 2026, but I have not deployed every option. Feature status changes, so check the linked page before you commit to a design.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>Cloudflare and AI: choose your path</title>
    <link href="https://kai.zone/writing/cloudflare-ai-choose-your-path/" rel="alternate" type="text/html"/>
    <id>https://kai.zone/writing/cloudflare-ai-choose-your-path/</id>
    <published>2026-10-07T00:00:00Z</published>
    <updated>2026-10-28T00:00:00Z</updated>
    <summary>Four kinds of AI question, the Cloudflare products for each, and where models and agent code run. Every claim links to the docs.</summary>
    <content type="html">&lt;p&gt;Most conversations about AI and Cloudflare start with a product name. It helps to start with the shape of the setup. Then you can see which parts your case needs and which Cloudflare product covers each one.&lt;/p&gt;
&lt;h2 id=&quot;the-shape-of-every-ai-setup&quot;&gt;&lt;a class=&quot;anchor&quot; href=&quot;#the-shape-of-every-ai-setup&quot;&gt;The shape of every AI setup&lt;/a&gt;&lt;/h2&gt;
&lt;figure class=&quot;fig diagram narrow&quot;&gt;&lt;svg viewBox=&quot;0 0 720 510&quot; role=&quot;img&quot; aria-label=&quot;The shape of every AI setup: Access checks who acts, the AI runs in an isolated session or in your own app, and it reaches models, tools and private systems through one gate each. Everything is logged. At the edge: prompts from the internet, staff using AI apps and AI crawlers.&quot;&gt;
  &lt;text class=&quot;lab2&quot; x=&quot;164&quot; y=&quot;24&quot;&gt;Gate in&lt;/text&gt;
  &lt;text class=&quot;lab2&quot; x=&quot;530&quot; y=&quot;24&quot;&gt;Gate on each exit&lt;/text&gt;
  &lt;rect class=&quot;node&quot; x=&quot;0&quot; y=&quot;60&quot; width=&quot;130&quot; height=&quot;170&quot; rx=&quot;10&quot;/&gt;
  &lt;text class=&quot;t2&quot; x=&quot;65&quot; y=&quot;136&quot; text-anchor=&quot;middle&quot;&gt;Who acts&lt;/text&gt;
  &lt;text class=&quot;s2&quot; x=&quot;65&quot; y=&quot;164&quot; text-anchor=&quot;middle&quot;&gt;people and&lt;/text&gt;
  &lt;text class=&quot;s2&quot; x=&quot;65&quot; y=&quot;186&quot; text-anchor=&quot;middle&quot;&gt;agents&lt;/text&gt;
  &lt;g class=&quot;edge-strong&quot;&gt;
    &lt;path d=&quot;M130 145 L162 145&quot; marker-end=&quot;url(#ar)&quot;/&gt;
    &lt;path d=&quot;M278 145 L310 145&quot; marker-end=&quot;url(#ar)&quot;/&gt;
    &lt;path d=&quot;M490 70 L528 70&quot; marker-end=&quot;url(#ar)&quot;/&gt;
    &lt;path d=&quot;M490 145 L528 145&quot; marker-end=&quot;url(#ar)&quot;/&gt;
    &lt;path d=&quot;M490 220 L528 220&quot; marker-end=&quot;url(#ar)&quot;/&gt;
  &lt;/g&gt;
  &lt;a aria-label=&quot;Access: how the control map covers it (A2)&quot; href=&quot;#a2-the-control-map-which-product-guards-which-traffic&quot;&gt;
    &lt;rect class=&quot;o-sec&quot; x=&quot;164&quot; y=&quot;40&quot; width=&quot;114&quot; height=&quot;210&quot; rx=&quot;10&quot;/&gt;
    &lt;text class=&quot;t2&quot; x=&quot;221&quot; y=&quot;136&quot; text-anchor=&quot;middle&quot;&gt;Access&lt;/text&gt;
    &lt;text class=&quot;s2&quot; x=&quot;221&quot; y=&quot;164&quot; text-anchor=&quot;middle&quot;&gt;checks who&lt;/text&gt;
    &lt;text class=&quot;s2&quot; x=&quot;221&quot; y=&quot;186&quot; text-anchor=&quot;middle&quot;&gt;is acting&lt;/text&gt;
  &lt;/a&gt;
  &lt;a aria-label=&quot;Where the AI runs: the governed agent workspace (A4)&quot; href=&quot;#a4-internal-it-and-engineering-the-governed-agent-workspace&quot;&gt;
    &lt;rect class=&quot;o-rt s-nofill&quot; x=&quot;312&quot; y=&quot;40&quot; width=&quot;178&quot; height=&quot;210&quot; rx=&quot;12&quot;/&gt;
    &lt;text class=&quot;t2&quot; x=&quot;401&quot; y=&quot;112&quot; text-anchor=&quot;middle&quot;&gt;Where the AI&lt;/text&gt;
    &lt;text class=&quot;t2&quot; x=&quot;401&quot; y=&quot;138&quot; text-anchor=&quot;middle&quot;&gt;runs&lt;/text&gt;
    &lt;text class=&quot;s2&quot; x=&quot;401&quot; y=&quot;172&quot; text-anchor=&quot;middle&quot;&gt;isolated session&lt;/text&gt;
    &lt;text class=&quot;s2&quot; x=&quot;401&quot; y=&quot;194&quot; text-anchor=&quot;middle&quot;&gt;or your own app&lt;/text&gt;
  &lt;/a&gt;
  &lt;a aria-label=&quot;Models, tools and private systems: the control map (A2)&quot; href=&quot;#a2-the-control-map-which-product-guards-which-traffic&quot;&gt;
    &lt;rect class=&quot;o-sec&quot; x=&quot;530&quot; y=&quot;40&quot; width=&quot;190&quot; height=&quot;60&quot; rx=&quot;10&quot;/&gt;
    &lt;text class=&quot;t2&quot; x=&quot;625&quot; y=&quot;66&quot; text-anchor=&quot;middle&quot;&gt;Models&lt;/text&gt;
    &lt;text class=&quot;s2&quot; x=&quot;625&quot; y=&quot;88&quot; text-anchor=&quot;middle&quot;&gt;AI Gateway&lt;/text&gt;
    &lt;rect class=&quot;o-sec&quot; x=&quot;530&quot; y=&quot;115&quot; width=&quot;190&quot; height=&quot;60&quot; rx=&quot;10&quot;/&gt;
    &lt;text class=&quot;t2&quot; x=&quot;625&quot; y=&quot;141&quot; text-anchor=&quot;middle&quot;&gt;Tools&lt;/text&gt;
    &lt;text class=&quot;s2&quot; x=&quot;625&quot; y=&quot;163&quot; text-anchor=&quot;middle&quot;&gt;MCP server portal&lt;/text&gt;
    &lt;rect class=&quot;o-sec&quot; x=&quot;530&quot; y=&quot;190&quot; width=&quot;190&quot; height=&quot;60&quot; rx=&quot;10&quot;/&gt;
    &lt;text class=&quot;t2&quot; x=&quot;625&quot; y=&quot;216&quot; text-anchor=&quot;middle&quot;&gt;Private systems&lt;/text&gt;
    &lt;text class=&quot;s2&quot; x=&quot;625&quot; y=&quot;238&quot; text-anchor=&quot;middle&quot;&gt;Mesh or Tunnel routes&lt;/text&gt;
  &lt;/a&gt;
  &lt;a aria-label=&quot;Evidence: the governed agent workspace (A4)&quot; href=&quot;#a4-internal-it-and-engineering-the-governed-agent-workspace&quot;&gt;
    &lt;rect class=&quot;o-sec&quot; x=&quot;0&quot; y=&quot;274&quot; width=&quot;720&quot; height=&quot;64&quot; rx=&quot;10&quot;/&gt;
    &lt;text class=&quot;t2&quot; x=&quot;360&quot; y=&quot;301&quot; text-anchor=&quot;middle&quot;&gt;Evidence&lt;/text&gt;
    &lt;text class=&quot;s2&quot; x=&quot;360&quot; y=&quot;325&quot; text-anchor=&quot;middle&quot;&gt;every model call, tool call and connection is logged with the user and the policy&lt;/text&gt;
  &lt;/a&gt;
  &lt;text class=&quot;lab2&quot; x=&quot;0&quot; y=&quot;382&quot;&gt;At the edge, outside your session&lt;/text&gt;
  &lt;a aria-label=&quot;Edge cases A, C and D: the control map (A2)&quot; href=&quot;#a2-the-control-map-which-product-guards-which-traffic&quot;&gt;
    &lt;rect class=&quot;node&quot; x=&quot;0&quot; y=&quot;398&quot; width=&quot;224&quot; height=&quot;104&quot; rx=&quot;10&quot;/&gt;
    &lt;text class=&quot;m2&quot; x=&quot;112&quot; y=&quot;424&quot; text-anchor=&quot;middle&quot;&gt;Case A&lt;/text&gt;
    &lt;text class=&quot;t2&quot; x=&quot;112&quot; y=&quot;454&quot; text-anchor=&quot;middle&quot;&gt;Prompts in&lt;/text&gt;
    &lt;text class=&quot;s2&quot; x=&quot;112&quot; y=&quot;480&quot; text-anchor=&quot;middle&quot;&gt;AI Security for Apps&lt;/text&gt;
    &lt;rect class=&quot;node&quot; x=&quot;248&quot; y=&quot;398&quot; width=&quot;224&quot; height=&quot;104&quot; rx=&quot;10&quot;/&gt;
    &lt;text class=&quot;m2&quot; x=&quot;360&quot; y=&quot;424&quot; text-anchor=&quot;middle&quot;&gt;Case C&lt;/text&gt;
    &lt;text class=&quot;t2&quot; x=&quot;360&quot; y=&quot;454&quot; text-anchor=&quot;middle&quot;&gt;Staff use AI apps&lt;/text&gt;
    &lt;text class=&quot;s2&quot; x=&quot;360&quot; y=&quot;480&quot; text-anchor=&quot;middle&quot;&gt;Gateway, CASB, DLP&lt;/text&gt;
    &lt;rect class=&quot;node&quot; x=&quot;496&quot; y=&quot;398&quot; width=&quot;224&quot; height=&quot;104&quot; rx=&quot;10&quot;/&gt;
    &lt;text class=&quot;m2&quot; x=&quot;608&quot; y=&quot;424&quot; text-anchor=&quot;middle&quot;&gt;Case D&lt;/text&gt;
    &lt;text class=&quot;t2&quot; x=&quot;608&quot; y=&quot;454&quot; text-anchor=&quot;middle&quot;&gt;AI crawlers&lt;/text&gt;
    &lt;text class=&quot;s2&quot; x=&quot;608&quot; y=&quot;480&quot; text-anchor=&quot;middle&quot;&gt;AI Crawl Control&lt;/text&gt;
  &lt;/a&gt;
&lt;/svg&gt;&lt;figcaption&gt;The same shape for every setup: one gate in front of the session and one on every exit. The row at the bottom covers what comes in from outside.&lt;/figcaption&gt;&lt;/figure&gt;&lt;p&gt;Someone acts, and Access checks who it is. The AI runs in an isolated session or in your own app. From there it reaches models, tools and private systems, and each exit gets one gate. Every model call, tool call and connection is logged with the user and the policy.&lt;/p&gt;
&lt;p&gt;Three things sit at the edge of this picture: prompts that arrive from the internet, staff who use AI apps you did not build, and AI crawlers that read your sites. The four cases below differ in which of these parts you have to deal with.&lt;/p&gt;
&lt;h2 id=&quot;a1-step-1-what-kind-of-ai-question-is-this&quot;&gt;&lt;a class=&quot;anchor&quot; href=&quot;#a1-step-1-what-kind-of-ai-question-is-this&quot;&gt;A1. Step 1: what kind of AI question is this?&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Two questions sort your situation into four cases: do you build AI yourself or use AI that someone else built, and who is affected, your customers or your employees. Each case lists the Cloudflare products to put in place, in order.&lt;/p&gt;
&lt;figure class=&quot;fig diagram&quot;&gt;&lt;svg class=&quot;min&quot; viewBox=&quot;0 0 1280 520&quot; role=&quot;img&quot; aria-label=&quot;First decision: building or adopting AI, and who is exposed&quot;&gt;
        &lt;g class=&quot;edge&quot;&gt;
          &lt;path d=&quot;M560 82 L330 146&quot; marker-end=&quot;url(#ar)&quot;/&gt;
          &lt;path d=&quot;M720 82 L950 146&quot; marker-end=&quot;url(#ar)&quot;/&gt;
          &lt;path d=&quot;M250 212 L175 288&quot; marker-end=&quot;url(#ar)&quot;/&gt;
          &lt;path d=&quot;M390 212 L465 288&quot; marker-end=&quot;url(#ar)&quot;/&gt;
          &lt;path d=&quot;M890 212 L815 288&quot; marker-end=&quot;url(#ar)&quot;/&gt;
          &lt;path d=&quot;M1030 212 L1105 288&quot; marker-end=&quot;url(#ar)&quot;/&gt;
        &lt;/g&gt;
        &lt;g class=&quot;yn&quot;&gt;
          &lt;text x=&quot;420&quot; y=&quot;106&quot;&gt;Building&lt;/text&gt;&lt;text x=&quot;800&quot; y=&quot;106&quot;&gt;Adopting&lt;/text&gt;
          &lt;text x=&quot;62&quot; y=&quot;250&quot;&gt;Your customers use it&lt;/text&gt;&lt;text x=&quot;350&quot; y=&quot;250&quot;&gt;Your staff use it&lt;/text&gt;
          &lt;text x=&quot;682&quot; y=&quot;250&quot;&gt;Your staff use the tools&lt;/text&gt;&lt;text x=&quot;1018&quot; y=&quot;250&quot;&gt;Bots visit your sites&lt;/text&gt;
        &lt;/g&gt;
        &lt;rect class=&quot;q&quot; x=&quot;430&quot; y=&quot;20&quot; width=&quot;420&quot; height=&quot;62&quot; rx=&quot;10&quot;/&gt;
        &lt;text class=&quot;qt&quot; x=&quot;640&quot; y=&quot;47&quot; text-anchor=&quot;middle&quot;&gt;Are you building AI,&lt;/text&gt;
        &lt;text class=&quot;qt&quot; x=&quot;640&quot; y=&quot;68&quot; text-anchor=&quot;middle&quot;&gt;or adopting AI that someone else built?&lt;/text&gt;
        &lt;rect class=&quot;q&quot; x=&quot;170&quot; y=&quot;148&quot; width=&quot;320&quot; height=&quot;64&quot; rx=&quot;10&quot;/&gt;
        &lt;text class=&quot;qt&quot; x=&quot;330&quot; y=&quot;175&quot; text-anchor=&quot;middle&quot;&gt;Who uses what you build?&lt;/text&gt;
        &lt;text class=&quot;s&quot; x=&quot;330&quot; y=&quot;196&quot; text-anchor=&quot;middle&quot;&gt;your customers, or your staff and operations&lt;/text&gt;
        &lt;rect class=&quot;q&quot; x=&quot;790&quot; y=&quot;148&quot; width=&quot;320&quot; height=&quot;64&quot; rx=&quot;10&quot;/&gt;
        &lt;text class=&quot;qt&quot; x=&quot;950&quot; y=&quot;175&quot; text-anchor=&quot;middle&quot;&gt;Who is exposed?&lt;/text&gt;
        &lt;text class=&quot;s&quot; x=&quot;950&quot; y=&quot;196&quot; text-anchor=&quot;middle&quot;&gt;your staff using SaaS AI, or your own sites&lt;/text&gt;
        &lt;a aria-label=&quot;A. AI in your product: where to read next&quot; href=&quot;https://kai.zone/writing/cloudflare-ai-choose-your-path/#a2-the-control-map-which-product-guards-which-traffic&quot;&gt;&lt;rect class=&quot;o-sec&quot; x=&quot;25&quot; y=&quot;290&quot; width=&quot;300&quot; height=&quot;170&quot; rx=&quot;10&quot;/&gt;&lt;/a&gt;
        &lt;text class=&quot;t&quot; x=&quot;175&quot; y=&quot;318&quot; text-anchor=&quot;middle&quot;&gt;A. AI in your product&lt;/text&gt;
        &lt;text class=&quot;s&quot; x=&quot;175&quot; y=&quot;344&quot; text-anchor=&quot;middle&quot;&gt;Public AI endpoints, prompts&lt;/text&gt;
        &lt;text class=&quot;s&quot; x=&quot;175&quot; y=&quot;362&quot; text-anchor=&quot;middle&quot;&gt;from the internet&lt;/text&gt;
        &lt;text class=&quot;m&quot; x=&quot;175&quot; y=&quot;392&quot; text-anchor=&quot;middle&quot;&gt;AI Security for Apps, WAF,&lt;/text&gt;
        &lt;text class=&quot;m&quot; x=&quot;175&quot; y=&quot;408&quot; text-anchor=&quot;middle&quot;&gt;Bots, AI Gateway&lt;/text&gt;
        &lt;text class=&quot;s&quot; x=&quot;175&quot; y=&quot;438&quot; text-anchor=&quot;middle&quot;&gt;Build it with Part B&lt;/text&gt;
        &lt;a aria-label=&quot;B. Internal AI you build: where to read next&quot; href=&quot;https://kai.zone/writing/cloudflare-ai-choose-your-path/#a4-internal-it-and-engineering-the-governed-agent-workspace&quot;&gt;&lt;rect class=&quot;o-rt&quot; x=&quot;335&quot; y=&quot;290&quot; width=&quot;300&quot; height=&quot;170&quot; rx=&quot;10&quot;/&gt;&lt;/a&gt;
        &lt;text class=&quot;t&quot; x=&quot;485&quot; y=&quot;318&quot; text-anchor=&quot;middle&quot;&gt;B. Internal AI you build&lt;/text&gt;
        &lt;text class=&quot;s&quot; x=&quot;485&quot; y=&quot;344&quot; text-anchor=&quot;middle&quot;&gt;Copilots, agents, engineering&lt;/text&gt;
        &lt;text class=&quot;s&quot; x=&quot;485&quot; y=&quot;362&quot; text-anchor=&quot;middle&quot;&gt;and IT automation&lt;/text&gt;
        &lt;text class=&quot;m&quot; x=&quot;485&quot; y=&quot;392&quot; text-anchor=&quot;middle&quot;&gt;Access, AI Gateway, MCP portal,&lt;/text&gt;
        &lt;text class=&quot;m&quot; x=&quot;485&quot; y=&quot;408&quot; text-anchor=&quot;middle&quot;&gt;DLP, Mesh or Tunnel&lt;/text&gt;
        &lt;text class=&quot;s&quot; x=&quot;485&quot; y=&quot;438&quot; text-anchor=&quot;middle&quot;&gt;Cloudflare OS (A6) or Part B&lt;/text&gt;
        &lt;a aria-label=&quot;C. Your staff use third-party AI: where to read next&quot; href=&quot;https://kai.zone/writing/cloudflare-ai-choose-your-path/#a2-the-control-map-which-product-guards-which-traffic&quot;&gt;&lt;rect class=&quot;o-sec&quot; x=&quot;665&quot; y=&quot;290&quot; width=&quot;300&quot; height=&quot;170&quot; rx=&quot;10&quot;/&gt;&lt;/a&gt;
        &lt;text class=&quot;t&quot; x=&quot;815&quot; y=&quot;318&quot; text-anchor=&quot;middle&quot;&gt;C. Your staff use third-party AI&lt;/text&gt;
        &lt;text class=&quot;s&quot; x=&quot;815&quot; y=&quot;344&quot; text-anchor=&quot;middle&quot;&gt;ChatGPT, Claude, Gemini,&lt;/text&gt;
        &lt;text class=&quot;s&quot; x=&quot;815&quot; y=&quot;362&quot; text-anchor=&quot;middle&quot;&gt;Copilot, coding assistants&lt;/text&gt;
        &lt;text class=&quot;m&quot; x=&quot;815&quot; y=&quot;392&quot; text-anchor=&quot;middle&quot;&gt;Shadow IT, Gateway policies,&lt;/text&gt;
        &lt;text class=&quot;m&quot; x=&quot;815&quot; y=&quot;408&quot; text-anchor=&quot;middle&quot;&gt;DLP, CASB&lt;/text&gt;
        &lt;text class=&quot;s&quot; x=&quot;815&quot; y=&quot;438&quot; text-anchor=&quot;middle&quot;&gt;No building involved&lt;/text&gt;
        &lt;a aria-label=&quot;D. AI visits your sites: where to read next&quot; href=&quot;https://kai.zone/writing/cloudflare-ai-choose-your-path/#a2-the-control-map-which-product-guards-which-traffic&quot;&gt;&lt;rect class=&quot;o-mcp&quot; x=&quot;975&quot; y=&quot;290&quot; width=&quot;280&quot; height=&quot;170&quot; rx=&quot;10&quot;/&gt;&lt;/a&gt;
        &lt;text class=&quot;t&quot; x=&quot;1115&quot; y=&quot;318&quot; text-anchor=&quot;middle&quot;&gt;D. AI visits your sites&lt;/text&gt;
        &lt;text class=&quot;s&quot; x=&quot;1115&quot; y=&quot;344&quot; text-anchor=&quot;middle&quot;&gt;Crawlers and agents reading&lt;/text&gt;
        &lt;text class=&quot;s&quot; x=&quot;1115&quot; y=&quot;362&quot; text-anchor=&quot;middle&quot;&gt;content and calling APIs&lt;/text&gt;
        &lt;text class=&quot;m&quot; x=&quot;1115&quot; y=&quot;392&quot; text-anchor=&quot;middle&quot;&gt;AI Crawl Control, Bots&lt;/text&gt;
        &lt;text class=&quot;s&quot; x=&quot;1115&quot; y=&quot;438&quot; text-anchor=&quot;middle&quot;&gt;No building involved&lt;/text&gt;
        &lt;text class=&quot;s&quot; x=&quot;640&quot; y=&quot;494&quot; text-anchor=&quot;middle&quot;&gt;Calling a hosted model API from your own product is still A: you build, the model is hosted. Where the model runs is decided in A3.&lt;/text&gt;
      &lt;/svg&gt;&lt;figcaption&gt;The four cases. A product that calls a hosted model API is still case A, because you build the product. A3 covers where the model runs.&lt;/figcaption&gt;&lt;/figure&gt;&lt;div class=&quot;table-wrap&quot;&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Case&lt;/th&gt;
&lt;th&gt;What the customer says&lt;/th&gt;
&lt;th&gt;Put in place, in this order&lt;/th&gt;
&lt;th&gt;Then&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td data-label=&quot;Case&quot;&gt;&lt;strong&gt;A. AI in your product&lt;/strong&gt;&lt;/td&gt;
&lt;td data-label=&quot;What the customer says&quot;&gt;&amp;quot;We added a chatbot or AI search to our app.&amp;quot; &amp;quot;We worry about prompt injection and PII in prompts.&amp;quot;&lt;/td&gt;
&lt;td data-label=&quot;Put in place, in this order&quot;&gt;1. Find the AI endpoints (LLM endpoint discovery). 2. AI Security for Apps detections in WAF rules. 3. AI Gateway between app and model for logs, limits and fallback. 4. Normal WAF, Bots and API protection.&lt;/td&gt;
&lt;td data-label=&quot;Then&quot;&gt;Build with &lt;a href=&quot;https://kai.zone/writing/ai-agents-on-cloudflare-architecture/&quot;&gt;Part B&lt;/a&gt; or a plain Worker. If users should build apps inside your product: VibeSDK (A7).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td data-label=&quot;Case&quot;&gt;&lt;strong&gt;B. Internal AI you build&lt;/strong&gt;&lt;/td&gt;
&lt;td data-label=&quot;What the customer says&quot;&gt;&amp;quot;We want agents for our engineers and IT.&amp;quot; &amp;quot;Our staff need an assistant on our data.&amp;quot;&lt;/td&gt;
&lt;td data-label=&quot;Put in place, in this order&quot;&gt;1. Access in front, with your identity provider. 2. All model calls through AI Gateway. 3. Tools through an MCP server portal. 4. DLP. 5. Private reach over Tunnel, Mesh or Workers VPC. 6. Isolated execution.&lt;/td&gt;
&lt;td data-label=&quot;Then&quot;&gt;A ready-made start: Cloudflare OS (A6), or VibeSDK if staff should build apps (A7). Or build: Part B for the agent, A4 for the governed workspace pattern.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td data-label=&quot;Case&quot;&gt;&lt;strong&gt;C. Staff use third-party AI&lt;/strong&gt;&lt;/td&gt;
&lt;td data-label=&quot;What the customer says&quot;&gt;&amp;quot;People paste code and customer data into ChatGPT.&amp;quot; &amp;quot;We cannot see which AI tools are used.&amp;quot;&lt;/td&gt;
&lt;td data-label=&quot;Put in place, in this order&quot;&gt;1. Shadow IT dashboard and CASB for visibility. 2. Gateway HTTP policies, including actions inside AI apps. 3. DLP profiles on prompts and uploads. 4. Sanctioned tools behind Access.&lt;/td&gt;
&lt;td data-label=&quot;Then&quot;&gt;Nothing to build. Offer a sanctioned path.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td data-label=&quot;Case&quot;&gt;&lt;strong&gt;D. AI visits your sites&lt;/strong&gt;&lt;/td&gt;
&lt;td data-label=&quot;What the customer says&quot;&gt;&amp;quot;AI crawlers take our content.&amp;quot; &amp;quot;Agents hit our APIs.&amp;quot;&lt;/td&gt;
&lt;td data-label=&quot;Put in place, in this order&quot;&gt;1. AI Crawl Control: see which AI services access your content. 2. Allow or block per crawler, check robots.txt compliance. 3. Bots and rate limiting for the rest.&lt;/td&gt;
&lt;td data-label=&quot;Then&quot;&gt;Optional: pay per crawl (private beta).&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;
&lt;h2 id=&quot;a2-the-control-map-which-product-guards-which-traffic&quot;&gt;&lt;a class=&quot;anchor&quot; href=&quot;#a2-the-control-map-which-product-guards-which-traffic&quot;&gt;A2. The control map: which product guards which traffic&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The picture above shows where each control sits. Calls to models go through AI Gateway and calls to tools through MCP server portals. AI Security for Apps checks prompts from the internet, Gateway, CASB and DLP cover staff who use AI apps, and AI Crawl Control covers AI crawlers. Access checks who is acting, and DLP and logs apply to all of them.&lt;/p&gt;
&lt;figure class=&quot;fig diagram&quot;&gt;&lt;svg class=&quot;min&quot; viewBox=&quot;0 0 1300 330&quot; role=&quot;img&quot; aria-label=&quot;Select the control by what you want to protect&quot;&gt;&lt;g class=&quot;edge&quot;&gt;&lt;path d=&quot;M520 72 L130 168&quot; marker-end=&quot;url(#ar)&quot;/&gt;&lt;path d=&quot;M585 72 L390 168&quot; marker-end=&quot;url(#ar)&quot;/&gt;&lt;path d=&quot;M650 72 L650 168&quot; marker-end=&quot;url(#ar)&quot;/&gt;&lt;path d=&quot;M715 72 L910 168&quot; marker-end=&quot;url(#ar)&quot;/&gt;&lt;path d=&quot;M780 72 L1170 168&quot; marker-end=&quot;url(#ar)&quot;/&gt;&lt;/g&gt;&lt;g class=&quot;yn&quot;&gt;&lt;rect x=&quot;278&quot; y=&quot;108&quot; width=&quot;100&quot; height=&quot;22&quot; rx=&quot;4&quot; fill=&quot;var(--surface)&quot;/&gt;&lt;text x=&quot;327.6&quot; y=&quot;124&quot; text-anchor=&quot;middle&quot;&gt;Model calls&lt;/text&gt;&lt;rect x=&quot;443&quot; y=&quot;108&quot; width=&quot;92&quot; height=&quot;22&quot; rx=&quot;4&quot; fill=&quot;var(--surface)&quot;/&gt;&lt;text x=&quot;488.8&quot; y=&quot;124&quot; text-anchor=&quot;middle&quot;&gt;Tool calls&lt;/text&gt;&lt;rect x=&quot;604&quot; y=&quot;108&quot; width=&quot;92&quot; height=&quot;22&quot; rx=&quot;4&quot; fill=&quot;var(--surface)&quot;/&gt;&lt;text x=&quot;650.0&quot; y=&quot;124&quot; text-anchor=&quot;middle&quot;&gt;Prompts in&lt;/text&gt;&lt;rect x=&quot;757&quot; y=&quot;108&quot; width=&quot;108&quot; height=&quot;22&quot; rx=&quot;4&quot; fill=&quot;var(--surface)&quot;/&gt;&lt;text x=&quot;811.2&quot; y=&quot;124&quot; text-anchor=&quot;middle&quot;&gt;Staff use AI&lt;/text&gt;&lt;rect x=&quot;922&quot; y=&quot;108&quot; width=&quot;100&quot; height=&quot;22&quot; rx=&quot;4&quot; fill=&quot;var(--surface)&quot;/&gt;&lt;text x=&quot;972.4&quot; y=&quot;124&quot; text-anchor=&quot;middle&quot;&gt;AI visitors&lt;/text&gt;&lt;/g&gt;&lt;rect class=&quot;q&quot; x=&quot;390&quot; y=&quot;10&quot; width=&quot;520&quot; height=&quot;62&quot; rx=&quot;10&quot;/&gt;&lt;text class=&quot;qt&quot; x=&quot;650&quot; y=&quot;46&quot; text-anchor=&quot;middle&quot;&gt;What do you want to control?&lt;/text&gt;&lt;rect class=&quot;o-rt&quot; x=&quot;10&quot; y=&quot;170&quot; width=&quot;240&quot; height=&quot;130&quot; rx=&quot;10&quot;/&gt;&lt;text class=&quot;t&quot; x=&quot;130&quot; y=&quot;197&quot; text-anchor=&quot;middle&quot;&gt;C1  AI Gateway&lt;/text&gt;&lt;text class=&quot;s&quot; x=&quot;130&quot; y=&quot;220&quot; text-anchor=&quot;middle&quot;&gt;logs, limits, fallback,&lt;/text&gt;&lt;text class=&quot;s&quot; x=&quot;130&quot; y=&quot;238&quot; text-anchor=&quot;middle&quot;&gt;guardrails and DLP on&lt;/text&gt;&lt;text class=&quot;s&quot; x=&quot;130&quot; y=&quot;256&quot; text-anchor=&quot;middle&quot;&gt;calls to models&lt;/text&gt;&lt;rect class=&quot;o-mcp&quot; x=&quot;270&quot; y=&quot;170&quot; width=&quot;240&quot; height=&quot;130&quot; rx=&quot;10&quot;/&gt;&lt;text class=&quot;t&quot; x=&quot;390&quot; y=&quot;197&quot; text-anchor=&quot;middle&quot;&gt;C2  MCP portals&lt;/text&gt;&lt;text class=&quot;s&quot; x=&quot;390&quot; y=&quot;220&quot; text-anchor=&quot;middle&quot;&gt;choose which tools&lt;/text&gt;&lt;text class=&quot;s&quot; x=&quot;390&quot; y=&quot;238&quot; text-anchor=&quot;middle&quot;&gt;agents may use,&lt;/text&gt;&lt;text class=&quot;s&quot; x=&quot;390&quot; y=&quot;256&quot; text-anchor=&quot;middle&quot;&gt;log every call&lt;/text&gt;&lt;rect class=&quot;o-sec&quot; x=&quot;530&quot; y=&quot;170&quot; width=&quot;240&quot; height=&quot;130&quot; rx=&quot;10&quot;/&gt;&lt;text class=&quot;t&quot; x=&quot;650&quot; y=&quot;197&quot; text-anchor=&quot;middle&quot;&gt;C3  AI Security for Apps&lt;/text&gt;&lt;text class=&quot;s&quot; x=&quot;650&quot; y=&quot;220&quot; text-anchor=&quot;middle&quot;&gt;finds prompt injection,&lt;/text&gt;&lt;text class=&quot;s&quot; x=&quot;650&quot; y=&quot;238&quot; text-anchor=&quot;middle&quot;&gt;PII and unsafe topics&lt;/text&gt;&lt;text class=&quot;s&quot; x=&quot;650&quot; y=&quot;256&quot; text-anchor=&quot;middle&quot;&gt;in your AI endpoints&lt;/text&gt;&lt;rect class=&quot;o-sec&quot; x=&quot;790&quot; y=&quot;170&quot; width=&quot;240&quot; height=&quot;130&quot; rx=&quot;10&quot;/&gt;&lt;text class=&quot;t&quot; x=&quot;910&quot; y=&quot;197&quot; text-anchor=&quot;middle&quot;&gt;C4  Gateway + DLP&lt;/text&gt;&lt;text class=&quot;s&quot; x=&quot;910&quot; y=&quot;220&quot; text-anchor=&quot;middle&quot;&gt;Shadow IT, CASB, DLP:&lt;/text&gt;&lt;text class=&quot;s&quot; x=&quot;910&quot; y=&quot;238&quot; text-anchor=&quot;middle&quot;&gt;see staff use of AI apps,&lt;/text&gt;&lt;text class=&quot;s&quot; x=&quot;910&quot; y=&quot;256&quot; text-anchor=&quot;middle&quot;&gt;block or limit actions&lt;/text&gt;&lt;rect class=&quot;o-mcp&quot; x=&quot;1050&quot; y=&quot;170&quot; width=&quot;240&quot; height=&quot;130&quot; rx=&quot;10&quot;/&gt;&lt;text class=&quot;t&quot; x=&quot;1170&quot; y=&quot;197&quot; text-anchor=&quot;middle&quot;&gt;C5  AI Crawl Control&lt;/text&gt;&lt;text class=&quot;s&quot; x=&quot;1170&quot; y=&quot;220&quot; text-anchor=&quot;middle&quot;&gt;see AI crawlers,&lt;/text&gt;&lt;text class=&quot;s&quot; x=&quot;1170&quot; y=&quot;238&quot; text-anchor=&quot;middle&quot;&gt;allow or block&lt;/text&gt;&lt;text class=&quot;s&quot; x=&quot;1170&quot; y=&quot;256&quot; text-anchor=&quot;middle&quot;&gt;each one&lt;/text&gt;&lt;/svg&gt;&lt;figcaption&gt;Pick what you want to control. The table below has the details.&lt;/figcaption&gt;&lt;/figure&gt;&lt;div class=&quot;table-wrap&quot;&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Control&lt;/th&gt;
&lt;th&gt;Guards&lt;/th&gt;
&lt;th&gt;Key facts from the docs&lt;/th&gt;
&lt;th&gt;Watch out&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td data-label=&quot;Control&quot;&gt;&lt;strong&gt;C1. &lt;a href=&quot;https://developers.cloudflare.com/ai-gateway/&quot; rel=&quot;noopener&quot;&gt;AI Gateway&lt;/a&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td data-label=&quot;Guards&quot;&gt;Calls from apps and agents to model providers.&lt;/td&gt;
&lt;td data-label=&quot;Key facts from the docs&quot;&gt;A proxy with analytics, logging, caching, rate limiting, retry and model fallback. Available on all plans. Guardrails evaluate prompts and responses and can flag or block by category. DLP scans prompts and responses without Gateway HTTP filtering or TLS decryption.&lt;/td&gt;
&lt;td data-label=&quot;Watch out&quot;&gt;It covers only traffic you route through it. To force that, also block direct provider endpoints.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td data-label=&quot;Control&quot;&gt;&lt;strong&gt;C2. &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/access-controls/ai-controls/mcp-portals/&quot; rel=&quot;noopener&quot;&gt;MCP server portals&lt;/a&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td data-label=&quot;Guards&quot;&gt;Tool calls from MCP clients to internal and SaaS MCP servers.&lt;/td&gt;
&lt;td data-label=&quot;Key facts from the docs&quot;&gt;One endpoint for many servers. Admins choose tools and prompts per portal, rename them with aliases, and can enable Code Mode (two tools, JavaScript run in a Dynamic Worker). Access logs each tool request. Private servers work through Tunnel with Gateway routing turned on.&lt;/td&gt;
&lt;td data-label=&quot;Watch out&quot;&gt;Independent MFA, purpose justification and temporary authentication are not enforced for servers authorized through a portal. Blocked users can still reach a server by its direct URL unless Access is its OAuth provider.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td data-label=&quot;Control&quot;&gt;&lt;strong&gt;C3. &lt;a href=&quot;https://developers.cloudflare.com/waf/detections/ai-security-for-apps/&quot; rel=&quot;noopener&quot;&gt;AI Security for Apps&lt;/a&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td data-label=&quot;Guards&quot;&gt;Prompts sent from the internet to your own LLM-backed endpoints.&lt;/td&gt;
&lt;td data-label=&quot;Key facts from the docs&quot;&gt;Model-agnostic. Detects prompt injection, PII and unsafe or custom topics in requests to endpoints labeled &lt;code&gt;cf-llm&lt;/code&gt;, JSON only. Results become WAF fields for custom or rate limiting rules. LLM endpoint discovery is on all plans.&lt;/td&gt;
&lt;td data-label=&quot;Watch out&quot;&gt;The detection fields and log mode ruleset are a paid add-on on Enterprise. Formerly called Firewall for AI.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td data-label=&quot;Control&quot;&gt;&lt;strong&gt;C4. Gateway, Shadow IT, CASB, DLP&lt;/strong&gt;&lt;/td&gt;
&lt;td data-label=&quot;Guards&quot;&gt;Employees using third-party AI apps.&lt;/td&gt;
&lt;td data-label=&quot;Key facts from the docs&quot;&gt;The &lt;a href=&quot;https://developers.cloudflare.com/learning-paths/holistic-ai-security/concepts/&quot; rel=&quot;noopener&quot;&gt;holistic AI security learning path&lt;/a&gt; names the Shadow IT dashboard and API CASB for visibility, Gateway policies to allow, block or redirect, and DLP for data loss. HTTP policies can control specific actions inside AI apps. CASB has API integrations for ChatGPT, Claude and Gemini (changelog, August 2025).&lt;/td&gt;
&lt;td data-label=&quot;Watch out&quot;&gt;HTTP policies need the Cloudflare root certificate or a custom certificate on the device. DLP is an add-on to Zero Trust Enterprise.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td data-label=&quot;Control&quot;&gt;&lt;strong&gt;C5. &lt;a href=&quot;https://developers.cloudflare.com/ai-crawl-control/&quot; rel=&quot;noopener&quot;&gt;AI Crawl Control&lt;/a&gt;&lt;/strong&gt; and Bots&lt;/td&gt;
&lt;td data-label=&quot;Guards&quot;&gt;AI services reading your content.&lt;/td&gt;
&lt;td data-label=&quot;Key facts from the docs&quot;&gt;A dashboard of crawler activity, allow or block per crawler, robots.txt compliance and enforcement rules. All plans. Formerly AI Audit.&lt;/td&gt;
&lt;td data-label=&quot;Watch out&quot;&gt;Pay per crawl is in private beta.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;
&lt;figure class=&quot;fig diagram&quot;&gt;&lt;svg class=&quot;min&quot; viewBox=&quot;0 0 1130 700&quot; role=&quot;img&quot; aria-label=&quot;Control map for AI traffic&quot;&gt;
        &lt;rect class=&quot;chip&quot; x=&quot;0&quot; y=&quot;0&quot; width=&quot;440&quot; height=&quot;40&quot; rx=&quot;8&quot;/&gt;&lt;text class=&quot;s&quot; x=&quot;220&quot; y=&quot;25&quot; text-anchor=&quot;middle&quot;&gt;Employees, IDEs, coding agents, internal apps&lt;/text&gt;
        &lt;rect class=&quot;chip&quot; x=&quot;460&quot; y=&quot;0&quot; width=&quot;210&quot; height=&quot;40&quot; rx=&quot;8&quot;/&gt;&lt;text class=&quot;s&quot; x=&quot;565&quot; y=&quot;25&quot; text-anchor=&quot;middle&quot;&gt;Your customers and their apps&lt;/text&gt;
        &lt;rect class=&quot;chip&quot; x=&quot;690&quot; y=&quot;0&quot; width=&quot;210&quot; height=&quot;40&quot; rx=&quot;8&quot;/&gt;&lt;text class=&quot;s&quot; x=&quot;795&quot; y=&quot;25&quot; text-anchor=&quot;middle&quot;&gt;Staff using SaaS AI&lt;/text&gt;
        &lt;rect class=&quot;chip&quot; x=&quot;920&quot; y=&quot;0&quot; width=&quot;210&quot; height=&quot;40&quot; rx=&quot;8&quot;/&gt;&lt;text class=&quot;s&quot; x=&quot;1025&quot; y=&quot;25&quot; text-anchor=&quot;middle&quot;&gt;AI crawlers and agents&lt;/text&gt;
        &lt;g class=&quot;edge&quot;&gt;&lt;path d=&quot;M220 42 L220 62&quot; marker-end=&quot;url(#ar)&quot;/&gt;&lt;path d=&quot;M565 42 L565 122&quot; marker-end=&quot;url(#ar)&quot;/&gt;&lt;path d=&quot;M795 42 L795 62&quot; marker-end=&quot;url(#ar)&quot;/&gt;&lt;path d=&quot;M1025 42 L1025 122&quot; marker-end=&quot;url(#ar)&quot;/&gt;&lt;/g&gt;
        &lt;rect class=&quot;o-sec dash s-nofill&quot; x=&quot;0&quot; y=&quot;64&quot; width=&quot;440&quot; height=&quot;40&quot; rx=&quot;8&quot;/&gt;
        &lt;text class=&quot;lab-sec&quot; x=&quot;14&quot; y=&quot;89&quot;&gt;Identity&lt;/text&gt;
        &lt;text class=&quot;s&quot; x=&quot;100&quot; y=&quot;89&quot;&gt;Access, your IdP, device posture&lt;/text&gt;
        &lt;rect class=&quot;o-sec dash s-nofill&quot; x=&quot;690&quot; y=&quot;64&quot; width=&quot;210&quot; height=&quot;40&quot; rx=&quot;8&quot;/&gt;
        &lt;text class=&quot;s&quot; x=&quot;795&quot; y=&quot;89&quot; text-anchor=&quot;middle&quot;&gt;Gateway + One Client&lt;/text&gt;
        &lt;g class=&quot;edge&quot;&gt;&lt;path d=&quot;M220 106 L220 122&quot; marker-end=&quot;url(#ar)&quot;/&gt;&lt;path d=&quot;M795 106 L795 122&quot; marker-end=&quot;url(#ar)&quot;/&gt;&lt;/g&gt;
        &lt;rect class=&quot;o-mcp&quot; x=&quot;0&quot; y=&quot;124&quot; width=&quot;210&quot; height=&quot;130&quot; rx=&quot;10&quot;/&gt;
        &lt;text class=&quot;lab-mcp&quot; x=&quot;14&quot; y=&quot;146&quot;&gt;Tool traffic&lt;/text&gt;
        &lt;text class=&quot;t&quot; x=&quot;105&quot; y=&quot;172&quot; text-anchor=&quot;middle&quot;&gt;MCP server portals&lt;/text&gt;
        &lt;text class=&quot;s&quot; x=&quot;105&quot; y=&quot;194&quot; text-anchor=&quot;middle&quot;&gt;tools per portal, aliases,&lt;/text&gt;
        &lt;text class=&quot;s&quot; x=&quot;105&quot; y=&quot;212&quot; text-anchor=&quot;middle&quot;&gt;Code Mode, Access logs&lt;/text&gt;
        &lt;text class=&quot;m&quot; x=&quot;105&quot; y=&quot;238&quot; text-anchor=&quot;middle&quot;&gt;optional Gateway route&lt;/text&gt;
        &lt;rect class=&quot;o-rt&quot; x=&quot;230&quot; y=&quot;124&quot; width=&quot;210&quot; height=&quot;130&quot; rx=&quot;10&quot;/&gt;
        &lt;text class=&quot;lab-rt&quot; x=&quot;244&quot; y=&quot;146&quot;&gt;Model traffic&lt;/text&gt;
        &lt;text class=&quot;t&quot; x=&quot;335&quot; y=&quot;172&quot; text-anchor=&quot;middle&quot;&gt;AI Gateway&lt;/text&gt;
        &lt;text class=&quot;s&quot; x=&quot;335&quot; y=&quot;194&quot; text-anchor=&quot;middle&quot;&gt;logs, cache, rate limits,&lt;/text&gt;
        &lt;text class=&quot;s&quot; x=&quot;335&quot; y=&quot;212&quot; text-anchor=&quot;middle&quot;&gt;fallback, guardrails, DLP&lt;/text&gt;
        &lt;text class=&quot;m&quot; x=&quot;335&quot; y=&quot;238&quot; text-anchor=&quot;middle&quot;&gt;all plans&lt;/text&gt;
        &lt;rect class=&quot;o-sec&quot; x=&quot;460&quot; y=&quot;124&quot; width=&quot;210&quot; height=&quot;130&quot; rx=&quot;10&quot;/&gt;
        &lt;text class=&quot;lab-sec&quot; x=&quot;474&quot; y=&quot;146&quot;&gt;Prompts in&lt;/text&gt;
        &lt;text class=&quot;t&quot; x=&quot;565&quot; y=&quot;172&quot; text-anchor=&quot;middle&quot;&gt;AI Security for Apps&lt;/text&gt;
        &lt;text class=&quot;s&quot; x=&quot;565&quot; y=&quot;194&quot; text-anchor=&quot;middle&quot;&gt;prompt injection, PII,&lt;/text&gt;
        &lt;text class=&quot;s&quot; x=&quot;565&quot; y=&quot;212&quot; text-anchor=&quot;middle&quot;&gt;unsafe topics, in WAF rules&lt;/text&gt;
        &lt;text class=&quot;m&quot; x=&quot;565&quot; y=&quot;238&quot; text-anchor=&quot;middle&quot;&gt;Enterprise add-on&lt;/text&gt;
        &lt;rect class=&quot;o-sec&quot; x=&quot;690&quot; y=&quot;124&quot; width=&quot;210&quot; height=&quot;130&quot; rx=&quot;10&quot;/&gt;
        &lt;text class=&quot;lab-sec&quot; x=&quot;704&quot; y=&quot;146&quot;&gt;Staff using SaaS AI&lt;/text&gt;
        &lt;text class=&quot;t&quot; x=&quot;795&quot; y=&quot;172&quot; text-anchor=&quot;middle&quot;&gt;Gateway, Shadow IT, CASB&lt;/text&gt;
        &lt;text class=&quot;s&quot; x=&quot;795&quot; y=&quot;194&quot; text-anchor=&quot;middle&quot;&gt;see usage, block or limit&lt;/text&gt;
        &lt;text class=&quot;s&quot; x=&quot;795&quot; y=&quot;212&quot; text-anchor=&quot;middle&quot;&gt;actions, scan prompts&lt;/text&gt;
        &lt;text class=&quot;m&quot; x=&quot;795&quot; y=&quot;238&quot; text-anchor=&quot;middle&quot;&gt;DLP: Enterprise add-on&lt;/text&gt;
        &lt;rect class=&quot;o-mcp&quot; x=&quot;920&quot; y=&quot;124&quot; width=&quot;210&quot; height=&quot;130&quot; rx=&quot;10&quot;/&gt;
        &lt;text class=&quot;lab-mcp&quot; x=&quot;934&quot; y=&quot;146&quot;&gt;AI visitors&lt;/text&gt;
        &lt;text class=&quot;t&quot; x=&quot;1025&quot; y=&quot;172&quot; text-anchor=&quot;middle&quot;&gt;AI Crawl Control, Bots&lt;/text&gt;
        &lt;text class=&quot;s&quot; x=&quot;1025&quot; y=&quot;194&quot; text-anchor=&quot;middle&quot;&gt;see, allow or block&lt;/text&gt;
        &lt;text class=&quot;s&quot; x=&quot;1025&quot; y=&quot;212&quot; text-anchor=&quot;middle&quot;&gt;per crawler&lt;/text&gt;
        &lt;text class=&quot;m&quot; x=&quot;1025&quot; y=&quot;238&quot; text-anchor=&quot;middle&quot;&gt;all plans&lt;/text&gt;
        &lt;rect class=&quot;chip-sec&quot; x=&quot;0&quot; y=&quot;268&quot; width=&quot;900&quot; height=&quot;36&quot; rx=&quot;8&quot;/&gt;
        &lt;text class=&quot;s&quot; x=&quot;450&quot; y=&quot;291&quot; text-anchor=&quot;middle&quot;&gt;DLP profiles: one detection engine for AI Gateway, HTTP traffic, SaaS files and AI prompts&lt;/text&gt;
        &lt;text class=&quot;lab-rt&quot; x=&quot;0&quot; y=&quot;350&quot;&gt;Where the agent or tool code runs&lt;/text&gt;
        &lt;rect class=&quot;o-rt&quot; x=&quot;0&quot; y=&quot;360&quot; width=&quot;210&quot; height=&quot;76&quot; rx=&quot;10&quot;/&gt;&lt;text class=&quot;t&quot; x=&quot;105&quot; y=&quot;386&quot; text-anchor=&quot;middle&quot;&gt;Workers + Agents SDK&lt;/text&gt;&lt;text class=&quot;s&quot; x=&quot;105&quot; y=&quot;406&quot; text-anchor=&quot;middle&quot;&gt;Think, AIChatAgent (Part B)&lt;/text&gt;
        &lt;rect class=&quot;o-lib&quot; x=&quot;230&quot; y=&quot;360&quot; width=&quot;210&quot; height=&quot;76&quot; rx=&quot;10&quot;/&gt;&lt;text class=&quot;t&quot; x=&quot;335&quot; y=&quot;386&quot; text-anchor=&quot;middle&quot;&gt;Dynamic Workers&lt;/text&gt;&lt;text class=&quot;s&quot; x=&quot;335&quot; y=&quot;406&quot; text-anchor=&quot;middle&quot;&gt;generated code, Code Mode&lt;/text&gt;
        &lt;rect class=&quot;o-lib&quot; x=&quot;460&quot; y=&quot;360&quot; width=&quot;210&quot; height=&quot;76&quot; rx=&quot;10&quot;/&gt;&lt;text class=&quot;t&quot; x=&quot;565&quot; y=&quot;386&quot; text-anchor=&quot;middle&quot;&gt;Sandboxes&lt;/text&gt;&lt;text class=&quot;s&quot; x=&quot;565&quot; y=&quot;406&quot; text-anchor=&quot;middle&quot;&gt;Linux microVM or Dynamic Worker&lt;/text&gt;
        &lt;rect class=&quot;o-lib&quot; x=&quot;690&quot; y=&quot;360&quot; width=&quot;210&quot; height=&quot;76&quot; rx=&quot;10&quot;/&gt;&lt;text class=&quot;t&quot; x=&quot;795&quot; y=&quot;386&quot; text-anchor=&quot;middle&quot;&gt;Containers&lt;/text&gt;&lt;text class=&quot;s&quot; x=&quot;795&quot; y=&quot;406&quot; text-anchor=&quot;middle&quot;&gt;any runtime, heavy work&lt;/text&gt;
        &lt;rect class=&quot;o-lib&quot; x=&quot;920&quot; y=&quot;360&quot; width=&quot;210&quot; height=&quot;76&quot; rx=&quot;10&quot;/&gt;&lt;text class=&quot;t&quot; x=&quot;1025&quot; y=&quot;386&quot; text-anchor=&quot;middle&quot;&gt;Browser Run&lt;/text&gt;&lt;text class=&quot;s&quot; x=&quot;1025&quot; y=&quot;406&quot; text-anchor=&quot;middle&quot;&gt;sites without an API&lt;/text&gt;
        &lt;text class=&quot;lab-flow&quot; x=&quot;0&quot; y=&quot;462&quot;&gt;Reaching private systems&lt;/text&gt;
        &lt;rect class=&quot;o-flow&quot; x=&quot;0&quot; y=&quot;472&quot; width=&quot;210&quot; height=&quot;76&quot; rx=&quot;10&quot;/&gt;&lt;text class=&quot;t&quot; x=&quot;105&quot; y=&quot;498&quot; text-anchor=&quot;middle&quot;&gt;Cloudflare Tunnel&lt;/text&gt;&lt;text class=&quot;s&quot; x=&quot;105&quot; y=&quot;518&quot; text-anchor=&quot;middle&quot;&gt;publish specific apps&lt;/text&gt;
        &lt;rect class=&quot;o-flow&quot; x=&quot;230&quot; y=&quot;472&quot; width=&quot;210&quot; height=&quot;76&quot; rx=&quot;10&quot;/&gt;&lt;text class=&quot;t&quot; x=&quot;335&quot; y=&quot;498&quot; text-anchor=&quot;middle&quot;&gt;Cloudflare Mesh&lt;/text&gt;&lt;text class=&quot;s&quot; x=&quot;335&quot; y=&quot;518&quot; text-anchor=&quot;middle&quot;&gt;private IPs, both directions&lt;/text&gt;
        &lt;rect class=&quot;o-flow&quot; x=&quot;460&quot; y=&quot;472&quot; width=&quot;210&quot; height=&quot;76&quot; rx=&quot;10&quot;/&gt;&lt;text class=&quot;t&quot; x=&quot;565&quot; y=&quot;498&quot; text-anchor=&quot;middle&quot;&gt;Workers VPC (beta)&lt;/text&gt;&lt;text class=&quot;s&quot; x=&quot;565&quot; y=&quot;518&quot; text-anchor=&quot;middle&quot;&gt;Worker to private service&lt;/text&gt;
        &lt;rect class=&quot;chip-sec&quot; x=&quot;690&quot; y=&quot;472&quot; width=&quot;440&quot; height=&quot;76&quot; rx=&quot;10&quot;/&gt;&lt;text class=&quot;t&quot; x=&quot;910&quot; y=&quot;498&quot; text-anchor=&quot;middle&quot;&gt;Logs and evidence&lt;/text&gt;&lt;text class=&quot;s&quot; x=&quot;910&quot; y=&quot;518&quot; text-anchor=&quot;middle&quot;&gt;Logpush to your SIEM, AI Gateway logs,&lt;/text&gt;&lt;text class=&quot;s&quot; x=&quot;910&quot; y=&quot;535&quot; text-anchor=&quot;middle&quot;&gt;Access and Gateway logs&lt;/text&gt;
        &lt;text class=&quot;lab-model&quot; x=&quot;0&quot; y=&quot;574&quot;&gt;Models&lt;/text&gt;
        &lt;rect class=&quot;o-model&quot; x=&quot;0&quot; y=&quot;584&quot; width=&quot;360&quot; height=&quot;46&quot; rx=&quot;8&quot;/&gt;&lt;text class=&quot;s&quot; x=&quot;180&quot; y=&quot;612&quot; text-anchor=&quot;middle&quot;&gt;Workers AI (binding, no API key)&lt;/text&gt;
        &lt;rect class=&quot;o-model&quot; x=&quot;380&quot; y=&quot;584&quot; width=&quot;360&quot; height=&quot;46&quot; rx=&quot;8&quot;/&gt;&lt;text class=&quot;s&quot; x=&quot;560&quot; y=&quot;612&quot; text-anchor=&quot;middle&quot;&gt;Hosted providers through AI Gateway&lt;/text&gt;
        &lt;rect class=&quot;o-model&quot; x=&quot;760&quot; y=&quot;584&quot; width=&quot;370&quot; height=&quot;46&quot; rx=&quot;8&quot;/&gt;&lt;text class=&quot;s&quot; x=&quot;945&quot; y=&quot;612&quot; text-anchor=&quot;middle&quot;&gt;Private inference on hardware you own (A3)&lt;/text&gt;
        &lt;text class=&quot;m&quot; x=&quot;0&quot; y=&quot;660&quot;&gt;Detections in AI Security for Apps need the WAF on the zone and an Enterprise add-on. DLP is an add-on to Zero Trust Enterprise.&lt;/text&gt;
      &lt;/svg&gt;&lt;figcaption&gt;Control map for AI traffic: what each control sits in front of.&lt;/figcaption&gt;&lt;/figure&gt;&lt;p&gt;Sandboxes and Code Mode keep agent-written code away from your credentials.&lt;/p&gt;
&lt;figure class=&quot;fig poster-fig&quot;&gt;&lt;div class=&quot;poster-svg&quot;&gt;&lt;svg viewBox=&quot;0 0 1600 900&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; role=&quot;img&quot; aria-label=&quot;Architecture of AI Gateway, MCP server portals with Code Mode, sandboxes and Access identity&quot;&gt;
&lt;defs&gt;
  &lt;marker id=&quot;a&quot; viewBox=&quot;0 0 10 10&quot; refX=&quot;9&quot; refY=&quot;5&quot; markerWidth=&quot;8&quot; markerHeight=&quot;8&quot; orient=&quot;auto-start-reverse&quot;&gt;&lt;path d=&quot;M0 0 L10 5 L0 10 z&quot; fill=&quot;#a1a1aa&quot;/&gt;&lt;/marker&gt;
  &lt;marker id=&quot;aid&quot; viewBox=&quot;0 0 10 10&quot; refX=&quot;9&quot; refY=&quot;5&quot; markerWidth=&quot;8&quot; markerHeight=&quot;8&quot; orient=&quot;auto-start-reverse&quot;&gt;&lt;path d=&quot;M0 0 L10 5 L0 10 z&quot; fill=&quot;#fb923c&quot;/&gt;&lt;/marker&gt;
&lt;/defs&gt;
&lt;text class=&quot;title&quot; x=&quot;40&quot; y=&quot;54&quot; text-anchor=&quot;start&quot; &gt;AI security on Cloudflare: one identity from login to tool call&lt;/text&gt;
&lt;text class=&quot;sub&quot; x=&quot;40&quot; y=&quot;86&quot; text-anchor=&quot;start&quot; &gt;Sandboxes and Code Mode keep agent-written code away from your credentials.&lt;/text&gt;
&lt;rect class=&quot;lg-cf&quot; x=&quot;1010&quot; y=&quot;50&quot; width=&quot;16&quot; height=&quot;16&quot; rx=&quot;4&quot; /&gt;
&lt;text class=&quot;leg&quot; x=&quot;1034&quot; y=&quot;63&quot; text-anchor=&quot;start&quot; &gt;Cloudflare&lt;/text&gt;
&lt;rect class=&quot;lg-you&quot; x=&quot;1155&quot; y=&quot;50&quot; width=&quot;16&quot; height=&quot;16&quot; rx=&quot;4&quot; /&gt;
&lt;text class=&quot;leg&quot; x=&quot;1179&quot; y=&quot;63&quot; text-anchor=&quot;start&quot; &gt;You or third party&lt;/text&gt;
&lt;rect class=&quot;lg-id&quot; x=&quot;1300&quot; y=&quot;50&quot; width=&quot;16&quot; height=&quot;16&quot; rx=&quot;4&quot; /&gt;
&lt;text class=&quot;leg&quot; x=&quot;1324&quot; y=&quot;63&quot; text-anchor=&quot;start&quot; &gt;Identity&lt;/text&gt;
&lt;rect class=&quot;lg-iso&quot; x=&quot;1445&quot; y=&quot;50&quot; width=&quot;16&quot; height=&quot;16&quot; rx=&quot;4&quot; /&gt;
&lt;text class=&quot;leg&quot; x=&quot;1469&quot; y=&quot;63&quot; text-anchor=&quot;start&quot; &gt;Isolation&lt;/text&gt;
&lt;rect class=&quot;box-you&quot; x=&quot;30&quot; y=&quot;120&quot; width=&quot;240&quot; height=&quot;170&quot; rx=&quot;12&quot; /&gt;
&lt;text class=&quot;h&quot; x=&quot;150&quot; y=&quot;148&quot; text-anchor=&quot;middle&quot; &gt;Models&lt;/text&gt;
&lt;rect class=&quot;chip&quot; x=&quot;50&quot; y=&quot;162&quot; width=&quot;200&quot; height=&quot;34&quot; rx=&quot;8&quot; /&gt;
&lt;text class=&quot;c&quot; x=&quot;150.0&quot; y=&quot;184.0&quot; text-anchor=&quot;middle&quot; &gt;OpenAI, Anthropic, Google&lt;/text&gt;
&lt;rect class=&quot;chip&quot; x=&quot;50&quot; y=&quot;202&quot; width=&quot;200&quot; height=&quot;34&quot; rx=&quot;8&quot; /&gt;
&lt;text class=&quot;c&quot; x=&quot;150.0&quot; y=&quot;224.0&quot; text-anchor=&quot;middle&quot; &gt;Workers AI&lt;/text&gt;
&lt;rect class=&quot;chip&quot; x=&quot;50&quot; y=&quot;242&quot; width=&quot;200&quot; height=&quot;34&quot; rx=&quot;8&quot; /&gt;
&lt;text class=&quot;c&quot; x=&quot;150.0&quot; y=&quot;264.0&quot; text-anchor=&quot;middle&quot; &gt;Your own models&lt;/text&gt;
&lt;rect class=&quot;box-you&quot; x=&quot;30&quot; y=&quot;320&quot; width=&quot;240&quot; height=&quot;205&quot; rx=&quot;12&quot; /&gt;
&lt;text class=&quot;h&quot; x=&quot;150&quot; y=&quot;348&quot; text-anchor=&quot;middle&quot; &gt;Employee or agent&lt;/text&gt;
&lt;rect class=&quot;glyph&quot; x=&quot;115&quot; y=&quot;362&quot; width=&quot;70&quot; height=&quot;42&quot; rx=&quot;5&quot; /&gt;
&lt;rect class=&quot;glyph&quot; x=&quot;105&quot; y=&quot;407&quot; width=&quot;90&quot; height=&quot;8&quot; rx=&quot;4&quot; /&gt;
&lt;rect class=&quot;chip-opt&quot; x=&quot;37&quot; y=&quot;424&quot; width=&quot;226&quot; height=&quot;30&quot; rx=&quot;8&quot; /&gt;
&lt;text class=&quot;c2&quot; x=&quot;150.0&quot; y=&quot;444.0&quot; text-anchor=&quot;middle&quot; &gt;Cloudflare One Client (optional)&lt;/text&gt;
&lt;rect class=&quot;chip-id&quot; x=&quot;37&quot; y=&quot;464&quot; width=&quot;226&quot; height=&quot;34&quot; rx=&quot;8&quot; /&gt;
&lt;text class=&quot;c2&quot; x=&quot;150.0&quot; y=&quot;486.0&quot; text-anchor=&quot;middle&quot; &gt;Unattended agent: service token&lt;/text&gt;
&lt;rect class=&quot;box-cf&quot; x=&quot;30&quot; y=&quot;545&quot; width=&quot;240&quot; height=&quot;72&quot; rx=&quot;12&quot; /&gt;
&lt;text class=&quot;h2&quot; x=&quot;150&quot; y=&quot;572&quot; text-anchor=&quot;middle&quot; &gt;Shadow AI visibility&lt;/text&gt;
&lt;text class=&quot;s&quot; x=&quot;150&quot; y=&quot;596&quot; text-anchor=&quot;middle&quot; &gt;Shadow IT dashboard, CASB&lt;/text&gt;
&lt;line class=&quot;ar&quot; x1=&quot;150&quot; y1=&quot;525&quot; x2=&quot;150&quot; y2=&quot;545&quot;/&gt;
&lt;rect class=&quot;box-id&quot; x=&quot;30&quot; y=&quot;637&quot; width=&quot;240&quot; height=&quot;103&quot; rx=&quot;12&quot; /&gt;
&lt;text class=&quot;h&quot; x=&quot;150&quot; y=&quot;666&quot; text-anchor=&quot;middle&quot; &gt;Your identity provider&lt;/text&gt;
&lt;text class=&quot;s&quot; x=&quot;150&quot; y=&quot;690&quot; text-anchor=&quot;middle&quot; &gt;Entra ID, Okta, Google&lt;/text&gt;
&lt;text class=&quot;s&quot; x=&quot;150&quot; y=&quot;709&quot; text-anchor=&quot;middle&quot; &gt;one login for everything&lt;/text&gt;
&lt;rect class=&quot;box-cf&quot; x=&quot;280&quot; y=&quot;336&quot; width=&quot;40&quot; height=&quot;212&quot; rx=&quot;10&quot; /&gt;
&lt;text class=&quot;h3&quot; x=&quot;0&quot; y=&quot;0&quot; text-anchor=&quot;middle&quot; transform=&quot;translate(295 425) rotate(-90)&quot;&gt;Secure Web Gateway&lt;/text&gt;
&lt;text class=&quot;s2&quot; x=&quot;0&quot; y=&quot;0&quot; text-anchor=&quot;middle&quot; transform=&quot;translate(311 425) rotate(-90)&quot;&gt;DLP on prompts&lt;/text&gt;
&lt;rect class=&quot;cfbox&quot; x=&quot;318&quot; y=&quot;108&quot; width=&quot;284&quot; height=&quot;226&quot; rx=&quot;14&quot; /&gt;
&lt;rect class=&quot;bgmask&quot; x=&quot;332&quot; y=&quot;101&quot; width=&quot;92&quot; height=&quot;14&quot; rx=&quot;3&quot; /&gt;
&lt;text class=&quot;cfl&quot; x=&quot;338&quot; y=&quot;112&quot; text-anchor=&quot;start&quot; &gt;CLOUDFLARE&lt;/text&gt;
&lt;rect class=&quot;box-cf&quot; x=&quot;330&quot; y=&quot;120&quot; width=&quot;260&quot; height=&quot;200&quot; rx=&quot;12&quot; /&gt;
&lt;text class=&quot;h&quot; x=&quot;460&quot; y=&quot;150&quot; text-anchor=&quot;middle&quot; &gt;AI Gateway&lt;/text&gt;
&lt;text class=&quot;s&quot; x=&quot;460&quot; y=&quot;178&quot; text-anchor=&quot;middle&quot; &gt;logs and budgets per user&lt;/text&gt;
&lt;text class=&quot;s&quot; x=&quot;460&quot; y=&quot;198&quot; text-anchor=&quot;middle&quot; &gt;guardrails and DLP on prompts&lt;/text&gt;
&lt;text class=&quot;s&quot; x=&quot;460&quot; y=&quot;218&quot; text-anchor=&quot;middle&quot; &gt;provider keys stored here&lt;/text&gt;
&lt;text class=&quot;s&quot; x=&quot;460&quot; y=&quot;238&quot; text-anchor=&quot;middle&quot; &gt;fallback and caching&lt;/text&gt;
&lt;circle cx=&quot;568&quot; cy=&quot;138&quot; r=&quot;13&quot; class=&quot;idb&quot;/&gt;&lt;text class=&quot;idt&quot; x=&quot;568&quot; y=&quot;142&quot; text-anchor=&quot;middle&quot;&gt;ID&lt;/text&gt;
&lt;rect class=&quot;box-you&quot; x=&quot;330&quot; y=&quot;370&quot; width=&quot;260&quot; height=&quot;170&quot; rx=&quot;12&quot; /&gt;
&lt;text class=&quot;h&quot; x=&quot;460&quot; y=&quot;396&quot; text-anchor=&quot;middle&quot; &gt;Local AI apps&lt;/text&gt;
&lt;text class=&quot;s&quot; x=&quot;460&quot; y=&quot;416&quot; text-anchor=&quot;middle&quot; &gt;MCP clients on the laptop&lt;/text&gt;
&lt;rect class=&quot;chip&quot; x=&quot;350&quot; y=&quot;428&quot; width=&quot;220&quot; height=&quot;32&quot; rx=&quot;8&quot; /&gt;
&lt;text class=&quot;c&quot; x=&quot;460.0&quot; y=&quot;449.0&quot; text-anchor=&quot;middle&quot; &gt;Claude Code, opencode&lt;/text&gt;
&lt;rect class=&quot;chip&quot; x=&quot;350&quot; y=&quot;466&quot; width=&quot;220&quot; height=&quot;32&quot; rx=&quot;8&quot; /&gt;
&lt;text class=&quot;c&quot; x=&quot;460.0&quot; y=&quot;487.0&quot; text-anchor=&quot;middle&quot; &gt;Codex, Claude Desktop&lt;/text&gt;
&lt;rect class=&quot;chip&quot; x=&quot;350&quot; y=&quot;504&quot; width=&quot;220&quot; height=&quot;32&quot; rx=&quot;8&quot; /&gt;
&lt;text class=&quot;c&quot; x=&quot;460.0&quot; y=&quot;525.0&quot; text-anchor=&quot;middle&quot; &gt;Other MCP clients&lt;/text&gt;
&lt;rect class=&quot;cfbox&quot; x=&quot;318&quot; y=&quot;574&quot; width=&quot;284&quot; height=&quot;184&quot; rx=&quot;14&quot; /&gt;
&lt;rect class=&quot;bgmask&quot; x=&quot;332&quot; y=&quot;567&quot; width=&quot;92&quot; height=&quot;14&quot; rx=&quot;3&quot; /&gt;
&lt;text class=&quot;cfl&quot; x=&quot;338&quot; y=&quot;578&quot; text-anchor=&quot;start&quot; &gt;CLOUDFLARE&lt;/text&gt;
&lt;rect class=&quot;box-iso&quot; x=&quot;330&quot; y=&quot;586&quot; width=&quot;260&quot; height=&quot;160&quot; rx=&quot;12&quot; stroke-width=&quot;3.5&quot;/&gt;
&lt;text class=&quot;h&quot; x=&quot;460&quot; y=&quot;614&quot; text-anchor=&quot;middle&quot; &gt;Agent runs on Cloudflare&lt;/text&gt;
&lt;text class=&quot;s2&quot; x=&quot;460&quot; y=&quot;635&quot; text-anchor=&quot;middle&quot; &gt;optional: nothing runs on the laptop&lt;/text&gt;
&lt;rect class=&quot;chip-iso&quot; x=&quot;350&quot; y=&quot;648&quot; width=&quot;220&quot; height=&quot;28&quot; rx=&quot;8&quot; /&gt;
&lt;text class=&quot;c2&quot; x=&quot;460.0&quot; y=&quot;667.0&quot; text-anchor=&quot;middle&quot; &gt;Cloudflare OS workspace&lt;/text&gt;
&lt;rect class=&quot;chip-iso&quot; x=&quot;350&quot; y=&quot;682&quot; width=&quot;220&quot; height=&quot;28&quot; rx=&quot;8&quot; /&gt;
&lt;text class=&quot;c2&quot; x=&quot;460.0&quot; y=&quot;701.0&quot; text-anchor=&quot;middle&quot; &gt;Coding agent in a sandbox&lt;/text&gt;
&lt;text class=&quot;s2&quot; x=&quot;460&quot; y=&quot;732&quot; text-anchor=&quot;middle&quot; &gt;Worker holds the keys, limits egress&lt;/text&gt;
&lt;rect class=&quot;cfbox&quot; x=&quot;650&quot; y=&quot;110&quot; width=&quot;640&quot; height=&quot;640&quot; rx=&quot;14&quot; /&gt;
&lt;text class=&quot;cfword&quot; x=&quot;1270&quot; y=&quot;140&quot; text-anchor=&quot;end&quot; &gt;CLOUDFLARE&lt;/text&gt;
&lt;text class=&quot;m&quot; x=&quot;1270&quot; y=&quot;736&quot; text-anchor=&quot;end&quot; &gt;runs on Cloudflare Workers&lt;/text&gt;
&lt;rect class=&quot;box-id&quot; x=&quot;670&quot; y=&quot;160&quot; width=&quot;80&quot; height=&quot;530&quot; rx=&quot;12&quot; stroke-width=&quot;3&quot;/&gt;
&lt;text class=&quot;h&quot; x=&quot;0&quot; y=&quot;0&quot; text-anchor=&quot;middle&quot; transform=&quot;translate(716 425) rotate(-90)&quot;&gt;Cloudflare Access (ZTNA)&lt;/text&gt;
&lt;text class=&quot;s&quot; x=&quot;0&quot; y=&quot;0&quot; text-anchor=&quot;middle&quot; transform=&quot;translate(738 425) rotate(-90)&quot;&gt;identity on every request&lt;/text&gt;
&lt;circle cx=&quot;710&quot; cy=&quot;180&quot; r=&quot;13&quot; class=&quot;idb&quot;/&gt;&lt;text class=&quot;idt&quot; x=&quot;710&quot; y=&quot;184&quot; text-anchor=&quot;middle&quot;&gt;ID&lt;/text&gt;
&lt;rect class=&quot;box-cf&quot; x=&quot;780&quot; y=&quot;160&quot; width=&quot;240&quot; height=&quot;530&quot; rx=&quot;12&quot; /&gt;
&lt;text class=&quot;h2&quot; x=&quot;900&quot; y=&quot;190&quot; text-anchor=&quot;middle&quot; &gt;MCP server portal&lt;/text&gt;
&lt;text class=&quot;s&quot; x=&quot;900&quot; y=&quot;214&quot; text-anchor=&quot;middle&quot; &gt;one endpoint for all tools&lt;/text&gt;
&lt;text class=&quot;s&quot; x=&quot;900&quot; y=&quot;232&quot; text-anchor=&quot;middle&quot; &gt;only the tools you approve&lt;/text&gt;
&lt;text class=&quot;s&quot; x=&quot;900&quot; y=&quot;250&quot; text-anchor=&quot;middle&quot; &gt;every call logged&lt;/text&gt;
&lt;circle cx=&quot;1000&quot; cy=&quot;176&quot; r=&quot;13&quot; class=&quot;idb&quot;/&gt;&lt;text class=&quot;idt&quot; x=&quot;1000&quot; y=&quot;180&quot; text-anchor=&quot;middle&quot;&gt;ID&lt;/text&gt;
&lt;rect class=&quot;box-iso&quot; x=&quot;795&quot; y=&quot;282&quot; width=&quot;210&quot; height=&quot;388&quot; rx=&quot;12&quot; stroke-width=&quot;3.5&quot;/&gt;
&lt;text class=&quot;h&quot; x=&quot;900&quot; y=&quot;312&quot; text-anchor=&quot;middle&quot; &gt;Code Mode&lt;/text&gt;
&lt;text class=&quot;s&quot; x=&quot;900&quot; y=&quot;334&quot; text-anchor=&quot;middle&quot; &gt;The model writes JavaScript&lt;/text&gt;
&lt;text class=&quot;s&quot; x=&quot;900&quot; y=&quot;352&quot; text-anchor=&quot;middle&quot; &gt;instead of calling dozens&lt;/text&gt;
&lt;text class=&quot;s&quot; x=&quot;900&quot; y=&quot;370&quot; text-anchor=&quot;middle&quot; &gt;of tools one by one.&lt;/text&gt;
&lt;rect class=&quot;chip-iso&quot; x=&quot;815&quot; y=&quot;398&quot; width=&quot;170&quot; height=&quot;30&quot; rx=&quot;8&quot; /&gt;
&lt;text class=&quot;c&quot; x=&quot;900.0&quot; y=&quot;418.0&quot; text-anchor=&quot;middle&quot; &gt;search tools&lt;/text&gt;
&lt;path class=&quot;ar-s&quot; d=&quot;M900 430 L900 448&quot; marker-end=&quot;url(#a)&quot;/&gt;
&lt;rect class=&quot;chip-iso&quot; x=&quot;815&quot; y=&quot;450&quot; width=&quot;170&quot; height=&quot;30&quot; rx=&quot;8&quot; /&gt;
&lt;text class=&quot;c&quot; x=&quot;900.0&quot; y=&quot;470.0&quot; text-anchor=&quot;middle&quot; &gt;execute code&lt;/text&gt;
&lt;path class=&quot;ar-s&quot; d=&quot;M900 482 L900 506&quot; marker-end=&quot;url(#a)&quot;/&gt;
&lt;rect class=&quot;dw&quot; x=&quot;810&quot; y=&quot;508&quot; width=&quot;180&quot; height=&quot;150&quot; rx=&quot;12&quot; /&gt;
&lt;text class=&quot;h2&quot; x=&quot;900&quot; y=&quot;536&quot; text-anchor=&quot;middle&quot; &gt;Dynamic Worker&lt;/text&gt;
&lt;text class=&quot;s&quot; x=&quot;900&quot; y=&quot;556&quot; text-anchor=&quot;middle&quot; &gt;isolated sandbox&lt;/text&gt;
&lt;text class=&quot;s&quot; x=&quot;900&quot; y=&quot;584&quot; text-anchor=&quot;middle&quot; &gt;no credentials inside&lt;/text&gt;
&lt;text class=&quot;s&quot; x=&quot;900&quot; y=&quot;603&quot; text-anchor=&quot;middle&quot; &gt;no open internet&lt;/text&gt;
&lt;text class=&quot;s&quot; x=&quot;900&quot; y=&quot;622&quot; text-anchor=&quot;middle&quot; &gt;calls tools by name&lt;/text&gt;
&lt;rect class=&quot;box-cf swgopt&quot; x=&quot;1040&quot; y=&quot;160&quot; width=&quot;44&quot; height=&quot;520&quot; rx=&quot;10&quot; /&gt;
&lt;text class=&quot;h3&quot; x=&quot;0&quot; y=&quot;0&quot; text-anchor=&quot;middle&quot; transform=&quot;translate(1056 420) rotate(-90)&quot;&gt;Secure Web Gateway (optional)&lt;/text&gt;
&lt;text class=&quot;s2&quot; x=&quot;0&quot; y=&quot;0&quot; text-anchor=&quot;middle&quot; transform=&quot;translate(1072 420) rotate(-90)&quot;&gt;DLP and HTTP logs&lt;/text&gt;
&lt;rect class=&quot;box-cf&quot; x=&quot;1104&quot; y=&quot;160&quot; width=&quot;170&quot; height=&quot;150&quot; rx=&quot;12&quot; /&gt;
&lt;text class=&quot;h2&quot; x=&quot;1189&quot; y=&quot;190&quot; text-anchor=&quot;middle&quot; &gt;Remote MCP&lt;/text&gt;
&lt;text class=&quot;h2&quot; x=&quot;1189&quot; y=&quot;210&quot; text-anchor=&quot;middle&quot; &gt;servers&lt;/text&gt;
&lt;text class=&quot;s&quot; x=&quot;1189&quot; y=&quot;238&quot; text-anchor=&quot;middle&quot; &gt;yours, protected by&lt;/text&gt;
&lt;text class=&quot;s&quot; x=&quot;1189&quot; y=&quot;257&quot; text-anchor=&quot;middle&quot; &gt;Access sign-in&lt;/text&gt;
&lt;circle cx=&quot;1254&quot; cy=&quot;294&quot; r=&quot;13&quot; class=&quot;idb&quot;/&gt;&lt;text class=&quot;idt&quot; x=&quot;1254&quot; y=&quot;298&quot; text-anchor=&quot;middle&quot;&gt;ID&lt;/text&gt;
&lt;rect class=&quot;box-cf&quot; x=&quot;1104&quot; y=&quot;340&quot; width=&quot;170&quot; height=&quot;130&quot; rx=&quot;12&quot; /&gt;
&lt;text class=&quot;h2&quot; x=&quot;1189&quot; y=&quot;370&quot; text-anchor=&quot;middle&quot; &gt;Tunnel or Mesh&lt;/text&gt;
&lt;text class=&quot;s&quot; x=&quot;1189&quot; y=&quot;396&quot; text-anchor=&quot;middle&quot; &gt;private servers&lt;/text&gt;
&lt;text class=&quot;s&quot; x=&quot;1189&quot; y=&quot;415&quot; text-anchor=&quot;middle&quot; &gt;and hosts&lt;/text&gt;
&lt;rect class=&quot;box-you&quot; x=&quot;1310&quot; y=&quot;120&quot; width=&quot;260&quot; height=&quot;310&quot; rx=&quot;12&quot; /&gt;
&lt;text class=&quot;h&quot; x=&quot;1440&quot; y=&quot;150&quot; text-anchor=&quot;middle&quot; &gt;Internal services&lt;/text&gt;
&lt;rect class=&quot;chip&quot; x=&quot;1328&quot; y=&quot;168&quot; width=&quot;224&quot; height=&quot;38&quot; rx=&quot;8&quot; /&gt;
&lt;text class=&quot;c&quot; x=&quot;1440.0&quot; y=&quot;192.0&quot; text-anchor=&quot;middle&quot; &gt;Data warehouse&lt;/text&gt;
&lt;rect class=&quot;chip&quot; x=&quot;1328&quot; y=&quot;214&quot; width=&quot;224&quot; height=&quot;38&quot; rx=&quot;8&quot; /&gt;
&lt;text class=&quot;c&quot; x=&quot;1440.0&quot; y=&quot;238.0&quot; text-anchor=&quot;middle&quot; &gt;Internal APIs&lt;/text&gt;
&lt;rect class=&quot;chip&quot; x=&quot;1328&quot; y=&quot;260&quot; width=&quot;224&quot; height=&quot;38&quot; rx=&quot;8&quot; /&gt;
&lt;text class=&quot;c&quot; x=&quot;1440.0&quot; y=&quot;284.0&quot; text-anchor=&quot;middle&quot; &gt;Tickets and code&lt;/text&gt;
&lt;rect class=&quot;chip&quot; x=&quot;1328&quot; y=&quot;306&quot; width=&quot;224&quot; height=&quot;38&quot; rx=&quot;8&quot; /&gt;
&lt;text class=&quot;c&quot; x=&quot;1440.0&quot; y=&quot;330.0&quot; text-anchor=&quot;middle&quot; &gt;Hosts and firewalls&lt;/text&gt;
&lt;text class=&quot;s&quot; x=&quot;1440&quot; y=&quot;382&quot; text-anchor=&quot;middle&quot; &gt;on your private network&lt;/text&gt;
&lt;rect class=&quot;box-you&quot; x=&quot;1310&quot; y=&quot;450&quot; width=&quot;260&quot; height=&quot;215&quot; rx=&quot;12&quot; /&gt;
&lt;text class=&quot;h&quot; x=&quot;1440&quot; y=&quot;480&quot; text-anchor=&quot;middle&quot; &gt;SaaS MCP servers&lt;/text&gt;
&lt;rect class=&quot;chip&quot; x=&quot;1325&quot; y=&quot;500&quot; width=&quot;105&quot; height=&quot;38&quot; rx=&quot;8&quot; /&gt;
&lt;text class=&quot;c&quot; x=&quot;1377.5&quot; y=&quot;524.0&quot; text-anchor=&quot;middle&quot; &gt;Slack&lt;/text&gt;
&lt;rect class=&quot;chip&quot; x=&quot;1440&quot; y=&quot;500&quot; width=&quot;105&quot; height=&quot;38&quot; rx=&quot;8&quot; /&gt;
&lt;text class=&quot;c&quot; x=&quot;1492.5&quot; y=&quot;524.0&quot; text-anchor=&quot;middle&quot; &gt;Jira&lt;/text&gt;
&lt;rect class=&quot;chip&quot; x=&quot;1325&quot; y=&quot;548&quot; width=&quot;105&quot; height=&quot;38&quot; rx=&quot;8&quot; /&gt;
&lt;text class=&quot;c&quot; x=&quot;1377.5&quot; y=&quot;572.0&quot; text-anchor=&quot;middle&quot; &gt;GitHub&lt;/text&gt;
&lt;rect class=&quot;chip&quot; x=&quot;1440&quot; y=&quot;548&quot; width=&quot;105&quot; height=&quot;38&quot; rx=&quot;8&quot; /&gt;
&lt;text class=&quot;c&quot; x=&quot;1492.5&quot; y=&quot;572.0&quot; text-anchor=&quot;middle&quot; &gt;Salesforce&lt;/text&gt;
&lt;text class=&quot;s&quot; x=&quot;1440&quot; y=&quot;612&quot; text-anchor=&quot;middle&quot; &gt;each user signs in with&lt;/text&gt;
&lt;text class=&quot;s&quot; x=&quot;1440&quot; y=&quot;631&quot; text-anchor=&quot;middle&quot; &gt;their own account&lt;/text&gt;
&lt;rect class=&quot;box-you&quot; x=&quot;1310&quot; y=&quot;685&quot; width=&quot;260&quot; height=&quot;65&quot; rx=&quot;12&quot; /&gt;
&lt;text class=&quot;h2&quot; x=&quot;1440&quot; y=&quot;710&quot; text-anchor=&quot;middle&quot; &gt;Your SIEM&lt;/text&gt;
&lt;text class=&quot;s2&quot; x=&quot;1440&quot; y=&quot;732&quot; text-anchor=&quot;middle&quot; &gt;Logpush: Access, Gateway, AI Gateway&lt;/text&gt;
&lt;path class=&quot;ar&quot; d=&quot;M270 225 L330 225&quot; marker-end=&quot;url(#a)&quot; marker-start=&quot;url(#a)&quot;/&gt;
&lt;path class=&quot;ar&quot; d=&quot;M460 370 L460 334&quot; marker-end=&quot;url(#a)&quot; marker-start=&quot;url(#a)&quot;/&gt;
&lt;path class=&quot;ar&quot; d=&quot;M270 510 L330 510&quot; marker-end=&quot;url(#a)&quot;/&gt;
&lt;line class=&quot;ar dash&quot; x1=&quot;460&quot; y1=&quot;542&quot; x2=&quot;460&quot; y2=&quot;584&quot;/&gt;
&lt;rect x=&quot;442&quot; y=&quot;553&quot; width=&quot;36&quot; height=&quot;20&quot; rx=&quot;4&quot; fill=&quot;var(--bg)&quot;/&gt;
&lt;text class=&quot;or&quot; x=&quot;460&quot; y=&quot;568&quot; text-anchor=&quot;middle&quot; &gt;or&lt;/text&gt;
&lt;path class=&quot;ar&quot; d=&quot;M592 455 L668 455&quot; marker-end=&quot;url(#a)&quot;/&gt;
&lt;text class=&quot;m&quot; x=&quot;622&quot; y=&quot;440&quot; text-anchor=&quot;middle&quot; &gt;HTTPS&lt;/text&gt;
&lt;circle cx=&quot;622&quot; cy=&quot;486&quot; r=&quot;13&quot; class=&quot;idb&quot;/&gt;&lt;text class=&quot;idt&quot; x=&quot;622&quot; y=&quot;490&quot; text-anchor=&quot;middle&quot;&gt;ID&lt;/text&gt;
&lt;path class=&quot;ar&quot; d=&quot;M752 455 L778 455&quot; marker-end=&quot;url(#a)&quot;/&gt;
&lt;path class=&quot;ar&quot; d=&quot;M1022 235 L1038 235&quot; marker-end=&quot;url(#a)&quot;/&gt;
&lt;path class=&quot;ar&quot; d=&quot;M1022 405 L1038 405&quot; marker-end=&quot;url(#a)&quot;/&gt;
&lt;path class=&quot;ar&quot; d=&quot;M1022 640 L1038 640&quot; marker-end=&quot;url(#a)&quot;/&gt;
&lt;path class=&quot;ar&quot; d=&quot;M1086 235 L1102 235&quot; marker-end=&quot;url(#a)&quot;/&gt;
&lt;path class=&quot;ar&quot; d=&quot;M1086 405 L1102 405&quot; marker-end=&quot;url(#a)&quot;/&gt;
&lt;path class=&quot;ar&quot; d=&quot;M1276 235 L1308 235&quot; marker-end=&quot;url(#a)&quot;/&gt;
&lt;path class=&quot;ar&quot; d=&quot;M1276 405 L1308 405&quot; marker-end=&quot;url(#a)&quot;/&gt;
&lt;path class=&quot;ar&quot; d=&quot;M1086 640 L1308 640&quot; marker-end=&quot;url(#a)&quot;/&gt;
&lt;path class=&quot;ar&quot; d=&quot;M1292 718 L1308 718&quot; marker-end=&quot;url(#a)&quot;/&gt;
&lt;text class=&quot;m&quot; x=&quot;1205&quot; y=&quot;628&quot; text-anchor=&quot;middle&quot; &gt;OAuth per user&lt;/text&gt;
&lt;circle cx=&quot;1125&quot; cy=&quot;640&quot; r=&quot;13&quot; class=&quot;idb&quot;/&gt;&lt;text class=&quot;idt&quot; x=&quot;1125&quot; y=&quot;644&quot; text-anchor=&quot;middle&quot;&gt;ID&lt;/text&gt;
&lt;path class=&quot;ar-id&quot; d=&quot;M150 740 L150 770 L710 770 L710 692&quot; marker-end=&quot;url(#aid)&quot;/&gt;
&lt;text class=&quot;idl&quot; x=&quot;215&quot; y=&quot;762&quot; text-anchor=&quot;start&quot; &gt;SSO login&lt;/text&gt;
&lt;path class=&quot;ar-id dash&quot; d=&quot;M710 160 L710 126 L604 126&quot; marker-end=&quot;url(#aid)&quot;/&gt;
&lt;text class=&quot;idl&quot; x=&quot;660&quot; y=&quot;104&quot; text-anchor=&quot;middle&quot; &gt;Access token&lt;/text&gt;
&lt;rect class=&quot;ribbon&quot; x=&quot;30&quot; y=&quot;795&quot; width=&quot;1540&quot; height=&quot;88&quot; rx=&quot;14&quot; /&gt;
&lt;text class=&quot;rt&quot; x=&quot;56&quot; y=&quot;822&quot; text-anchor=&quot;start&quot; &gt;Sign in&lt;/text&gt;
&lt;text class=&quot;rs&quot; x=&quot;56&quot; y=&quot;842&quot; text-anchor=&quot;start&quot; &gt;Your IdP signs people in (SSO).&lt;/text&gt;
&lt;text class=&quot;rs&quot; x=&quot;56&quot; y=&quot;859&quot; text-anchor=&quot;start&quot; &gt;Agents use service tokens.&lt;/text&gt;
&lt;path class=&quot;chev&quot; d=&quot;M290 826 l8 13 l-8 13&quot;/&gt;
&lt;text class=&quot;rt&quot; x=&quot;306&quot; y=&quot;822&quot; text-anchor=&quot;start&quot; &gt;Check&lt;/text&gt;
&lt;text class=&quot;rs&quot; x=&quot;306&quot; y=&quot;842&quot; text-anchor=&quot;start&quot; &gt;Access checks identity&lt;/text&gt;
&lt;text class=&quot;rs&quot; x=&quot;306&quot; y=&quot;859&quot; text-anchor=&quot;start&quot; &gt;with your policies.&lt;/text&gt;
&lt;path class=&quot;chev&quot; d=&quot;M540 826 l8 13 l-8 13&quot;/&gt;
&lt;text class=&quot;rt&quot; x=&quot;556&quot; y=&quot;822&quot; text-anchor=&quot;start&quot; &gt;Model calls&lt;/text&gt;
&lt;text class=&quot;rs&quot; x=&quot;556&quot; y=&quot;842&quot; text-anchor=&quot;start&quot; &gt;AI Gateway adds the verified&lt;/text&gt;
&lt;text class=&quot;rs&quot; x=&quot;556&quot; y=&quot;859&quot; text-anchor=&quot;start&quot; &gt;user ID to each model call.&lt;/text&gt;
&lt;path class=&quot;chev&quot; d=&quot;M790 826 l8 13 l-8 13&quot;/&gt;
&lt;text class=&quot;rt&quot; x=&quot;806&quot; y=&quot;822&quot; text-anchor=&quot;start&quot; &gt;Tools&lt;/text&gt;
&lt;text class=&quot;rs&quot; x=&quot;806&quot; y=&quot;842&quot; text-anchor=&quot;start&quot; &gt;The portal offers only the&lt;/text&gt;
&lt;text class=&quot;rs&quot; x=&quot;806&quot; y=&quot;859&quot; text-anchor=&quot;start&quot; &gt;servers and tools you approve.&lt;/text&gt;
&lt;path class=&quot;chev&quot; d=&quot;M1040 826 l8 13 l-8 13&quot;/&gt;
&lt;text class=&quot;rt&quot; x=&quot;1056&quot; y=&quot;822&quot; text-anchor=&quot;start&quot; &gt;Systems&lt;/text&gt;
&lt;text class=&quot;rs&quot; x=&quot;1056&quot; y=&quot;842&quot; text-anchor=&quot;start&quot; &gt;OAuth servers ask each user to&lt;/text&gt;
&lt;text class=&quot;rs&quot; x=&quot;1056&quot; y=&quot;859&quot; text-anchor=&quot;start&quot; &gt;sign in with their own login.&lt;/text&gt;
&lt;path class=&quot;chev&quot; d=&quot;M1290 826 l8 13 l-8 13&quot;/&gt;
&lt;text class=&quot;rt&quot; x=&quot;1306&quot; y=&quot;822&quot; text-anchor=&quot;start&quot; &gt;Evidence&lt;/text&gt;
&lt;text class=&quot;rs&quot; x=&quot;1306&quot; y=&quot;842&quot; text-anchor=&quot;start&quot; &gt;Access, Gateway and AI Gateway&lt;/text&gt;
&lt;text class=&quot;rs&quot; x=&quot;1306&quot; y=&quot;859&quot; text-anchor=&quot;start&quot; &gt;log who did what, sent to SIEM.&lt;/text&gt;
&lt;text class=&quot;src&quot; x=&quot;1570&quot; y=&quot;896&quot; text-anchor=&quot;end&quot; &gt;Sources: Cloudflare docs for AI Gateway, MCP server portals, Access, Gateway, CASB, Logpush, Sandboxes (coding agents), Dynamic Workers, Tunnel, Mesh, Cloudflare OS.&lt;/text&gt;
&lt;/svg&gt;&lt;/div&gt;&lt;figcaption&gt;AI security on Cloudflare: one identity from login to tool call.&lt;/figcaption&gt;&lt;/figure&gt;&lt;h2 id=&quot;a3-where-does-inference-run&quot;&gt;&lt;a class=&quot;anchor&quot; href=&quot;#a3-where-does-inference-run&quot;&gt;A3. Where does inference run?&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Where the model runs decides where your data goes, what it costs and who operates it. AI Gateway and Access work with all three options.&lt;/p&gt;
&lt;figure class=&quot;fig diagram&quot;&gt;&lt;svg class=&quot;min&quot; viewBox=&quot;0 0 1100 470&quot; role=&quot;img&quot; aria-label=&quot;Select where the model runs&quot;&gt;&lt;g class=&quot;edge&quot;&gt;&lt;path d=&quot;M450 72 L330 158&quot; marker-end=&quot;url(#ar)&quot;/&gt;&lt;path d=&quot;M650 72 L880 158&quot; marker-end=&quot;url(#ar)&quot;/&gt;&lt;path d=&quot;M230 228 L160 298&quot; marker-end=&quot;url(#ar)&quot;/&gt;&lt;path d=&quot;M430 228 L480 298&quot; marker-end=&quot;url(#ar)&quot;/&gt;&lt;/g&gt;&lt;g class=&quot;yn&quot;&gt;&lt;rect x=&quot;362&quot; y=&quot;100&quot; width=&quot;28&quot; height=&quot;22&quot; rx=&quot;4&quot; fill=&quot;var(--surface)&quot;/&gt;&lt;text x=&quot;376&quot; y=&quot;116&quot; text-anchor=&quot;middle&quot;&gt;No&lt;/text&gt;&lt;rect x=&quot;758&quot; y=&quot;100&quot; width=&quot;36&quot; height=&quot;22&quot; rx=&quot;4&quot; fill=&quot;var(--surface)&quot;/&gt;&lt;text x=&quot;776&quot; y=&quot;116&quot; text-anchor=&quot;middle&quot;&gt;Yes&lt;/text&gt;&lt;rect x=&quot;168&quot; y=&quot;250&quot; width=&quot;36&quot; height=&quot;22&quot; rx=&quot;4&quot; fill=&quot;var(--surface)&quot;/&gt;&lt;text x=&quot;186&quot; y=&quot;266&quot; text-anchor=&quot;middle&quot;&gt;Yes&lt;/text&gt;&lt;rect x=&quot;452&quot; y=&quot;250&quot; width=&quot;28&quot; height=&quot;22&quot; rx=&quot;4&quot; fill=&quot;var(--surface)&quot;/&gt;&lt;text x=&quot;466&quot; y=&quot;266&quot; text-anchor=&quot;middle&quot;&gt;No&lt;/text&gt;&lt;/g&gt;&lt;rect class=&quot;q&quot; x=&quot;290&quot; y=&quot;10&quot; width=&quot;520&quot; height=&quot;62&quot; rx=&quot;10&quot;/&gt;&lt;text class=&quot;qt&quot; x=&quot;550&quot; y=&quot;36&quot; text-anchor=&quot;middle&quot;&gt;Must the data stay inside&lt;/text&gt;&lt;text class=&quot;qt&quot; x=&quot;550&quot; y=&quot;56&quot; text-anchor=&quot;middle&quot;&gt;your company network?&lt;/text&gt;&lt;rect class=&quot;q&quot; x=&quot;110&quot; y=&quot;160&quot; width=&quot;440&quot; height=&quot;70&quot; rx=&quot;10&quot;/&gt;&lt;text class=&quot;qt&quot; x=&quot;330&quot; y=&quot;190&quot; text-anchor=&quot;middle&quot;&gt;Do you need models from&lt;/text&gt;&lt;text class=&quot;qt&quot; x=&quot;330&quot; y=&quot;210&quot; text-anchor=&quot;middle&quot;&gt;OpenAI, Anthropic or Google?&lt;/text&gt;&lt;rect class=&quot;o-rt&quot; x=&quot;5&quot; y=&quot;300&quot; width=&quot;290&quot; height=&quot;120&quot; rx=&quot;10&quot;/&gt;&lt;text class=&quot;t&quot; x=&quot;150&quot; y=&quot;327&quot; text-anchor=&quot;middle&quot;&gt;I2  Hosted providers&lt;/text&gt;&lt;text class=&quot;s&quot; x=&quot;150&quot; y=&quot;350&quot; text-anchor=&quot;middle&quot;&gt;through AI Gateway:&lt;/text&gt;&lt;text class=&quot;s&quot; x=&quot;150&quot; y=&quot;368&quot; text-anchor=&quot;middle&quot;&gt;one place for logs,&lt;/text&gt;&lt;text class=&quot;s&quot; x=&quot;150&quot; y=&quot;386&quot; text-anchor=&quot;middle&quot;&gt;limits and fallback&lt;/text&gt;&lt;rect class=&quot;o-model&quot; x=&quot;340&quot; y=&quot;300&quot; width=&quot;280&quot; height=&quot;120&quot; rx=&quot;10&quot;/&gt;&lt;text class=&quot;t&quot; x=&quot;480&quot; y=&quot;327&quot; text-anchor=&quot;middle&quot;&gt;I1  Workers AI&lt;/text&gt;&lt;text class=&quot;s&quot; x=&quot;480&quot; y=&quot;350&quot; text-anchor=&quot;middle&quot;&gt;models on Cloudflare,&lt;/text&gt;&lt;text class=&quot;s&quot; x=&quot;480&quot; y=&quot;368&quot; text-anchor=&quot;middle&quot;&gt;no API keys,&lt;/text&gt;&lt;text class=&quot;s&quot; x=&quot;480&quot; y=&quot;386&quot; text-anchor=&quot;middle&quot;&gt;the simplest start&lt;/text&gt;&lt;rect class=&quot;o-flow&quot; x=&quot;730&quot; y=&quot;160&quot; width=&quot;300&quot; height=&quot;140&quot; rx=&quot;10&quot;/&gt;&lt;text class=&quot;t&quot; x=&quot;880&quot; y=&quot;187&quot; text-anchor=&quot;middle&quot;&gt;I3  Private inference&lt;/text&gt;&lt;text class=&quot;s&quot; x=&quot;880&quot; y=&quot;210&quot; text-anchor=&quot;middle&quot;&gt;your own machines,&lt;/text&gt;&lt;text class=&quot;s&quot; x=&quot;880&quot; y=&quot;228&quot; text-anchor=&quot;middle&quot;&gt;reached over Mesh,&lt;/text&gt;&lt;text class=&quot;s&quot; x=&quot;880&quot; y=&quot;246&quot; text-anchor=&quot;middle&quot;&gt;data stays on your network&lt;/text&gt;&lt;text class=&quot;s&quot; x=&quot;550&quot; y=&quot;452&quot; text-anchor=&quot;middle&quot;&gt;You can combine them: use I2 for general work and I3 for sensitive work.&lt;/text&gt;&lt;/svg&gt;&lt;figcaption&gt;Select where the model runs.&lt;/figcaption&gt;&lt;/figure&gt;&lt;div class=&quot;table-wrap&quot;&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Option&lt;/th&gt;
&lt;th&gt;Use when&lt;/th&gt;
&lt;th&gt;Data boundary&lt;/th&gt;
&lt;th&gt;You operate&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td data-label=&quot;Option&quot;&gt;&lt;strong&gt;I1. &lt;a href=&quot;https://developers.cloudflare.com/workers-ai/&quot; rel=&quot;noopener&quot;&gt;Workers AI&lt;/a&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td data-label=&quot;Use when&quot;&gt;You want models without API keys, billed on Cloudflare, called through the AI binding.&lt;/td&gt;
&lt;td data-label=&quot;Data boundary&quot;&gt;Stays on Cloudflare.&lt;/td&gt;
&lt;td data-label=&quot;You operate&quot;&gt;Nothing.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td data-label=&quot;Option&quot;&gt;&lt;strong&gt;I2. Hosted providers through AI Gateway&lt;/strong&gt;&lt;/td&gt;
&lt;td data-label=&quot;Use when&quot;&gt;You need frontier models from OpenAI, Anthropic, Google and others, with one place for logs, limits and fallback.&lt;/td&gt;
&lt;td data-label=&quot;Data boundary&quot;&gt;Prompts go to the provider, with gateway guardrails and DLP in between.&lt;/td&gt;
&lt;td data-label=&quot;You operate&quot;&gt;Provider keys and routing rules.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td data-label=&quot;Option&quot;&gt;&lt;strong&gt;I3. Private inference on hardware you own&lt;/strong&gt;&lt;/td&gt;
&lt;td data-label=&quot;Use when&quot;&gt;Some work must not leave the company boundary, or you want to use idle machines as low-cost capacity.&lt;/td&gt;
&lt;td data-label=&quot;Data boundary&quot;&gt;Prompts stay on your network, reached over private routes.&lt;/td&gt;
&lt;td data-label=&quot;You operate&quot;&gt;The machines, model serving and capacity.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;
&lt;h3 id=&quot;the-idea-of-a-local-inference-mesh&quot;&gt;&lt;a class=&quot;anchor&quot; href=&quot;#the-idea-of-a-local-inference-mesh&quot;&gt;The idea of a local inference mesh&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Your company may own idle computers: developer Macs, GPU workstations, spare servers. A mesh can join them into one pool of private model capacity. Agents call one controlled entry point, and a router picks where each request runs. Sensitive work runs on the private nodes, so sensitive prompts never leave the company network. Idle hardware takes over part of the work that would otherwise go to hosted models. Hosted providers stay as the default or fallback, so a busy mesh does not stop work.&lt;/p&gt;
&lt;figure class=&quot;fig diagram&quot;&gt;&lt;svg class=&quot;min&quot; viewBox=&quot;0 0 1130 330&quot; role=&quot;img&quot; aria-label=&quot;Request flow from agent through AI Gateway and router to hosted provider or private node over Mesh&quot;&gt;
        &lt;rect class=&quot;node&quot; x=&quot;0&quot; y=&quot;124&quot; width=&quot;170&quot; height=&quot;82&quot; rx=&quot;10&quot;/&gt;&lt;text class=&quot;t&quot; x=&quot;85&quot; y=&quot;158&quot; text-anchor=&quot;middle&quot;&gt;Agent or app&lt;/text&gt;&lt;text class=&quot;s&quot; x=&quot;85&quot; y=&quot;180&quot; text-anchor=&quot;middle&quot;&gt;one endpoint&lt;/text&gt;
        &lt;rect class=&quot;o-rt&quot; x=&quot;220&quot; y=&quot;94&quot; width=&quot;230&quot; height=&quot;142&quot; rx=&quot;10&quot;/&gt;&lt;text class=&quot;t&quot; x=&quot;335&quot; y=&quot;124&quot; text-anchor=&quot;middle&quot;&gt;AI Gateway&lt;/text&gt;
        &lt;text class=&quot;s&quot; x=&quot;335&quot; y=&quot;150&quot; text-anchor=&quot;middle&quot;&gt;identity, budgets, logs&lt;/text&gt;&lt;text class=&quot;s&quot; x=&quot;335&quot; y=&quot;170&quot; text-anchor=&quot;middle&quot;&gt;guardrails, DLP&lt;/text&gt;&lt;text class=&quot;m&quot; x=&quot;335&quot; y=&quot;200&quot; text-anchor=&quot;middle&quot;&gt;same policy for every route&lt;/text&gt;
        &lt;rect class=&quot;o-flow&quot; x=&quot;500&quot; y=&quot;124&quot; width=&quot;170&quot; height=&quot;82&quot; rx=&quot;10&quot;/&gt;&lt;text class=&quot;t&quot; x=&quot;585&quot; y=&quot;158&quot; text-anchor=&quot;middle&quot;&gt;Router&lt;/text&gt;&lt;text class=&quot;s&quot; x=&quot;585&quot; y=&quot;180&quot; text-anchor=&quot;middle&quot;&gt;picks the route&lt;/text&gt;
        &lt;rect class=&quot;o-model&quot; x=&quot;740&quot; y=&quot;14&quot; width=&quot;390&quot; height=&quot;92&quot; rx=&quot;10&quot;/&gt;&lt;text class=&quot;t&quot; x=&quot;935&quot; y=&quot;46&quot; text-anchor=&quot;middle&quot;&gt;Hosted provider&lt;/text&gt;&lt;text class=&quot;s&quot; x=&quot;935&quot; y=&quot;68&quot; text-anchor=&quot;middle&quot;&gt;default for general work, or fallback when&lt;/text&gt;&lt;text class=&quot;s&quot; x=&quot;935&quot; y=&quot;86&quot; text-anchor=&quot;middle&quot;&gt;private capacity is busy&lt;/text&gt;
        &lt;rect class=&quot;o-flow&quot; x=&quot;740&quot; y=&quot;224&quot; width=&quot;190&quot; height=&quot;92&quot; rx=&quot;10&quot;/&gt;&lt;text class=&quot;t&quot; x=&quot;835&quot; y=&quot;256&quot; text-anchor=&quot;middle&quot;&gt;Mesh + Zero Trust&lt;/text&gt;&lt;text class=&quot;s&quot; x=&quot;835&quot; y=&quot;278&quot; text-anchor=&quot;middle&quot;&gt;private route, scoped&lt;/text&gt;&lt;text class=&quot;s&quot; x=&quot;835&quot; y=&quot;296&quot; text-anchor=&quot;middle&quot;&gt;by policy&lt;/text&gt;
        &lt;rect class=&quot;o-model&quot; x=&quot;960&quot; y=&quot;224&quot; width=&quot;170&quot; height=&quot;92&quot; rx=&quot;10&quot;/&gt;&lt;text class=&quot;t&quot; x=&quot;1045&quot; y=&quot;256&quot; text-anchor=&quot;middle&quot;&gt;Private node&lt;/text&gt;&lt;text class=&quot;s&quot; x=&quot;1045&quot; y=&quot;278&quot; text-anchor=&quot;middle&quot;&gt;idle Mac or GPU box&lt;/text&gt;&lt;text class=&quot;s&quot; x=&quot;1045&quot; y=&quot;296&quot; text-anchor=&quot;middle&quot;&gt;serves the model&lt;/text&gt;
        &lt;g class=&quot;edge-strong&quot;&gt;&lt;path d=&quot;M170 165 L218 165&quot; marker-end=&quot;url(#ar)&quot;/&gt;&lt;path d=&quot;M450 165 L498 165&quot; marker-end=&quot;url(#ar)&quot;/&gt;&lt;path d=&quot;M670 145 L738 70&quot; marker-end=&quot;url(#ar)&quot;/&gt;&lt;path d=&quot;M670 185 L738 260&quot; marker-end=&quot;url(#ar)&quot;/&gt;&lt;path d=&quot;M930 270 L958 270&quot; marker-end=&quot;url(#ar)&quot;/&gt;&lt;/g&gt;
        &lt;text class=&quot;yn&quot; x=&quot;732&quot; y=&quot;56&quot; text-anchor=&quot;end&quot;&gt;general work&lt;/text&gt;
        &lt;text class=&quot;yn&quot; x=&quot;700&quot; y=&quot;296&quot; text-anchor=&quot;end&quot;&gt;sensitive work&lt;/text&gt;
      &lt;/svg&gt;&lt;figcaption&gt;A local inference mesh behind one gateway.&lt;/figcaption&gt;&lt;/figure&gt;&lt;p&gt;Three Cloudflare pieces make it governable:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;AI Gateway is the front door. It applies identity, budgets, guardrails, DLP and logs to every route, private or hosted.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/mesh/&quot; rel=&quot;noopener&quot;&gt;Cloudflare Mesh&lt;/a&gt; gives each enrolled server or laptop a private Mesh IP and lets nodes advertise routes. Zero Trust policy decides who can reach which node.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/ai-gateway/configuration/custom-providers/&quot; rel=&quot;noopener&quot;&gt;AI Gateway custom providers&lt;/a&gt; connect models that have an HTTPS API endpoint, including self-hosted models, so the same logs, limits and guardrails apply.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I do not cover how the gateway reaches the private machines (Mesh, Tunnel or Workers VPC, which is in beta). Check the network path for your setup.&lt;/p&gt;
&lt;h2 id=&quot;a4-internal-it-and-engineering-the-governed-agent-workspace&quot;&gt;&lt;a class=&quot;anchor&quot; href=&quot;#a4-internal-it-and-engineering-the-governed-agent-workspace&quot;&gt;A4. Internal IT and engineering: the governed agent workspace&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;This is the shape from the start of this part, built out for case B. Engineers and operations staff work with AI agents that change code and infrastructure, under rules your company sets. It combines the controls from A2 around one session, with one gate in front and one on every exit.&lt;/p&gt;
&lt;figure class=&quot;fig diagram&quot;&gt;&lt;svg class=&quot;min&quot; viewBox=&quot;0 0 1130 690&quot; role=&quot;img&quot; aria-label=&quot;Architecture of a governed agent workspace&quot;&gt;
        &lt;text class=&quot;lab-rt&quot; x=&quot;0&quot; y=&quot;20&quot;&gt;Who&lt;/text&gt;
        &lt;rect class=&quot;node&quot; x=&quot;0&quot; y=&quot;270&quot; width=&quot;150&quot; height=&quot;110&quot; rx=&quot;10&quot;/&gt;&lt;text class=&quot;t&quot; x=&quot;75&quot; y=&quot;306&quot; text-anchor=&quot;middle&quot;&gt;Engineer or&lt;/text&gt;&lt;text class=&quot;t&quot; x=&quot;75&quot; y=&quot;326&quot; text-anchor=&quot;middle&quot;&gt;ops person&lt;/text&gt;&lt;text class=&quot;s&quot; x=&quot;75&quot; y=&quot;352&quot; text-anchor=&quot;middle&quot;&gt;browser only&lt;/text&gt;
        &lt;rect class=&quot;node&quot; x=&quot;0&quot; y=&quot;450&quot; width=&quot;150&quot; height=&quot;80&quot; rx=&quot;10&quot;/&gt;&lt;text class=&quot;s&quot; x=&quot;75&quot; y=&quot;482&quot; text-anchor=&quot;middle&quot;&gt;Triggers: ticket,&lt;/text&gt;&lt;text class=&quot;s&quot; x=&quot;75&quot; y=&quot;500&quot; text-anchor=&quot;middle&quot;&gt;PR, schedule&lt;/text&gt;
        &lt;g class=&quot;edge-strong&quot;&gt;&lt;path d=&quot;M150 325 L196 325&quot; marker-end=&quot;url(#ar)&quot;/&gt;&lt;path d=&quot;M150 490 L196 440&quot; marker-end=&quot;url(#ar)&quot;/&gt;&lt;/g&gt;
        &lt;rect class=&quot;o-sec&quot; x=&quot;198&quot; y=&quot;30&quot; width=&quot;120&quot; height=&quot;540&quot; rx=&quot;10&quot;/&gt;
        &lt;text class=&quot;lab-sec&quot; x=&quot;212&quot; y=&quot;52&quot;&gt;Gate 1&lt;/text&gt;
        &lt;text class=&quot;t&quot; x=&quot;258&quot; y=&quot;100&quot; text-anchor=&quot;middle&quot;&gt;Access&lt;/text&gt;
        &lt;text class=&quot;s&quot; x=&quot;258&quot; y=&quot;124&quot; text-anchor=&quot;middle&quot;&gt;your IdP,&lt;/text&gt;&lt;text class=&quot;s&quot; x=&quot;258&quot; y=&quot;142&quot; text-anchor=&quot;middle&quot;&gt;one session&lt;/text&gt;&lt;text class=&quot;s&quot; x=&quot;258&quot; y=&quot;160&quot; text-anchor=&quot;middle&quot;&gt;identity,&lt;/text&gt;&lt;text class=&quot;s&quot; x=&quot;258&quot; y=&quot;178&quot; text-anchor=&quot;middle&quot;&gt;device&lt;/text&gt;&lt;text class=&quot;s&quot; x=&quot;258&quot; y=&quot;196&quot; text-anchor=&quot;middle&quot;&gt;posture&lt;/text&gt;
        &lt;g class=&quot;edge-strong&quot;&gt;&lt;path d=&quot;M318 325 L352 325&quot; marker-end=&quot;url(#ar)&quot;/&gt;&lt;/g&gt;
        &lt;rect class=&quot;o-rt s-nofill&quot; x=&quot;354&quot; y=&quot;30&quot; width=&quot;330&quot; height=&quot;610&quot; rx=&quot;12&quot;/&gt;
        &lt;text class=&quot;lab-rt&quot; x=&quot;370&quot; y=&quot;52&quot;&gt;Session in your tenancy&lt;/text&gt;
        &lt;rect class=&quot;chip-rt&quot; x=&quot;370&quot; y=&quot;66&quot; width=&quot;298&quot; height=&quot;112&quot; rx=&quot;10&quot;/&gt;&lt;text class=&quot;t&quot; x=&quot;519&quot; y=&quot;96&quot; text-anchor=&quot;middle&quot;&gt;Agent harness&lt;/text&gt;&lt;text class=&quot;s&quot; x=&quot;519&quot; y=&quot;120&quot; text-anchor=&quot;middle&quot;&gt;loop, memory, sub-agents&lt;/text&gt;&lt;text class=&quot;m&quot; x=&quot;519&quot; y=&quot;142&quot; text-anchor=&quot;middle&quot;&gt;Think, AIChatAgent, own loop&lt;/text&gt;&lt;text class=&quot;m&quot; x=&quot;519&quot; y=&quot;160&quot; text-anchor=&quot;middle&quot;&gt;or a coding agent (Part B)&lt;/text&gt;
        &lt;rect class=&quot;chip-rt&quot; x=&quot;370&quot; y=&quot;200&quot; width=&quot;298&quot; height=&quot;104&quot; rx=&quot;10&quot;/&gt;&lt;text class=&quot;t&quot; x=&quot;519&quot; y=&quot;230&quot; text-anchor=&quot;middle&quot;&gt;Workspace&lt;/text&gt;&lt;text class=&quot;s&quot; x=&quot;519&quot; y=&quot;254&quot; text-anchor=&quot;middle&quot;&gt;repo, spec, tests, skills&lt;/text&gt;&lt;text class=&quot;m&quot; x=&quot;519&quot; y=&quot;276&quot; text-anchor=&quot;middle&quot;&gt;kept in the session, not on the laptop&lt;/text&gt;
        &lt;rect class=&quot;chip-rt&quot; x=&quot;370&quot; y=&quot;326&quot; width=&quot;298&quot; height=&quot;104&quot; rx=&quot;10&quot;/&gt;&lt;text class=&quot;t&quot; x=&quot;519&quot; y=&quot;356&quot; text-anchor=&quot;middle&quot;&gt;Isolation&lt;/text&gt;&lt;text class=&quot;s&quot; x=&quot;519&quot; y=&quot;380&quot; text-anchor=&quot;middle&quot;&gt;container or Sandbox,&lt;/text&gt;&lt;text class=&quot;s&quot; x=&quot;519&quot; y=&quot;398&quot; text-anchor=&quot;middle&quot;&gt;destroyed on exit&lt;/text&gt;
        &lt;rect class=&quot;chip-rt&quot; x=&quot;370&quot; y=&quot;452&quot; width=&quot;298&quot; height=&quot;104&quot; rx=&quot;10&quot;/&gt;&lt;text class=&quot;t&quot; x=&quot;519&quot; y=&quot;482&quot; text-anchor=&quot;middle&quot;&gt;Code Mode, Dynamic Workers&lt;/text&gt;&lt;text class=&quot;s&quot; x=&quot;519&quot; y=&quot;506&quot; text-anchor=&quot;middle&quot;&gt;generated code runs in an&lt;/text&gt;&lt;text class=&quot;s&quot; x=&quot;519&quot; y=&quot;524&quot; text-anchor=&quot;middle&quot;&gt;isolate with no ambient rights&lt;/text&gt;
        &lt;text class=&quot;lab-sec&quot; x=&quot;730&quot; y=&quot;20&quot;&gt;Gate 2: every exit&lt;/text&gt;
        &lt;rect class=&quot;o-rt&quot; x=&quot;730&quot; y=&quot;60&quot; width=&quot;190&quot; height=&quot;100&quot; rx=&quot;10&quot;/&gt;&lt;text class=&quot;t&quot; x=&quot;825&quot; y=&quot;90&quot; text-anchor=&quot;middle&quot;&gt;AI Gateway&lt;/text&gt;&lt;text class=&quot;s&quot; x=&quot;825&quot; y=&quot;112&quot; text-anchor=&quot;middle&quot;&gt;model calls, DLP,&lt;/text&gt;&lt;text class=&quot;s&quot; x=&quot;825&quot; y=&quot;130&quot; text-anchor=&quot;middle&quot;&gt;guardrails, attribution&lt;/text&gt;
        &lt;rect class=&quot;o-mcp&quot; x=&quot;730&quot; y=&quot;190&quot; width=&quot;190&quot; height=&quot;100&quot; rx=&quot;10&quot;/&gt;&lt;text class=&quot;t&quot; x=&quot;825&quot; y=&quot;220&quot; text-anchor=&quot;middle&quot;&gt;MCP portal&lt;/text&gt;&lt;text class=&quot;s&quot; x=&quot;825&quot; y=&quot;242&quot; text-anchor=&quot;middle&quot;&gt;tools scoped per role,&lt;/text&gt;&lt;text class=&quot;s&quot; x=&quot;825&quot; y=&quot;260&quot; text-anchor=&quot;middle&quot;&gt;Code Mode, logs&lt;/text&gt;
        &lt;rect class=&quot;o-flow&quot; x=&quot;730&quot; y=&quot;320&quot; width=&quot;190&quot; height=&quot;100&quot; rx=&quot;10&quot;/&gt;&lt;text class=&quot;t&quot; x=&quot;825&quot; y=&quot;350&quot; text-anchor=&quot;middle&quot;&gt;Zero Trust routes&lt;/text&gt;&lt;text class=&quot;s&quot; x=&quot;825&quot; y=&quot;372&quot; text-anchor=&quot;middle&quot;&gt;Mesh or Tunnel, only what&lt;/text&gt;&lt;text class=&quot;s&quot; x=&quot;825&quot; y=&quot;390&quot; text-anchor=&quot;middle&quot;&gt;the group may reach&lt;/text&gt;
        &lt;rect class=&quot;node&quot; x=&quot;730&quot; y=&quot;450&quot; width=&quot;190&quot; height=&quot;100&quot; rx=&quot;10&quot;/&gt;&lt;text class=&quot;t&quot; x=&quot;825&quot; y=&quot;480&quot; text-anchor=&quot;middle&quot;&gt;Git, CI, review&lt;/text&gt;&lt;text class=&quot;s&quot; x=&quot;825&quot; y=&quot;502&quot; text-anchor=&quot;middle&quot;&gt;branch protection, review&lt;/text&gt;&lt;text class=&quot;s&quot; x=&quot;825&quot; y=&quot;520&quot; text-anchor=&quot;middle&quot;&gt;agents, human approval&lt;/text&gt;
        &lt;g class=&quot;edge-strong&quot;&gt;&lt;path d=&quot;M668 110 L728 110&quot; marker-end=&quot;url(#ar)&quot;/&gt;&lt;path d=&quot;M668 240 L728 240&quot; marker-end=&quot;url(#ar)&quot;/&gt;&lt;path d=&quot;M668 370 L728 370&quot; marker-end=&quot;url(#ar)&quot;/&gt;&lt;path d=&quot;M668 500 L728 500&quot; marker-end=&quot;url(#ar)&quot;/&gt;&lt;/g&gt;
        &lt;text class=&quot;lab-model&quot; x=&quot;960&quot; y=&quot;20&quot;&gt;Targets&lt;/text&gt;
        &lt;rect class=&quot;o-model&quot; x=&quot;960&quot; y=&quot;60&quot; width=&quot;170&quot; height=&quot;100&quot; rx=&quot;10&quot;/&gt;&lt;text class=&quot;t&quot; x=&quot;1045&quot; y=&quot;90&quot; text-anchor=&quot;middle&quot;&gt;Models&lt;/text&gt;&lt;text class=&quot;s&quot; x=&quot;1045&quot; y=&quot;112&quot; text-anchor=&quot;middle&quot;&gt;hosted, Workers AI,&lt;/text&gt;&lt;text class=&quot;s&quot; x=&quot;1045&quot; y=&quot;130&quot; text-anchor=&quot;middle&quot;&gt;private mesh (A3)&lt;/text&gt;
        &lt;rect class=&quot;node&quot; x=&quot;960&quot; y=&quot;190&quot; width=&quot;170&quot; height=&quot;100&quot; rx=&quot;10&quot;/&gt;&lt;text class=&quot;t&quot; x=&quot;1045&quot; y=&quot;220&quot; text-anchor=&quot;middle&quot;&gt;MCP servers&lt;/text&gt;&lt;text class=&quot;s&quot; x=&quot;1045&quot; y=&quot;242&quot; text-anchor=&quot;middle&quot;&gt;internal and SaaS&lt;/text&gt;
        &lt;rect class=&quot;node&quot; x=&quot;960&quot; y=&quot;320&quot; width=&quot;170&quot; height=&quot;100&quot; rx=&quot;10&quot;/&gt;&lt;text class=&quot;t&quot; x=&quot;1045&quot; y=&quot;350&quot; text-anchor=&quot;middle&quot;&gt;Hosts, databases,&lt;/text&gt;&lt;text class=&quot;t&quot; x=&quot;1045&quot; y=&quot;370&quot; text-anchor=&quot;middle&quot;&gt;firewalls&lt;/text&gt;&lt;text class=&quot;s&quot; x=&quot;1045&quot; y=&quot;394&quot; text-anchor=&quot;middle&quot;&gt;approved targets&lt;/text&gt;
        &lt;rect class=&quot;node&quot; x=&quot;960&quot; y=&quot;450&quot; width=&quot;170&quot; height=&quot;100&quot; rx=&quot;10&quot;/&gt;&lt;text class=&quot;t&quot; x=&quot;1045&quot; y=&quot;480&quot; text-anchor=&quot;middle&quot;&gt;Main branch,&lt;/text&gt;&lt;text class=&quot;t&quot; x=&quot;1045&quot; y=&quot;500&quot; text-anchor=&quot;middle&quot;&gt;deploy&lt;/text&gt;&lt;text class=&quot;s&quot; x=&quot;1045&quot; y=&quot;524&quot; text-anchor=&quot;middle&quot;&gt;a human merges&lt;/text&gt;
        &lt;g class=&quot;edge-strong&quot;&gt;&lt;path d=&quot;M920 110 L958 110&quot; marker-end=&quot;url(#ar)&quot;/&gt;&lt;path d=&quot;M920 240 L958 240&quot; marker-end=&quot;url(#ar)&quot;/&gt;&lt;path d=&quot;M920 370 L958 370&quot; marker-end=&quot;url(#ar)&quot;/&gt;&lt;path d=&quot;M920 500 L958 500&quot; marker-end=&quot;url(#ar)&quot;/&gt;&lt;/g&gt;
        &lt;path d=&quot;M705 590 L955 590&quot; class=&quot;edge s-secdash&quot;/&gt;
        &lt;text class=&quot;yn s-fillsec&quot; x=&quot;836&quot; y=&quot;580&quot; text-anchor=&quot;middle&quot;&gt;direct call to a provider: denied&lt;/text&gt;
        &lt;text class=&quot;m&quot; x=&quot;836&quot; y=&quot;612&quot; text-anchor=&quot;middle&quot;&gt;can be blocked with a Gateway policy&lt;/text&gt;
        &lt;rect class=&quot;chip-sec&quot; x=&quot;198&quot; y=&quot;660&quot; width=&quot;932&quot; height=&quot;28&quot; rx=&quot;8&quot;/&gt;&lt;text class=&quot;s&quot; x=&quot;664&quot; y=&quot;679&quot; text-anchor=&quot;middle&quot;&gt;Evidence: who reached what, when and under which policy, logged to your own SIEM (Logpush)&lt;/text&gt;
      &lt;/svg&gt;&lt;figcaption&gt;A governed agent workspace: one gate in, one gate on every exit.&lt;/figcaption&gt;&lt;/figure&gt;&lt;p&gt;Your engineers may already use agents. Without a sanctioned path they use personal keys and tools, and central IT has no log, budget or policy. A governed workspace sets identity, model access, tool access and network reach once, not per laptop and per tool. An agent that patches servers or changes a firewall needs a limited route and an approved plan. Changes go through your own git, CI and branch protection, and a person approves the merge or the change.&lt;/p&gt;
&lt;div class=&quot;table-wrap&quot;&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Element&lt;/th&gt;
&lt;th&gt;What it does&lt;/th&gt;
&lt;th&gt;Built from&lt;/th&gt;
&lt;th&gt;Docs&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td data-label=&quot;Element&quot;&gt;Session entry&lt;/td&gt;
&lt;td data-label=&quot;What it does&quot;&gt;The user signs in through your IdP. A browser session means nothing is installed on the laptop.&lt;/td&gt;
&lt;td data-label=&quot;Built from&quot;&gt;Access in front of the workspace, with device posture checks.&lt;/td&gt;
&lt;td data-label=&quot;Docs&quot;&gt;&lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/access-controls/&quot; rel=&quot;noopener&quot;&gt;Access&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td data-label=&quot;Element&quot;&gt;Isolation&lt;/td&gt;
&lt;td data-label=&quot;What it does&quot;&gt;Each session runs in an isolated environment in your own account, removed on exit.&lt;/td&gt;
&lt;td data-label=&quot;Built from&quot;&gt;Sandboxes (a Container, which is a Linux microVM, or a Dynamic Worker) or Containers.&lt;/td&gt;
&lt;td data-label=&quot;Docs&quot;&gt;&lt;a href=&quot;https://developers.cloudflare.com/sandbox/&quot; rel=&quot;noopener&quot;&gt;Sandboxes&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td data-label=&quot;Element&quot;&gt;Agent harness&lt;/td&gt;
&lt;td data-label=&quot;What it does&quot;&gt;Runs the loop, keeps memory, delegates to sub-agents.&lt;/td&gt;
&lt;td data-label=&quot;Built from&quot;&gt;Think, AIChatAgent or your own loop (Part B), or an existing coding agent.&lt;/td&gt;
&lt;td data-label=&quot;Docs&quot;&gt;&lt;a href=&quot;https://developers.cloudflare.com/agents/&quot; rel=&quot;noopener&quot;&gt;Agents&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td data-label=&quot;Element&quot;&gt;Model access&lt;/td&gt;
&lt;td data-label=&quot;What it does&quot;&gt;Model calls go through the gateway. Provider keys are stored in the gateway, prompts are scanned, and each request carries the verified Access user ID.&lt;/td&gt;
&lt;td data-label=&quot;Built from&quot;&gt;AI Gateway behind Access, stored keys, guardrails and DLP. Gateway policies can block direct provider endpoints.&lt;/td&gt;
&lt;td data-label=&quot;Docs&quot;&gt;&lt;a href=&quot;https://developers.cloudflare.com/ai-gateway/configuration/cloudflare-access/&quot; rel=&quot;noopener&quot;&gt;AI Gateway with Access&lt;/a&gt;, &lt;a href=&quot;https://developers.cloudflare.com/ai-gateway/configuration/bring-your-own-keys/&quot; rel=&quot;noopener&quot;&gt;stored keys&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td data-label=&quot;Element&quot;&gt;Tools&lt;/td&gt;
&lt;td data-label=&quot;What it does&quot;&gt;Agents get only the tools their role allows. Large tool sets collapse into a code tool.&lt;/td&gt;
&lt;td data-label=&quot;Built from&quot;&gt;MCP server portals with per-portal tools and Code Mode.&lt;/td&gt;
&lt;td data-label=&quot;Docs&quot;&gt;&lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/access-controls/ai-controls/mcp-portals/&quot; rel=&quot;noopener&quot;&gt;MCP server portals&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td data-label=&quot;Element&quot;&gt;Reach&lt;/td&gt;
&lt;td data-label=&quot;What it does&quot;&gt;Internal hosts, databases and control planes are reachable only on routes the user&amp;#39;s group is allowed.&lt;/td&gt;
&lt;td data-label=&quot;Built from&quot;&gt;Zero Trust client with private routes over Mesh or Tunnel.&lt;/td&gt;
&lt;td data-label=&quot;Docs&quot;&gt;&lt;a href=&quot;https://developers.cloudflare.com/mesh/&quot; rel=&quot;noopener&quot;&gt;Mesh&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td data-label=&quot;Element&quot;&gt;Change control&lt;/td&gt;
&lt;td data-label=&quot;What it does&quot;&gt;Changes flow through git, CI and branch protection, then reviewer agents, then a human approval.&lt;/td&gt;
&lt;td data-label=&quot;Built from&quot;&gt;Your own git and CI.&lt;/td&gt;
&lt;td data-label=&quot;Docs&quot;&gt;Not a Cloudflare product&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td data-label=&quot;Element&quot;&gt;Evidence&lt;/td&gt;
&lt;td data-label=&quot;What it does&quot;&gt;Every model call, tool call and connection is logged with user and policy.&lt;/td&gt;
&lt;td data-label=&quot;Built from&quot;&gt;AI Gateway logs, Access and Gateway logs, Logpush to a SIEM.&lt;/td&gt;
&lt;td data-label=&quot;Docs&quot;&gt;&lt;a href=&quot;https://developers.cloudflare.com/ai-gateway/observability/logging/logpush/&quot; rel=&quot;noopener&quot;&gt;AI Gateway Logpush&lt;/a&gt;, &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/insights/logs/&quot; rel=&quot;noopener&quot;&gt;Zero Trust logs&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td data-label=&quot;Element&quot;&gt;Private inference&lt;/td&gt;
&lt;td data-label=&quot;What it does&quot;&gt;Optional private model capacity on idle machines, behind the same gateway.&lt;/td&gt;
&lt;td data-label=&quot;Built from&quot;&gt;AI Gateway custom providers plus a private route (Mesh), see A3.&lt;/td&gt;
&lt;td data-label=&quot;Docs&quot;&gt;&lt;a href=&quot;https://developers.cloudflare.com/ai-gateway/configuration/custom-providers/&quot; rel=&quot;noopener&quot;&gt;Custom providers&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;
&lt;p&gt;The harness is a &lt;a href=&quot;https://kai.zone/writing/ai-agents-on-cloudflare-architecture/&quot;&gt;Part B&lt;/a&gt; decision. Think suits a stateful chat or operations agent. AIChatAgent or your own loop suit cases where you must control the model call. Patch rollouts and reviews are long tasks that must survive restarts, so a Workflow fits the approved, repeatable part: rollout in batches, rescan, close the ticket.&lt;/p&gt;
&lt;p&gt;Each gate protects only what passes through it. To control model egress, also block the direct provider endpoints. Start read-only for infrastructure agents and give write access per task, behind an approval step. Keep the human merge and the human approval of infrastructure plans.&lt;/p&gt;
&lt;h2 id=&quot;a5-where-does-agent-written-code-run-the-execution-ladder&quot;&gt;&lt;a class=&quot;anchor&quot; href=&quot;#a5-where-does-agent-written-code-run-the-execution-ladder&quot;&gt;A5. Where does agent-written code run? The execution ladder&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;When an agent writes and runs code, use the lightest environment that does the job.&lt;/p&gt;
&lt;figure class=&quot;fig diagram&quot;&gt;&lt;svg class=&quot;min&quot; viewBox=&quot;0 0 1300 740&quot; role=&quot;img&quot; aria-label=&quot;Select where agent-written code runs&quot;&gt;&lt;g class=&quot;edge&quot;&gt;&lt;path d=&quot;M495 60 L648 60&quot; marker-end=&quot;url(#ar)&quot;/&gt;&lt;path d=&quot;M260 98 L260 170&quot; marker-end=&quot;url(#ar)&quot;/&gt;&lt;path d=&quot;M495 210 L648 210&quot; marker-end=&quot;url(#ar)&quot;/&gt;&lt;path d=&quot;M260 248 L260 320&quot; marker-end=&quot;url(#ar)&quot;/&gt;&lt;path d=&quot;M495 360 L648 360&quot; marker-end=&quot;url(#ar)&quot;/&gt;&lt;path d=&quot;M260 398 L260 470&quot; marker-end=&quot;url(#ar)&quot;/&gt;&lt;path d=&quot;M495 510 L648 510&quot; marker-end=&quot;url(#ar)&quot;/&gt;&lt;path d=&quot;M260 548 L260 620&quot; marker-end=&quot;url(#ar)&quot;/&gt;&lt;/g&gt;&lt;g class=&quot;yn&quot;&gt;&lt;rect x=&quot;554&quot; y=&quot;48&quot; width=&quot;36&quot; height=&quot;22&quot; rx=&quot;4&quot; fill=&quot;var(--surface)&quot;/&gt;&lt;text x=&quot;572&quot; y=&quot;64&quot; text-anchor=&quot;middle&quot;&gt;Yes&lt;/text&gt;&lt;rect x=&quot;246&quot; y=&quot;123&quot; width=&quot;28&quot; height=&quot;22&quot; rx=&quot;4&quot; fill=&quot;var(--surface)&quot;/&gt;&lt;text x=&quot;260&quot; y=&quot;139&quot; text-anchor=&quot;middle&quot;&gt;No&lt;/text&gt;&lt;rect x=&quot;554&quot; y=&quot;198&quot; width=&quot;36&quot; height=&quot;22&quot; rx=&quot;4&quot; fill=&quot;var(--surface)&quot;/&gt;&lt;text x=&quot;572&quot; y=&quot;214&quot; text-anchor=&quot;middle&quot;&gt;Yes&lt;/text&gt;&lt;rect x=&quot;246&quot; y=&quot;273&quot; width=&quot;28&quot; height=&quot;22&quot; rx=&quot;4&quot; fill=&quot;var(--surface)&quot;/&gt;&lt;text x=&quot;260&quot; y=&quot;289&quot; text-anchor=&quot;middle&quot;&gt;No&lt;/text&gt;&lt;rect x=&quot;554&quot; y=&quot;348&quot; width=&quot;36&quot; height=&quot;22&quot; rx=&quot;4&quot; fill=&quot;var(--surface)&quot;/&gt;&lt;text x=&quot;572&quot; y=&quot;364&quot; text-anchor=&quot;middle&quot;&gt;Yes&lt;/text&gt;&lt;rect x=&quot;246&quot; y=&quot;423&quot; width=&quot;28&quot; height=&quot;22&quot; rx=&quot;4&quot; fill=&quot;var(--surface)&quot;/&gt;&lt;text x=&quot;260&quot; y=&quot;439&quot; text-anchor=&quot;middle&quot;&gt;No&lt;/text&gt;&lt;rect x=&quot;554&quot; y=&quot;498&quot; width=&quot;36&quot; height=&quot;22&quot; rx=&quot;4&quot; fill=&quot;var(--surface)&quot;/&gt;&lt;text x=&quot;572&quot; y=&quot;514&quot; text-anchor=&quot;middle&quot;&gt;Yes&lt;/text&gt;&lt;rect x=&quot;246&quot; y=&quot;573&quot; width=&quot;28&quot; height=&quot;22&quot; rx=&quot;4&quot; fill=&quot;var(--surface)&quot;/&gt;&lt;text x=&quot;260&quot; y=&quot;589&quot; text-anchor=&quot;middle&quot;&gt;No&lt;/text&gt;&lt;/g&gt;&lt;rect class=&quot;q&quot; x=&quot;25&quot; y=&quot;22&quot; width=&quot;470&quot; height=&quot;76&quot; rx=&quot;10&quot;/&gt;&lt;text class=&quot;qt&quot; x=&quot;260&quot; y=&quot;54&quot; text-anchor=&quot;middle&quot;&gt;Does the agent mainly call many tools&lt;/text&gt;&lt;text class=&quot;qt&quot; x=&quot;260&quot; y=&quot;76&quot; text-anchor=&quot;middle&quot;&gt;or one large API?&lt;/text&gt;&lt;rect class=&quot;o-mcp&quot; x=&quot;650&quot; y=&quot;10&quot; width=&quot;560&quot; height=&quot;100&quot; rx=&quot;10&quot;/&gt;&lt;text class=&quot;t&quot; x=&quot;930&quot; y=&quot;37&quot; text-anchor=&quot;middle&quot;&gt;E1  Code Mode&lt;/text&gt;&lt;text class=&quot;s&quot; x=&quot;930&quot; y=&quot;60&quot; text-anchor=&quot;middle&quot;&gt;the model writes one piece of code&lt;/text&gt;&lt;text class=&quot;s&quot; x=&quot;930&quot; y=&quot;78&quot; text-anchor=&quot;middle&quot;&gt;that calls your tools&lt;/text&gt;&lt;text class=&quot;s&quot; x=&quot;930&quot; y=&quot;96&quot; text-anchor=&quot;middle&quot;&gt;(experimental)&lt;/text&gt;&lt;rect class=&quot;q&quot; x=&quot;25&quot; y=&quot;172&quot; width=&quot;470&quot; height=&quot;76&quot; rx=&quot;10&quot;/&gt;&lt;text class=&quot;qt&quot; x=&quot;260&quot; y=&quot;204&quot; text-anchor=&quot;middle&quot;&gt;Does it need to read websites&lt;/text&gt;&lt;text class=&quot;qt&quot; x=&quot;260&quot; y=&quot;226&quot; text-anchor=&quot;middle&quot;&gt;that have no API?&lt;/text&gt;&lt;rect class=&quot;o-lib&quot; x=&quot;650&quot; y=&quot;160&quot; width=&quot;560&quot; height=&quot;100&quot; rx=&quot;10&quot;/&gt;&lt;text class=&quot;t&quot; x=&quot;930&quot; y=&quot;187&quot; text-anchor=&quot;middle&quot;&gt;E5  Browser Run&lt;/text&gt;&lt;text class=&quot;s&quot; x=&quot;930&quot; y=&quot;210&quot; text-anchor=&quot;middle&quot;&gt;headless Chrome reads and&lt;/text&gt;&lt;text class=&quot;s&quot; x=&quot;930&quot; y=&quot;228&quot; text-anchor=&quot;middle&quot;&gt;uses the website for the agent&lt;/text&gt;&lt;rect class=&quot;q&quot; x=&quot;25&quot; y=&quot;322&quot; width=&quot;470&quot; height=&quot;76&quot; rx=&quot;10&quot;/&gt;&lt;text class=&quot;qt&quot; x=&quot;260&quot; y=&quot;354&quot; text-anchor=&quot;middle&quot;&gt;Does it run code you do not trust,&lt;/text&gt;&lt;text class=&quot;qt&quot; x=&quot;260&quot; y=&quot;376&quot; text-anchor=&quot;middle&quot;&gt;written in JavaScript?&lt;/text&gt;&lt;rect class=&quot;o-lib&quot; x=&quot;650&quot; y=&quot;310&quot; width=&quot;560&quot; height=&quot;100&quot; rx=&quot;10&quot;/&gt;&lt;text class=&quot;t&quot; x=&quot;930&quot; y=&quot;337&quot; text-anchor=&quot;middle&quot;&gt;E2  Dynamic Workers&lt;/text&gt;&lt;text class=&quot;s&quot; x=&quot;930&quot; y=&quot;360&quot; text-anchor=&quot;middle&quot;&gt;isolated JavaScript, created on demand&lt;/text&gt;&lt;text class=&quot;s&quot; x=&quot;930&quot; y=&quot;378&quot; text-anchor=&quot;middle&quot;&gt;you control network and access&lt;/text&gt;&lt;rect class=&quot;q&quot; x=&quot;25&quot; y=&quot;472&quot; width=&quot;470&quot; height=&quot;76&quot; rx=&quot;10&quot;/&gt;&lt;text class=&quot;qt&quot; x=&quot;260&quot; y=&quot;504&quot; text-anchor=&quot;middle&quot;&gt;Does it need a shell, code repos,&lt;/text&gt;&lt;text class=&quot;qt&quot; x=&quot;260&quot; y=&quot;526&quot; text-anchor=&quot;middle&quot;&gt;package installs or tests?&lt;/text&gt;&lt;rect class=&quot;o-lib&quot; x=&quot;650&quot; y=&quot;460&quot; width=&quot;560&quot; height=&quot;100&quot; rx=&quot;10&quot;/&gt;&lt;text class=&quot;t&quot; x=&quot;930&quot; y=&quot;487&quot; text-anchor=&quot;middle&quot;&gt;E3  Sandboxes&lt;/text&gt;&lt;text class=&quot;s&quot; x=&quot;930&quot; y=&quot;510&quot; text-anchor=&quot;middle&quot;&gt;a Linux microVM or a Dynamic Worker&lt;/text&gt;&lt;text class=&quot;s&quot; x=&quot;930&quot; y=&quot;528&quot; text-anchor=&quot;middle&quot;&gt;for shell, repos and test runs&lt;/text&gt;&lt;rect class=&quot;o-lib&quot; x=&quot;25&quot; y=&quot;622&quot; width=&quot;470&quot; height=&quot;100&quot; rx=&quot;10&quot;/&gt;&lt;text class=&quot;t&quot; x=&quot;260&quot; y=&quot;649&quot; text-anchor=&quot;middle&quot;&gt;E4  Containers&lt;/text&gt;&lt;text class=&quot;s&quot; x=&quot;260&quot; y=&quot;672&quot; text-anchor=&quot;middle&quot;&gt;your own heavy workload, a specific runtime&lt;/text&gt;&lt;text class=&quot;s&quot; x=&quot;260&quot; y=&quot;690&quot; text-anchor=&quot;middle&quot;&gt;or an existing container image&lt;/text&gt;&lt;/svg&gt;&lt;figcaption&gt;Select where agent-written code runs.&lt;/figcaption&gt;&lt;/figure&gt;&lt;div class=&quot;table-wrap&quot;&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Step&lt;/th&gt;
&lt;th&gt;Use when&lt;/th&gt;
&lt;th&gt;What it is&lt;/th&gt;
&lt;th&gt;Watch out&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td data-label=&quot;Step&quot;&gt;&lt;strong&gt;E1. &lt;a href=&quot;https://developers.cloudflare.com/agents/tools/codemode/&quot; rel=&quot;noopener&quot;&gt;Code Mode&lt;/a&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td data-label=&quot;Use when&quot;&gt;The agent has many tools, or an API with many operations, and loses context to tool definitions.&lt;/td&gt;
&lt;td data-label=&quot;What it is&quot;&gt;The model gets one code tool and writes JavaScript that calls typed tool methods. In MCP server portals it replaces all upstream tools with a search tool and an execute tool.&lt;/td&gt;
&lt;td data-label=&quot;Watch out&quot;&gt;Experimental and may introduce breaking changes.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td data-label=&quot;Step&quot;&gt;&lt;strong&gt;E2. &lt;a href=&quot;https://developers.cloudflare.com/dynamic-workers/&quot; rel=&quot;noopener&quot;&gt;Dynamic Workers&lt;/a&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td data-label=&quot;Use when&quot;&gt;You must run code you do not trust, written at runtime.&lt;/td&gt;
&lt;td data-label=&quot;What it is&quot;&gt;Isolated Workers created on demand. You control their bindings and whether they reach the network. A lightweight alternative to containers.&lt;/td&gt;
&lt;td data-label=&quot;Watch out&quot;&gt;Runs JavaScript, WebAssembly and (with a compatibility flag) Python. It has no Linux shell. Open beta since March 2026 on Workers Paid. Check the current status.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td data-label=&quot;Step&quot;&gt;&lt;strong&gt;E3. &lt;a href=&quot;https://developers.cloudflare.com/sandbox/&quot; rel=&quot;noopener&quot;&gt;Sandboxes&lt;/a&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td data-label=&quot;Use when&quot;&gt;The agent needs a shell, repos, package installs or test runners.&lt;/td&gt;
&lt;td data-label=&quot;What it is&quot;&gt;An isolated place to run code, either a Container (a Linux microVM) or a Dynamic Worker, reached through your Worker. Your Worker decides what data and APIs the code gets and whether it reaches the Internet.&lt;/td&gt;
&lt;td data-label=&quot;Watch out&quot;&gt;Workers Paid plan. The docs list separate Sandbox SDK versions. Check which one you use.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td data-label=&quot;Step&quot;&gt;&lt;strong&gt;E4. &lt;a href=&quot;https://developers.cloudflare.com/containers/&quot; rel=&quot;noopener&quot;&gt;Containers&lt;/a&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td data-label=&quot;Use when&quot;&gt;A workload needs many CPU cores, lots of memory, a specific runtime or an existing container image.&lt;/td&gt;
&lt;td data-label=&quot;What it is&quot;&gt;Serverless containers started and controlled by a Worker.&lt;/td&gt;
&lt;td data-label=&quot;Watch out&quot;&gt;Use them directly for your own workloads. As a sandbox, a Container is the Linux option.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td data-label=&quot;Step&quot;&gt;&lt;strong&gt;E5. &lt;a href=&quot;https://developers.cloudflare.com/browser-run/&quot; rel=&quot;noopener&quot;&gt;Browser Run&lt;/a&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td data-label=&quot;Use when&quot;&gt;The target is a website without an API.&lt;/td&gt;
&lt;td data-label=&quot;What it is&quot;&gt;Headless Chrome on the Cloudflare network (formerly Browser Rendering): markdown, screenshots, PDFs, scripted interaction.&lt;/td&gt;
&lt;td data-label=&quot;Watch out&quot;&gt;Treat fetched page content as untrusted input to the model.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;
&lt;h2 id=&quot;a6-a-ready-made-start-cloudflare-os&quot;&gt;&lt;a class=&quot;anchor&quot; href=&quot;#a6-a-ready-made-start-cloudflare-os&quot;&gt;A6. A ready-made start: Cloudflare OS&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://blog.cloudflare.com/cloudflare-os/&quot; rel=&quot;noopener&quot;&gt;Cloudflare OS&lt;/a&gt; is an open-source agent workspace for everyone in a company, including people who do not code. You deploy it into your own Cloudflare account and adapt it. It is case B as a finished starting point, with four parts.&lt;/p&gt;
&lt;figure class=&quot;fig diagram&quot;&gt;&lt;svg class=&quot;min&quot; viewBox=&quot;0 0 1300 330&quot; role=&quot;img&quot; aria-label=&quot;Select what you need: Cloudflare OS or another path&quot;&gt;&lt;g class=&quot;edge&quot;&gt;&lt;path d=&quot;M526 72 L155 168&quot; marker-end=&quot;url(#ar)&quot;/&gt;&lt;path d=&quot;M608 72 L480 168&quot; marker-end=&quot;url(#ar)&quot;/&gt;&lt;path d=&quot;M689 72 L805 168&quot; marker-end=&quot;url(#ar)&quot;/&gt;&lt;path d=&quot;M770 72 L1130 168&quot; marker-end=&quot;url(#ar)&quot;/&gt;&lt;/g&gt;&lt;g class=&quot;yn&quot;&gt;&lt;rect x=&quot;277&quot; y=&quot;108&quot; width=&quot;132&quot; height=&quot;22&quot; rx=&quot;4&quot; fill=&quot;var(--surface)&quot;/&gt;&lt;text x=&quot;343.1&quot; y=&quot;124&quot; text-anchor=&quot;middle&quot;&gt;Staff workspace&lt;/text&gt;&lt;rect x=&quot;467&quot; y=&quot;108&quot; width=&quot;156&quot; height=&quot;22&quot; rx=&quot;4&quot; fill=&quot;var(--surface)&quot;/&gt;&lt;text x=&quot;544.6&quot; y=&quot;124&quot; text-anchor=&quot;middle&quot;&gt;Engineering agents&lt;/text&gt;&lt;rect x=&quot;696&quot; y=&quot;108&quot; width=&quot;100&quot; height=&quot;22&quot; rx=&quot;4&quot; fill=&quot;var(--surface)&quot;/&gt;&lt;text x=&quot;746.1&quot; y=&quot;124&quot; text-anchor=&quot;middle&quot;&gt;Customer AI&lt;/text&gt;&lt;rect x=&quot;886&quot; y=&quot;108&quot; width=&quot;124&quot; height=&quot;22&quot; rx=&quot;4&quot; fill=&quot;var(--surface)&quot;/&gt;&lt;text x=&quot;947.6&quot; y=&quot;124&quot; text-anchor=&quot;middle&quot;&gt;Existing tools&lt;/text&gt;&lt;/g&gt;&lt;rect class=&quot;q&quot; x=&quot;390&quot; y=&quot;10&quot; width=&quot;520&quot; height=&quot;62&quot; rx=&quot;10&quot;/&gt;&lt;text class=&quot;qt&quot; x=&quot;650&quot; y=&quot;46&quot; text-anchor=&quot;middle&quot;&gt;What do you need?&lt;/text&gt;&lt;rect class=&quot;o-rt&quot; x=&quot;5&quot; y=&quot;170&quot; width=&quot;300&quot; height=&quot;130&quot; rx=&quot;10&quot;/&gt;&lt;text class=&quot;t&quot; x=&quot;155&quot; y=&quot;197&quot; text-anchor=&quot;middle&quot;&gt;A6  Cloudflare OS&lt;/text&gt;&lt;text class=&quot;s&quot; x=&quot;155&quot; y=&quot;220&quot; text-anchor=&quot;middle&quot;&gt;a workspace for all staff:&lt;/text&gt;&lt;text class=&quot;s&quot; x=&quot;155&quot; y=&quot;238&quot; text-anchor=&quot;middle&quot;&gt;agent chat, documents,&lt;/text&gt;&lt;text class=&quot;s&quot; x=&quot;155&quot; y=&quot;256&quot; text-anchor=&quot;middle&quot;&gt;small apps, workflows&lt;/text&gt;&lt;rect class=&quot;o-flow&quot; x=&quot;330&quot; y=&quot;170&quot; width=&quot;300&quot; height=&quot;130&quot; rx=&quot;10&quot;/&gt;&lt;text class=&quot;t&quot; x=&quot;480&quot; y=&quot;197&quot; text-anchor=&quot;middle&quot;&gt;A4  Governed workspace&lt;/text&gt;&lt;text class=&quot;s&quot; x=&quot;480&quot; y=&quot;220&quot; text-anchor=&quot;middle&quot;&gt;agents for engineers:&lt;/text&gt;&lt;text class=&quot;s&quot; x=&quot;480&quot; y=&quot;238&quot; text-anchor=&quot;middle&quot;&gt;shell, repos and tests,&lt;/text&gt;&lt;text class=&quot;s&quot; x=&quot;480&quot; y=&quot;256&quot; text-anchor=&quot;middle&quot;&gt;under your rules&lt;/text&gt;&lt;rect class=&quot;o-lib&quot; x=&quot;655&quot; y=&quot;170&quot; width=&quot;300&quot; height=&quot;130&quot; rx=&quot;10&quot;/&gt;&lt;text class=&quot;t&quot; x=&quot;805&quot; y=&quot;197&quot; text-anchor=&quot;middle&quot;&gt;B  Build it yourself&lt;/text&gt;&lt;text class=&quot;s&quot; x=&quot;805&quot; y=&quot;220&quot; text-anchor=&quot;middle&quot;&gt;AI for your customers:&lt;/text&gt;&lt;text class=&quot;s&quot; x=&quot;805&quot; y=&quot;238&quot; text-anchor=&quot;middle&quot;&gt;you build the agent&lt;/text&gt;&lt;text class=&quot;s&quot; x=&quot;805&quot; y=&quot;256&quot; text-anchor=&quot;middle&quot;&gt;yourself&lt;/text&gt;&lt;rect class=&quot;o-sec&quot; x=&quot;980&quot; y=&quot;170&quot; width=&quot;300&quot; height=&quot;130&quot; rx=&quot;10&quot;/&gt;&lt;text class=&quot;t&quot; x=&quot;1130&quot; y=&quot;197&quot; text-anchor=&quot;middle&quot;&gt;H  Secure what is there&lt;/text&gt;&lt;text class=&quot;s&quot; x=&quot;1130&quot; y=&quot;220&quot; text-anchor=&quot;middle&quot;&gt;govern the agents and&lt;/text&gt;&lt;text class=&quot;s&quot; x=&quot;1130&quot; y=&quot;238&quot; text-anchor=&quot;middle&quot;&gt;tools your staff already&lt;/text&gt;&lt;text class=&quot;s&quot; x=&quot;1130&quot; y=&quot;256&quot; text-anchor=&quot;middle&quot;&gt;use (option H)&lt;/text&gt;&lt;/svg&gt;&lt;figcaption&gt;Select what you need: Cloudflare OS or another path.&lt;/figcaption&gt;&lt;/figure&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Agent workspace.&lt;/strong&gt; Each person works in the browser with an agent that knows your company context and shared skills. The agent writes and runs code in an isolated runtime.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Gadgets.&lt;/strong&gt; The agent can build small apps for one person or one team. Each app runs in its own Dynamic Worker with its own database and can be shared like a document.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Gatekeepers.&lt;/strong&gt; A Gatekeeper sits between the workspace and one external service. It limits access to the resource you chose, logs every action and asks a person to approve actions with side effects.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Workflows.&lt;/strong&gt; Repeatable jobs run on demand, on a schedule or when an event happens in a connected system.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&quot;table-wrap&quot;&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Control&lt;/th&gt;
&lt;th&gt;What Cloudflare OS does&lt;/th&gt;
&lt;th&gt;Matches in this guide&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td data-label=&quot;Control&quot;&gt;Identity&lt;/td&gt;
&lt;td data-label=&quot;What Cloudflare OS does&quot;&gt;Cloudflare Access controls who can enter. Inside, every agent and app starts with access to nothing and asks for each resource.&lt;/td&gt;
&lt;td data-label=&quot;Matches in this guide&quot;&gt;A2, identity&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td data-label=&quot;Control&quot;&gt;Model calls&lt;/td&gt;
&lt;td data-label=&quot;What Cloudflare OS does&quot;&gt;Every inference call runs through AI Gateway, attributed to a person, team or workspace, with budgets and rate limits. Any model can be used, including self-hosted ones.&lt;/td&gt;
&lt;td data-label=&quot;Matches in this guide&quot;&gt;C1, I1 to I3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td data-label=&quot;Control&quot;&gt;Tool calls&lt;/td&gt;
&lt;td data-label=&quot;What Cloudflare OS does&quot;&gt;Gatekeepers give scoped access to single resources. Existing MCP servers connect through MCP server portals.&lt;/td&gt;
&lt;td data-label=&quot;Matches in this guide&quot;&gt;C2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td data-label=&quot;Control&quot;&gt;What the agent has seen&lt;/td&gt;
&lt;td data-label=&quot;What Cloudflare OS does&quot;&gt;The platform records which resources agents observed. It uses this to decide who may open the workspace or see its output, and when an agent may send data out.&lt;/td&gt;
&lt;td data-label=&quot;Matches in this guide&quot;&gt;Not covered by the other controls&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td data-label=&quot;Control&quot;&gt;Code execution&lt;/td&gt;
&lt;td data-label=&quot;What Cloudflare OS does&quot;&gt;The agent works by writing code. Server code runs in a Dynamic Worker with outbound internet disabled. Client code runs in a sandboxed frame.&lt;/td&gt;
&lt;td data-label=&quot;Matches in this guide&quot;&gt;E1, E2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td data-label=&quot;Control&quot;&gt;Not covered in the public sources&lt;/td&gt;
&lt;td data-label=&quot;What Cloudflare OS does&quot;&gt;DLP, private network reach over Mesh or Tunnel, and export of logs to a SIEM. Plan these with the controls in A2.&lt;/td&gt;
&lt;td data-label=&quot;Matches in this guide&quot;&gt;C4, A4&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;
&lt;p&gt;It fits a workspace for all staff, including people who do not code, with shared skills and company context for every agent and small internal apps that people build and change themselves.&lt;/p&gt;
&lt;p&gt;It is early access, and the README says it still has &amp;quot;many rough edges&amp;quot;. Running it on your own servers with workerd is listed as &amp;quot;coming soon&amp;quot;. A managed version in the Cloudflare dashboard, containers for development workflows and Slack support are planned. For customer-facing AI or shell-heavy engineering agents, see &lt;a href=&quot;https://kai.zone/writing/ai-agents-on-cloudflare-architecture/&quot;&gt;Part B&lt;/a&gt; and A4.&lt;/p&gt;
&lt;p&gt;See also the &lt;a href=&quot;https://github.com/cloudflare/cloudflare-os&quot; rel=&quot;noopener&quot;&gt;GitHub repository&lt;/a&gt; and &lt;a href=&quot;https://os.cloudflare.app/&quot; rel=&quot;noopener&quot;&gt;os.cloudflare.app&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&quot;a7-another-ready-made-start-vibesdk&quot;&gt;&lt;a class=&quot;anchor&quot; href=&quot;#a7-another-ready-made-start-vibesdk&quot;&gt;A7. Another ready-made start: VibeSDK&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/cloudflare/vibesdk&quot; rel=&quot;noopener&quot;&gt;VibeSDK&lt;/a&gt; is an open-source (MIT) platform where people build and deploy full-stack apps by describing them to an AI coding agent. The README calls it &amp;quot;an open-source vibe coding platform that helps you build your own vibe-coding platform&amp;quot;. It is a starting point for case A (your customers build apps inside your product) or case B (internal teams such as marketing, product and support build their own tools, as the &lt;a href=&quot;https://blog.cloudflare.com/deploy-your-own-ai-vibe-coding-platform/&quot; rel=&quot;noopener&quot;&gt;launch post&lt;/a&gt; describes it).&lt;/p&gt;
&lt;p&gt;According to the README, a session works like this:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;The user describes the app. The agent asks structured questions when the request leaves something open.&lt;/li&gt;
&lt;li&gt;The agent plans, edits files, deploys a preview, reads the browser console, repairs errors and repeats, while the user follows along.&lt;/li&gt;
&lt;li&gt;Each project has its own workspace and version history with restore points. The finished project can be exported to continue elsewhere.&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&quot;table-wrap&quot;&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Part&lt;/th&gt;
&lt;th&gt;What it does&lt;/th&gt;
&lt;th&gt;Docs&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td data-label=&quot;Part&quot;&gt;Think agent&lt;/td&gt;
&lt;td data-label=&quot;What it does&quot;&gt;Runs the model-and-tool loop. It uses explicit tools to read and edit the workspace, deploy previews and inspect browser logs. Bash access is disabled.&lt;/td&gt;
&lt;td data-label=&quot;Docs&quot;&gt;&lt;a href=&quot;https://developers.cloudflare.com/agents/harnesses/think/&quot; rel=&quot;noopener&quot;&gt;Think&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td data-label=&quot;Part&quot;&gt;Workspace&lt;/td&gt;
&lt;td data-label=&quot;What it does&quot;&gt;A Durable Object per project holds the files.&lt;/td&gt;
&lt;td data-label=&quot;Docs&quot;&gt;&lt;a href=&quot;https://developers.cloudflare.com/durable-objects/&quot; rel=&quot;noopener&quot;&gt;Durable Objects&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td data-label=&quot;Part&quot;&gt;Previews&lt;/td&gt;
&lt;td data-label=&quot;What it does&quot;&gt;Generated code is bundled and loaded as a Dynamic Worker, with no long-running development server.&lt;/td&gt;
&lt;td data-label=&quot;Docs&quot;&gt;&lt;a href=&quot;https://developers.cloudflare.com/dynamic-workers/&quot; rel=&quot;noopener&quot;&gt;Dynamic Workers&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td data-label=&quot;Part&quot;&gt;App data&lt;/td&gt;
&lt;td data-label=&quot;What it does&quot;&gt;Each generated app has isolated SQLite storage in a Durable Object Facet.&lt;/td&gt;
&lt;td data-label=&quot;Docs&quot;&gt;&lt;a href=&quot;https://developers.cloudflare.com/durable-objects/&quot; rel=&quot;noopener&quot;&gt;Durable Objects&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td data-label=&quot;Part&quot;&gt;Version history&lt;/td&gt;
&lt;td data-label=&quot;What it does&quot;&gt;Cloudflare Artifacts stores git history and restore points. It is an optional setting in the README.&lt;/td&gt;
&lt;td data-label=&quot;Docs&quot;&gt;&lt;a href=&quot;https://developers.cloudflare.com/artifacts/&quot; rel=&quot;noopener&quot;&gt;Artifacts&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td data-label=&quot;Part&quot;&gt;Model calls&lt;/td&gt;
&lt;td data-label=&quot;What it does&quot;&gt;Configured providers are routed through AI Gateway, with observability and caching.&lt;/td&gt;
&lt;td data-label=&quot;Docs&quot;&gt;&lt;a href=&quot;https://developers.cloudflare.com/ai-gateway/&quot; rel=&quot;noopener&quot;&gt;AI Gateway&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;
&lt;div class=&quot;table-wrap&quot;&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Control&lt;/th&gt;
&lt;th&gt;What VibeSDK does&lt;/th&gt;
&lt;th&gt;Matches in this guide&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td data-label=&quot;Control&quot;&gt;Model calls&lt;/td&gt;
&lt;td data-label=&quot;What VibeSDK does&quot;&gt;Routed through AI Gateway, with observability and caching.&lt;/td&gt;
&lt;td data-label=&quot;Matches in this guide&quot;&gt;C1, I2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td data-label=&quot;Control&quot;&gt;Code execution&lt;/td&gt;
&lt;td data-label=&quot;What VibeSDK does&quot;&gt;Previews run as Dynamic Workers. The agent has no bash access to the workspace.&lt;/td&gt;
&lt;td data-label=&quot;Matches in this guide&quot;&gt;E2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td data-label=&quot;Control&quot;&gt;Isolation&lt;/td&gt;
&lt;td data-label=&quot;What VibeSDK does&quot;&gt;Each project has its own agent, workspace, repository and app storage. Preview URLs are signed and limited to one branch.&lt;/td&gt;
&lt;td data-label=&quot;Matches in this guide&quot;&gt;A4&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td data-label=&quot;Control&quot;&gt;Identity&lt;/td&gt;
&lt;td data-label=&quot;What VibeSDK does&quot;&gt;Authentication providers are optional and configuration-dependent. The README does not describe Access.&lt;/td&gt;
&lt;td data-label=&quot;Matches in this guide&quot;&gt;A2, identity&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td data-label=&quot;Control&quot;&gt;Not covered in the README&lt;/td&gt;
&lt;td data-label=&quot;What VibeSDK does&quot;&gt;DLP, Gateway policies for staff, private reach over Mesh or Tunnel, and export of logs to a SIEM. Plan these with the controls in A2.&lt;/td&gt;
&lt;td data-label=&quot;Matches in this guide&quot;&gt;C4, A4&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;
&lt;p&gt;It fits a platform where people who do not write code build small apps, a SaaS product that lets customers build their own customisations, or a base that you fork and change. It builds and hosts apps. To govern the coding agents your engineers already use, see A4. Cloudflare OS gives each person an agent workspace, while VibeSDK turns descriptions into deployed apps.&lt;/p&gt;
&lt;p&gt;The &lt;a href=&quot;https://developers.cloudflare.com/reference-architecture/diagrams/ai/ai-vibe-coding-platform/&quot; rel=&quot;noopener&quot;&gt;reference architecture&lt;/a&gt; calls it a starter template, and I found no support or maturity statement for VibeSDK itself in the README. It builds on features that are still maturing: Think is experimental, Dynamic Workers entered open beta in March 2026, and Artifacts is in open beta (changelog, 1 October 2026). For production, the README lists a Workers Paid plan, Workers for Platforms access for production previews, a custom domain with wildcard DNS (and Advanced Certificate Manager where the layout needs it), and credentials for at least one model provider. The September 2025 launch post describes an earlier design with Sandboxes and Workers for Platforms. The README describes the current design.&lt;/p&gt;
&lt;p&gt;See also the &lt;a href=&quot;https://github.com/cloudflare/vibesdk/blob/main/docs/setup.md&quot; rel=&quot;noopener&quot;&gt;setup guide&lt;/a&gt; and the &lt;a href=&quot;https://build.cloudflare.dev/&quot; rel=&quot;noopener&quot;&gt;demo&lt;/a&gt;.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>Building AI agents on Cloudflare: which architecture when</title>
    <link href="https://kai.zone/writing/ai-agents-on-cloudflare-architecture/" rel="alternate" type="text/html"/>
    <id>https://kai.zone/writing/ai-agents-on-cloudflare-architecture/</id>
    <published>2026-10-07T00:00:00Z</published>
    <updated>2026-10-08T00:00:00Z</updated>
    <summary>Project Think, Agents SDK, AI SDK, Workflows, MCP or a plain Worker? A decision tree, layer diagram and ten architectures with starter code.</summary>
    <content type="html">&lt;p&gt;Project Think, the Agents SDK, the AI SDK, Workflows, MCP servers and a plain Worker work at different layers.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The AI SDK is a library for calling models.&lt;/li&gt;
&lt;li&gt;The Agents SDK is the runtime that keeps an agent alive: state, wakeups, crash recovery.&lt;/li&gt;
&lt;li&gt;Think and AIChatAgent are harnesses that run the loop on top of that runtime.&lt;/li&gt;
&lt;li&gt;Workflows and MCP sit beside the agent.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;1-decision-tree-what-should-i-build&quot;&gt;&lt;a class=&quot;anchor&quot; href=&quot;#1-decision-tree-what-should-i-build&quot;&gt;1. Decision tree: what should I build?&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The coloured boxes are the recommendations. Section 6 covers combinations.&lt;/p&gt;
&lt;figure class=&quot;fig diagram&quot;&gt;&lt;svg class=&quot;min&quot; viewBox=&quot;0 0 1440 880&quot; role=&quot;img&quot; aria-label=&quot;Decision tree for choosing a Cloudflare AI architecture&quot;&gt;
&lt;g class=&quot;edge&quot;&gt;&lt;path d=&quot;M660 82 L200 148&quot; marker-end=&quot;url(#ar)&quot;/&gt;&lt;path d=&quot;M780 82 L960 148&quot; marker-end=&quot;url(#ar)&quot;/&gt;&lt;path d=&quot;M140 212 L90 288&quot; marker-end=&quot;url(#ar)&quot;/&gt;&lt;path d=&quot;M260 212 L285 288&quot; marker-end=&quot;url(#ar)&quot;/&gt;&lt;path d=&quot;M900 232 L540 288&quot; marker-end=&quot;url(#ar)&quot;/&gt;&lt;path d=&quot;M960 232 L800 288&quot; marker-end=&quot;url(#ar)&quot;/&gt;&lt;path d=&quot;M1020 232 L1170 288&quot; marker-end=&quot;url(#ar)&quot;/&gt;&lt;path d=&quot;M480 372 L440 438&quot; marker-end=&quot;url(#ar)&quot;/&gt;&lt;path d=&quot;M600 372 L650 438&quot; marker-end=&quot;url(#ar)&quot;/&gt;&lt;path d=&quot;M1110 372 L1040 438&quot; marker-end=&quot;url(#ar)&quot;/&gt;&lt;path d=&quot;M1230 372 L1250 438&quot; marker-end=&quot;url(#ar)&quot;/&gt;&lt;path d=&quot;M1199 522 L1110 588&quot; marker-end=&quot;url(#ar)&quot;/&gt;&lt;path d=&quot;M1301 522 L1290 588&quot; marker-end=&quot;url(#ar)&quot;/&gt;&lt;path d=&quot;M1250 672 L1200 738&quot; marker-end=&quot;url(#ar)&quot;/&gt;&lt;path d=&quot;M1330 672 L1350 738&quot; marker-end=&quot;url(#ar)&quot;/&gt;&lt;/g&gt;
&lt;g class=&quot;yn&quot;&gt;&lt;rect x=&quot;417&quot; y=&quot;105&quot; width=&quot;26&quot; height=&quot;20&quot; rx=&quot;4&quot; fill=&quot;var(--surface)&quot;/&gt;&lt;text x=&quot;430&quot; y=&quot;120&quot; text-anchor=&quot;middle&quot;&gt;No&lt;/text&gt;&lt;rect x=&quot;853&quot; y=&quot;105&quot; width=&quot;34&quot; height=&quot;20&quot; rx=&quot;4&quot; fill=&quot;var(--surface)&quot;/&gt;&lt;text x=&quot;870&quot; y=&quot;120&quot; text-anchor=&quot;middle&quot;&gt;Yes&lt;/text&gt;&lt;rect x=&quot;98&quot; y=&quot;240&quot; width=&quot;34&quot; height=&quot;20&quot; rx=&quot;4&quot; fill=&quot;var(--surface)&quot;/&gt;&lt;text x=&quot;115&quot; y=&quot;255&quot; text-anchor=&quot;middle&quot;&gt;Yes&lt;/text&gt;&lt;rect x=&quot;260&quot; y=&quot;240&quot; width=&quot;26&quot; height=&quot;20&quot; rx=&quot;4&quot; fill=&quot;var(--surface)&quot;/&gt;&lt;text x=&quot;272&quot; y=&quot;255&quot; text-anchor=&quot;middle&quot;&gt;No&lt;/text&gt;&lt;rect x=&quot;683&quot; y=&quot;250&quot; width=&quot;74&quot; height=&quot;20&quot; rx=&quot;4&quot; fill=&quot;var(--surface)&quot;/&gt;&lt;text x=&quot;720&quot; y=&quot;265&quot; text-anchor=&quot;middle&quot;&gt;Existing&lt;/text&gt;&lt;rect x=&quot;807&quot; y=&quot;250&quot; width=&quot;146&quot; height=&quot;20&quot; rx=&quot;4&quot; fill=&quot;var(--surface)&quot;/&gt;&lt;text x=&quot;880&quot; y=&quot;265&quot; text-anchor=&quot;middle&quot;&gt;Finished platform&lt;/text&gt;&lt;rect x=&quot;1034&quot; y=&quot;250&quot; width=&quot;122&quot; height=&quot;20&quot; rx=&quot;4&quot; fill=&quot;var(--surface)&quot;/&gt;&lt;text x=&quot;1095&quot; y=&quot;265&quot; text-anchor=&quot;middle&quot;&gt;Build your own&lt;/text&gt;&lt;rect x=&quot;447&quot; y=&quot;395&quot; width=&quot;26&quot; height=&quot;20&quot; rx=&quot;4&quot; fill=&quot;var(--surface)&quot;/&gt;&lt;text x=&quot;460&quot; y=&quot;410&quot; text-anchor=&quot;middle&quot;&gt;No&lt;/text&gt;&lt;rect x=&quot;608&quot; y=&quot;395&quot; width=&quot;34&quot; height=&quot;20&quot; rx=&quot;4&quot; fill=&quot;var(--surface)&quot;/&gt;&lt;text x=&quot;625&quot; y=&quot;410&quot; text-anchor=&quot;middle&quot;&gt;Yes&lt;/text&gt;&lt;rect x=&quot;1062&quot; y=&quot;395&quot; width=&quot;26&quot; height=&quot;20&quot; rx=&quot;4&quot; fill=&quot;var(--surface)&quot;/&gt;&lt;text x=&quot;1075&quot; y=&quot;410&quot; text-anchor=&quot;middle&quot;&gt;No&lt;/text&gt;&lt;rect x=&quot;1223&quot; y=&quot;395&quot; width=&quot;34&quot; height=&quot;20&quot; rx=&quot;4&quot; fill=&quot;var(--surface)&quot;/&gt;&lt;text x=&quot;1240&quot; y=&quot;410&quot; text-anchor=&quot;middle&quot;&gt;Yes&lt;/text&gt;&lt;rect x=&quot;1138&quot; y=&quot;545&quot; width=&quot;34&quot; height=&quot;20&quot; rx=&quot;4&quot; fill=&quot;var(--surface)&quot;/&gt;&lt;text x=&quot;1155&quot; y=&quot;560&quot; text-anchor=&quot;middle&quot;&gt;Yes&lt;/text&gt;&lt;rect x=&quot;1282&quot; y=&quot;545&quot; width=&quot;26&quot; height=&quot;20&quot; rx=&quot;4&quot; fill=&quot;var(--surface)&quot;/&gt;&lt;text x=&quot;1295&quot; y=&quot;560&quot; text-anchor=&quot;middle&quot;&gt;No&lt;/text&gt;&lt;rect x=&quot;1208&quot; y=&quot;695&quot; width=&quot;34&quot; height=&quot;20&quot; rx=&quot;4&quot; fill=&quot;var(--surface)&quot;/&gt;&lt;text x=&quot;1225&quot; y=&quot;710&quot; text-anchor=&quot;middle&quot;&gt;Yes&lt;/text&gt;&lt;rect x=&quot;1327&quot; y=&quot;695&quot; width=&quot;26&quot; height=&quot;20&quot; rx=&quot;4&quot; fill=&quot;var(--surface)&quot;/&gt;&lt;text x=&quot;1340&quot; y=&quot;710&quot; text-anchor=&quot;middle&quot;&gt;No&lt;/text&gt;&lt;/g&gt;
&lt;rect class=&quot;q&quot; x=&quot;485&quot; y=&quot;20&quot; width=&quot;470&quot; height=&quot;62&quot; rx=&quot;10&quot;/&gt;
&lt;text class=&quot;qt&quot; x=&quot;720&quot; y=&quot;46&quot; text-anchor=&quot;middle&quot;&gt;Does the model choose the next&lt;/text&gt;
&lt;text class=&quot;qt&quot; x=&quot;720&quot; y=&quot;67&quot; text-anchor=&quot;middle&quot;&gt;step itself, looping over tools?&lt;/text&gt;
&lt;rect class=&quot;q&quot; x=&quot;30&quot; y=&quot;150&quot; width=&quot;340&quot; height=&quot;62&quot; rx=&quot;10&quot;/&gt;
&lt;text class=&quot;qt&quot; x=&quot;200&quot; y=&quot;176&quot; text-anchor=&quot;middle&quot;&gt;Several fixed steps that need&lt;/text&gt;
&lt;text class=&quot;qt&quot; x=&quot;200&quot; y=&quot;197&quot; text-anchor=&quot;middle&quot;&gt;retries or human approval?&lt;/text&gt;
&lt;rect class=&quot;q&quot; x=&quot;710&quot; y=&quot;150&quot; width=&quot;500&quot; height=&quot;82&quot; rx=&quot;10&quot;/&gt;
&lt;text class=&quot;qt&quot; x=&quot;960&quot; y=&quot;176&quot; text-anchor=&quot;middle&quot;&gt;Which harness runs the loop?&lt;/text&gt;
&lt;text class=&quot;s&quot; x=&quot;960&quot; y=&quot;199&quot; text-anchor=&quot;middle&quot;&gt;an existing one, your own, or a finished platform&lt;/text&gt;
&lt;rect class=&quot;o-flow&quot; x=&quot;5&quot; y=&quot;290&quot; width=&quot;170&quot; height=&quot;92&quot; rx=&quot;10&quot;/&gt;
&lt;text class=&quot;t&quot; x=&quot;90&quot; y=&quot;317&quot; text-anchor=&quot;middle&quot;&gt;Workflow&lt;/text&gt;
&lt;text class=&quot;s&quot; x=&quot;90&quot; y=&quot;340&quot; text-anchor=&quot;middle&quot;&gt;LLM calls as steps,&lt;/text&gt;
&lt;text class=&quot;s&quot; x=&quot;90&quot; y=&quot;358&quot; text-anchor=&quot;middle&quot;&gt;per-step retries&lt;/text&gt;
&lt;rect class=&quot;o-lib&quot; x=&quot;200&quot; y=&quot;290&quot; width=&quot;170&quot; height=&quot;92&quot; rx=&quot;10&quot;/&gt;
&lt;text class=&quot;t&quot; x=&quot;285&quot; y=&quot;317&quot; text-anchor=&quot;middle&quot;&gt;Plain Worker&lt;/text&gt;
&lt;text class=&quot;s&quot; x=&quot;285&quot; y=&quot;340&quot; text-anchor=&quot;middle&quot;&gt;one model call,&lt;/text&gt;
&lt;text class=&quot;s&quot; x=&quot;285&quot; y=&quot;358&quot; text-anchor=&quot;middle&quot;&gt;AI SDK or binding&lt;/text&gt;
&lt;rect class=&quot;q&quot; x=&quot;395&quot; y=&quot;290&quot; width=&quot;290&quot; height=&quot;82&quot; rx=&quot;10&quot;/&gt;
&lt;text class=&quot;qt&quot; x=&quot;540&quot; y=&quot;316&quot; text-anchor=&quot;middle&quot;&gt;Does that harness need your&lt;/text&gt;
&lt;text class=&quot;qt&quot; x=&quot;540&quot; y=&quot;337&quot; text-anchor=&quot;middle&quot;&gt;tools or data?&lt;/text&gt;
&lt;text class=&quot;s&quot; x=&quot;540&quot; y=&quot;360&quot; text-anchor=&quot;middle&quot;&gt;you keep the harness, you secure it&lt;/text&gt;
&lt;rect class=&quot;o-rt&quot; x=&quot;710&quot; y=&quot;290&quot; width=&quot;180&quot; height=&quot;92&quot; rx=&quot;10&quot;/&gt;
&lt;text class=&quot;t&quot; x=&quot;800&quot; y=&quot;317&quot; text-anchor=&quot;middle&quot;&gt;Ready-made platform&lt;/text&gt;
&lt;text class=&quot;s&quot; x=&quot;800&quot; y=&quot;340&quot; text-anchor=&quot;middle&quot;&gt;Cloudflare OS (A6): staff&lt;/text&gt;
&lt;text class=&quot;s&quot; x=&quot;800&quot; y=&quot;358&quot; text-anchor=&quot;middle&quot;&gt;VibeSDK (A7): app builder&lt;/text&gt;
&lt;rect class=&quot;q&quot; x=&quot;990&quot; y=&quot;290&quot; width=&quot;360&quot; height=&quot;82&quot; rx=&quot;10&quot;/&gt;
&lt;text class=&quot;qt&quot; x=&quot;1170&quot; y=&quot;316&quot; text-anchor=&quot;middle&quot;&gt;Needs memory per user, wakeups&lt;/text&gt;
&lt;text class=&quot;qt&quot; x=&quot;1170&quot; y=&quot;337&quot; text-anchor=&quot;middle&quot;&gt;or tasks longer than a request?&lt;/text&gt;
&lt;text class=&quot;s&quot; x=&quot;1170&quot; y=&quot;360&quot; text-anchor=&quot;middle&quot;&gt;you build the harness&lt;/text&gt;
&lt;rect class=&quot;o-sec&quot; x=&quot;345&quot; y=&quot;440&quot; width=&quot;190&quot; height=&quot;112&quot; rx=&quot;10&quot;/&gt;
&lt;text class=&quot;t&quot; x=&quot;440&quot; y=&quot;467&quot; text-anchor=&quot;middle&quot;&gt;Govern what is there&lt;/text&gt;
&lt;text class=&quot;s&quot; x=&quot;440&quot; y=&quot;490&quot; text-anchor=&quot;middle&quot;&gt;AI Gateway, MCP portal,&lt;/text&gt;
&lt;text class=&quot;s&quot; x=&quot;440&quot; y=&quot;508&quot; text-anchor=&quot;middle&quot;&gt;Access, DLP, sandbox&lt;/text&gt;
&lt;text class=&quot;s&quot; x=&quot;440&quot; y=&quot;526&quot; text-anchor=&quot;middle&quot;&gt;Part A, A4&lt;/text&gt;
&lt;rect class=&quot;o-mcp&quot; x=&quot;555&quot; y=&quot;440&quot; width=&quot;190&quot; height=&quot;112&quot; rx=&quot;10&quot;/&gt;
&lt;text class=&quot;t&quot; x=&quot;650&quot; y=&quot;467&quot; text-anchor=&quot;middle&quot;&gt;MCP server&lt;/text&gt;
&lt;text class=&quot;s&quot; x=&quot;650&quot; y=&quot;490&quot; text-anchor=&quot;middle&quot;&gt;expose your tools behind&lt;/text&gt;
&lt;text class=&quot;s&quot; x=&quot;650&quot; y=&quot;508&quot; text-anchor=&quot;middle&quot;&gt;a portal, and govern it&lt;/text&gt;
&lt;text class=&quot;s&quot; x=&quot;650&quot; y=&quot;526&quot; text-anchor=&quot;middle&quot;&gt;as in the left box&lt;/text&gt;
&lt;rect class=&quot;o-lib&quot; x=&quot;950&quot; y=&quot;440&quot; width=&quot;180&quot; height=&quot;100&quot; rx=&quot;10&quot;/&gt;
&lt;text class=&quot;t&quot; x=&quot;1040&quot; y=&quot;467&quot; text-anchor=&quot;middle&quot;&gt;Worker + AI SDK&lt;/text&gt;
&lt;text class=&quot;s&quot; x=&quot;1040&quot; y=&quot;490&quot; text-anchor=&quot;middle&quot;&gt;tool loop with&lt;/text&gt;
&lt;text class=&quot;s&quot; x=&quot;1040&quot; y=&quot;508&quot; text-anchor=&quot;middle&quot;&gt;stopWhen, no state&lt;/text&gt;
&lt;rect class=&quot;q&quot; x=&quot;1135&quot; y=&quot;440&quot; width=&quot;230&quot; height=&quot;82&quot; rx=&quot;10&quot;/&gt;
&lt;text class=&quot;qt&quot; x=&quot;1250&quot; y=&quot;466&quot; text-anchor=&quot;middle&quot;&gt;Want a ready-made agent&lt;/text&gt;
&lt;text class=&quot;qt&quot; x=&quot;1250&quot; y=&quot;487&quot; text-anchor=&quot;middle&quot;&gt;loop and memory?&lt;/text&gt;
&lt;rect class=&quot;o-rt&quot; x=&quot;1025&quot; y=&quot;590&quot; width=&quot;170&quot; height=&quot;100&quot; rx=&quot;10&quot;/&gt;
&lt;text class=&quot;t&quot; x=&quot;1110&quot; y=&quot;617&quot; text-anchor=&quot;middle&quot;&gt;Project Think&lt;/text&gt;
&lt;text class=&quot;s&quot; x=&quot;1110&quot; y=&quot;640&quot; text-anchor=&quot;middle&quot;&gt;you write getModel(),&lt;/text&gt;
&lt;text class=&quot;s&quot; x=&quot;1110&quot; y=&quot;658&quot; text-anchor=&quot;middle&quot;&gt;Think runs the rest&lt;/text&gt;
&lt;rect class=&quot;q&quot; x=&quot;1200&quot; y=&quot;590&quot; width=&quot;180&quot; height=&quot;82&quot; rx=&quot;10&quot;/&gt;
&lt;text class=&quot;qt&quot; x=&quot;1290&quot; y=&quot;616&quot; text-anchor=&quot;middle&quot;&gt;Is there a chat UI&lt;/text&gt;
&lt;text class=&quot;qt&quot; x=&quot;1290&quot; y=&quot;637&quot; text-anchor=&quot;middle&quot;&gt;with a person?&lt;/text&gt;
&lt;rect class=&quot;o-rt&quot; x=&quot;1120&quot; y=&quot;740&quot; width=&quot;160&quot; height=&quot;100&quot; rx=&quot;10&quot;/&gt;
&lt;text class=&quot;t&quot; x=&quot;1200&quot; y=&quot;767&quot; text-anchor=&quot;middle&quot;&gt;AIChatAgent&lt;/text&gt;
&lt;text class=&quot;s&quot; x=&quot;1200&quot; y=&quot;790&quot; text-anchor=&quot;middle&quot;&gt;you write the model&lt;/text&gt;
&lt;text class=&quot;s&quot; x=&quot;1200&quot; y=&quot;808&quot; text-anchor=&quot;middle&quot;&gt;call, SDK does chat&lt;/text&gt;
&lt;rect class=&quot;o-rt&quot; x=&quot;1285&quot; y=&quot;740&quot; width=&quot;130&quot; height=&quot;100&quot; rx=&quot;10&quot;/&gt;
&lt;text class=&quot;t&quot; x=&quot;1350&quot; y=&quot;767&quot; text-anchor=&quot;middle&quot;&gt;Agent class&lt;/text&gt;
&lt;text class=&quot;s&quot; x=&quot;1350&quot; y=&quot;790&quot; text-anchor=&quot;middle&quot;&gt;own harness,&lt;/text&gt;
&lt;text class=&quot;s&quot; x=&quot;1350&quot; y=&quot;808&quot; text-anchor=&quot;middle&quot;&gt;email, cron&lt;/text&gt;
&lt;/svg&gt;&lt;figcaption&gt;Does the model choose the next step itself, looping over tools?&lt;/figcaption&gt;&lt;/figure&gt;&lt;ol&gt;
&lt;li&gt;The model does not choose the path. For several fixed steps that need retries or human approval, use a &lt;strong&gt;Workflow&lt;/strong&gt;. Otherwise use a &lt;strong&gt;plain Worker&lt;/strong&gt; with one model call.&lt;/li&gt;
&lt;li&gt;The model loops over tools and you already use a harness such as Claude Code, opencode or Codex. Keep it and secure it (see A4 in &lt;a href=&quot;https://kai.zone/writing/cloudflare-ai-choose-your-path/&quot;&gt;Part A&lt;/a&gt;). If that harness needs your tools or data, expose them with an &lt;strong&gt;MCP server&lt;/strong&gt; behind a portal.&lt;/li&gt;
&lt;li&gt;You want a finished platform that you adapt. Use &lt;strong&gt;Cloudflare OS&lt;/strong&gt; for a staff workspace (Part A, A6) or &lt;strong&gt;VibeSDK&lt;/strong&gt; for a platform where users build apps (Part A, A7).&lt;/li&gt;
&lt;li&gt;You build your own loop. If you need no memory or wakeups, use a &lt;strong&gt;Worker with the AI SDK&lt;/strong&gt;. If you need memory per user, wakeups or tasks longer than a request, and you want a ready-made loop, use &lt;strong&gt;Project Think&lt;/strong&gt;. With the same needs, if you want to own the model call and have a chat UI, use &lt;strong&gt;AIChatAgent&lt;/strong&gt;. If it is not a chat (inbox, monitor, webhook), use the &lt;strong&gt;Agent class&lt;/strong&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&quot;2-the-stack-which-layer-is-which&quot;&gt;&lt;a class=&quot;anchor&quot; href=&quot;#2-the-stack-which-layer-is-which&quot;&gt;2. The stack: which layer is which&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;AIChatAgent is built on the AI SDK. The docs describe the AI SDK as &amp;quot;what AIChatAgent and the starter template use under the hood&amp;quot;. The runtime answers &amp;quot;where does this agent live and how does it stay durable&amp;quot;. The harness answers &amp;quot;what does this agent do on each turn&amp;quot;.&lt;/p&gt;
&lt;figure class=&quot;fig diagram&quot;&gt;&lt;svg class=&quot;min&quot; viewBox=&quot;0 0 1130 500&quot; role=&quot;img&quot; aria-label=&quot;Layer stack of the Cloudflare agent architecture&quot;&gt;
        &lt;text class=&quot;lab-rt&quot; x=&quot;160&quot; y=&quot;18&quot;&gt;Surfaces that start a turn&lt;/text&gt;
        &lt;g&gt;
          &lt;rect class=&quot;chip&quot; x=&quot;160&quot; y=&quot;28&quot; width=&quot;150&quot; height=&quot;44&quot; rx=&quot;8&quot;/&gt;&lt;text class=&quot;s&quot; x=&quot;235&quot; y=&quot;46&quot; text-anchor=&quot;middle&quot;&gt;Browser chat&lt;/text&gt;&lt;text class=&quot;m&quot; x=&quot;235&quot; y=&quot;62&quot; text-anchor=&quot;middle&quot;&gt;WebSocket&lt;/text&gt;
          &lt;rect class=&quot;chip&quot; x=&quot;322&quot; y=&quot;28&quot; width=&quot;150&quot; height=&quot;44&quot; rx=&quot;8&quot;/&gt;&lt;text class=&quot;s&quot; x=&quot;397&quot; y=&quot;46&quot; text-anchor=&quot;middle&quot;&gt;Email&lt;/text&gt;&lt;text class=&quot;m&quot; x=&quot;397&quot; y=&quot;62&quot; text-anchor=&quot;middle&quot;&gt;onEmail&lt;/text&gt;
          &lt;rect class=&quot;chip&quot; x=&quot;484&quot; y=&quot;28&quot; width=&quot;150&quot; height=&quot;44&quot; rx=&quot;8&quot;/&gt;&lt;text class=&quot;s&quot; x=&quot;559&quot; y=&quot;46&quot; text-anchor=&quot;middle&quot;&gt;Webhooks, HTTP&lt;/text&gt;&lt;text class=&quot;m&quot; x=&quot;559&quot; y=&quot;62&quot; text-anchor=&quot;middle&quot;&gt;onRequest&lt;/text&gt;
          &lt;rect class=&quot;chip&quot; x=&quot;646&quot; y=&quot;28&quot; width=&quot;150&quot; height=&quot;44&quot; rx=&quot;8&quot;/&gt;&lt;text class=&quot;s&quot; x=&quot;721&quot; y=&quot;46&quot; text-anchor=&quot;middle&quot;&gt;Cron, alarms&lt;/text&gt;&lt;text class=&quot;m&quot; x=&quot;721&quot; y=&quot;62&quot; text-anchor=&quot;middle&quot;&gt;schedule()&lt;/text&gt;
          &lt;rect class=&quot;chip&quot; x=&quot;808&quot; y=&quot;28&quot; width=&quot;150&quot; height=&quot;44&quot; rx=&quot;8&quot;/&gt;&lt;text class=&quot;s&quot; x=&quot;883&quot; y=&quot;46&quot; text-anchor=&quot;middle&quot;&gt;Other agents&lt;/text&gt;&lt;text class=&quot;m&quot; x=&quot;883&quot; y=&quot;62&quot; text-anchor=&quot;middle&quot;&gt;RPC, sub-agents&lt;/text&gt;
        &lt;/g&gt;
        &lt;g class=&quot;edge&quot;&gt;&lt;path d=&quot;M559 76 L559 94&quot; marker-end=&quot;url(#ar)&quot;/&gt;&lt;/g&gt;
        &lt;rect class=&quot;o-rt s-nofill&quot; x=&quot;150&quot; y=&quot;98&quot; width=&quot;820&quot; height=&quot;112&quot; rx=&quot;12&quot;/&gt;
        &lt;text class=&quot;lab-rt&quot; x=&quot;166&quot; y=&quot;120&quot;&gt;Harness: what happens on each turn&lt;/text&gt;
        &lt;rect class=&quot;chip-rt&quot; x=&quot;166&quot; y=&quot;130&quot; width=&quot;250&quot; height=&quot;68&quot; rx=&quot;8&quot;/&gt;
        &lt;text class=&quot;t&quot; x=&quot;291&quot; y=&quot;154&quot; text-anchor=&quot;middle&quot;&gt;Project Think&lt;/text&gt;&lt;text class=&quot;s&quot; x=&quot;291&quot; y=&quot;174&quot; text-anchor=&quot;middle&quot;&gt;opinionated, getModel() only&lt;/text&gt;&lt;text class=&quot;m&quot; x=&quot;291&quot; y=&quot;189&quot; text-anchor=&quot;middle&quot;&gt;@cloudflare/think&lt;/text&gt;
        &lt;rect class=&quot;chip-rt&quot; x=&quot;430&quot; y=&quot;130&quot; width=&quot;250&quot; height=&quot;68&quot; rx=&quot;8&quot;/&gt;
        &lt;text class=&quot;t&quot; x=&quot;555&quot; y=&quot;154&quot; text-anchor=&quot;middle&quot;&gt;AIChatAgent&lt;/text&gt;&lt;text class=&quot;s&quot; x=&quot;555&quot; y=&quot;174&quot; text-anchor=&quot;middle&quot;&gt;you write onChatMessage&lt;/text&gt;&lt;text class=&quot;m&quot; x=&quot;555&quot; y=&quot;189&quot; text-anchor=&quot;middle&quot;&gt;@cloudflare/ai-chat&lt;/text&gt;
        &lt;rect class=&quot;chip-you&quot; x=&quot;694&quot; y=&quot;130&quot; width=&quot;262&quot; height=&quot;68&quot; rx=&quot;8&quot;/&gt;
        &lt;text class=&quot;t&quot; x=&quot;825&quot; y=&quot;154&quot; text-anchor=&quot;middle&quot;&gt;Your own loop&lt;/text&gt;&lt;text class=&quot;s&quot; x=&quot;825&quot; y=&quot;174&quot; text-anchor=&quot;middle&quot;&gt;directly on the Agent class&lt;/text&gt;&lt;text class=&quot;m&quot; x=&quot;825&quot; y=&quot;189&quot; text-anchor=&quot;middle&quot;&gt;agents&lt;/text&gt;
        &lt;g class=&quot;edge&quot;&gt;&lt;path d=&quot;M559 214 L559 232&quot; marker-end=&quot;url(#ar)&quot;/&gt;&lt;/g&gt;
        &lt;rect class=&quot;o-rt&quot; x=&quot;150&quot; y=&quot;236&quot; width=&quot;820&quot; height=&quot;138&quot; rx=&quot;12&quot;/&gt;
        &lt;text class=&quot;lab-rt&quot; x=&quot;166&quot; y=&quot;258&quot;&gt;Agents SDK runtime: the Agent class on Durable Objects&lt;/text&gt;
        &lt;g&gt;
          &lt;rect class=&quot;chip&quot; x=&quot;166&quot; y=&quot;270&quot; width=&quot;250&quot; height=&quot;44&quot; rx=&quot;8&quot;/&gt;&lt;text class=&quot;s&quot; x=&quot;291&quot; y=&quot;290&quot; text-anchor=&quot;middle&quot;&gt;State in SQLite, synced live&lt;/text&gt;&lt;text class=&quot;m&quot; x=&quot;291&quot; y=&quot;305&quot; text-anchor=&quot;middle&quot;&gt;setState, this.sql&lt;/text&gt;
          &lt;rect class=&quot;chip&quot; x=&quot;430&quot; y=&quot;270&quot; width=&quot;250&quot; height=&quot;44&quot; rx=&quot;8&quot;/&gt;&lt;text class=&quot;s&quot; x=&quot;555&quot; y=&quot;290&quot; text-anchor=&quot;middle&quot;&gt;WebSockets, RPC, routing&lt;/text&gt;&lt;text class=&quot;m&quot; x=&quot;555&quot; y=&quot;305&quot; text-anchor=&quot;middle&quot;&gt;@callable, hibernation&lt;/text&gt;
          &lt;rect class=&quot;chip&quot; x=&quot;694&quot; y=&quot;270&quot; width=&quot;262&quot; height=&quot;44&quot; rx=&quot;8&quot;/&gt;&lt;text class=&quot;s&quot; x=&quot;825&quot; y=&quot;290&quot; text-anchor=&quot;middle&quot;&gt;Wakeups: schedule, cron, alarms&lt;/text&gt;&lt;text class=&quot;m&quot; x=&quot;825&quot; y=&quot;305&quot; text-anchor=&quot;middle&quot;&gt;zero cost while asleep&lt;/text&gt;
          &lt;rect class=&quot;chip&quot; x=&quot;166&quot; y=&quot;322&quot; width=&quot;250&quot; height=&quot;44&quot; rx=&quot;8&quot;/&gt;&lt;text class=&quot;s&quot; x=&quot;291&quot; y=&quot;342&quot; text-anchor=&quot;middle&quot;&gt;Crash recovery with fibers&lt;/text&gt;&lt;text class=&quot;m&quot; x=&quot;291&quot; y=&quot;357&quot; text-anchor=&quot;middle&quot;&gt;runFiber, stash, keepAlive&lt;/text&gt;
          &lt;rect class=&quot;chip&quot; x=&quot;430&quot; y=&quot;322&quot; width=&quot;250&quot; height=&quot;44&quot; rx=&quot;8&quot;/&gt;&lt;text class=&quot;s&quot; x=&quot;555&quot; y=&quot;342&quot; text-anchor=&quot;middle&quot;&gt;Sub-agents, own SQLite each&lt;/text&gt;&lt;text class=&quot;m&quot; x=&quot;555&quot; y=&quot;357&quot; text-anchor=&quot;middle&quot;&gt;subAgent(), agent tools&lt;/text&gt;
          &lt;rect class=&quot;chip&quot; x=&quot;694&quot; y=&quot;322&quot; width=&quot;262&quot; height=&quot;44&quot; rx=&quot;8&quot;/&gt;&lt;text class=&quot;s&quot; x=&quot;825&quot; y=&quot;342&quot; text-anchor=&quot;middle&quot;&gt;Diagnostics events, tracing&lt;/text&gt;&lt;text class=&quot;m&quot; x=&quot;825&quot; y=&quot;357&quot; text-anchor=&quot;middle&quot;&gt;diagnostics_channel&lt;/text&gt;
        &lt;/g&gt;
        &lt;g class=&quot;edge&quot;&gt;&lt;path d=&quot;M559 378 L559 392&quot; marker-end=&quot;url(#ar)&quot;/&gt;&lt;/g&gt;
        &lt;rect class=&quot;chip s-dash54&quot; x=&quot;150&quot; y=&quot;396&quot; width=&quot;820&quot; height=&quot;26&quot; rx=&quot;8&quot;/&gt;
        &lt;text class=&quot;s&quot; x=&quot;560&quot; y=&quot;414&quot; text-anchor=&quot;middle&quot;&gt;AI Gateway (optional): routing across providers, caching, rate limits, evals&lt;/text&gt;
        &lt;g class=&quot;edge&quot;&gt;&lt;path d=&quot;M559 424 L559 438&quot; marker-end=&quot;url(#ar)&quot;/&gt;&lt;/g&gt;
        &lt;text class=&quot;lab-model&quot; x=&quot;160&quot; y=&quot;454&quot;&gt;Models&lt;/text&gt;
        &lt;g&gt;
          &lt;rect class=&quot;o-model&quot; x=&quot;150&quot; y=&quot;458&quot; width=&quot;152&quot; height=&quot;34&quot; rx=&quot;8&quot;/&gt;&lt;text class=&quot;s&quot; x=&quot;226&quot; y=&quot;479&quot; text-anchor=&quot;middle&quot;&gt;Workers AI (binding)&lt;/text&gt;
          &lt;rect class=&quot;o-model&quot; x=&quot;314&quot; y=&quot;458&quot; width=&quot;152&quot; height=&quot;34&quot; rx=&quot;8&quot;/&gt;&lt;text class=&quot;s&quot; x=&quot;390&quot; y=&quot;479&quot; text-anchor=&quot;middle&quot;&gt;OpenAI&lt;/text&gt;
          &lt;rect class=&quot;o-model&quot; x=&quot;478&quot; y=&quot;458&quot; width=&quot;152&quot; height=&quot;34&quot; rx=&quot;8&quot;/&gt;&lt;text class=&quot;s&quot; x=&quot;554&quot; y=&quot;479&quot; text-anchor=&quot;middle&quot;&gt;Anthropic&lt;/text&gt;
          &lt;rect class=&quot;o-model&quot; x=&quot;642&quot; y=&quot;458&quot; width=&quot;152&quot; height=&quot;34&quot; rx=&quot;8&quot;/&gt;&lt;text class=&quot;s&quot; x=&quot;718&quot; y=&quot;479&quot; text-anchor=&quot;middle&quot;&gt;Google Gemini&lt;/text&gt;
          &lt;rect class=&quot;o-model&quot; x=&quot;806&quot; y=&quot;458&quot; width=&quot;164&quot; height=&quot;34&quot; rx=&quot;8&quot;/&gt;&lt;text class=&quot;s&quot; x=&quot;888&quot; y=&quot;479&quot; text-anchor=&quot;middle&quot;&gt;OpenAI-compatible API&lt;/text&gt;
        &lt;/g&gt;
        &lt;rect class=&quot;o-lib dash&quot; x=&quot;10&quot; y=&quot;98&quot; width=&quot;120&quot; height=&quot;394&quot; rx=&quot;12&quot;/&gt;
        &lt;text class=&quot;lab-lib&quot; x=&quot;24&quot; y=&quot;120&quot;&gt;Library&lt;/text&gt;
        &lt;text class=&quot;t&quot; x=&quot;70&quot; y=&quot;160&quot; text-anchor=&quot;middle&quot;&gt;AI SDK&lt;/text&gt;
        &lt;text class=&quot;s&quot; x=&quot;70&quot; y=&quot;186&quot; text-anchor=&quot;middle&quot;&gt;streamText&lt;/text&gt;
        &lt;text class=&quot;s&quot; x=&quot;70&quot; y=&quot;204&quot; text-anchor=&quot;middle&quot;&gt;generateText&lt;/text&gt;
        &lt;text class=&quot;s&quot; x=&quot;70&quot; y=&quot;222&quot; text-anchor=&quot;middle&quot;&gt;tools&lt;/text&gt;
        &lt;text class=&quot;s&quot; x=&quot;70&quot; y=&quot;240&quot; text-anchor=&quot;middle&quot;&gt;providers&lt;/text&gt;
        &lt;text class=&quot;s&quot; x=&quot;70&quot; y=&quot;278&quot; text-anchor=&quot;middle&quot;&gt;Runs inside&lt;/text&gt;
        &lt;text class=&quot;s&quot; x=&quot;70&quot; y=&quot;296&quot; text-anchor=&quot;middle&quot;&gt;your code or&lt;/text&gt;
        &lt;text class=&quot;s&quot; x=&quot;70&quot; y=&quot;314&quot; text-anchor=&quot;middle&quot;&gt;a harness.&lt;/text&gt;
        &lt;text class=&quot;s&quot; x=&quot;70&quot; y=&quot;350&quot; text-anchor=&quot;middle&quot;&gt;Works in a&lt;/text&gt;
        &lt;text class=&quot;s&quot; x=&quot;70&quot; y=&quot;368&quot; text-anchor=&quot;middle&quot;&gt;plain Worker&lt;/text&gt;
        &lt;text class=&quot;s&quot; x=&quot;70&quot; y=&quot;386&quot; text-anchor=&quot;middle&quot;&gt;too.&lt;/text&gt;
        &lt;rect class=&quot;o-flow&quot; x=&quot;990&quot; y=&quot;98&quot; width=&quot;130&quot; height=&quot;190&quot; rx=&quot;12&quot;/&gt;
        &lt;text class=&quot;lab-flow&quot; x=&quot;1004&quot; y=&quot;120&quot;&gt;Beside it&lt;/text&gt;
        &lt;text class=&quot;t&quot; x=&quot;1055&quot; y=&quot;158&quot; text-anchor=&quot;middle&quot;&gt;Workflows&lt;/text&gt;
        &lt;text class=&quot;s&quot; x=&quot;1055&quot; y=&quot;182&quot; text-anchor=&quot;middle&quot;&gt;multi-step jobs,&lt;/text&gt;
        &lt;text class=&quot;s&quot; x=&quot;1055&quot; y=&quot;200&quot; text-anchor=&quot;middle&quot;&gt;retries, approval.&lt;/text&gt;
        &lt;text class=&quot;s&quot; x=&quot;1055&quot; y=&quot;226&quot; text-anchor=&quot;middle&quot;&gt;Agent starts one&lt;/text&gt;
        &lt;text class=&quot;m&quot; x=&quot;1055&quot; y=&quot;244&quot; text-anchor=&quot;middle&quot;&gt;runWorkflow()&lt;/text&gt;
        &lt;rect class=&quot;o-mcp&quot; x=&quot;990&quot; y=&quot;302&quot; width=&quot;130&quot; height=&quot;190&quot; rx=&quot;12&quot;/&gt;
        &lt;text class=&quot;lab-mcp&quot; x=&quot;1004&quot; y=&quot;324&quot;&gt;Beside it&lt;/text&gt;
        &lt;text class=&quot;t&quot; x=&quot;1055&quot; y=&quot;362&quot; text-anchor=&quot;middle&quot;&gt;MCP&lt;/text&gt;
        &lt;text class=&quot;s&quot; x=&quot;1055&quot; y=&quot;386&quot; text-anchor=&quot;middle&quot;&gt;Server: expose&lt;/text&gt;
        &lt;text class=&quot;s&quot; x=&quot;1055&quot; y=&quot;404&quot; text-anchor=&quot;middle&quot;&gt;tools to clients.&lt;/text&gt;
        &lt;text class=&quot;s&quot; x=&quot;1055&quot; y=&quot;430&quot; text-anchor=&quot;middle&quot;&gt;Client: agent&lt;/text&gt;
        &lt;text class=&quot;s&quot; x=&quot;1055&quot; y=&quot;448&quot; text-anchor=&quot;middle&quot;&gt;uses other&lt;/text&gt;
        &lt;text class=&quot;s&quot; x=&quot;1055&quot; y=&quot;466&quot; text-anchor=&quot;middle&quot;&gt;servers' tools.&lt;/text&gt;
      &lt;/svg&gt;&lt;figcaption&gt;The layers: surfaces, harness, runtime, optional gateway, models.&lt;/figcaption&gt;&lt;/figure&gt;&lt;h2 id=&quot;3-ten-architectures-side-by-side&quot;&gt;&lt;a class=&quot;anchor&quot; href=&quot;#3-ten-architectures-side-by-side&quot;&gt;3. Ten architectures, side by side&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id=&quot;a-plain-worker-with-workers-ai-or-the-ai-sdk&quot;&gt;&lt;a class=&quot;anchor&quot; href=&quot;#a-plain-worker-with-workers-ai-or-the-ai-sdk&quot;&gt;A. Plain Worker with Workers AI or the AI SDK&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;A normal Worker calls a model. It has no state and no runtime.&lt;/p&gt;
&lt;figure class=&quot;fig diagram mini&quot;&gt;&lt;svg viewBox=&quot;0 0 520 170&quot; role=&quot;img&quot; aria-label=&quot;Client to Worker to model&quot;&gt;
            &lt;rect class=&quot;node&quot; x=&quot;10&quot; y=&quot;60&quot; width=&quot;90&quot; height=&quot;50&quot; rx=&quot;8&quot;/&gt;&lt;text class=&quot;s&quot; x=&quot;55&quot; y=&quot;90&quot; text-anchor=&quot;middle&quot;&gt;Client&lt;/text&gt;
            &lt;rect class=&quot;o-lib&quot; x=&quot;140&quot; y=&quot;34&quot; width=&quot;200&quot; height=&quot;102&quot; rx=&quot;10&quot;/&gt;
            &lt;text class=&quot;t&quot; x=&quot;240&quot; y=&quot;58&quot; text-anchor=&quot;middle&quot;&gt;Worker&lt;/text&gt;
            &lt;rect class=&quot;chip&quot; x=&quot;156&quot; y=&quot;70&quot; width=&quot;168&quot; height=&quot;26&quot; rx=&quot;6&quot;/&gt;&lt;text class=&quot;m&quot; x=&quot;240&quot; y=&quot;87&quot; text-anchor=&quot;middle&quot;&gt;generateText()&lt;/text&gt;
            &lt;text class=&quot;s&quot; x=&quot;240&quot; y=&quot;118&quot; text-anchor=&quot;middle&quot;&gt;no memory between calls&lt;/text&gt;
            &lt;rect class=&quot;o-model&quot; x=&quot;380&quot; y=&quot;52&quot; width=&quot;130&quot; height=&quot;66&quot; rx=&quot;8&quot;/&gt;&lt;text class=&quot;t&quot; x=&quot;445&quot; y=&quot;80&quot; text-anchor=&quot;middle&quot;&gt;Model&lt;/text&gt;&lt;text class=&quot;s&quot; x=&quot;445&quot; y=&quot;99&quot; text-anchor=&quot;middle&quot;&gt;Workers AI, others&lt;/text&gt;
            &lt;g class=&quot;edge-strong&quot;&gt;&lt;path d=&quot;M100 85 L138 85&quot; marker-end=&quot;url(#ar)&quot;/&gt;&lt;path d=&quot;M340 85 L378 85&quot; marker-end=&quot;url(#ar)&quot;/&gt;&lt;/g&gt;
          &lt;/svg&gt;&lt;/figure&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Use when:&lt;/strong&gt; one prompt gives one answer (summarise, classify, extract, rewrite), or a short tool loop fits in one request.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Skip when:&lt;/strong&gt; you need memory, wakeups or work that outlives a request.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;You write:&lt;/strong&gt; the handler, prompt, tools and any storage.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;You get:&lt;/strong&gt; the lowest cost and complexity. You can use any AI SDK provider or the &lt;code&gt;env.AI&lt;/code&gt; binding with no API key.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Docs:&lt;/strong&gt; &lt;a href=&quot;https://developers.cloudflare.com/agents/runtime/operations/using-ai-models/&quot; rel=&quot;noopener&quot;&gt;Using AI models&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;b-workflow-with-llm-steps&quot;&gt;&lt;a class=&quot;anchor&quot; href=&quot;#b-workflow-with-llm-steps&quot;&gt;B. Workflow with LLM steps&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Code defines the path and the model is one step in it. Each step is saved and retried on its own.&lt;/p&gt;
&lt;figure class=&quot;fig diagram mini&quot;&gt;&lt;svg viewBox=&quot;0 0 520 170&quot; role=&quot;img&quot; aria-label=&quot;Trigger into a workflow of four steps&quot;&gt;
            &lt;rect class=&quot;node&quot; x=&quot;10&quot; y=&quot;62&quot; width=&quot;84&quot; height=&quot;46&quot; rx=&quot;8&quot;/&gt;&lt;text class=&quot;s&quot; x=&quot;52&quot; y=&quot;82&quot; text-anchor=&quot;middle&quot;&gt;Trigger&lt;/text&gt;&lt;text class=&quot;m&quot; x=&quot;52&quot; y=&quot;98&quot; text-anchor=&quot;middle&quot;&gt;API, agent&lt;/text&gt;
            &lt;rect class=&quot;o-flow&quot; x=&quot;118&quot; y=&quot;20&quot; width=&quot;392&quot; height=&quot;130&quot; rx=&quot;10&quot;/&gt;
            &lt;text class=&quot;lab-flow&quot; x=&quot;132&quot; y=&quot;40&quot;&gt;Workflow&lt;/text&gt;
            &lt;rect class=&quot;chip-flow&quot; x=&quot;132&quot; y=&quot;56&quot; width=&quot;82&quot; height=&quot;64&quot; rx=&quot;8&quot;/&gt;&lt;text class=&quot;s&quot; x=&quot;173&quot; y=&quot;82&quot; text-anchor=&quot;middle&quot;&gt;1 Check&lt;/text&gt;&lt;text class=&quot;m&quot; x=&quot;173&quot; y=&quot;100&quot; text-anchor=&quot;middle&quot;&gt;input&lt;/text&gt;
            &lt;rect class=&quot;chip-flow&quot; x=&quot;224&quot; y=&quot;56&quot; width=&quot;82&quot; height=&quot;64&quot; rx=&quot;8&quot;/&gt;&lt;text class=&quot;s&quot; x=&quot;265&quot; y=&quot;82&quot; text-anchor=&quot;middle&quot;&gt;2 LLM&lt;/text&gt;&lt;text class=&quot;m&quot; x=&quot;265&quot; y=&quot;100&quot; text-anchor=&quot;middle&quot;&gt;retries&lt;/text&gt;
            &lt;rect class=&quot;chip-flow&quot; x=&quot;316&quot; y=&quot;56&quot; width=&quot;82&quot; height=&quot;64&quot; rx=&quot;8&quot;/&gt;&lt;text class=&quot;s&quot; x=&quot;357&quot; y=&quot;82&quot; text-anchor=&quot;middle&quot;&gt;3 Wait&lt;/text&gt;&lt;text class=&quot;m&quot; x=&quot;357&quot; y=&quot;100&quot; text-anchor=&quot;middle&quot;&gt;approval&lt;/text&gt;
            &lt;rect class=&quot;chip-flow&quot; x=&quot;408&quot; y=&quot;56&quot; width=&quot;92&quot; height=&quot;64&quot; rx=&quot;8&quot;/&gt;&lt;text class=&quot;s&quot; x=&quot;454&quot; y=&quot;82&quot; text-anchor=&quot;middle&quot;&gt;4 Notify&lt;/text&gt;&lt;text class=&quot;m&quot; x=&quot;454&quot; y=&quot;100&quot; text-anchor=&quot;middle&quot;&gt;webhook&lt;/text&gt;
            &lt;text class=&quot;s&quot; x=&quot;314&quot; y=&quot;141&quot; text-anchor=&quot;middle&quot;&gt;each step checkpointed, resumes after failure&lt;/text&gt;
            &lt;g class=&quot;edge-strong&quot;&gt;&lt;path d=&quot;M94 85 L116 85&quot; marker-end=&quot;url(#ar)&quot;/&gt;&lt;/g&gt;
            &lt;g class=&quot;edge&quot;&gt;&lt;path d=&quot;M214 88 L222 88&quot; marker-end=&quot;url(#ar)&quot;/&gt;&lt;path d=&quot;M306 88 L314 88&quot; marker-end=&quot;url(#ar)&quot;/&gt;&lt;path d=&quot;M398 88 L406 88&quot; marker-end=&quot;url(#ar)&quot;/&gt;&lt;/g&gt;
          &lt;/svg&gt;&lt;/figure&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Use when:&lt;/strong&gt; the steps are known in advance (onboarding, document pipelines, deploys, reports) and you want retries per step and human approval.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Skip when:&lt;/strong&gt; the model has to decide the path. Then you need an agent.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;You write:&lt;/strong&gt; the step code, the workflow class and its config.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;You get:&lt;/strong&gt; per-step retries with backoff and a built-in &lt;code&gt;waitForApproval()&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Docs:&lt;/strong&gt; &lt;a href=&quot;https://developers.cloudflare.com/agents/concepts/workflows/&quot; rel=&quot;noopener&quot;&gt;Agents with Workflows&lt;/a&gt;, &lt;a href=&quot;https://developers.cloudflare.com/agents/concepts/agentic-patterns/long-running-agents/#when-to-use-workflows-vs-agent-internal-patterns&quot; rel=&quot;noopener&quot;&gt;Workflows versus agent-internal patterns&lt;/a&gt;, &lt;a href=&quot;https://developers.cloudflare.com/workflows/reference/limits/&quot; rel=&quot;noopener&quot;&gt;Workflows limits&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;c-agent-class-your-own-harness&quot;&gt;&lt;a class=&quot;anchor&quot; href=&quot;#c-agent-class-your-own-harness&quot;&gt;C. Agent class, your own harness&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;The runtime without a built-in loop. You get a durable identity and wakeups, and you write what happens each turn.&lt;/p&gt;
&lt;figure class=&quot;fig diagram mini&quot;&gt;&lt;svg viewBox=&quot;0 0 520 170&quot; role=&quot;img&quot; aria-label=&quot;Triggers into an agent, which calls a model and tools&quot;&gt;
            &lt;rect class=&quot;node&quot; x=&quot;10&quot; y=&quot;18&quot; width=&quot;120&quot; height=&quot;36&quot; rx=&quot;8&quot;/&gt;&lt;text class=&quot;s&quot; x=&quot;70&quot; y=&quot;41&quot; text-anchor=&quot;middle&quot;&gt;Request, WebSocket&lt;/text&gt;
            &lt;rect class=&quot;node&quot; x=&quot;10&quot; y=&quot;67&quot; width=&quot;120&quot; height=&quot;36&quot; rx=&quot;8&quot;/&gt;&lt;text class=&quot;s&quot; x=&quot;70&quot; y=&quot;90&quot; text-anchor=&quot;middle&quot;&gt;Email&lt;/text&gt;
            &lt;rect class=&quot;node&quot; x=&quot;10&quot; y=&quot;116&quot; width=&quot;120&quot; height=&quot;36&quot; rx=&quot;8&quot;/&gt;&lt;text class=&quot;s&quot; x=&quot;70&quot; y=&quot;139&quot; text-anchor=&quot;middle&quot;&gt;Alarm, cron&lt;/text&gt;
            &lt;rect class=&quot;o-rt&quot; x=&quot;168&quot; y=&quot;12&quot; width=&quot;210&quot; height=&quot;148&quot; rx=&quot;10&quot;/&gt;
            &lt;text class=&quot;t&quot; x=&quot;273&quot; y=&quot;36&quot; text-anchor=&quot;middle&quot;&gt;Agent (Durable Object)&lt;/text&gt;
            &lt;rect class=&quot;chip-rt&quot; x=&quot;182&quot; y=&quot;46&quot; width=&quot;182&quot; height=&quot;26&quot; rx=&quot;6&quot;/&gt;&lt;text class=&quot;m&quot; x=&quot;273&quot; y=&quot;63&quot; text-anchor=&quot;middle&quot;&gt;SQLite, schedule()&lt;/text&gt;
            &lt;rect class=&quot;chip-rt&quot; x=&quot;182&quot; y=&quot;78&quot; width=&quot;182&quot; height=&quot;26&quot; rx=&quot;6&quot;/&gt;&lt;text class=&quot;m&quot; x=&quot;273&quot; y=&quot;95&quot; text-anchor=&quot;middle&quot;&gt;runFiber(), keepAlive()&lt;/text&gt;
            &lt;rect class=&quot;chip-you&quot; x=&quot;182&quot; y=&quot;110&quot; width=&quot;182&quot; height=&quot;36&quot; rx=&quot;6&quot;/&gt;&lt;text class=&quot;m&quot; x=&quot;273&quot; y=&quot;125&quot; text-anchor=&quot;middle&quot;&gt;your loop and prompts&lt;/text&gt;&lt;text class=&quot;m&quot; x=&quot;273&quot; y=&quot;139&quot; text-anchor=&quot;middle&quot;&gt;(you write this)&lt;/text&gt;
            &lt;rect class=&quot;o-model&quot; x=&quot;414&quot; y=&quot;44&quot; width=&quot;96&quot; height=&quot;82&quot; rx=&quot;8&quot;/&gt;&lt;text class=&quot;t&quot; x=&quot;462&quot; y=&quot;80&quot; text-anchor=&quot;middle&quot;&gt;Model&lt;/text&gt;&lt;text class=&quot;s&quot; x=&quot;462&quot; y=&quot;100&quot; text-anchor=&quot;middle&quot;&gt;+ tools&lt;/text&gt;
            &lt;g class=&quot;edge-strong&quot;&gt;&lt;path d=&quot;M130 36 L166 60&quot; marker-end=&quot;url(#ar)&quot;/&gt;&lt;path d=&quot;M130 85 L166 85&quot; marker-end=&quot;url(#ar)&quot;/&gt;&lt;path d=&quot;M130 134 L166 112&quot; marker-end=&quot;url(#ar)&quot;/&gt;&lt;path d=&quot;M378 85 L412 85&quot; marker-end=&quot;url(#ar)&quot;/&gt;&lt;/g&gt;
          &lt;/svg&gt;&lt;/figure&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Use when:&lt;/strong&gt; you need control of the loop or the wire format, or the agent is not a chat: an inbox processor, a monitor, a reminder bot or a webhook handler.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Skip when:&lt;/strong&gt; you only need a chat UI with memory. Think or AIChatAgent do that.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;You write:&lt;/strong&gt; the turn logic, prompt building, tool calling and message storage format.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;You get:&lt;/strong&gt; synced state, SQLite, WebSockets, four kinds of schedule, crash recovery and sub-agents.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Docs:&lt;/strong&gt; &lt;a href=&quot;https://developers.cloudflare.com/agents/runtime/agents-api/&quot; rel=&quot;noopener&quot;&gt;Agents API&lt;/a&gt;, &lt;a href=&quot;https://developers.cloudflare.com/agents/runtime/execution/schedule-tasks/&quot; rel=&quot;noopener&quot;&gt;Schedule tasks&lt;/a&gt;, &lt;a href=&quot;https://developers.cloudflare.com/agents/runtime/execution/durable-execution/&quot; rel=&quot;noopener&quot;&gt;Durable execution with fibers&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;d-aichatagent&quot;&gt;&lt;a class=&quot;anchor&quot; href=&quot;#d-aichatagent&quot;&gt;D. AIChatAgent&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;A protocol adapter for chat. It stores messages, streams, resumes and handles tools. You write the model call.&lt;/p&gt;
&lt;figure class=&quot;fig diagram mini&quot;&gt;&lt;svg viewBox=&quot;0 0 520 170&quot; role=&quot;img&quot; aria-label=&quot;Browser chat over WebSocket to AIChatAgent to a model&quot;&gt;
            &lt;rect class=&quot;node&quot; x=&quot;10&quot; y=&quot;46&quot; width=&quot;128&quot; height=&quot;78&quot; rx=&quot;8&quot;/&gt;&lt;text class=&quot;t&quot; x=&quot;74&quot; y=&quot;76&quot; text-anchor=&quot;middle&quot;&gt;Browser&lt;/text&gt;&lt;text class=&quot;m&quot; x=&quot;74&quot; y=&quot;96&quot; text-anchor=&quot;middle&quot;&gt;useAgentChat&lt;/text&gt;
            &lt;rect class=&quot;o-rt&quot; x=&quot;176&quot; y=&quot;12&quot; width=&quot;196&quot; height=&quot;148&quot; rx=&quot;10&quot;/&gt;
            &lt;text class=&quot;t&quot; x=&quot;274&quot; y=&quot;36&quot; text-anchor=&quot;middle&quot;&gt;AIChatAgent&lt;/text&gt;
            &lt;rect class=&quot;chip-rt&quot; x=&quot;190&quot; y=&quot;46&quot; width=&quot;168&quot; height=&quot;26&quot; rx=&quot;6&quot;/&gt;&lt;text class=&quot;m&quot; x=&quot;274&quot; y=&quot;63&quot; text-anchor=&quot;middle&quot;&gt;messages in SQLite&lt;/text&gt;
            &lt;rect class=&quot;chip-rt&quot; x=&quot;190&quot; y=&quot;78&quot; width=&quot;168&quot; height=&quot;26&quot; rx=&quot;6&quot;/&gt;&lt;text class=&quot;m&quot; x=&quot;274&quot; y=&quot;95&quot; text-anchor=&quot;middle&quot;&gt;resumable streaming&lt;/text&gt;
            &lt;rect class=&quot;chip-you&quot; x=&quot;190&quot; y=&quot;110&quot; width=&quot;168&quot; height=&quot;38&quot; rx=&quot;6&quot;/&gt;&lt;text class=&quot;m&quot; x=&quot;274&quot; y=&quot;126&quot; text-anchor=&quot;middle&quot;&gt;onChatMessage() with&lt;/text&gt;&lt;text class=&quot;m&quot; x=&quot;274&quot; y=&quot;140&quot; text-anchor=&quot;middle&quot;&gt;streamText (you write)&lt;/text&gt;
            &lt;rect class=&quot;o-model&quot; x=&quot;410&quot; y=&quot;46&quot; width=&quot;100&quot; height=&quot;78&quot; rx=&quot;8&quot;/&gt;&lt;text class=&quot;t&quot; x=&quot;460&quot; y=&quot;82&quot; text-anchor=&quot;middle&quot;&gt;Model&lt;/text&gt;&lt;text class=&quot;s&quot; x=&quot;460&quot; y=&quot;102&quot; text-anchor=&quot;middle&quot;&gt;via AI SDK&lt;/text&gt;
            &lt;g class=&quot;edge-strong&quot;&gt;&lt;path d=&quot;M140 85 L174 85&quot; marker-start=&quot;url(#ar)&quot; marker-end=&quot;url(#ar)&quot;/&gt;&lt;path d=&quot;M372 85 L408 85&quot; marker-end=&quot;url(#ar)&quot;/&gt;&lt;/g&gt;
            &lt;text class=&quot;m&quot; x=&quot;157&quot; y=&quot;76&quot; text-anchor=&quot;middle&quot;&gt;WS&lt;/text&gt;
          &lt;/svg&gt;&lt;/figure&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Use when:&lt;/strong&gt; you want full control of the model call in a chat product (RAG, several models, custom streaming), or a simple chatbot without memory.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Skip when:&lt;/strong&gt; you want memory blocks, history search and non-destructive compaction out of the box. Think has these.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;You write:&lt;/strong&gt; about 15 lines: &lt;code&gt;streamText&lt;/code&gt;, tools, system prompt, return the response.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;You get:&lt;/strong&gt; SQLite message storage, resumable streams, tool support including approvals, durable chat recovery.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Docs:&lt;/strong&gt; &lt;a href=&quot;https://developers.cloudflare.com/agents/communication-channels/chat/chat-agents/&quot; rel=&quot;noopener&quot;&gt;Chat agents&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;e-project-think&quot;&gt;&lt;a class=&quot;anchor&quot; href=&quot;#e-project-think&quot;&gt;E. Project Think&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;A harness with a fixed structure. You pick the model, and Think runs the loop, memory, tools and recovery.&lt;/p&gt;
&lt;figure class=&quot;fig diagram mini&quot;&gt;&lt;svg viewBox=&quot;0 0 520 170&quot; role=&quot;img&quot; aria-label=&quot;Browser to Think, with a model and a sub-agent&quot;&gt;
            &lt;rect class=&quot;node&quot; x=&quot;10&quot; y=&quot;46&quot; width=&quot;128&quot; height=&quot;78&quot; rx=&quot;8&quot;/&gt;&lt;text class=&quot;t&quot; x=&quot;74&quot; y=&quot;76&quot; text-anchor=&quot;middle&quot;&gt;Browser&lt;/text&gt;&lt;text class=&quot;m&quot; x=&quot;74&quot; y=&quot;96&quot; text-anchor=&quot;middle&quot;&gt;useAgentChat&lt;/text&gt;
            &lt;rect class=&quot;o-rt&quot; x=&quot;170&quot; y=&quot;8&quot; width=&quot;210&quot; height=&quot;154&quot; rx=&quot;10&quot;/&gt;
            &lt;text class=&quot;t&quot; x=&quot;275&quot; y=&quot;30&quot; text-anchor=&quot;middle&quot;&gt;Think&lt;/text&gt;
            &lt;rect class=&quot;chip-you&quot; x=&quot;184&quot; y=&quot;38&quot; width=&quot;182&quot; height=&quot;24&quot; rx=&quot;6&quot;/&gt;&lt;text class=&quot;m&quot; x=&quot;275&quot; y=&quot;54&quot; text-anchor=&quot;middle&quot;&gt;you write: getModel()&lt;/text&gt;
            &lt;rect class=&quot;chip-rt&quot; x=&quot;184&quot; y=&quot;68&quot; width=&quot;88&quot; height=&quot;24&quot; rx=&quot;6&quot;/&gt;&lt;text class=&quot;m&quot; x=&quot;228&quot; y=&quot;84&quot; text-anchor=&quot;middle&quot;&gt;loop&lt;/text&gt;
            &lt;rect class=&quot;chip-rt&quot; x=&quot;278&quot; y=&quot;68&quot; width=&quot;88&quot; height=&quot;24&quot; rx=&quot;6&quot;/&gt;&lt;text class=&quot;m&quot; x=&quot;322&quot; y=&quot;84&quot; text-anchor=&quot;middle&quot;&gt;sessions&lt;/text&gt;
            &lt;rect class=&quot;chip-rt&quot; x=&quot;184&quot; y=&quot;98&quot; width=&quot;88&quot; height=&quot;24&quot; rx=&quot;6&quot;/&gt;&lt;text class=&quot;m&quot; x=&quot;228&quot; y=&quot;114&quot; text-anchor=&quot;middle&quot;&gt;memory&lt;/text&gt;
            &lt;rect class=&quot;chip-rt&quot; x=&quot;278&quot; y=&quot;98&quot; width=&quot;88&quot; height=&quot;24&quot; rx=&quot;6&quot;/&gt;&lt;text class=&quot;m&quot; x=&quot;322&quot; y=&quot;114&quot; text-anchor=&quot;middle&quot;&gt;file tools&lt;/text&gt;
            &lt;rect class=&quot;chip-rt&quot; x=&quot;184&quot; y=&quot;128&quot; width=&quot;182&quot; height=&quot;24&quot; rx=&quot;6&quot;/&gt;&lt;text class=&quot;m&quot; x=&quot;275&quot; y=&quot;144&quot; text-anchor=&quot;middle&quot;&gt;recovery, schedules&lt;/text&gt;
            &lt;rect class=&quot;o-model&quot; x=&quot;414&quot; y=&quot;18&quot; width=&quot;96&quot; height=&quot;50&quot; rx=&quot;8&quot;/&gt;&lt;text class=&quot;t&quot; x=&quot;462&quot; y=&quot;48&quot; text-anchor=&quot;middle&quot;&gt;Model&lt;/text&gt;
            &lt;rect class=&quot;node&quot; x=&quot;414&quot; y=&quot;104&quot; width=&quot;96&quot; height=&quot;50&quot; rx=&quot;8&quot;/&gt;&lt;text class=&quot;s&quot; x=&quot;462&quot; y=&quot;126&quot; text-anchor=&quot;middle&quot;&gt;Sub-agent&lt;/text&gt;&lt;text class=&quot;m&quot; x=&quot;462&quot; y=&quot;142&quot; text-anchor=&quot;middle&quot;&gt;chat() RPC&lt;/text&gt;
            &lt;g class=&quot;edge-strong&quot;&gt;&lt;path d=&quot;M140 85 L168 85&quot; marker-start=&quot;url(#ar)&quot; marker-end=&quot;url(#ar)&quot;/&gt;&lt;path d=&quot;M380 50 L412 44&quot; marker-end=&quot;url(#ar)&quot;/&gt;&lt;path d=&quot;M380 120 L412 126&quot; marker-end=&quot;url(#ar)&quot;/&gt;&lt;/g&gt;
          &lt;/svg&gt;&lt;/figure&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Use when:&lt;/strong&gt; you want to ship fast with persistent memory, long conversations, history search, sub-agents or proactive turns from schedules and webhooks.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Skip when:&lt;/strong&gt; you must own the exact LLM call or message format. Use AIChatAgent or the Agent class. Think is still experimental.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;You write:&lt;/strong&gt; &lt;code&gt;getModel()&lt;/code&gt;, three lines for a first agent. You override single pieces such as the system prompt or tools later.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;You get:&lt;/strong&gt; a branching message tree, memory blocks the model can write, FTS5 search, non-destructive compaction, workspace tools, extensions and durable recovery.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Docs:&lt;/strong&gt; &lt;a href=&quot;https://developers.cloudflare.com/agents/harnesses/think/&quot; rel=&quot;noopener&quot;&gt;Think&lt;/a&gt;, &lt;a href=&quot;https://developers.cloudflare.com/agents/harnesses/&quot; rel=&quot;noopener&quot;&gt;Harnesses&lt;/a&gt;, &lt;a href=&quot;https://blog.cloudflare.com/project-think/&quot; rel=&quot;noopener&quot;&gt;announcement&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;f-mcp-server-on-a-worker&quot;&gt;&lt;a class=&quot;anchor&quot; href=&quot;#f-mcp-server-on-a-worker&quot;&gt;F. MCP server on a Worker&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;You expose tools, and the client&amp;#39;s AI app is the agent. There is no loop on your side.&lt;/p&gt;
&lt;figure class=&quot;fig diagram mini&quot;&gt;&lt;svg viewBox=&quot;0 0 520 170&quot; role=&quot;img&quot; aria-label=&quot;MCP client to an MCP server Worker to your APIs&quot;&gt;
            &lt;rect class=&quot;node&quot; x=&quot;10&quot; y=&quot;44&quot; width=&quot;136&quot; height=&quot;82&quot; rx=&quot;8&quot;/&gt;&lt;text class=&quot;t&quot; x=&quot;78&quot; y=&quot;76&quot; text-anchor=&quot;middle&quot;&gt;MCP client&lt;/text&gt;&lt;text class=&quot;s&quot; x=&quot;78&quot; y=&quot;96&quot; text-anchor=&quot;middle&quot;&gt;Claude, Cursor,&lt;/text&gt;&lt;text class=&quot;s&quot; x=&quot;78&quot; y=&quot;112&quot; text-anchor=&quot;middle&quot;&gt;ChatGPT&lt;/text&gt;
            &lt;rect class=&quot;o-mcp&quot; x=&quot;190&quot; y=&quot;20&quot; width=&quot;170&quot; height=&quot;130&quot; rx=&quot;10&quot;/&gt;
            &lt;text class=&quot;t&quot; x=&quot;275&quot; y=&quot;44&quot; text-anchor=&quot;middle&quot;&gt;MCP server Worker&lt;/text&gt;
            &lt;rect class=&quot;chip&quot; x=&quot;204&quot; y=&quot;56&quot; width=&quot;142&quot; height=&quot;26&quot; rx=&quot;6&quot;/&gt;&lt;text class=&quot;m&quot; x=&quot;275&quot; y=&quot;73&quot; text-anchor=&quot;middle&quot;&gt;createMcpHandler&lt;/text&gt;
            &lt;rect class=&quot;chip&quot; x=&quot;204&quot; y=&quot;88&quot; width=&quot;142&quot; height=&quot;26&quot; rx=&quot;6&quot;/&gt;&lt;text class=&quot;m&quot; x=&quot;275&quot; y=&quot;105&quot; text-anchor=&quot;middle&quot;&gt;tools at /mcp&lt;/text&gt;
            &lt;text class=&quot;s&quot; x=&quot;275&quot; y=&quot;136&quot; text-anchor=&quot;middle&quot;&gt;OAuth or Access in front&lt;/text&gt;
            &lt;rect class=&quot;node&quot; x=&quot;396&quot; y=&quot;52&quot; width=&quot;114&quot; height=&quot;66&quot; rx=&quot;8&quot;/&gt;&lt;text class=&quot;t&quot; x=&quot;453&quot; y=&quot;82&quot; text-anchor=&quot;middle&quot;&gt;Your API&lt;/text&gt;&lt;text class=&quot;s&quot; x=&quot;453&quot; y=&quot;100&quot; text-anchor=&quot;middle&quot;&gt;SaaS, private&lt;/text&gt;
            &lt;g class=&quot;edge-strong&quot;&gt;&lt;path d=&quot;M146 85 L188 85&quot; marker-end=&quot;url(#ar)&quot;/&gt;&lt;path d=&quot;M360 85 L394 85&quot; marker-end=&quot;url(#ar)&quot;/&gt;&lt;/g&gt;
            &lt;text class=&quot;m&quot; x=&quot;167&quot; y=&quot;76&quot; text-anchor=&quot;middle&quot;&gt;HTTPS&lt;/text&gt;
          &lt;/svg&gt;&lt;/figure&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Use when:&lt;/strong&gt; any MCP client should use your system, such as an internal API, a firewall or a SaaS. The model and the loop live in the client.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Skip when:&lt;/strong&gt; you need your own agent with memory and a schedule. Build C, D or E and let it call MCP servers as a client.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;You write:&lt;/strong&gt; tool definitions with good descriptions. Few task-shaped tools work better than many thin ones.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;You get:&lt;/strong&gt; streamable HTTP transport, OAuth or Access for login, testing with MCP Inspector.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Docs:&lt;/strong&gt; &lt;a href=&quot;https://developers.cloudflare.com/agents/model-context-protocol/guides/remote-mcp-server/&quot; rel=&quot;noopener&quot;&gt;Build a remote MCP server&lt;/a&gt;, &lt;a href=&quot;https://developers.cloudflare.com/agents/model-context-protocol/apis/handler-api/&quot; rel=&quot;noopener&quot;&gt;Handler APIs&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;g-orchestrator-with-sub-agents&quot;&gt;&lt;a class=&quot;anchor&quot; href=&quot;#g-orchestrator-with-sub-agents&quot;&gt;G. Orchestrator with sub-agents&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;One agent coordinates and several children do focused work. Each child has its own SQLite and typed RPC.&lt;/p&gt;
&lt;figure class=&quot;fig diagram mini&quot;&gt;&lt;svg viewBox=&quot;0 0 520 170&quot; role=&quot;img&quot; aria-label=&quot;An orchestrator agent delegating to three sub-agents&quot;&gt;
            &lt;rect class=&quot;o-rt&quot; x=&quot;10&quot; y=&quot;36&quot; width=&quot;170&quot; height=&quot;86&quot; rx=&quot;10&quot;/&gt;&lt;text class=&quot;t&quot; x=&quot;95&quot; y=&quot;68&quot; text-anchor=&quot;middle&quot;&gt;Orchestrator&lt;/text&gt;&lt;text class=&quot;s&quot; x=&quot;95&quot; y=&quot;88&quot; text-anchor=&quot;middle&quot;&gt;Think or Agent class&lt;/text&gt;&lt;text class=&quot;m&quot; x=&quot;95&quot; y=&quot;106&quot; text-anchor=&quot;middle&quot;&gt;plans and delegates&lt;/text&gt;
            &lt;rect class=&quot;node&quot; x=&quot;262&quot; y=&quot;10&quot; width=&quot;140&quot; height=&quot;42&quot; rx=&quot;8&quot;/&gt;&lt;text class=&quot;s&quot; x=&quot;332&quot; y=&quot;29&quot; text-anchor=&quot;middle&quot;&gt;Researcher&lt;/text&gt;&lt;text class=&quot;m&quot; x=&quot;332&quot; y=&quot;44&quot; text-anchor=&quot;middle&quot;&gt;own SQLite&lt;/text&gt;
            &lt;rect class=&quot;node&quot; x=&quot;262&quot; y=&quot;64&quot; width=&quot;140&quot; height=&quot;42&quot; rx=&quot;8&quot;/&gt;&lt;text class=&quot;s&quot; x=&quot;332&quot; y=&quot;83&quot; text-anchor=&quot;middle&quot;&gt;Reviewer&lt;/text&gt;&lt;text class=&quot;m&quot; x=&quot;332&quot; y=&quot;98&quot; text-anchor=&quot;middle&quot;&gt;own SQLite&lt;/text&gt;
            &lt;rect class=&quot;node&quot; x=&quot;262&quot; y=&quot;118&quot; width=&quot;140&quot; height=&quot;42&quot; rx=&quot;8&quot;/&gt;&lt;text class=&quot;s&quot; x=&quot;332&quot; y=&quot;137&quot; text-anchor=&quot;middle&quot;&gt;Browser agent&lt;/text&gt;&lt;text class=&quot;m&quot; x=&quot;332&quot; y=&quot;152&quot; text-anchor=&quot;middle&quot;&gt;own SQLite&lt;/text&gt;
            &lt;rect class=&quot;o-flow&quot; x=&quot;428&quot; y=&quot;64&quot; width=&quot;82&quot; height=&quot;42&quot; rx=&quot;8&quot;/&gt;&lt;text class=&quot;s&quot; x=&quot;469&quot; y=&quot;89&quot; text-anchor=&quot;middle&quot;&gt;Workflow&lt;/text&gt;
            &lt;g class=&quot;edge-strong&quot;&gt;&lt;path d=&quot;M180 64 L260 32&quot; marker-end=&quot;url(#ar)&quot;/&gt;&lt;path d=&quot;M180 79 L260 85&quot; marker-end=&quot;url(#ar)&quot;/&gt;&lt;path d=&quot;M180 96 L260 138&quot; marker-end=&quot;url(#ar)&quot;/&gt;&lt;/g&gt;
            &lt;g class=&quot;edge&quot;&gt;&lt;path d=&quot;M402 85 L426 85&quot; marker-end=&quot;url(#ar)&quot;/&gt;&lt;/g&gt;
            &lt;text class=&quot;m&quot; x=&quot;95&quot; y=&quot;144&quot; text-anchor=&quot;middle&quot;&gt;typed RPC: subAgent()&lt;/text&gt;
          &lt;/svg&gt;&lt;/figure&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Use when:&lt;/strong&gt; work splits into specialised roles, or one parent manages many long-lived child contexts (per customer, project or task).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Skip when:&lt;/strong&gt; one agent with a few tools is enough. Every extra agent adds coordination and debugging cost.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;You write:&lt;/strong&gt; the delegation logic. Children are classes, called by typed RPC.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;You get:&lt;/strong&gt; isolated storage per child, streaming turns through &lt;code&gt;chat()&lt;/code&gt;, and children usable as tools with retained runs and abort.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Docs:&lt;/strong&gt; &lt;a href=&quot;https://developers.cloudflare.com/agents/runtime/execution/sub-agents/&quot; rel=&quot;noopener&quot;&gt;Sub-agents&lt;/a&gt;, &lt;a href=&quot;https://developers.cloudflare.com/agents/runtime/execution/agent-tools/&quot; rel=&quot;noopener&quot;&gt;Agents as tools&lt;/a&gt;, &lt;a href=&quot;https://developers.cloudflare.com/agents/harnesses/think/sub-agents/&quot; rel=&quot;noopener&quot;&gt;Think sub-agent RPC&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;h-existing-harness-secured&quot;&gt;&lt;a class=&quot;anchor&quot; href=&quot;#h-existing-harness-secured&quot;&gt;H. Existing harness, secured&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Your team already uses an agent such as Claude Code, opencode, Cursor or Copilot, and you control what goes in and out.&lt;/p&gt;
&lt;figure class=&quot;fig diagram mini&quot;&gt;&lt;svg viewBox=&quot;0 0 520 170&quot; role=&quot;img&quot; aria-label=&quot;Existing harness with model calls through AI Gateway and tool calls through an MCP portal, behind Access&quot;&gt;
            &lt;rect class=&quot;node&quot; x=&quot;10&quot; y=&quot;44&quot; width=&quot;136&quot; height=&quot;82&quot; rx=&quot;8&quot;/&gt;&lt;text class=&quot;t&quot; x=&quot;78&quot; y=&quot;76&quot; text-anchor=&quot;middle&quot;&gt;Existing agent&lt;/text&gt;&lt;text class=&quot;s&quot; x=&quot;78&quot; y=&quot;96&quot; text-anchor=&quot;middle&quot;&gt;Claude Code,&lt;/text&gt;&lt;text class=&quot;s&quot; x=&quot;78&quot; y=&quot;112&quot; text-anchor=&quot;middle&quot;&gt;opencode, Cursor&lt;/text&gt;
            &lt;rect class=&quot;o-sec&quot; x=&quot;168&quot; y=&quot;10&quot; width=&quot;64&quot; height=&quot;150&quot; rx=&quot;8&quot;/&gt;&lt;text class=&quot;s&quot; x=&quot;200&quot; y=&quot;80&quot; text-anchor=&quot;middle&quot; transform=&quot;rotate(-90 200 85)&quot;&gt;Access + IdP&lt;/text&gt;
            &lt;rect class=&quot;o-rt&quot; x=&quot;256&quot; y=&quot;18&quot; width=&quot;130&quot; height=&quot;58&quot; rx=&quot;8&quot;/&gt;&lt;text class=&quot;t&quot; x=&quot;321&quot; y=&quot;42&quot; text-anchor=&quot;middle&quot;&gt;AI Gateway&lt;/text&gt;&lt;text class=&quot;m&quot; x=&quot;321&quot; y=&quot;62&quot; text-anchor=&quot;middle&quot;&gt;DLP, logs, keys&lt;/text&gt;
            &lt;rect class=&quot;o-mcp&quot; x=&quot;256&quot; y=&quot;94&quot; width=&quot;130&quot; height=&quot;58&quot; rx=&quot;8&quot;/&gt;&lt;text class=&quot;t&quot; x=&quot;321&quot; y=&quot;118&quot; text-anchor=&quot;middle&quot;&gt;MCP portal&lt;/text&gt;&lt;text class=&quot;m&quot; x=&quot;321&quot; y=&quot;138&quot; text-anchor=&quot;middle&quot;&gt;scoped tools&lt;/text&gt;
            &lt;rect class=&quot;o-model&quot; x=&quot;414&quot; y=&quot;18&quot; width=&quot;96&quot; height=&quot;58&quot; rx=&quot;8&quot;/&gt;&lt;text class=&quot;t&quot; x=&quot;462&quot; y=&quot;52&quot; text-anchor=&quot;middle&quot;&gt;Models&lt;/text&gt;
            &lt;rect class=&quot;node&quot; x=&quot;414&quot; y=&quot;94&quot; width=&quot;96&quot; height=&quot;58&quot; rx=&quot;8&quot;/&gt;&lt;text class=&quot;s&quot; x=&quot;462&quot; y=&quot;120&quot; text-anchor=&quot;middle&quot;&gt;MCP servers&lt;/text&gt;
            &lt;g class=&quot;edge-strong&quot;&gt;&lt;path d=&quot;M146 70 L166 55&quot; marker-end=&quot;url(#ar)&quot;/&gt;&lt;path d=&quot;M146 100 L166 115&quot; marker-end=&quot;url(#ar)&quot;/&gt;&lt;path d=&quot;M232 47 L254 47&quot; marker-end=&quot;url(#ar)&quot;/&gt;&lt;path d=&quot;M232 123 L254 123&quot; marker-end=&quot;url(#ar)&quot;/&gt;&lt;path d=&quot;M386 47 L412 47&quot; marker-end=&quot;url(#ar)&quot;/&gt;&lt;path d=&quot;M386 123 L412 123&quot; marker-end=&quot;url(#ar)&quot;/&gt;&lt;/g&gt;
          &lt;/svg&gt;&lt;/figure&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Use when:&lt;/strong&gt; IT must govern the coding or chat agents your staff already use (keys, data loss, tool access, audit), or you expose your own tools to them.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Skip when:&lt;/strong&gt; you need your own memory model, proactive wakeups or a customer-facing agent.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;You write:&lt;/strong&gt; policy only: AI Gateway for model requests (gateway token or an Access-protected custom domain), the MCP server portal as remote MCP server, DLP and Gateway rules.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;You get:&lt;/strong&gt; per-user logs and budgets, scanned prompts, tools limited per portal and provider keys in the gateway instead of on laptops. The docs have setup guides for coding agents such as Claude Code, OpenAI Codex and OpenCode.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Docs:&lt;/strong&gt; &lt;a href=&quot;https://developers.cloudflare.com/ai-gateway/integrations/coding-agents/&quot; rel=&quot;noopener&quot;&gt;Coding agents through AI Gateway&lt;/a&gt;, &lt;a href=&quot;https://developers.cloudflare.com/ai-gateway/configuration/cloudflare-access/&quot; rel=&quot;noopener&quot;&gt;AI Gateway with Access&lt;/a&gt;, &lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/access-controls/ai-controls/mcp-portals/&quot; rel=&quot;noopener&quot;&gt;MCP server portals&lt;/a&gt;. See A4 in &lt;a href=&quot;https://kai.zone/writing/cloudflare-ai-choose-your-path/&quot;&gt;Part A&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;i-cloudflare-os-the-finished-workspace&quot;&gt;&lt;a class=&quot;anchor&quot; href=&quot;#i-cloudflare-os-the-finished-workspace&quot;&gt;I. Cloudflare OS, the finished workspace&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;An open-source workspace for all staff that you deploy in your own Cloudflare account.&lt;/p&gt;
&lt;figure class=&quot;fig diagram mini&quot;&gt;&lt;svg viewBox=&quot;0 0 520 170&quot; role=&quot;img&quot; aria-label=&quot;Staff in a browser use an agent workspace, with AI Gateway for models and Gatekeepers for systems, behind Access&quot;&gt;
            &lt;rect class=&quot;node&quot; x=&quot;10&quot; y=&quot;44&quot; width=&quot;100&quot; height=&quot;82&quot; rx=&quot;8&quot;/&gt;&lt;text class=&quot;t&quot; x=&quot;60&quot; y=&quot;80&quot; text-anchor=&quot;middle&quot;&gt;Staff&lt;/text&gt;&lt;text class=&quot;s&quot; x=&quot;60&quot; y=&quot;100&quot; text-anchor=&quot;middle&quot;&gt;browser&lt;/text&gt;
            &lt;rect class=&quot;o-sec&quot; x=&quot;128&quot; y=&quot;10&quot; width=&quot;52&quot; height=&quot;150&quot; rx=&quot;8&quot;/&gt;&lt;text class=&quot;s&quot; x=&quot;154&quot; y=&quot;85&quot; text-anchor=&quot;middle&quot; transform=&quot;rotate(-90 154 85)&quot;&gt;Access&lt;/text&gt;
            &lt;rect class=&quot;o-rt&quot; x=&quot;198&quot; y=&quot;10&quot; width=&quot;150&quot; height=&quot;150&quot; rx=&quot;10&quot;/&gt;&lt;text class=&quot;t&quot; x=&quot;273&quot; y=&quot;36&quot; text-anchor=&quot;middle&quot;&gt;Workspace&lt;/text&gt;
            &lt;rect class=&quot;chip-rt&quot; x=&quot;210&quot; y=&quot;48&quot; width=&quot;126&quot; height=&quot;26&quot; rx=&quot;6&quot;/&gt;&lt;text class=&quot;m&quot; x=&quot;273&quot; y=&quot;65&quot; text-anchor=&quot;middle&quot;&gt;agent (Code Mode)&lt;/text&gt;
            &lt;rect class=&quot;chip-rt&quot; x=&quot;210&quot; y=&quot;80&quot; width=&quot;126&quot; height=&quot;26&quot; rx=&quot;6&quot;/&gt;&lt;text class=&quot;m&quot; x=&quot;273&quot; y=&quot;97&quot; text-anchor=&quot;middle&quot;&gt;gadgets (apps)&lt;/text&gt;
            &lt;rect class=&quot;chip-rt&quot; x=&quot;210&quot; y=&quot;112&quot; width=&quot;126&quot; height=&quot;26&quot; rx=&quot;6&quot;/&gt;&lt;text class=&quot;m&quot; x=&quot;273&quot; y=&quot;129&quot; text-anchor=&quot;middle&quot;&gt;workflows&lt;/text&gt;
            &lt;rect class=&quot;o-rt&quot; x=&quot;376&quot; y=&quot;10&quot; width=&quot;134&quot; height=&quot;62&quot; rx=&quot;8&quot;/&gt;&lt;text class=&quot;t&quot; x=&quot;443&quot; y=&quot;36&quot; text-anchor=&quot;middle&quot;&gt;AI Gateway&lt;/text&gt;&lt;text class=&quot;m&quot; x=&quot;443&quot; y=&quot;56&quot; text-anchor=&quot;middle&quot;&gt;all inference&lt;/text&gt;
            &lt;rect class=&quot;o-mcp&quot; x=&quot;376&quot; y=&quot;98&quot; width=&quot;134&quot; height=&quot;62&quot; rx=&quot;8&quot;/&gt;&lt;text class=&quot;t&quot; x=&quot;443&quot; y=&quot;124&quot; text-anchor=&quot;middle&quot;&gt;Gatekeepers&lt;/text&gt;&lt;text class=&quot;m&quot; x=&quot;443&quot; y=&quot;144&quot; text-anchor=&quot;middle&quot;&gt;scoped, approved&lt;/text&gt;
            &lt;g class=&quot;edge-strong&quot;&gt;&lt;path d=&quot;M110 85 L126 85&quot; marker-end=&quot;url(#ar)&quot;/&gt;&lt;path d=&quot;M180 85 L196 85&quot; marker-end=&quot;url(#ar)&quot;/&gt;&lt;path d=&quot;M348 41 L374 41&quot; marker-end=&quot;url(#ar)&quot;/&gt;&lt;path d=&quot;M348 129 L374 129&quot; marker-end=&quot;url(#ar)&quot;/&gt;&lt;/g&gt;
          &lt;/svg&gt;&lt;/figure&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Use when:&lt;/strong&gt; you want a workspace for all staff, including people who do not code: agent chat, shared skills, small apps and workflows.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Skip when:&lt;/strong&gt; you need a supported product today (it is early access), you build AI for your customers, or you need shell-heavy engineering agents.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;You write:&lt;/strong&gt; configuration: Access policies, AI Gateway setup, Gatekeepers, your skills and context.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;You get:&lt;/strong&gt; open source (Apache-2.0) with an agent workspace, gadgets, Gatekeepers, inference through AI Gateway and MCP server portal support. See A6 in &lt;a href=&quot;https://kai.zone/writing/cloudflare-ai-choose-your-path/&quot;&gt;Part A&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Docs:&lt;/strong&gt; &lt;a href=&quot;https://blog.cloudflare.com/cloudflare-os/&quot; rel=&quot;noopener&quot;&gt;launch blog post&lt;/a&gt;, &lt;a href=&quot;https://github.com/cloudflare/cloudflare-os&quot; rel=&quot;noopener&quot;&gt;GitHub&lt;/a&gt;, &lt;a href=&quot;https://os.cloudflare.app/&quot; rel=&quot;noopener&quot;&gt;os.cloudflare.app&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;j-vibesdk-the-app-building-platform&quot;&gt;&lt;a class=&quot;anchor&quot; href=&quot;#j-vibesdk-the-app-building-platform&quot;&gt;J. VibeSDK, the app-building platform&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;An open-source platform where users describe an app and an AI coding agent builds, previews and deploys it.&lt;/p&gt;
&lt;figure class=&quot;fig diagram mini&quot;&gt;&lt;svg viewBox=&quot;0 0 520 170&quot; role=&quot;img&quot; aria-label=&quot;A user describes an app to a Think agent with a project workspace. The agent calls models through AI Gateway and deploys a preview as a Dynamic Worker with its own app data&quot;&gt;
            &lt;rect class=&quot;node&quot; x=&quot;6&quot; y=&quot;44&quot; width=&quot;100&quot; height=&quot;82&quot; rx=&quot;8&quot;/&gt;&lt;text class=&quot;t&quot; x=&quot;56&quot; y=&quot;80&quot; text-anchor=&quot;middle&quot;&gt;User&lt;/text&gt;&lt;text class=&quot;s&quot; x=&quot;56&quot; y=&quot;100&quot; text-anchor=&quot;middle&quot;&gt;prompt&lt;/text&gt;
            &lt;rect class=&quot;o-rt&quot; x=&quot;116&quot; y=&quot;10&quot; width=&quot;130&quot; height=&quot;150&quot; rx=&quot;10&quot;/&gt;&lt;text class=&quot;t&quot; x=&quot;181&quot; y=&quot;36&quot; text-anchor=&quot;middle&quot;&gt;Agent&lt;/text&gt;
            &lt;rect class=&quot;chip-rt&quot; x=&quot;126&quot; y=&quot;48&quot; width=&quot;110&quot; height=&quot;26&quot; rx=&quot;6&quot;/&gt;&lt;text class=&quot;m&quot; x=&quot;181&quot; y=&quot;65&quot; text-anchor=&quot;middle&quot;&gt;Think loop&lt;/text&gt;
            &lt;rect class=&quot;chip-rt&quot; x=&quot;126&quot; y=&quot;80&quot; width=&quot;110&quot; height=&quot;26&quot; rx=&quot;6&quot;/&gt;&lt;text class=&quot;m&quot; x=&quot;181&quot; y=&quot;97&quot; text-anchor=&quot;middle&quot;&gt;workspace&lt;/text&gt;
            &lt;rect class=&quot;chip-rt&quot; x=&quot;126&quot; y=&quot;112&quot; width=&quot;110&quot; height=&quot;26&quot; rx=&quot;6&quot;/&gt;&lt;text class=&quot;m&quot; x=&quot;181&quot; y=&quot;129&quot; text-anchor=&quot;middle&quot;&gt;git history&lt;/text&gt;
            &lt;rect class=&quot;o-rt&quot; x=&quot;268&quot; y=&quot;10&quot; width=&quot;116&quot; height=&quot;62&quot; rx=&quot;8&quot;/&gt;&lt;text class=&quot;t&quot; x=&quot;326&quot; y=&quot;36&quot; text-anchor=&quot;middle&quot;&gt;AI Gateway&lt;/text&gt;&lt;text class=&quot;m&quot; x=&quot;326&quot; y=&quot;56&quot; text-anchor=&quot;middle&quot;&gt;model calls&lt;/text&gt;
            &lt;rect class=&quot;o-model&quot; x=&quot;404&quot; y=&quot;10&quot; width=&quot;106&quot; height=&quot;62&quot; rx=&quot;8&quot;/&gt;&lt;text class=&quot;t&quot; x=&quot;457&quot; y=&quot;36&quot; text-anchor=&quot;middle&quot;&gt;Models&lt;/text&gt;&lt;text class=&quot;m&quot; x=&quot;457&quot; y=&quot;56&quot; text-anchor=&quot;middle&quot;&gt;your providers&lt;/text&gt;
            &lt;rect class=&quot;o-lib&quot; x=&quot;268&quot; y=&quot;98&quot; width=&quot;116&quot; height=&quot;62&quot; rx=&quot;8&quot;/&gt;&lt;text class=&quot;t&quot; x=&quot;326&quot; y=&quot;124&quot; text-anchor=&quot;middle&quot;&gt;Preview&lt;/text&gt;&lt;text class=&quot;m&quot; x=&quot;326&quot; y=&quot;144&quot; text-anchor=&quot;middle&quot;&gt;Dynamic Worker&lt;/text&gt;
            &lt;rect class=&quot;node&quot; x=&quot;404&quot; y=&quot;98&quot; width=&quot;106&quot; height=&quot;62&quot; rx=&quot;8&quot;/&gt;&lt;text class=&quot;t&quot; x=&quot;457&quot; y=&quot;124&quot; text-anchor=&quot;middle&quot;&gt;App data&lt;/text&gt;&lt;text class=&quot;m&quot; x=&quot;457&quot; y=&quot;144&quot; text-anchor=&quot;middle&quot;&gt;own SQLite&lt;/text&gt;
            &lt;g class=&quot;edge-strong&quot;&gt;&lt;path d=&quot;M100 85 L114 85&quot; marker-end=&quot;url(#ar)&quot;/&gt;&lt;path d=&quot;M246 41 L266 41&quot; marker-end=&quot;url(#ar)&quot;/&gt;&lt;path d=&quot;M384 41 L402 41&quot; marker-end=&quot;url(#ar)&quot;/&gt;&lt;path d=&quot;M246 129 L266 129&quot; marker-end=&quot;url(#ar)&quot;/&gt;&lt;path d=&quot;M384 129 L402 129&quot; marker-end=&quot;url(#ar)&quot;/&gt;&lt;/g&gt;
          &lt;/svg&gt;&lt;/figure&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Use when:&lt;/strong&gt; people should build apps by describing them: customers inside your product, or internal teams building their own tools.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Skip when:&lt;/strong&gt; you need to govern coding agents your engineers already use (option H), a workspace for all staff (option I) or a supported product today. The README has no support statement.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;You write:&lt;/strong&gt; deployment and configuration: model providers, the domain, project templates and any agent customisation.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;You get:&lt;/strong&gt; open source (MIT) with a Think-based agent loop, a workspace per project, previews as Dynamic Workers, isolated SQLite storage per generated app, optional version history in Artifacts and model calls through AI Gateway. See A7 in &lt;a href=&quot;https://kai.zone/writing/cloudflare-ai-choose-your-path/&quot;&gt;Part A&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Docs:&lt;/strong&gt; &lt;a href=&quot;https://github.com/cloudflare/vibesdk&quot; rel=&quot;noopener&quot;&gt;GitHub and README&lt;/a&gt;, &lt;a href=&quot;https://github.com/cloudflare/vibesdk/blob/main/docs/setup.md&quot; rel=&quot;noopener&quot;&gt;setup guide&lt;/a&gt;, &lt;a href=&quot;https://blog.cloudflare.com/deploy-your-own-ai-vibe-coding-platform/&quot; rel=&quot;noopener&quot;&gt;launch post&lt;/a&gt;, &lt;a href=&quot;https://developers.cloudflare.com/reference-architecture/diagrams/ai/ai-vibe-coding-platform/&quot; rel=&quot;noopener&quot;&gt;reference architecture&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;4-comparison-at-a-glance&quot;&gt;&lt;a class=&quot;anchor&quot; href=&quot;#4-comparison-at-a-glance&quot;&gt;4. Comparison at a glance&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&quot;table-wrap&quot;&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Option&lt;/th&gt;
&lt;th&gt;Memory and state&lt;/th&gt;
&lt;th&gt;Who runs the loop&lt;/th&gt;
&lt;th&gt;Wakes on its own&lt;/th&gt;
&lt;th&gt;Survives a crash or deploy&lt;/th&gt;
&lt;th&gt;Code to start&lt;/th&gt;
&lt;th&gt;Watch out&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td data-label=&quot;Option&quot;&gt;&lt;strong&gt;A. Plain Worker + AI SDK&lt;/strong&gt;&lt;/td&gt;
&lt;td data-label=&quot;Memory and state&quot;&gt;None built in. Bring your own storage.&lt;/td&gt;
&lt;td data-label=&quot;Who runs the loop&quot;&gt;The AI SDK, for example a tool loop capped with &lt;code&gt;stopWhen&lt;/code&gt;.&lt;/td&gt;
&lt;td data-label=&quot;Wakes on its own&quot;&gt;No, only when something calls it.&lt;/td&gt;
&lt;td data-label=&quot;Survives a crash or deploy&quot;&gt;Request scoped. You handle retries.&lt;/td&gt;
&lt;td data-label=&quot;Code to start&quot;&gt;About 10 lines.&lt;/td&gt;
&lt;td data-label=&quot;Watch out&quot;&gt;Not an agent with memory. Fine for single calls.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td data-label=&quot;Option&quot;&gt;&lt;strong&gt;B. Workflow&lt;/strong&gt;&lt;/td&gt;
&lt;td data-label=&quot;Memory and state&quot;&gt;Step results persisted by the workflow engine.&lt;/td&gt;
&lt;td data-label=&quot;Who runs the loop&quot;&gt;Your code defines the steps. The model runs inside a step.&lt;/td&gt;
&lt;td data-label=&quot;Wakes on its own&quot;&gt;Sleeps and waits inside a run. Started by a trigger or an agent.&lt;/td&gt;
&lt;td data-label=&quot;Survives a crash or deploy&quot;&gt;Per-step retries with backoff, resume after failure.&lt;/td&gt;
&lt;td data-label=&quot;Code to start&quot;&gt;A separate class plus config.&lt;/td&gt;
&lt;td data-label=&quot;Watch out&quot;&gt;The path is fixed in code.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td data-label=&quot;Option&quot;&gt;&lt;strong&gt;C. Agent class&lt;/strong&gt;&lt;/td&gt;
&lt;td data-label=&quot;Memory and state&quot;&gt;SQLite per agent, state synced to clients.&lt;/td&gt;
&lt;td data-label=&quot;Who runs the loop&quot;&gt;You.&lt;/td&gt;
&lt;td data-label=&quot;Wakes on its own&quot;&gt;Yes: delayed, date, cron and interval schedules, plus email and webhooks.&lt;/td&gt;
&lt;td data-label=&quot;Survives a crash or deploy&quot;&gt;Fibers with &lt;code&gt;stash()&lt;/code&gt; checkpoints and &lt;code&gt;onFiberRecovered&lt;/code&gt;.&lt;/td&gt;
&lt;td data-label=&quot;Code to start&quot;&gt;A small class, plus the harness you build.&lt;/td&gt;
&lt;td data-label=&quot;Watch out&quot;&gt;In-memory variables and timers do not survive eviction.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td data-label=&quot;Option&quot;&gt;&lt;strong&gt;D. AIChatAgent&lt;/strong&gt;&lt;/td&gt;
&lt;td data-label=&quot;Memory and state&quot;&gt;Messages in a flat SQLite table. &lt;code&gt;maxPersistedMessages&lt;/code&gt; deletes the oldest.&lt;/td&gt;
&lt;td data-label=&quot;Who runs the loop&quot;&gt;You, inside &lt;code&gt;onChatMessage&lt;/code&gt;.&lt;/td&gt;
&lt;td data-label=&quot;Wakes on its own&quot;&gt;Yes, it extends Agent.&lt;/td&gt;
&lt;td data-label=&quot;Survives a crash or deploy&quot;&gt;Durable chat recovery is always on.&lt;/td&gt;
&lt;td data-label=&quot;Code to start&quot;&gt;About 15 lines.&lt;/td&gt;
&lt;td data-label=&quot;Watch out&quot;&gt;Forward &lt;code&gt;abortSignal&lt;/code&gt; to &lt;code&gt;streamText&lt;/code&gt; or cancelled calls keep running.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td data-label=&quot;Option&quot;&gt;&lt;strong&gt;E. Think&lt;/strong&gt;&lt;/td&gt;
&lt;td data-label=&quot;Memory and state&quot;&gt;Session tree, memory blocks the model writes, FTS5 search, non-destructive compaction.&lt;/td&gt;
&lt;td data-label=&quot;Who runs the loop&quot;&gt;Think. You override single hooks.&lt;/td&gt;
&lt;td data-label=&quot;Wakes on its own&quot;&gt;Yes: scheduled tasks, webhooks through submitted turns.&lt;/td&gt;
&lt;td data-label=&quot;Survives a crash or deploy&quot;&gt;Durable recovery, stream-stall watchdog.&lt;/td&gt;
&lt;td data-label=&quot;Code to start&quot;&gt;Three lines: &lt;code&gt;getModel()&lt;/code&gt;.&lt;/td&gt;
&lt;td data-label=&quot;Watch out&quot;&gt;Experimental. The API may still change.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td data-label=&quot;Option&quot;&gt;&lt;strong&gt;F. MCP server&lt;/strong&gt;&lt;/td&gt;
&lt;td data-label=&quot;Memory and state&quot;&gt;Stateless handler for new servers.&lt;/td&gt;
&lt;td data-label=&quot;Who runs the loop&quot;&gt;The client, for example Claude or Cursor.&lt;/td&gt;
&lt;td data-label=&quot;Wakes on its own&quot;&gt;No.&lt;/td&gt;
&lt;td data-label=&quot;Survives a crash or deploy&quot;&gt;Stateless, so nothing to recover.&lt;/td&gt;
&lt;td data-label=&quot;Code to start&quot;&gt;A template or the &lt;code&gt;mcp-worker&lt;/code&gt; example.&lt;/td&gt;
&lt;td data-label=&quot;Watch out&quot;&gt;Needs auth. Quick-deploy templates still use the deprecated &lt;code&gt;McpAgent&lt;/code&gt;.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td data-label=&quot;Option&quot;&gt;&lt;strong&gt;G. Sub-agents&lt;/strong&gt;&lt;/td&gt;
&lt;td data-label=&quot;Memory and state&quot;&gt;Own SQLite per child, isolated.&lt;/td&gt;
&lt;td data-label=&quot;Who runs the loop&quot;&gt;The parent delegates, children run their own turns.&lt;/td&gt;
&lt;td data-label=&quot;Wakes on its own&quot;&gt;Children can schedule. The parent owns the physical alarm.&lt;/td&gt;
&lt;td data-label=&quot;Survives a crash or deploy&quot;&gt;Fibers work inside children too.&lt;/td&gt;
&lt;td data-label=&quot;Code to start&quot;&gt;A class per role.&lt;/td&gt;
&lt;td data-label=&quot;Watch out&quot;&gt;More agents mean more coordination to debug.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td data-label=&quot;Option&quot;&gt;&lt;strong&gt;H. Existing harness, secured&lt;/strong&gt;&lt;/td&gt;
&lt;td data-label=&quot;Memory and state&quot;&gt;Whatever the existing tool keeps. Policy and logs live in the gateway.&lt;/td&gt;
&lt;td data-label=&quot;Who runs the loop&quot;&gt;The existing agent.&lt;/td&gt;
&lt;td data-label=&quot;Wakes on its own&quot;&gt;Depends on the tool. The controls do not add wakeups.&lt;/td&gt;
&lt;td data-label=&quot;Survives a crash or deploy&quot;&gt;Not provided by the controls.&lt;/td&gt;
&lt;td data-label=&quot;Code to start&quot;&gt;Policy, not code.&lt;/td&gt;
&lt;td data-label=&quot;Watch out&quot;&gt;Controls only see traffic routed through the gateway or portal. Block direct provider endpoints too.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td data-label=&quot;Option&quot;&gt;&lt;strong&gt;I. Cloudflare OS&lt;/strong&gt;&lt;/td&gt;
&lt;td data-label=&quot;Memory and state&quot;&gt;Each workspace is a Durable Object. Each gadget has its own SQLite database.&lt;/td&gt;
&lt;td data-label=&quot;Who runs the loop&quot;&gt;Its built-in Code Mode agent.&lt;/td&gt;
&lt;td data-label=&quot;Wakes on its own&quot;&gt;Workflows run on demand, on a schedule or on events.&lt;/td&gt;
&lt;td data-label=&quot;Survives a crash or deploy&quot;&gt;Not stated in the public sources.&lt;/td&gt;
&lt;td data-label=&quot;Code to start&quot;&gt;Configuration, not the agent.&lt;/td&gt;
&lt;td data-label=&quot;Watch out&quot;&gt;Early access with rough edges. The managed dashboard version is planned.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td data-label=&quot;Option&quot;&gt;&lt;strong&gt;J. VibeSDK&lt;/strong&gt;&lt;/td&gt;
&lt;td data-label=&quot;Memory and state&quot;&gt;A Durable Object workspace per project. Each generated app has its own SQLite storage.&lt;/td&gt;
&lt;td data-label=&quot;Who runs the loop&quot;&gt;Its Think agent.&lt;/td&gt;
&lt;td data-label=&quot;Wakes on its own&quot;&gt;Not stated in the README.&lt;/td&gt;
&lt;td data-label=&quot;Survives a crash or deploy&quot;&gt;Not stated in the README.&lt;/td&gt;
&lt;td data-label=&quot;Code to start&quot;&gt;Deployment and configuration.&lt;/td&gt;
&lt;td data-label=&quot;Watch out&quot;&gt;Reference implementation with no support statement. Builds on experimental and beta features.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;
&lt;h2 id=&quot;5-how-to-create-each-one&quot;&gt;&lt;a class=&quot;anchor&quot; href=&quot;#5-how-to-create-each-one&quot;&gt;5. How to create each one&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;These are the smallest working setups per option. The snippets come from the linked docs or are adapted from them, and I have not deployed every one. At the time of writing, &lt;code&gt;@cloudflare/think&lt;/code&gt; 0.20 and &lt;code&gt;workers-ai-provider&lt;/code&gt; 4 require AI SDK v7 (&lt;code&gt;ai&lt;/code&gt; ^7); older Think versions also accepted v6. Keep the AI SDK packages on matching major versions and check the current versions before you install.&lt;/p&gt;
&lt;h3 id=&quot;e-project-think-the-fastest-start-for-a-stateful-chat-agent&quot;&gt;&lt;a class=&quot;anchor&quot; href=&quot;#e-project-think-the-fastest-start-for-a-stateful-chat-agent&quot;&gt;E. Project Think: the fastest start for a stateful chat agent&lt;/a&gt;&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&quot;language-sh&quot;&gt;npm i @cloudflare/think @cloudflare/ai-chat agents ai @cloudflare/shell zod workers-ai-provider
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;src/index.ts&lt;/code&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-ts&quot;&gt;import { Think } from &amp;quot;@cloudflare/think&amp;quot;;
import { createWorkersAI } from &amp;quot;workers-ai-provider&amp;quot;;
import { routeAgentRequest } from &amp;quot;agents&amp;quot;;

export class MyAgent extends Think&amp;lt;Env&amp;gt; {
  getModel() {
    return createWorkersAI({ binding: this.env.AI })(&amp;quot;@cf/moonshotai/kimi-k2.6&amp;quot;);
  }
}

export default {
  async fetch(request: Request, env: Env) {
    return (await routeAgentRequest(request, env)) || new Response(&amp;quot;Not found&amp;quot;, { status: 404 });
  },
} satisfies ExportedHandler&amp;lt;Env&amp;gt;;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;wrangler.jsonc&lt;/code&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-jsonc&quot;&gt;{
  &amp;quot;compatibility_date&amp;quot;: &amp;quot;2026-09-30&amp;quot;,
  &amp;quot;compatibility_flags&amp;quot;: [&amp;quot;nodejs_compat&amp;quot;],
  &amp;quot;ai&amp;quot;: { &amp;quot;binding&amp;quot;: &amp;quot;AI&amp;quot; },
  &amp;quot;durable_objects&amp;quot;: { &amp;quot;bindings&amp;quot;: [{ &amp;quot;class_name&amp;quot;: &amp;quot;MyAgent&amp;quot;, &amp;quot;name&amp;quot;: &amp;quot;MyAgent&amp;quot; }] },
  &amp;quot;migrations&amp;quot;: [{ &amp;quot;new_sqlite_classes&amp;quot;: [&amp;quot;MyAgent&amp;quot;], &amp;quot;tag&amp;quot;: &amp;quot;v1&amp;quot; }],
  &amp;quot;observability&amp;quot;: { &amp;quot;traces&amp;quot;: { &amp;quot;enabled&amp;quot;: true } } // optional: traces in the Agents dashboard view
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;On the client, use &lt;code&gt;useAgent({ agent: &amp;quot;MyAgent&amp;quot; })&lt;/code&gt; with &lt;code&gt;useAgentChat({ agent })&lt;/code&gt; from &lt;code&gt;@cloudflare/ai-chat/react&lt;/code&gt;. Then read the &lt;a href=&quot;https://developers.cloudflare.com/agents/harnesses/think/getting-started/&quot; rel=&quot;noopener&quot;&gt;Think getting started guide&lt;/a&gt; and the &lt;a href=&quot;https://github.com/cloudflare/agents/tree/main/examples/assistant&quot; rel=&quot;noopener&quot;&gt;assistant example&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id=&quot;d-aichatagent-when-you-want-to-own-the-model-call&quot;&gt;&lt;a class=&quot;anchor&quot; href=&quot;#d-aichatagent-when-you-want-to-own-the-model-call&quot;&gt;D. AIChatAgent: when you want to own the model call&lt;/a&gt;&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&quot;language-sh&quot;&gt;npm i @cloudflare/ai-chat agents ai @ai-sdk/react workers-ai-provider
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code class=&quot;language-ts&quot;&gt;import { AIChatAgent } from &amp;quot;@cloudflare/ai-chat&amp;quot;;
import { createWorkersAI } from &amp;quot;workers-ai-provider&amp;quot;;
import { streamText, convertToModelMessages } from &amp;quot;ai&amp;quot;;

export class ChatAgent extends AIChatAgent {
  async onChatMessage(_onFinish, options) {
    const workersai = createWorkersAI({ binding: this.env.AI });
    const result = streamText({
      model: workersai(&amp;quot;@cf/zai-org/glm-4.7-flash&amp;quot;),
      system: &amp;quot;You are a helpful assistant.&amp;quot;,
      messages: await convertToModelMessages(this.messages),
      abortSignal: options?.abortSignal, // forward it, or cancelled calls keep running
    });
    return result.toUIMessageStreamResponse();
  }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The &lt;code&gt;new_sqlite_classes&lt;/code&gt; migration is required, with the same wrangler shape as above and &lt;code&gt;ChatAgent&lt;/code&gt; as the class name. Docs: &lt;a href=&quot;https://developers.cloudflare.com/agents/communication-channels/chat/chat-agents/&quot; rel=&quot;noopener&quot;&gt;Chat agents&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id=&quot;c-agent-class-with-a-wakeup-for-background-agents&quot;&gt;&lt;a class=&quot;anchor&quot; href=&quot;#c-agent-class-with-a-wakeup-for-background-agents&quot;&gt;C. Agent class with a wakeup, for background agents&lt;/a&gt;&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&quot;language-ts&quot;&gt;import { Agent } from &amp;quot;agents&amp;quot;;

export class ReminderAgent extends Agent {
  async onRequest(request) {
    // run sendReminder in 30 seconds, survives hibernation
    await this.schedule(30, &amp;quot;sendReminder&amp;quot;, { message: &amp;quot;Check your email&amp;quot; });
    // every day at 08:00 UTC
    await this.schedule(&amp;quot;0 8 * * *&amp;quot;, &amp;quot;dailyDigest&amp;quot;, {});
    return new Response(&amp;quot;Scheduled!&amp;quot;);
  }
  async sendReminder(payload) { console.log(payload.message); }
  async dailyDigest() { /* build and send the digest */ }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Pass &lt;code&gt;{ idempotent: true }&lt;/code&gt; as the fourth argument when you call &lt;code&gt;schedule()&lt;/code&gt; from &lt;code&gt;onStart()&lt;/code&gt;, so restarts do not create duplicates. For long work use &lt;code&gt;runFiber()&lt;/code&gt; with &lt;code&gt;ctx.stash()&lt;/code&gt;. Docs: &lt;a href=&quot;https://developers.cloudflare.com/agents/runtime/execution/schedule-tasks/&quot; rel=&quot;noopener&quot;&gt;Schedule tasks&lt;/a&gt;, &lt;a href=&quot;https://developers.cloudflare.com/agents/runtime/execution/durable-execution/&quot; rel=&quot;noopener&quot;&gt;Durable execution&lt;/a&gt;, &lt;a href=&quot;https://developers.cloudflare.com/agents/getting-started/quick-start/&quot; rel=&quot;noopener&quot;&gt;Quick start&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id=&quot;a-plain-worker-with-the-ai-sdk&quot;&gt;&lt;a class=&quot;anchor&quot; href=&quot;#a-plain-worker-with-the-ai-sdk&quot;&gt;A. Plain Worker with the AI SDK&lt;/a&gt;&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&quot;language-sh&quot;&gt;npm i ai workers-ai-provider
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code class=&quot;language-ts&quot;&gt;import { generateText } from &amp;quot;ai&amp;quot;;
import { createWorkersAI } from &amp;quot;workers-ai-provider&amp;quot;;

export default {
  async fetch(request: Request, env: Env) {
    const workersai = createWorkersAI({ binding: env.AI });
    const { text } = await generateText({
      model: workersai(&amp;quot;@cf/zai-org/glm-4.7-flash&amp;quot;),
      prompt: &amp;quot;Summarise this ticket in two sentences: ...&amp;quot;,
    });
    return Response.json({ text });
  },
};
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This needs only &lt;code&gt;&amp;quot;ai&amp;quot;: { &amp;quot;binding&amp;quot;: &amp;quot;AI&amp;quot; }&lt;/code&gt; in the Wrangler config. To use OpenAI or Anthropic, swap the provider package (&lt;code&gt;@ai-sdk/openai&lt;/code&gt;). To route across providers with caching and limits, pass a gateway option when calling &lt;code&gt;env.AI.run&lt;/code&gt;. Docs: &lt;a href=&quot;https://developers.cloudflare.com/agents/runtime/operations/using-ai-models/&quot; rel=&quot;noopener&quot;&gt;Using AI models&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id=&quot;f-mcp-server&quot;&gt;&lt;a class=&quot;anchor&quot; href=&quot;#f-mcp-server&quot;&gt;F. MCP server&lt;/a&gt;&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&quot;language-sh&quot;&gt;npm create cloudflare@latest -- my-mcp-server --template=cloudflare/ai/demos/remote-mcp-authless
npx @modelcontextprotocol/inspector@latest   # connect to http://localhost:8788/mcp
npx wrangler@latest deploy
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;That template still uses the deprecated &lt;code&gt;McpAgent&lt;/code&gt;. For a new server, start from the &lt;a href=&quot;https://github.com/cloudflare/agents/tree/main/examples/mcp-worker&quot; rel=&quot;noopener&quot;&gt;mcp-worker example&lt;/a&gt; and &lt;code&gt;createMcpHandler()&lt;/code&gt;. Add auth with Access or an OAuth provider. Full guide: &lt;a href=&quot;https://developers.cloudflare.com/agents/model-context-protocol/guides/remote-mcp-server/&quot; rel=&quot;noopener&quot;&gt;Build a remote MCP server&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id=&quot;b-workflow-and-starting-one-from-an-agent&quot;&gt;&lt;a class=&quot;anchor&quot; href=&quot;#b-workflow-and-starting-one-from-an-agent&quot;&gt;B. Workflow, and starting one from an agent&lt;/a&gt;&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&quot;language-ts&quot;&gt;export class ProjectManager extends Agent {
  async startDeployment(task) {
    const instanceId = await this.runWorkflow(&amp;quot;DEPLOY_WORKFLOW&amp;quot;, {
      taskId: task.id, environment: &amp;quot;production&amp;quot;,
    });
    // store instanceId in state, then go back to sleep
  }
  async onWorkflowComplete(workflowName, instanceId, result) {
    // the agent wakes up here when the workflow finishes
  }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The workflow class and its binding are not shown. Take them from &lt;a href=&quot;https://developers.cloudflare.com/agents/runtime/execution/run-workflows/&quot; rel=&quot;noopener&quot;&gt;Run Workflows&lt;/a&gt;. The snippet is from the &lt;a href=&quot;https://developers.cloudflare.com/agents/concepts/agentic-patterns/long-running-agents/&quot; rel=&quot;noopener&quot;&gt;long-running agents&lt;/a&gt; page. The Agents docs and the Workflows docs describe step limits differently. For step duration and CPU limits, check the &lt;a href=&quot;https://developers.cloudflare.com/workflows/reference/limits/&quot; rel=&quot;noopener&quot;&gt;Workflows limits&lt;/a&gt; page and verify the number you rely on.&lt;/p&gt;
&lt;h2 id=&quot;6-combinations-and-traps-to-avoid&quot;&gt;&lt;a class=&quot;anchor&quot; href=&quot;#6-combinations-and-traps-to-avoid&quot;&gt;6. Combinations, and traps to avoid&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;These combinations work:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Agent + Workflow: the agent owns its rhythm (reminders, polling, state) and a Workflow handles the heavy pipeline such as deploys. The docs use both in one project manager agent.&lt;/li&gt;
&lt;li&gt;Think + MCP tools: Think agents can use tools from MCP servers. An MCP server you build (F) becomes a tool source for a Think agent (E).&lt;/li&gt;
&lt;li&gt;Orchestrator + sub-agents: a parent Think or Agent delegates to children, each with its own storage.&lt;/li&gt;
&lt;li&gt;Any agent + AI Gateway: route models across providers with caching and rate limits through the shared &lt;code&gt;ai&lt;/code&gt; binding.&lt;/li&gt;
&lt;li&gt;Code Mode: the model writes one piece of code that calls many tools, run in a sandbox. This helps when an API or MCP server has many tools.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Watch out for these:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Think is experimental, and the docs mark &lt;code&gt;runTurn()&lt;/code&gt; as &amp;quot;Experimental: stable in shape, but may evolve before Think graduates out of experimental&amp;quot;. Check its status before you promise a customer a production date.&lt;/li&gt;
&lt;li&gt;If the path is known in advance, a Workflow is simpler and more predictable than an agent. The docs define agents as non-deterministic and workflows as linear and deterministic.&lt;/li&gt;
&lt;li&gt;Variables in memory are lost. Only &lt;code&gt;setState&lt;/code&gt;, &lt;code&gt;this.sql&lt;/code&gt;, schedules and fiber checkpoints survive eviction.&lt;/li&gt;
&lt;li&gt;For tools that reach a firewall or internal API, pair any option with &lt;a href=&quot;https://developers.cloudflare.com/workers-vpc/&quot; rel=&quot;noopener&quot;&gt;Workers VPC&lt;/a&gt; (beta at the time of writing) or a Cloudflare Tunnel.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;sources&quot;&gt;&lt;a class=&quot;anchor&quot; href=&quot;#sources&quot;&gt;Sources&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/agents/concepts/what-are-agents/&quot; rel=&quot;noopener&quot;&gt;What are agents?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/agents/concepts/agentic-patterns/&quot; rel=&quot;noopener&quot;&gt;Agentic patterns&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/agents/concepts/agentic-patterns/long-running-agents/&quot; rel=&quot;noopener&quot;&gt;Long-running agents&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The other documentation pages are linked in the option cards above.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>AI on Cloudflare: decision matrix</title>
    <link href="https://kai.zone/writing/ai-on-cloudflare-decision-matrix/" rel="alternate" type="text/html"/>
    <id>https://kai.zone/writing/ai-on-cloudflare-decision-matrix/</id>
    <published>2026-10-07T00:00:00Z</published>
    <updated>2026-10-08T00:00:00Z</updated>
    <summary>Map your AI situation to the Cloudflare building blocks you need, and compare the options for building an agent, on one page.</summary>
    <content type="html">&lt;p&gt;The first matrix maps your situation to the Cloudflare building blocks you need. The second compares the options for building an agent: AIChatAgent, Project Think, an MCP server on a Worker, an existing harness, Cloudflare OS, VibeSDK and more.&lt;/p&gt;
&lt;h2 id=&quot;how-to-read-it&quot;&gt;&lt;a class=&quot;anchor&quot; href=&quot;#how-to-read-it&quot;&gt;How to read it&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Core&lt;/strong&gt; and &lt;strong&gt;included&lt;/strong&gt; items give a working, safe setup.&lt;/li&gt;
&lt;li&gt;Add &lt;strong&gt;recommended&lt;/strong&gt; items when they apply, for example DLP if prompts hold personal data.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Optional&lt;/strong&gt; items are for specific needs. &lt;strong&gt;Not needed&lt;/strong&gt; items are not part of the situation.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Provided&lt;/strong&gt; in the second matrix means the platform supplies it. You may still write code to use it.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;1-your-situation-which-building-blocks-do-you-need&quot;&gt;&lt;a class=&quot;anchor&quot; href=&quot;#1-your-situation-which-building-blocks-do-you-need&quot;&gt;1. Your situation: which building blocks do you need?&lt;/a&gt;&lt;/h2&gt;
&lt;figure class=&quot;fig matrix-fig&quot;&gt;&lt;div class=&quot;matrix-scroll&quot;&gt;&lt;div class=&quot;legend&quot;&gt;&lt;span class=&quot;lg&quot;&gt;&lt;span class=&quot;cell mC sm&quot; role=&quot;img&quot; aria-label=&quot;Core&quot;&gt;●&lt;/span&gt;&lt;b&gt;Core&lt;/b&gt; Put it in place first.&lt;/span&gt;&lt;span class=&quot;lg&quot;&gt;&lt;span class=&quot;cell mI sm&quot; role=&quot;img&quot; aria-label=&quot;Included&quot;&gt;✓&lt;/span&gt;&lt;b&gt;Included&lt;/b&gt; Built into the product.&lt;/span&gt;&lt;span class=&quot;lg&quot;&gt;&lt;span class=&quot;cell mR sm&quot; role=&quot;img&quot; aria-label=&quot;Recommended&quot;&gt;◐&lt;/span&gt;&lt;b&gt;Recommended&lt;/b&gt; Add it when it applies to you.&lt;/span&gt;&lt;span class=&quot;lg&quot;&gt;&lt;span class=&quot;cell mO sm&quot; role=&quot;img&quot; aria-label=&quot;Optional&quot;&gt;○&lt;/span&gt;&lt;b&gt;Optional&lt;/b&gt; Only for specific needs.&lt;/span&gt;&lt;span class=&quot;lg&quot;&gt;&lt;span class=&quot;cell mN sm&quot; role=&quot;img&quot; aria-label=&quot;Not needed&quot;&gt;·&lt;/span&gt;&lt;b&gt;Not needed&lt;/b&gt; Not part of this situation.&lt;/span&gt;&lt;/div&gt;
&lt;table class=&quot;mx matrix-m1&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;&lt;th class=&quot;corner&quot; rowspan=&quot;2&quot;&gt;Your situation&lt;/th&gt;&lt;th colspan=&quot;1&quot; class=&quot;grp&quot;&gt;Who&lt;/th&gt;&lt;th colspan=&quot;1&quot; class=&quot;grp&quot;&gt;Models&lt;/th&gt;&lt;th colspan=&quot;2&quot; class=&quot;grp&quot;&gt;Tools&lt;/th&gt;&lt;th colspan=&quot;3&quot; class=&quot;grp&quot;&gt;Data and prompts&lt;/th&gt;&lt;th colspan=&quot;2&quot; class=&quot;grp&quot;&gt;Run safely&lt;/th&gt;&lt;th colspan=&quot;2&quot; class=&quot;grp&quot;&gt;Visibility&lt;/th&gt;&lt;th colspan=&quot;2&quot; class=&quot;grp&quot;&gt;Other&lt;/th&gt;&lt;th rowspan=&quot;2&quot; class=&quot;coreh&quot;&gt;Core&lt;/th&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th class=&quot;col&quot;&gt;Access and your IdP&lt;/th&gt;&lt;th class=&quot;col&quot;&gt;AI Gateway&lt;/th&gt;&lt;th class=&quot;col&quot;&gt;MCP server portal&lt;/th&gt;&lt;th class=&quot;col&quot;&gt;Code Mode&lt;/th&gt;&lt;th class=&quot;col&quot;&gt;DLP&lt;/th&gt;&lt;th class=&quot;col&quot;&gt;AI Security for Apps&lt;/th&gt;&lt;th class=&quot;col&quot;&gt;Secure Web Gateway&lt;/th&gt;&lt;th class=&quot;col&quot;&gt;Sandbox or Dynamic Worker&lt;/th&gt;&lt;th class=&quot;col&quot;&gt;Private network reach&lt;/th&gt;&lt;th class=&quot;col&quot;&gt;Shadow IT and CASB&lt;/th&gt;&lt;th class=&quot;col&quot;&gt;Logs to your SIEM&lt;/th&gt;&lt;th class=&quot;col&quot;&gt;AI Crawl Control and Bots&lt;/th&gt;&lt;th class=&quot;col&quot;&gt;Build on Workers and Agents SDK&lt;/th&gt;&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr class=&quot;rg&quot;&gt;&lt;th colspan=&quot;15&quot;&gt;You build AI&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th class=&quot;rowh&quot;&gt;&lt;b&gt;A. AI in your product&lt;/b&gt;&lt;span&gt;Your customers use AI that you built.&lt;/span&gt;&lt;/th&gt;&lt;td data-label=&quot;Access and your IdP&quot;&gt;&lt;span class=&quot;cell mO&quot; role=&quot;img&quot; aria-label=&quot;Optional&quot;&gt;○&lt;/span&gt;&lt;/td&gt;&lt;td data-label=&quot;AI Gateway&quot;&gt;&lt;span class=&quot;cell mC&quot; role=&quot;img&quot; aria-label=&quot;Core&quot;&gt;●&lt;/span&gt;&lt;/td&gt;&lt;td data-label=&quot;MCP server portal&quot;&gt;&lt;span class=&quot;cell mO&quot; role=&quot;img&quot; aria-label=&quot;Optional&quot;&gt;○&lt;/span&gt;&lt;/td&gt;&lt;td data-label=&quot;Code Mode&quot;&gt;&lt;span class=&quot;cell mO&quot; role=&quot;img&quot; aria-label=&quot;Optional&quot;&gt;○&lt;/span&gt;&lt;/td&gt;&lt;td data-label=&quot;DLP&quot;&gt;&lt;span class=&quot;cell mR&quot; role=&quot;img&quot; aria-label=&quot;Recommended&quot;&gt;◐&lt;/span&gt;&lt;/td&gt;&lt;td data-label=&quot;AI Security for Apps&quot;&gt;&lt;span class=&quot;cell mC&quot; role=&quot;img&quot; aria-label=&quot;Core&quot;&gt;●&lt;/span&gt;&lt;/td&gt;&lt;td class=&quot;na&quot; data-label=&quot;Secure Web Gateway&quot;&gt;&lt;span class=&quot;cell mN&quot; role=&quot;img&quot; aria-label=&quot;Not needed&quot;&gt;·&lt;/span&gt;&lt;/td&gt;&lt;td data-label=&quot;Sandbox or Dynamic Worker&quot;&gt;&lt;span class=&quot;cell mO&quot; role=&quot;img&quot; aria-label=&quot;Optional&quot;&gt;○&lt;/span&gt;&lt;/td&gt;&lt;td data-label=&quot;Private network reach&quot;&gt;&lt;span class=&quot;cell mO&quot; role=&quot;img&quot; aria-label=&quot;Optional&quot;&gt;○&lt;/span&gt;&lt;/td&gt;&lt;td class=&quot;na&quot; data-label=&quot;Shadow IT and CASB&quot;&gt;&lt;span class=&quot;cell mN&quot; role=&quot;img&quot; aria-label=&quot;Not needed&quot;&gt;·&lt;/span&gt;&lt;/td&gt;&lt;td data-label=&quot;Logs to your SIEM&quot;&gt;&lt;span class=&quot;cell mR&quot; role=&quot;img&quot; aria-label=&quot;Recommended&quot;&gt;◐&lt;/span&gt;&lt;/td&gt;&lt;td data-label=&quot;AI Crawl Control and Bots&quot;&gt;&lt;span class=&quot;cell mR&quot; role=&quot;img&quot; aria-label=&quot;Recommended&quot;&gt;◐&lt;/span&gt;&lt;/td&gt;&lt;td data-label=&quot;Build on Workers and Agents SDK&quot;&gt;&lt;span class=&quot;cell mO&quot; role=&quot;img&quot; aria-label=&quot;Optional&quot;&gt;○&lt;/span&gt;&lt;/td&gt;&lt;td class=&quot;cnt&quot;&gt;2&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th class=&quot;rowh&quot;&gt;&lt;b&gt;B1. A workspace for all staff&lt;/b&gt;&lt;span&gt;Agents, documents and small apps for non-developers. Cloudflare OS is a ready-made start.&lt;/span&gt;&lt;/th&gt;&lt;td data-label=&quot;Access and your IdP&quot;&gt;&lt;span class=&quot;cell mC&quot; role=&quot;img&quot; aria-label=&quot;Core&quot;&gt;●&lt;/span&gt;&lt;/td&gt;&lt;td data-label=&quot;AI Gateway&quot;&gt;&lt;span class=&quot;cell mI&quot; role=&quot;img&quot; aria-label=&quot;Included&quot;&gt;✓&lt;/span&gt;&lt;/td&gt;&lt;td data-label=&quot;MCP server portal&quot;&gt;&lt;span class=&quot;cell mR&quot; role=&quot;img&quot; aria-label=&quot;Recommended&quot;&gt;◐&lt;/span&gt;&lt;/td&gt;&lt;td data-label=&quot;Code Mode&quot;&gt;&lt;span class=&quot;cell mI&quot; role=&quot;img&quot; aria-label=&quot;Included&quot;&gt;✓&lt;/span&gt;&lt;/td&gt;&lt;td data-label=&quot;DLP&quot;&gt;&lt;span class=&quot;cell mR&quot; role=&quot;img&quot; aria-label=&quot;Recommended&quot;&gt;◐&lt;/span&gt;&lt;/td&gt;&lt;td class=&quot;na&quot; data-label=&quot;AI Security for Apps&quot;&gt;&lt;span class=&quot;cell mN&quot; role=&quot;img&quot; aria-label=&quot;Not needed&quot;&gt;·&lt;/span&gt;&lt;/td&gt;&lt;td data-label=&quot;Secure Web Gateway&quot;&gt;&lt;span class=&quot;cell mO&quot; role=&quot;img&quot; aria-label=&quot;Optional&quot;&gt;○&lt;/span&gt;&lt;/td&gt;&lt;td data-label=&quot;Sandbox or Dynamic Worker&quot;&gt;&lt;span class=&quot;cell mI&quot; role=&quot;img&quot; aria-label=&quot;Included&quot;&gt;✓&lt;/span&gt;&lt;/td&gt;&lt;td data-label=&quot;Private network reach&quot;&gt;&lt;span class=&quot;cell mO&quot; role=&quot;img&quot; aria-label=&quot;Optional&quot;&gt;○&lt;/span&gt;&lt;/td&gt;&lt;td data-label=&quot;Shadow IT and CASB&quot;&gt;&lt;span class=&quot;cell mO&quot; role=&quot;img&quot; aria-label=&quot;Optional&quot;&gt;○&lt;/span&gt;&lt;/td&gt;&lt;td data-label=&quot;Logs to your SIEM&quot;&gt;&lt;span class=&quot;cell mR&quot; role=&quot;img&quot; aria-label=&quot;Recommended&quot;&gt;◐&lt;/span&gt;&lt;/td&gt;&lt;td class=&quot;na&quot; data-label=&quot;AI Crawl Control and Bots&quot;&gt;&lt;span class=&quot;cell mN&quot; role=&quot;img&quot; aria-label=&quot;Not needed&quot;&gt;·&lt;/span&gt;&lt;/td&gt;&lt;td class=&quot;na&quot; data-label=&quot;Build on Workers and Agents SDK&quot;&gt;&lt;span class=&quot;cell mN&quot; role=&quot;img&quot; aria-label=&quot;Not needed&quot;&gt;·&lt;/span&gt;&lt;/td&gt;&lt;td class=&quot;cnt&quot;&gt;4&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th class=&quot;rowh&quot;&gt;&lt;b&gt;B2. Governed agents for engineers and IT&lt;/b&gt;&lt;span&gt;Agents with shell, repos and tests, under your rules.&lt;/span&gt;&lt;/th&gt;&lt;td data-label=&quot;Access and your IdP&quot;&gt;&lt;span class=&quot;cell mC&quot; role=&quot;img&quot; aria-label=&quot;Core&quot;&gt;●&lt;/span&gt;&lt;/td&gt;&lt;td data-label=&quot;AI Gateway&quot;&gt;&lt;span class=&quot;cell mC&quot; role=&quot;img&quot; aria-label=&quot;Core&quot;&gt;●&lt;/span&gt;&lt;/td&gt;&lt;td data-label=&quot;MCP server portal&quot;&gt;&lt;span class=&quot;cell mC&quot; role=&quot;img&quot; aria-label=&quot;Core&quot;&gt;●&lt;/span&gt;&lt;/td&gt;&lt;td data-label=&quot;Code Mode&quot;&gt;&lt;span class=&quot;cell mR&quot; role=&quot;img&quot; aria-label=&quot;Recommended&quot;&gt;◐&lt;/span&gt;&lt;/td&gt;&lt;td data-label=&quot;DLP&quot;&gt;&lt;span class=&quot;cell mR&quot; role=&quot;img&quot; aria-label=&quot;Recommended&quot;&gt;◐&lt;/span&gt;&lt;/td&gt;&lt;td class=&quot;na&quot; data-label=&quot;AI Security for Apps&quot;&gt;&lt;span class=&quot;cell mN&quot; role=&quot;img&quot; aria-label=&quot;Not needed&quot;&gt;·&lt;/span&gt;&lt;/td&gt;&lt;td data-label=&quot;Secure Web Gateway&quot;&gt;&lt;span class=&quot;cell mO&quot; role=&quot;img&quot; aria-label=&quot;Optional&quot;&gt;○&lt;/span&gt;&lt;/td&gt;&lt;td data-label=&quot;Sandbox or Dynamic Worker&quot;&gt;&lt;span class=&quot;cell mC&quot; role=&quot;img&quot; aria-label=&quot;Core&quot;&gt;●&lt;/span&gt;&lt;/td&gt;&lt;td data-label=&quot;Private network reach&quot;&gt;&lt;span class=&quot;cell mC&quot; role=&quot;img&quot; aria-label=&quot;Core&quot;&gt;●&lt;/span&gt;&lt;/td&gt;&lt;td data-label=&quot;Shadow IT and CASB&quot;&gt;&lt;span class=&quot;cell mO&quot; role=&quot;img&quot; aria-label=&quot;Optional&quot;&gt;○&lt;/span&gt;&lt;/td&gt;&lt;td data-label=&quot;Logs to your SIEM&quot;&gt;&lt;span class=&quot;cell mC&quot; role=&quot;img&quot; aria-label=&quot;Core&quot;&gt;●&lt;/span&gt;&lt;/td&gt;&lt;td class=&quot;na&quot; data-label=&quot;AI Crawl Control and Bots&quot;&gt;&lt;span class=&quot;cell mN&quot; role=&quot;img&quot; aria-label=&quot;Not needed&quot;&gt;·&lt;/span&gt;&lt;/td&gt;&lt;td data-label=&quot;Build on Workers and Agents SDK&quot;&gt;&lt;span class=&quot;cell mR&quot; role=&quot;img&quot; aria-label=&quot;Recommended&quot;&gt;◐&lt;/span&gt;&lt;/td&gt;&lt;td class=&quot;cnt&quot;&gt;6&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th class=&quot;rowh&quot;&gt;&lt;b&gt;B3. Agents your teams already use&lt;/b&gt;&lt;span&gt;Claude Code, opencode, Codex and similar. You secure them, you do not build a loop.&lt;/span&gt;&lt;/th&gt;&lt;td data-label=&quot;Access and your IdP&quot;&gt;&lt;span class=&quot;cell mC&quot; role=&quot;img&quot; aria-label=&quot;Core&quot;&gt;●&lt;/span&gt;&lt;/td&gt;&lt;td data-label=&quot;AI Gateway&quot;&gt;&lt;span class=&quot;cell mC&quot; role=&quot;img&quot; aria-label=&quot;Core&quot;&gt;●&lt;/span&gt;&lt;/td&gt;&lt;td data-label=&quot;MCP server portal&quot;&gt;&lt;span class=&quot;cell mR&quot; role=&quot;img&quot; aria-label=&quot;Recommended&quot;&gt;◐&lt;/span&gt;&lt;/td&gt;&lt;td data-label=&quot;Code Mode&quot;&gt;&lt;span class=&quot;cell mO&quot; role=&quot;img&quot; aria-label=&quot;Optional&quot;&gt;○&lt;/span&gt;&lt;/td&gt;&lt;td data-label=&quot;DLP&quot;&gt;&lt;span class=&quot;cell mR&quot; role=&quot;img&quot; aria-label=&quot;Recommended&quot;&gt;◐&lt;/span&gt;&lt;/td&gt;&lt;td class=&quot;na&quot; data-label=&quot;AI Security for Apps&quot;&gt;&lt;span class=&quot;cell mN&quot; role=&quot;img&quot; aria-label=&quot;Not needed&quot;&gt;·&lt;/span&gt;&lt;/td&gt;&lt;td data-label=&quot;Secure Web Gateway&quot;&gt;&lt;span class=&quot;cell mR&quot; role=&quot;img&quot; aria-label=&quot;Recommended&quot;&gt;◐&lt;/span&gt;&lt;/td&gt;&lt;td data-label=&quot;Sandbox or Dynamic Worker&quot;&gt;&lt;span class=&quot;cell mO&quot; role=&quot;img&quot; aria-label=&quot;Optional&quot;&gt;○&lt;/span&gt;&lt;/td&gt;&lt;td data-label=&quot;Private network reach&quot;&gt;&lt;span class=&quot;cell mO&quot; role=&quot;img&quot; aria-label=&quot;Optional&quot;&gt;○&lt;/span&gt;&lt;/td&gt;&lt;td data-label=&quot;Shadow IT and CASB&quot;&gt;&lt;span class=&quot;cell mR&quot; role=&quot;img&quot; aria-label=&quot;Recommended&quot;&gt;◐&lt;/span&gt;&lt;/td&gt;&lt;td data-label=&quot;Logs to your SIEM&quot;&gt;&lt;span class=&quot;cell mR&quot; role=&quot;img&quot; aria-label=&quot;Recommended&quot;&gt;◐&lt;/span&gt;&lt;/td&gt;&lt;td class=&quot;na&quot; data-label=&quot;AI Crawl Control and Bots&quot;&gt;&lt;span class=&quot;cell mN&quot; role=&quot;img&quot; aria-label=&quot;Not needed&quot;&gt;·&lt;/span&gt;&lt;/td&gt;&lt;td class=&quot;na&quot; data-label=&quot;Build on Workers and Agents SDK&quot;&gt;&lt;span class=&quot;cell mN&quot; role=&quot;img&quot; aria-label=&quot;Not needed&quot;&gt;·&lt;/span&gt;&lt;/td&gt;&lt;td class=&quot;cnt&quot;&gt;2&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th class=&quot;rowh&quot;&gt;&lt;b&gt;B4. Your own agent for a process&lt;/b&gt;&lt;span&gt;You build it on Workers and the Agents SDK.&lt;/span&gt;&lt;/th&gt;&lt;td data-label=&quot;Access and your IdP&quot;&gt;&lt;span class=&quot;cell mR&quot; role=&quot;img&quot; aria-label=&quot;Recommended&quot;&gt;◐&lt;/span&gt;&lt;/td&gt;&lt;td data-label=&quot;AI Gateway&quot;&gt;&lt;span class=&quot;cell mC&quot; role=&quot;img&quot; aria-label=&quot;Core&quot;&gt;●&lt;/span&gt;&lt;/td&gt;&lt;td data-label=&quot;MCP server portal&quot;&gt;&lt;span class=&quot;cell mR&quot; role=&quot;img&quot; aria-label=&quot;Recommended&quot;&gt;◐&lt;/span&gt;&lt;/td&gt;&lt;td data-label=&quot;Code Mode&quot;&gt;&lt;span class=&quot;cell mR&quot; role=&quot;img&quot; aria-label=&quot;Recommended&quot;&gt;◐&lt;/span&gt;&lt;/td&gt;&lt;td data-label=&quot;DLP&quot;&gt;&lt;span class=&quot;cell mR&quot; role=&quot;img&quot; aria-label=&quot;Recommended&quot;&gt;◐&lt;/span&gt;&lt;/td&gt;&lt;td data-label=&quot;AI Security for Apps&quot;&gt;&lt;span class=&quot;cell mO&quot; role=&quot;img&quot; aria-label=&quot;Optional&quot;&gt;○&lt;/span&gt;&lt;/td&gt;&lt;td data-label=&quot;Secure Web Gateway&quot;&gt;&lt;span class=&quot;cell mO&quot; role=&quot;img&quot; aria-label=&quot;Optional&quot;&gt;○&lt;/span&gt;&lt;/td&gt;&lt;td data-label=&quot;Sandbox or Dynamic Worker&quot;&gt;&lt;span class=&quot;cell mR&quot; role=&quot;img&quot; aria-label=&quot;Recommended&quot;&gt;◐&lt;/span&gt;&lt;/td&gt;&lt;td data-label=&quot;Private network reach&quot;&gt;&lt;span class=&quot;cell mR&quot; role=&quot;img&quot; aria-label=&quot;Recommended&quot;&gt;◐&lt;/span&gt;&lt;/td&gt;&lt;td class=&quot;na&quot; data-label=&quot;Shadow IT and CASB&quot;&gt;&lt;span class=&quot;cell mN&quot; role=&quot;img&quot; aria-label=&quot;Not needed&quot;&gt;·&lt;/span&gt;&lt;/td&gt;&lt;td data-label=&quot;Logs to your SIEM&quot;&gt;&lt;span class=&quot;cell mR&quot; role=&quot;img&quot; aria-label=&quot;Recommended&quot;&gt;◐&lt;/span&gt;&lt;/td&gt;&lt;td class=&quot;na&quot; data-label=&quot;AI Crawl Control and Bots&quot;&gt;&lt;span class=&quot;cell mN&quot; role=&quot;img&quot; aria-label=&quot;Not needed&quot;&gt;·&lt;/span&gt;&lt;/td&gt;&lt;td data-label=&quot;Build on Workers and Agents SDK&quot;&gt;&lt;span class=&quot;cell mC&quot; role=&quot;img&quot; aria-label=&quot;Core&quot;&gt;●&lt;/span&gt;&lt;/td&gt;&lt;td class=&quot;cnt&quot;&gt;2&lt;/td&gt;&lt;/tr&gt;&lt;tr class=&quot;rg&quot;&gt;&lt;th colspan=&quot;15&quot;&gt;You adopt AI&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th class=&quot;rowh&quot;&gt;&lt;b&gt;C. Your staff use third-party AI&lt;/b&gt;&lt;span&gt;ChatGPT, Claude, Gemini, coding assistants. Nothing to build.&lt;/span&gt;&lt;/th&gt;&lt;td data-label=&quot;Access and your IdP&quot;&gt;&lt;span class=&quot;cell mR&quot; role=&quot;img&quot; aria-label=&quot;Recommended&quot;&gt;◐&lt;/span&gt;&lt;/td&gt;&lt;td data-label=&quot;AI Gateway&quot;&gt;&lt;span class=&quot;cell mR&quot; role=&quot;img&quot; aria-label=&quot;Recommended&quot;&gt;◐&lt;/span&gt;&lt;/td&gt;&lt;td data-label=&quot;MCP server portal&quot;&gt;&lt;span class=&quot;cell mO&quot; role=&quot;img&quot; aria-label=&quot;Optional&quot;&gt;○&lt;/span&gt;&lt;/td&gt;&lt;td class=&quot;na&quot; data-label=&quot;Code Mode&quot;&gt;&lt;span class=&quot;cell mN&quot; role=&quot;img&quot; aria-label=&quot;Not needed&quot;&gt;·&lt;/span&gt;&lt;/td&gt;&lt;td data-label=&quot;DLP&quot;&gt;&lt;span class=&quot;cell mC&quot; role=&quot;img&quot; aria-label=&quot;Core&quot;&gt;●&lt;/span&gt;&lt;/td&gt;&lt;td class=&quot;na&quot; data-label=&quot;AI Security for Apps&quot;&gt;&lt;span class=&quot;cell mN&quot; role=&quot;img&quot; aria-label=&quot;Not needed&quot;&gt;·&lt;/span&gt;&lt;/td&gt;&lt;td data-label=&quot;Secure Web Gateway&quot;&gt;&lt;span class=&quot;cell mC&quot; role=&quot;img&quot; aria-label=&quot;Core&quot;&gt;●&lt;/span&gt;&lt;/td&gt;&lt;td class=&quot;na&quot; data-label=&quot;Sandbox or Dynamic Worker&quot;&gt;&lt;span class=&quot;cell mN&quot; role=&quot;img&quot; aria-label=&quot;Not needed&quot;&gt;·&lt;/span&gt;&lt;/td&gt;&lt;td class=&quot;na&quot; data-label=&quot;Private network reach&quot;&gt;&lt;span class=&quot;cell mN&quot; role=&quot;img&quot; aria-label=&quot;Not needed&quot;&gt;·&lt;/span&gt;&lt;/td&gt;&lt;td data-label=&quot;Shadow IT and CASB&quot;&gt;&lt;span class=&quot;cell mC&quot; role=&quot;img&quot; aria-label=&quot;Core&quot;&gt;●&lt;/span&gt;&lt;/td&gt;&lt;td data-label=&quot;Logs to your SIEM&quot;&gt;&lt;span class=&quot;cell mR&quot; role=&quot;img&quot; aria-label=&quot;Recommended&quot;&gt;◐&lt;/span&gt;&lt;/td&gt;&lt;td class=&quot;na&quot; data-label=&quot;AI Crawl Control and Bots&quot;&gt;&lt;span class=&quot;cell mN&quot; role=&quot;img&quot; aria-label=&quot;Not needed&quot;&gt;·&lt;/span&gt;&lt;/td&gt;&lt;td class=&quot;na&quot; data-label=&quot;Build on Workers and Agents SDK&quot;&gt;&lt;span class=&quot;cell mN&quot; role=&quot;img&quot; aria-label=&quot;Not needed&quot;&gt;·&lt;/span&gt;&lt;/td&gt;&lt;td class=&quot;cnt&quot;&gt;3&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th class=&quot;rowh&quot;&gt;&lt;b&gt;D. AI visits your sites&lt;/b&gt;&lt;span&gt;Crawlers and agents read your content. Pay per crawl is in private beta.&lt;/span&gt;&lt;/th&gt;&lt;td class=&quot;na&quot; data-label=&quot;Access and your IdP&quot;&gt;&lt;span class=&quot;cell mN&quot; role=&quot;img&quot; aria-label=&quot;Not needed&quot;&gt;·&lt;/span&gt;&lt;/td&gt;&lt;td class=&quot;na&quot; data-label=&quot;AI Gateway&quot;&gt;&lt;span class=&quot;cell mN&quot; role=&quot;img&quot; aria-label=&quot;Not needed&quot;&gt;·&lt;/span&gt;&lt;/td&gt;&lt;td class=&quot;na&quot; data-label=&quot;MCP server portal&quot;&gt;&lt;span class=&quot;cell mN&quot; role=&quot;img&quot; aria-label=&quot;Not needed&quot;&gt;·&lt;/span&gt;&lt;/td&gt;&lt;td class=&quot;na&quot; data-label=&quot;Code Mode&quot;&gt;&lt;span class=&quot;cell mN&quot; role=&quot;img&quot; aria-label=&quot;Not needed&quot;&gt;·&lt;/span&gt;&lt;/td&gt;&lt;td class=&quot;na&quot; data-label=&quot;DLP&quot;&gt;&lt;span class=&quot;cell mN&quot; role=&quot;img&quot; aria-label=&quot;Not needed&quot;&gt;·&lt;/span&gt;&lt;/td&gt;&lt;td class=&quot;na&quot; data-label=&quot;AI Security for Apps&quot;&gt;&lt;span class=&quot;cell mN&quot; role=&quot;img&quot; aria-label=&quot;Not needed&quot;&gt;·&lt;/span&gt;&lt;/td&gt;&lt;td class=&quot;na&quot; data-label=&quot;Secure Web Gateway&quot;&gt;&lt;span class=&quot;cell mN&quot; role=&quot;img&quot; aria-label=&quot;Not needed&quot;&gt;·&lt;/span&gt;&lt;/td&gt;&lt;td class=&quot;na&quot; data-label=&quot;Sandbox or Dynamic Worker&quot;&gt;&lt;span class=&quot;cell mN&quot; role=&quot;img&quot; aria-label=&quot;Not needed&quot;&gt;·&lt;/span&gt;&lt;/td&gt;&lt;td class=&quot;na&quot; data-label=&quot;Private network reach&quot;&gt;&lt;span class=&quot;cell mN&quot; role=&quot;img&quot; aria-label=&quot;Not needed&quot;&gt;·&lt;/span&gt;&lt;/td&gt;&lt;td class=&quot;na&quot; data-label=&quot;Shadow IT and CASB&quot;&gt;&lt;span class=&quot;cell mN&quot; role=&quot;img&quot; aria-label=&quot;Not needed&quot;&gt;·&lt;/span&gt;&lt;/td&gt;&lt;td class=&quot;na&quot; data-label=&quot;Logs to your SIEM&quot;&gt;&lt;span class=&quot;cell mN&quot; role=&quot;img&quot; aria-label=&quot;Not needed&quot;&gt;·&lt;/span&gt;&lt;/td&gt;&lt;td data-label=&quot;AI Crawl Control and Bots&quot;&gt;&lt;span class=&quot;cell mC&quot; role=&quot;img&quot; aria-label=&quot;Core&quot;&gt;●&lt;/span&gt;&lt;/td&gt;&lt;td class=&quot;na&quot; data-label=&quot;Build on Workers and Agents SDK&quot;&gt;&lt;span class=&quot;cell mN&quot; role=&quot;img&quot; aria-label=&quot;Not needed&quot;&gt;·&lt;/span&gt;&lt;/td&gt;&lt;td class=&quot;cnt&quot;&gt;1&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;&lt;figcaption&gt;Situations against building blocks. Read across a row.&lt;/figcaption&gt;&lt;/figure&gt;&lt;h3 id=&quot;a-ai-in-your-product&quot;&gt;&lt;a class=&quot;anchor&quot; href=&quot;#a-ai-in-your-product&quot;&gt;A. AI in your product&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Your customers use AI that you built.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Core: put it in place first&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/ai-gateway/&quot; rel=&quot;noopener&quot;&gt;AI Gateway&lt;/a&gt;: Put AI Gateway between your app and the model: logs, budgets, caching, fallback, guardrails.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/waf/detections/ai-security-for-apps/&quot; rel=&quot;noopener&quot;&gt;AI Security for Apps&lt;/a&gt;: Detects prompt injection, PII and unsafe topics in requests to your AI endpoints. Needs the WAF.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Recommended: add it when it applies&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/data-loss-prevention/&quot; rel=&quot;noopener&quot;&gt;DLP&lt;/a&gt;: DLP in AI Gateway scans prompts and responses for sensitive data.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/ai-gateway/observability/logging/logpush/&quot; rel=&quot;noopener&quot;&gt;Logs to your SIEM&lt;/a&gt;: Send AI Gateway logs to your SIEM with Logpush.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/ai-crawl-control/&quot; rel=&quot;noopener&quot;&gt;AI Crawl Control and Bots&lt;/a&gt;: Bots and rate limiting protect your AI endpoints. AI Crawl Control covers content scraping.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Optional: only for specific needs:&lt;/strong&gt; Access and your IdP, MCP server portal, Code Mode, Sandbox or Dynamic Worker, Private network reach, Build on Workers and Agents SDK.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Not needed:&lt;/strong&gt; Secure Web Gateway, Shadow IT and CASB.&lt;/p&gt;
&lt;h3 id=&quot;b1-a-workspace-for-all-staff&quot;&gt;&lt;a class=&quot;anchor&quot; href=&quot;#b1-a-workspace-for-all-staff&quot;&gt;B1. A workspace for all staff&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Agents, documents and small apps for non-developers. Cloudflare OS is a ready-made start.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Core: put it in place first&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/access-controls/&quot; rel=&quot;noopener&quot;&gt;Access and your IdP&lt;/a&gt;: Cloudflare Access controls who can enter. Inside, every agent and app starts with access to nothing.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Included: built into the product&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/ai-gateway/&quot; rel=&quot;noopener&quot;&gt;AI Gateway&lt;/a&gt;: All inference runs through AI Gateway, attributed per person or team, with budgets and limits.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/agents/tools/codemode/&quot; rel=&quot;noopener&quot;&gt;Code Mode&lt;/a&gt;: The agent works by writing and running code (Code Mode).&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/sandbox/&quot; rel=&quot;noopener&quot;&gt;Sandbox or Dynamic Worker&lt;/a&gt;: Server code runs in a Dynamic Worker with outbound internet off. Client code runs in a sandboxed frame.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Recommended: add it when it applies&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/access-controls/ai-controls/mcp-portals/&quot; rel=&quot;noopener&quot;&gt;MCP server portal&lt;/a&gt;: Existing MCP servers connect through MCP server portals. Gatekeepers cover other systems.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/data-loss-prevention/&quot; rel=&quot;noopener&quot;&gt;DLP&lt;/a&gt;: Not described in the public Cloudflare OS sources. Plan it with your Zero Trust setup.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/ai-gateway/observability/logging/logpush/&quot; rel=&quot;noopener&quot;&gt;Logs to your SIEM&lt;/a&gt;: Send Access, Gateway and AI Gateway logs to your SIEM.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Optional: only for specific needs:&lt;/strong&gt; Secure Web Gateway, Private network reach, Shadow IT and CASB.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Not needed:&lt;/strong&gt; AI Security for Apps, AI Crawl Control and Bots, Build on Workers and Agents SDK.&lt;/p&gt;
&lt;h3 id=&quot;b2-governed-agents-for-engineers-and-it&quot;&gt;&lt;a class=&quot;anchor&quot; href=&quot;#b2-governed-agents-for-engineers-and-it&quot;&gt;B2. Governed agents for engineers and IT&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Agents with shell, repos and tests, under your rules.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Core: put it in place first&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/access-controls/&quot; rel=&quot;noopener&quot;&gt;Access and your IdP&lt;/a&gt;: People sign in with your IdP through Access. Optional device posture checks.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/ai-gateway/&quot; rel=&quot;noopener&quot;&gt;AI Gateway&lt;/a&gt;: Model calls go through AI Gateway behind Access. Provider keys stay in the gateway.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/access-controls/ai-controls/mcp-portals/&quot; rel=&quot;noopener&quot;&gt;MCP server portal&lt;/a&gt;: Give each role its tools through an MCP server portal. Access logs each tool call.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/sandbox/&quot; rel=&quot;noopener&quot;&gt;Sandbox or Dynamic Worker&lt;/a&gt;: Run each session in a Sandbox or Container, removed on exit.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/mesh/&quot; rel=&quot;noopener&quot;&gt;Private network reach&lt;/a&gt;: Mesh or Tunnel routes reach only what the user&amp;#39;s group may reach.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/ai-gateway/observability/logging/logpush/&quot; rel=&quot;noopener&quot;&gt;Logs to your SIEM&lt;/a&gt;: Send logs to your SIEM as evidence of who reached what.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Recommended: add it when it applies&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/agents/tools/codemode/&quot; rel=&quot;noopener&quot;&gt;Code Mode&lt;/a&gt;: Code Mode helps when the tool set is large.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/data-loss-prevention/&quot; rel=&quot;noopener&quot;&gt;DLP&lt;/a&gt;: Scan prompts and responses.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/agents/&quot; rel=&quot;noopener&quot;&gt;Build on Workers and Agents SDK&lt;/a&gt;: Build the agent loop on Workers, or use an existing coding agent.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Optional: only for specific needs:&lt;/strong&gt; Secure Web Gateway, Shadow IT and CASB.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Not needed:&lt;/strong&gt; AI Security for Apps, AI Crawl Control and Bots.&lt;/p&gt;
&lt;h3 id=&quot;b3-agents-your-teams-already-use&quot;&gt;&lt;a class=&quot;anchor&quot; href=&quot;#b3-agents-your-teams-already-use&quot;&gt;B3. Agents your teams already use&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Claude Code, opencode, Codex and similar. You secure these agents and do not build a loop.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Core: put it in place first&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/access-controls/&quot; rel=&quot;noopener&quot;&gt;Access and your IdP&lt;/a&gt;: Put Access in front of the gateway domain and the portal.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/ai-gateway/&quot; rel=&quot;noopener&quot;&gt;AI Gateway&lt;/a&gt;: Route the agent&amp;#39;s model calls through AI Gateway. The docs have guides for Claude Code, Claude Desktop, Gemini CLI, GitHub Copilot CLI, OpenAI Codex, OpenCode, Pi and VS Code.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Recommended: add it when it applies&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/access-controls/ai-controls/mcp-portals/&quot; rel=&quot;noopener&quot;&gt;MCP server portal&lt;/a&gt;: If the agent uses internal or SaaS tools, add the portal as its remote MCP server.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/data-loss-prevention/&quot; rel=&quot;noopener&quot;&gt;DLP&lt;/a&gt;: Scan prompts for sensitive data.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/traffic-policies/http-policies/&quot; rel=&quot;noopener&quot;&gt;Secure Web Gateway&lt;/a&gt;: Gateway policies can block direct provider endpoints so calls cannot bypass the gateway.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/learning-paths/holistic-ai-security/concepts/&quot; rel=&quot;noopener&quot;&gt;Shadow IT and CASB&lt;/a&gt;: See which AI tools are used beyond the approved ones.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/ai-gateway/observability/logging/logpush/&quot; rel=&quot;noopener&quot;&gt;Logs to your SIEM&lt;/a&gt;: Send logs to your SIEM.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Optional: only for specific needs:&lt;/strong&gt; Code Mode, Sandbox or Dynamic Worker, Private network reach.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Not needed:&lt;/strong&gt; AI Security for Apps, AI Crawl Control and Bots, Build on Workers and Agents SDK.&lt;/p&gt;
&lt;h3 id=&quot;b4-your-own-agent-for-a-process&quot;&gt;&lt;a class=&quot;anchor&quot; href=&quot;#b4-your-own-agent-for-a-process&quot;&gt;B4. Your own agent for a process&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;You build it on Workers and the Agents SDK.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Core: put it in place first&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/ai-gateway/&quot; rel=&quot;noopener&quot;&gt;AI Gateway&lt;/a&gt;: Send every model call through AI Gateway.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/agents/&quot; rel=&quot;noopener&quot;&gt;Build on Workers and Agents SDK&lt;/a&gt;: Choose Project Think, AIChatAgent, the Agent class, a Workflow or a plain Worker.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Recommended: add it when it applies&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/access-controls/&quot; rel=&quot;noopener&quot;&gt;Access and your IdP&lt;/a&gt;: Put Access in front of your agent&amp;#39;s chat page or portal.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/access-controls/ai-controls/mcp-portals/&quot; rel=&quot;noopener&quot;&gt;MCP server portal&lt;/a&gt;: Expose your tools through a portal, or use tools that the portal offers.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/agents/tools/codemode/&quot; rel=&quot;noopener&quot;&gt;Code Mode&lt;/a&gt;: For many tools or one large API.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/data-loss-prevention/&quot; rel=&quot;noopener&quot;&gt;DLP&lt;/a&gt;: Scan prompts and responses.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/sandbox/&quot; rel=&quot;noopener&quot;&gt;Sandbox or Dynamic Worker&lt;/a&gt;: If the agent runs code that it generates.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/mesh/&quot; rel=&quot;noopener&quot;&gt;Private network reach&lt;/a&gt;: Tunnel, or Workers VPC (beta), if your tools sit on a private network.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/ai-gateway/observability/logging/logpush/&quot; rel=&quot;noopener&quot;&gt;Logs to your SIEM&lt;/a&gt;: Send logs to your SIEM.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Optional: only for specific needs:&lt;/strong&gt; AI Security for Apps, Secure Web Gateway.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Not needed:&lt;/strong&gt; Shadow IT and CASB, AI Crawl Control and Bots.&lt;/p&gt;
&lt;h3 id=&quot;c-your-staff-use-third-party-ai&quot;&gt;&lt;a class=&quot;anchor&quot; href=&quot;#c-your-staff-use-third-party-ai&quot;&gt;C. Your staff use third-party AI&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;ChatGPT, Claude, Gemini, coding assistants. Nothing to build.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Core: put it in place first&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/data-loss-prevention/&quot; rel=&quot;noopener&quot;&gt;DLP&lt;/a&gt;: DLP profiles on prompts and uploads.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/traffic-policies/http-policies/&quot; rel=&quot;noopener&quot;&gt;Secure Web Gateway&lt;/a&gt;: Gateway HTTP policies: allow, block, redirect, or limit actions inside AI apps. Needs the root certificate on devices.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/learning-paths/holistic-ai-security/concepts/&quot; rel=&quot;noopener&quot;&gt;Shadow IT and CASB&lt;/a&gt;: Shadow IT dashboard and API CASB. CASB has integrations for ChatGPT, Claude and Gemini.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Recommended: add it when it applies&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/cloudflare-one/access-controls/&quot; rel=&quot;noopener&quot;&gt;Access and your IdP&lt;/a&gt;: Put the approved AI path behind Access.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/ai-gateway/&quot; rel=&quot;noopener&quot;&gt;AI Gateway&lt;/a&gt;: Offer an internal AI Gateway as the approved way to use models.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/ai-gateway/observability/logging/logpush/&quot; rel=&quot;noopener&quot;&gt;Logs to your SIEM&lt;/a&gt;: Send Gateway logs to your SIEM.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Optional: only for specific needs:&lt;/strong&gt; MCP server portal.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Not needed:&lt;/strong&gt; Code Mode, AI Security for Apps, Sandbox or Dynamic Worker, Private network reach, AI Crawl Control and Bots, Build on Workers and Agents SDK.&lt;/p&gt;
&lt;h3 id=&quot;d-ai-visits-your-sites&quot;&gt;&lt;a class=&quot;anchor&quot; href=&quot;#d-ai-visits-your-sites&quot;&gt;D. AI visits your sites&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Crawlers and agents read your content. Pay per crawl is in private beta.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Core: put it in place first&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://developers.cloudflare.com/ai-crawl-control/&quot; rel=&quot;noopener&quot;&gt;AI Crawl Control and Bots&lt;/a&gt;: See which AI services access your content, allow or block each one, and check robots.txt compliance.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Not needed:&lt;/strong&gt; Access and your IdP, AI Gateway, MCP server portal, Code Mode, DLP, AI Security for Apps, Secure Web Gateway, Sandbox or Dynamic Worker, Private network reach, Shadow IT and CASB, Logs to your SIEM, Build on Workers and Agents SDK.&lt;/p&gt;
&lt;h3 id=&quot;also-decide-where-the-model-runs&quot;&gt;&lt;a class=&quot;anchor&quot; href=&quot;#also-decide-where-the-model-runs&quot;&gt;Also decide: where the model runs&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;This applies to A and B1 to B4.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Workers AI&lt;/strong&gt; runs models on Cloudflare with no API keys.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Hosted providers&lt;/strong&gt; (OpenAI, Anthropic, Google) are reached through AI Gateway.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Private inference&lt;/strong&gt; runs on machines you own. &lt;a href=&quot;https://developers.cloudflare.com/ai-gateway/configuration/custom-providers/&quot; rel=&quot;noopener&quot;&gt;AI Gateway custom providers&lt;/a&gt; connect models that have an HTTPS API. Check the network path for your setup.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;2-building-an-agent-which-option-gives-you-what&quot;&gt;&lt;a class=&quot;anchor&quot; href=&quot;#2-building-an-agent-which-option-gives-you-what&quot;&gt;2. Building an agent: which option gives you what?&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;This applies to situation B (internal AI you build) and to AI in your product.&lt;/p&gt;
&lt;figure class=&quot;fig matrix-fig&quot;&gt;&lt;div class=&quot;matrix-scroll&quot;&gt;&lt;div class=&quot;legend&quot;&gt;&lt;span class=&quot;lg&quot;&gt;&lt;span class=&quot;cell aV sm&quot; role=&quot;img&quot; aria-label=&quot;Provided&quot;&gt;✓&lt;/span&gt;&lt;b&gt;Provided&lt;/b&gt; The platform gives it to you.&lt;/span&gt;&lt;span class=&quot;lg&quot;&gt;&lt;span class=&quot;cell aP sm&quot; role=&quot;img&quot; aria-label=&quot;Partly&quot;&gt;◐&lt;/span&gt;&lt;b&gt;Partly&lt;/b&gt; Partly, or you or your tool add it.&lt;/span&gt;&lt;span class=&quot;lg&quot;&gt;&lt;span class=&quot;cell aN sm&quot; role=&quot;img&quot; aria-label=&quot;Not provided&quot;&gt;·&lt;/span&gt;&lt;b&gt;Not provided&lt;/b&gt; Not part of this option.&lt;/span&gt;&lt;span class=&quot;lg&quot;&gt;&lt;span class=&quot;cell aU sm&quot; role=&quot;img&quot; aria-label=&quot;Not stated&quot;&gt;?&lt;/span&gt;&lt;b&gt;Not stated&lt;/b&gt; Not stated in the public sources.&lt;/span&gt;&lt;/div&gt;
&lt;table class=&quot;mx matrix-m2&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;&lt;th class=&quot;corner&quot;&gt;Option&lt;/th&gt;&lt;th class=&quot;col&quot;&gt;Remembers state&lt;/th&gt;&lt;th class=&quot;col&quot;&gt;Wakes itself up&lt;/th&gt;&lt;th class=&quot;col&quot;&gt;Survives crashes and deploys&lt;/th&gt;&lt;th class=&quot;col&quot;&gt;Chat with history and streaming&lt;/th&gt;&lt;th class=&quot;col&quot;&gt;Runs the model loop&lt;/th&gt;&lt;th class=&quot;col&quot;&gt;Exposes tools to other AI apps&lt;/th&gt;&lt;th class=&quot;col wr-h&quot;&gt;What you write&lt;/th&gt;&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;&lt;th class=&quot;rowh&quot;&gt;&lt;b&gt;Plain Worker with the AI SDK&lt;/b&gt;&lt;span&gt;One prompt in, one answer out.&lt;/span&gt;&lt;/th&gt;&lt;td class=&quot;no&quot; data-label=&quot;Remembers state&quot;&gt;&lt;span class=&quot;cell aN&quot; role=&quot;img&quot; aria-label=&quot;Not provided&quot;&gt;·&lt;/span&gt;&lt;/td&gt;&lt;td class=&quot;no&quot; data-label=&quot;Wakes itself up&quot;&gt;&lt;span class=&quot;cell aN&quot; role=&quot;img&quot; aria-label=&quot;Not provided&quot;&gt;·&lt;/span&gt;&lt;/td&gt;&lt;td class=&quot;no&quot; data-label=&quot;Survives crashes and deploys&quot;&gt;&lt;span class=&quot;cell aN&quot; role=&quot;img&quot; aria-label=&quot;Not provided&quot;&gt;·&lt;/span&gt;&lt;/td&gt;&lt;td class=&quot;no&quot; data-label=&quot;Chat with history and streaming&quot;&gt;&lt;span class=&quot;cell aN&quot; role=&quot;img&quot; aria-label=&quot;Not provided&quot;&gt;·&lt;/span&gt;&lt;/td&gt;&lt;td data-label=&quot;Runs the model loop&quot;&gt;&lt;span class=&quot;cell aP&quot; role=&quot;img&quot; aria-label=&quot;Partly&quot;&gt;◐&lt;/span&gt;&lt;/td&gt;&lt;td class=&quot;no&quot; data-label=&quot;Exposes tools to other AI apps&quot;&gt;&lt;span class=&quot;cell aN&quot; role=&quot;img&quot; aria-label=&quot;Not provided&quot;&gt;·&lt;/span&gt;&lt;/td&gt;&lt;td class=&quot;wr&quot; data-label=&quot;What you write&quot;&gt;About 10 lines: the handler, prompt and tools.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th class=&quot;rowh&quot;&gt;&lt;b&gt;Workflow with model steps&lt;/b&gt;&lt;span&gt;Fixed steps with retries or approval.&lt;/span&gt;&lt;/th&gt;&lt;td data-label=&quot;Remembers state&quot;&gt;&lt;span class=&quot;cell aP&quot; role=&quot;img&quot; aria-label=&quot;Partly&quot;&gt;◐&lt;/span&gt;&lt;/td&gt;&lt;td data-label=&quot;Wakes itself up&quot;&gt;&lt;span class=&quot;cell aP&quot; role=&quot;img&quot; aria-label=&quot;Partly&quot;&gt;◐&lt;/span&gt;&lt;/td&gt;&lt;td data-label=&quot;Survives crashes and deploys&quot;&gt;&lt;span class=&quot;cell aV&quot; role=&quot;img&quot; aria-label=&quot;Provided&quot;&gt;✓&lt;/span&gt;&lt;/td&gt;&lt;td class=&quot;no&quot; data-label=&quot;Chat with history and streaming&quot;&gt;&lt;span class=&quot;cell aN&quot; role=&quot;img&quot; aria-label=&quot;Not provided&quot;&gt;·&lt;/span&gt;&lt;/td&gt;&lt;td class=&quot;no&quot; data-label=&quot;Runs the model loop&quot;&gt;&lt;span class=&quot;cell aN&quot; role=&quot;img&quot; aria-label=&quot;Not provided&quot;&gt;·&lt;/span&gt;&lt;/td&gt;&lt;td class=&quot;no&quot; data-label=&quot;Exposes tools to other AI apps&quot;&gt;&lt;span class=&quot;cell aN&quot; role=&quot;img&quot; aria-label=&quot;Not provided&quot;&gt;·&lt;/span&gt;&lt;/td&gt;&lt;td class=&quot;wr&quot; data-label=&quot;What you write&quot;&gt;The step code, the workflow class and its config.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th class=&quot;rowh&quot;&gt;&lt;b&gt;Agent class, your own harness&lt;/b&gt;&lt;span&gt;Background agents: email, webhooks, cron.&lt;/span&gt;&lt;/th&gt;&lt;td data-label=&quot;Remembers state&quot;&gt;&lt;span class=&quot;cell aV&quot; role=&quot;img&quot; aria-label=&quot;Provided&quot;&gt;✓&lt;/span&gt;&lt;/td&gt;&lt;td data-label=&quot;Wakes itself up&quot;&gt;&lt;span class=&quot;cell aV&quot; role=&quot;img&quot; aria-label=&quot;Provided&quot;&gt;✓&lt;/span&gt;&lt;/td&gt;&lt;td data-label=&quot;Survives crashes and deploys&quot;&gt;&lt;span class=&quot;cell aV&quot; role=&quot;img&quot; aria-label=&quot;Provided&quot;&gt;✓&lt;/span&gt;&lt;/td&gt;&lt;td data-label=&quot;Chat with history and streaming&quot;&gt;&lt;span class=&quot;cell aP&quot; role=&quot;img&quot; aria-label=&quot;Partly&quot;&gt;◐&lt;/span&gt;&lt;/td&gt;&lt;td class=&quot;no&quot; data-label=&quot;Runs the model loop&quot;&gt;&lt;span class=&quot;cell aN&quot; role=&quot;img&quot; aria-label=&quot;Not provided&quot;&gt;·&lt;/span&gt;&lt;/td&gt;&lt;td class=&quot;no&quot; data-label=&quot;Exposes tools to other AI apps&quot;&gt;&lt;span class=&quot;cell aN&quot; role=&quot;img&quot; aria-label=&quot;Not provided&quot;&gt;·&lt;/span&gt;&lt;/td&gt;&lt;td class=&quot;wr&quot; data-label=&quot;What you write&quot;&gt;The turn logic, prompts, tool calls and message format.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th class=&quot;rowh&quot;&gt;&lt;b&gt;AIChatAgent&lt;/b&gt;&lt;span&gt;A chat product where you own the model call.&lt;/span&gt;&lt;/th&gt;&lt;td data-label=&quot;Remembers state&quot;&gt;&lt;span class=&quot;cell aV&quot; role=&quot;img&quot; aria-label=&quot;Provided&quot;&gt;✓&lt;/span&gt;&lt;/td&gt;&lt;td data-label=&quot;Wakes itself up&quot;&gt;&lt;span class=&quot;cell aV&quot; role=&quot;img&quot; aria-label=&quot;Provided&quot;&gt;✓&lt;/span&gt;&lt;/td&gt;&lt;td data-label=&quot;Survives crashes and deploys&quot;&gt;&lt;span class=&quot;cell aV&quot; role=&quot;img&quot; aria-label=&quot;Provided&quot;&gt;✓&lt;/span&gt;&lt;/td&gt;&lt;td data-label=&quot;Chat with history and streaming&quot;&gt;&lt;span class=&quot;cell aV&quot; role=&quot;img&quot; aria-label=&quot;Provided&quot;&gt;✓&lt;/span&gt;&lt;/td&gt;&lt;td data-label=&quot;Runs the model loop&quot;&gt;&lt;span class=&quot;cell aP&quot; role=&quot;img&quot; aria-label=&quot;Partly&quot;&gt;◐&lt;/span&gt;&lt;/td&gt;&lt;td class=&quot;no&quot; data-label=&quot;Exposes tools to other AI apps&quot;&gt;&lt;span class=&quot;cell aN&quot; role=&quot;img&quot; aria-label=&quot;Not provided&quot;&gt;·&lt;/span&gt;&lt;/td&gt;&lt;td class=&quot;wr&quot; data-label=&quot;What you write&quot;&gt;About 15 lines: streamText, tools, system prompt.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th class=&quot;rowh&quot;&gt;&lt;b&gt;Project Think&lt;i class=&quot;tag&quot;&gt;Experimental&lt;/i&gt;&lt;/b&gt;&lt;span&gt;A stateful chat agent, shipped fast.&lt;/span&gt;&lt;/th&gt;&lt;td data-label=&quot;Remembers state&quot;&gt;&lt;span class=&quot;cell aV&quot; role=&quot;img&quot; aria-label=&quot;Provided&quot;&gt;✓&lt;/span&gt;&lt;/td&gt;&lt;td data-label=&quot;Wakes itself up&quot;&gt;&lt;span class=&quot;cell aV&quot; role=&quot;img&quot; aria-label=&quot;Provided&quot;&gt;✓&lt;/span&gt;&lt;/td&gt;&lt;td data-label=&quot;Survives crashes and deploys&quot;&gt;&lt;span class=&quot;cell aV&quot; role=&quot;img&quot; aria-label=&quot;Provided&quot;&gt;✓&lt;/span&gt;&lt;/td&gt;&lt;td data-label=&quot;Chat with history and streaming&quot;&gt;&lt;span class=&quot;cell aV&quot; role=&quot;img&quot; aria-label=&quot;Provided&quot;&gt;✓&lt;/span&gt;&lt;/td&gt;&lt;td data-label=&quot;Runs the model loop&quot;&gt;&lt;span class=&quot;cell aV&quot; role=&quot;img&quot; aria-label=&quot;Provided&quot;&gt;✓&lt;/span&gt;&lt;/td&gt;&lt;td class=&quot;no&quot; data-label=&quot;Exposes tools to other AI apps&quot;&gt;&lt;span class=&quot;cell aN&quot; role=&quot;img&quot; aria-label=&quot;Not provided&quot;&gt;·&lt;/span&gt;&lt;/td&gt;&lt;td class=&quot;wr&quot; data-label=&quot;What you write&quot;&gt;3 lines for a first agent: getModel().&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th class=&quot;rowh&quot;&gt;&lt;b&gt;MCP server on a Worker&lt;i class=&quot;tag&quot;&gt;createMcpHandler&lt;/i&gt;&lt;/b&gt;&lt;span&gt;Giving other AI apps your tools.&lt;/span&gt;&lt;/th&gt;&lt;td class=&quot;no&quot; data-label=&quot;Remembers state&quot;&gt;&lt;span class=&quot;cell aN&quot; role=&quot;img&quot; aria-label=&quot;Not provided&quot;&gt;·&lt;/span&gt;&lt;/td&gt;&lt;td class=&quot;no&quot; data-label=&quot;Wakes itself up&quot;&gt;&lt;span class=&quot;cell aN&quot; role=&quot;img&quot; aria-label=&quot;Not provided&quot;&gt;·&lt;/span&gt;&lt;/td&gt;&lt;td class=&quot;no&quot; data-label=&quot;Survives crashes and deploys&quot;&gt;&lt;span class=&quot;cell aN&quot; role=&quot;img&quot; aria-label=&quot;Not provided&quot;&gt;·&lt;/span&gt;&lt;/td&gt;&lt;td class=&quot;no&quot; data-label=&quot;Chat with history and streaming&quot;&gt;&lt;span class=&quot;cell aN&quot; role=&quot;img&quot; aria-label=&quot;Not provided&quot;&gt;·&lt;/span&gt;&lt;/td&gt;&lt;td class=&quot;no&quot; data-label=&quot;Runs the model loop&quot;&gt;&lt;span class=&quot;cell aN&quot; role=&quot;img&quot; aria-label=&quot;Not provided&quot;&gt;·&lt;/span&gt;&lt;/td&gt;&lt;td data-label=&quot;Exposes tools to other AI apps&quot;&gt;&lt;span class=&quot;cell aV&quot; role=&quot;img&quot; aria-label=&quot;Provided&quot;&gt;✓&lt;/span&gt;&lt;/td&gt;&lt;td class=&quot;wr&quot; data-label=&quot;What you write&quot;&gt;Tool definitions with good descriptions.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th class=&quot;rowh&quot;&gt;&lt;b&gt;Existing harness, secured&lt;i class=&quot;tag&quot;&gt;Claude Code, opencode, Codex&lt;/i&gt;&lt;/b&gt;&lt;span&gt;Governing agents your teams already use.&lt;/span&gt;&lt;/th&gt;&lt;td data-label=&quot;Remembers state&quot;&gt;&lt;span class=&quot;cell aP&quot; role=&quot;img&quot; aria-label=&quot;Partly&quot;&gt;◐&lt;/span&gt;&lt;/td&gt;&lt;td class=&quot;no&quot; data-label=&quot;Wakes itself up&quot;&gt;&lt;span class=&quot;cell aN&quot; role=&quot;img&quot; aria-label=&quot;Not provided&quot;&gt;·&lt;/span&gt;&lt;/td&gt;&lt;td class=&quot;no&quot; data-label=&quot;Survives crashes and deploys&quot;&gt;&lt;span class=&quot;cell aN&quot; role=&quot;img&quot; aria-label=&quot;Not provided&quot;&gt;·&lt;/span&gt;&lt;/td&gt;&lt;td data-label=&quot;Chat with history and streaming&quot;&gt;&lt;span class=&quot;cell aP&quot; role=&quot;img&quot; aria-label=&quot;Partly&quot;&gt;◐&lt;/span&gt;&lt;/td&gt;&lt;td data-label=&quot;Runs the model loop&quot;&gt;&lt;span class=&quot;cell aP&quot; role=&quot;img&quot; aria-label=&quot;Partly&quot;&gt;◐&lt;/span&gt;&lt;/td&gt;&lt;td class=&quot;no&quot; data-label=&quot;Exposes tools to other AI apps&quot;&gt;&lt;span class=&quot;cell aN&quot; role=&quot;img&quot; aria-label=&quot;Not provided&quot;&gt;·&lt;/span&gt;&lt;/td&gt;&lt;td class=&quot;wr&quot; data-label=&quot;What you write&quot;&gt;Policy, not code: gateway, portal, DLP, Access.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th class=&quot;rowh&quot;&gt;&lt;b&gt;Cloudflare OS&lt;i class=&quot;tag&quot;&gt;Early access&lt;/i&gt;&lt;/b&gt;&lt;span&gt;A workspace for all staff.&lt;/span&gt;&lt;/th&gt;&lt;td data-label=&quot;Remembers state&quot;&gt;&lt;span class=&quot;cell aV&quot; role=&quot;img&quot; aria-label=&quot;Provided&quot;&gt;✓&lt;/span&gt;&lt;/td&gt;&lt;td data-label=&quot;Wakes itself up&quot;&gt;&lt;span class=&quot;cell aV&quot; role=&quot;img&quot; aria-label=&quot;Provided&quot;&gt;✓&lt;/span&gt;&lt;/td&gt;&lt;td data-label=&quot;Survives crashes and deploys&quot;&gt;&lt;span class=&quot;cell aU&quot; role=&quot;img&quot; aria-label=&quot;Not stated&quot;&gt;?&lt;/span&gt;&lt;/td&gt;&lt;td data-label=&quot;Chat with history and streaming&quot;&gt;&lt;span class=&quot;cell aV&quot; role=&quot;img&quot; aria-label=&quot;Provided&quot;&gt;✓&lt;/span&gt;&lt;/td&gt;&lt;td data-label=&quot;Runs the model loop&quot;&gt;&lt;span class=&quot;cell aV&quot; role=&quot;img&quot; aria-label=&quot;Provided&quot;&gt;✓&lt;/span&gt;&lt;/td&gt;&lt;td class=&quot;no&quot; data-label=&quot;Exposes tools to other AI apps&quot;&gt;&lt;span class=&quot;cell aN&quot; role=&quot;img&quot; aria-label=&quot;Not provided&quot;&gt;·&lt;/span&gt;&lt;/td&gt;&lt;td class=&quot;wr&quot; data-label=&quot;What you write&quot;&gt;Configuration, Gatekeepers, skills and context.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th class=&quot;rowh&quot;&gt;&lt;b&gt;VibeSDK&lt;i class=&quot;tag&quot;&gt;Reference implementation&lt;/i&gt;&lt;/b&gt;&lt;span&gt;A platform where users build apps with an agent.&lt;/span&gt;&lt;/th&gt;&lt;td data-label=&quot;Remembers state&quot;&gt;&lt;span class=&quot;cell aV&quot; role=&quot;img&quot; aria-label=&quot;Provided&quot;&gt;✓&lt;/span&gt;&lt;/td&gt;&lt;td data-label=&quot;Wakes itself up&quot;&gt;&lt;span class=&quot;cell aU&quot; role=&quot;img&quot; aria-label=&quot;Not stated&quot;&gt;?&lt;/span&gt;&lt;/td&gt;&lt;td data-label=&quot;Survives crashes and deploys&quot;&gt;&lt;span class=&quot;cell aU&quot; role=&quot;img&quot; aria-label=&quot;Not stated&quot;&gt;?&lt;/span&gt;&lt;/td&gt;&lt;td data-label=&quot;Chat with history and streaming&quot;&gt;&lt;span class=&quot;cell aV&quot; role=&quot;img&quot; aria-label=&quot;Provided&quot;&gt;✓&lt;/span&gt;&lt;/td&gt;&lt;td data-label=&quot;Runs the model loop&quot;&gt;&lt;span class=&quot;cell aV&quot; role=&quot;img&quot; aria-label=&quot;Provided&quot;&gt;✓&lt;/span&gt;&lt;/td&gt;&lt;td class=&quot;no&quot; data-label=&quot;Exposes tools to other AI apps&quot;&gt;&lt;span class=&quot;cell aN&quot; role=&quot;img&quot; aria-label=&quot;Not provided&quot;&gt;·&lt;/span&gt;&lt;/td&gt;&lt;td class=&quot;wr&quot; data-label=&quot;What you write&quot;&gt;Deployment and configuration: model providers, domain, templates.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th class=&quot;rowh&quot;&gt;&lt;b&gt;Orchestrator with sub-agents&lt;/b&gt;&lt;span&gt;Specialised roles or many long-lived contexts.&lt;/span&gt;&lt;/th&gt;&lt;td data-label=&quot;Remembers state&quot;&gt;&lt;span class=&quot;cell aV&quot; role=&quot;img&quot; aria-label=&quot;Provided&quot;&gt;✓&lt;/span&gt;&lt;/td&gt;&lt;td data-label=&quot;Wakes itself up&quot;&gt;&lt;span class=&quot;cell aV&quot; role=&quot;img&quot; aria-label=&quot;Provided&quot;&gt;✓&lt;/span&gt;&lt;/td&gt;&lt;td data-label=&quot;Survives crashes and deploys&quot;&gt;&lt;span class=&quot;cell aV&quot; role=&quot;img&quot; aria-label=&quot;Provided&quot;&gt;✓&lt;/span&gt;&lt;/td&gt;&lt;td data-label=&quot;Chat with history and streaming&quot;&gt;&lt;span class=&quot;cell aP&quot; role=&quot;img&quot; aria-label=&quot;Partly&quot;&gt;◐&lt;/span&gt;&lt;/td&gt;&lt;td data-label=&quot;Runs the model loop&quot;&gt;&lt;span class=&quot;cell aP&quot; role=&quot;img&quot; aria-label=&quot;Partly&quot;&gt;◐&lt;/span&gt;&lt;/td&gt;&lt;td class=&quot;no&quot; data-label=&quot;Exposes tools to other AI apps&quot;&gt;&lt;span class=&quot;cell aN&quot; role=&quot;img&quot; aria-label=&quot;Not provided&quot;&gt;·&lt;/span&gt;&lt;/td&gt;&lt;td class=&quot;wr&quot; data-label=&quot;What you write&quot;&gt;The delegation logic. One class per role.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;&lt;figcaption&gt;Agent options against capabilities.&lt;/figcaption&gt;&lt;/figure&gt;&lt;p&gt;&amp;quot;Not stated&amp;quot; means the public sources do not say. For the existing-harness row, the AI Gateway docs have &lt;a href=&quot;https://developers.cloudflare.com/ai-gateway/integrations/coding-agents/&quot; rel=&quot;noopener&quot;&gt;guides for coding agents&lt;/a&gt; such as Claude Code, OpenAI Codex and OpenCode.&lt;/p&gt;
&lt;h2 id=&quot;plans-and-status&quot;&gt;&lt;a class=&quot;anchor&quot; href=&quot;#plans-and-status&quot;&gt;Plans and status&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;DLP and the AI detections in AI Security for Apps are paid add-ons on Enterprise plans.&lt;/li&gt;
&lt;li&gt;Secure Web Gateway HTTP policies need the Cloudflare root certificate or a custom certificate on the device.&lt;/li&gt;
&lt;li&gt;Code Mode and Project Think are experimental. Cloudflare OS is early access. VibeSDK is a reference implementation and builds on experimental and beta features. Dynamic Workers have been in open beta since March 2026.&lt;/li&gt;
&lt;li&gt;Workers VPC is in beta and pay per crawl is in private beta.&lt;/li&gt;
&lt;li&gt;Sandboxes need the Workers Paid plan.&lt;/li&gt;
&lt;li&gt;New MCP servers use &lt;code&gt;createMcpHandler&lt;/code&gt;. &lt;code&gt;McpAgent&lt;/code&gt; is deprecated.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I checked this page against the Cloudflare documentation on 7 October 2026.&lt;/p&gt;
&lt;h2 id=&quot;sources&quot;&gt;&lt;a class=&quot;anchor&quot; href=&quot;#sources&quot;&gt;Sources&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The Cloudflare documentation for each product is linked in the items above. Other sources are the &lt;a href=&quot;https://blog.cloudflare.com/cloudflare-os/&quot; rel=&quot;noopener&quot;&gt;Cloudflare OS launch post&lt;/a&gt; and the &lt;a href=&quot;https://github.com/cloudflare/vibesdk&quot; rel=&quot;noopener&quot;&gt;VibeSDK README&lt;/a&gt;.&lt;/p&gt;
</content>
  </entry>
</feed>
