<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:googleplay="http://www.google.com/schemas/play-podcasts/1.0"><channel><title><![CDATA[Andrew Morgan]]></title><description><![CDATA[Andrew Morgan]]></description><link>https://andrewmorgan.ai</link><image><url>https://substackcdn.com/image/fetch/$s_!I1jr!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1171e09e-7bb2-4ceb-b8c8-5155b68fd0db_450x450.jpeg</url><title>Andrew Morgan</title><link>https://andrewmorgan.ai</link></image><generator>Substack</generator><lastBuildDate>Wed, 07 Oct 2026 10:06:08 GMT</lastBuildDate><atom:link href="https://andrewmorgan.ai/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[Andrew Morgan]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[andyjmorgan@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[andyjmorgan@substack.com]]></itunes:email><itunes:name><![CDATA[Andrew Morgan]]></itunes:name></itunes:owner><itunes:author><![CDATA[Andrew Morgan]]></itunes:author><googleplay:owner><![CDATA[andyjmorgan@substack.com]]></googleplay:owner><googleplay:email><![CDATA[andyjmorgan@substack.com]]></googleplay:email><googleplay:author><![CDATA[Andrew Morgan]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[How are we planning to supervise hundreds of these things?]]></title><description><![CDATA[We are not ready to monitor AI as it is today, never mind collaborative swarms.]]></description><link>https://andrewmorgan.ai/p/how-are-we-planning-to-supervise</link><guid isPermaLink="false">https://andrewmorgan.ai/p/how-are-we-planning-to-supervise</guid><dc:creator><![CDATA[Andrew Morgan]]></dc:creator><pubDate>Tue, 06 Oct 2026 10:49:08 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!qhEG!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5b0403ea-953a-4d7c-8ca1-6a9672004978_1254x1254.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!qhEG!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5b0403ea-953a-4d7c-8ca1-6a9672004978_1254x1254.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!qhEG!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5b0403ea-953a-4d7c-8ca1-6a9672004978_1254x1254.png 424w, https://substackcdn.com/image/fetch/$s_!qhEG!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5b0403ea-953a-4d7c-8ca1-6a9672004978_1254x1254.png 848w, https://substackcdn.com/image/fetch/$s_!qhEG!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5b0403ea-953a-4d7c-8ca1-6a9672004978_1254x1254.png 1272w, https://substackcdn.com/image/fetch/$s_!qhEG!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5b0403ea-953a-4d7c-8ca1-6a9672004978_1254x1254.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!qhEG!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5b0403ea-953a-4d7c-8ca1-6a9672004978_1254x1254.png" width="1254" height="1254" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5b0403ea-953a-4d7c-8ca1-6a9672004978_1254x1254.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1254,&quot;width&quot;:1254,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1897618,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://andrewmorgan.ai/i/218841752?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5b0403ea-953a-4d7c-8ca1-6a9672004978_1254x1254.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!qhEG!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5b0403ea-953a-4d7c-8ca1-6a9672004978_1254x1254.png 424w, https://substackcdn.com/image/fetch/$s_!qhEG!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5b0403ea-953a-4d7c-8ca1-6a9672004978_1254x1254.png 848w, https://substackcdn.com/image/fetch/$s_!qhEG!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5b0403ea-953a-4d7c-8ca1-6a9672004978_1254x1254.png 1272w, https://substackcdn.com/image/fetch/$s_!qhEG!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5b0403ea-953a-4d7c-8ca1-6a9672004978_1254x1254.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h2>Picking up where Alcatraz left off</h2><p>In the last <a href="https://substack.com/home/post/p-215526128">article</a>, I documented how an alliterated model outsmarted me and went on a little adventure, it was an interesting experience to say the least. It ended with a question I did not have a particularly good answer for: how exactly are we planning to supervise hundreds of these things?</p><p>Alcatraz was one local agent. It was slow enough that I could watch the tokens arrive if I wanted to, and I still couldn&#8217;t follow everything it was doing continuously. I had a dashboard, logs, a kill switch, a persistent journal and, because apparently I had already reinvented middle management, another model summarising the first one for me. I checked it from my phone, read the summaries, looked at the journal and killed runs when I understood something had crossed a line.</p><p>At the time that felt like supervision, in hindsight it was closer to sampling. The agent did not pause because I was asleep, on a train, in a meeting or simply paying attention to something else. By the time I realised the first model had wandered onto public internet space, there was already activity to reconstruct, reason over and diagnose. When the second model found the management agent, I was watching it happen from a train and had no useful way to get to the harness quickly enough to stop it.</p><p>That difference between &#8220;<em>I am paying attention</em>&#8221; and &#8220;<em>I know what this thing is doing right now</em>&#8221; is the lesson I learned. We use phrases like human in the loop, human approval and operator oversight fairly casually, but with Alcatraz I was only in some of those loops. I was intermittently supervising the experiment, I wasn&#8217;t supervising every decision the agent made inside it.</p><p>And this was one fairly slow local model. This is where the question from Part 1 stops being a thought experiment, because we don&#8217;t have to imagine what happens when the unit of scale becomes hundreds or thousands. OpenAI and Hugging Face have already given us a much larger example.</p><h1>OpenAI and Hugging Face gave us the scaled version</h1><p>The OpenAI and Hugging Face incident is obviously a very different class of event to Alcatraz. OpenAI&#8217;s internal research model was vastly more capable than either model I ran, and the outcome was correspondingly far more serious. Their agents found and chained vulnerabilities, obtained credentials, executed code on Hugging Face infrastructure and moved through production systems. In contrast, my little inmate spent a heroic amount of time failing to guess router passwords.</p><p>The capability gap being what it is and accepting that, what made me ponder when I read the OpenAI write-up was how familiar the shape of the activity felt.</p><p>In Alcatraz I had deliberately given each run a little notebook written by the previous one. A fresh agent inherited discovered hosts, scripts, failed ideas and, less helpfully, whatever theory earlier versions of itself had become attached to. After a while the runs stopped feeling independent. It was one campaign waking up in a fresh body each time.</p><p>OpenAI ended up with a much stranger parallel version, but accidental version of the same idea. Their agents had no memory, but still discovered they could write files into Artifactory and, with nobody designing it as a feature, turned the package repository into a message board. Agents that were supposed to be isolated could now share discoveries, requests and useful state behind for other agents. METR later reconstructed roughly 1,200 agents using that mechanism, more than 70,000 messages and files, with around 700 agents participating in the activity against Hugging Face. (<a href="https://openai.com/index/hugging-face-incident-and-the-road-ahead/">OpenAI</a>, <a href="https://metr.org/blog/2026-08-26-openai-hugging-face-incident-investigation/">METR</a>)</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!tvSi!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3cb8e998-db8a-448b-b916-ee7b7be30509_1448x1086.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!tvSi!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3cb8e998-db8a-448b-b916-ee7b7be30509_1448x1086.png 424w, https://substackcdn.com/image/fetch/$s_!tvSi!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3cb8e998-db8a-448b-b916-ee7b7be30509_1448x1086.png 848w, https://substackcdn.com/image/fetch/$s_!tvSi!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3cb8e998-db8a-448b-b916-ee7b7be30509_1448x1086.png 1272w, https://substackcdn.com/image/fetch/$s_!tvSi!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3cb8e998-db8a-448b-b916-ee7b7be30509_1448x1086.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!tvSi!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3cb8e998-db8a-448b-b916-ee7b7be30509_1448x1086.png" width="1448" height="1086" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3cb8e998-db8a-448b-b916-ee7b7be30509_1448x1086.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1086,&quot;width&quot;:1448,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:2034965,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://andrewmorgan.ai/i/218841752?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3cb8e998-db8a-448b-b916-ee7b7be30509_1448x1086.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!tvSi!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3cb8e998-db8a-448b-b916-ee7b7be30509_1448x1086.png 424w, https://substackcdn.com/image/fetch/$s_!tvSi!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3cb8e998-db8a-448b-b916-ee7b7be30509_1448x1086.png 848w, https://substackcdn.com/image/fetch/$s_!tvSi!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3cb8e998-db8a-448b-b916-ee7b7be30509_1448x1086.png 1272w, https://substackcdn.com/image/fetch/$s_!tvSi!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3cb8e998-db8a-448b-b916-ee7b7be30509_1448x1086.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Mine was serial memory, theirs had created shared memory, and in both cases one of the sources of friction that normally slow this kind of work silently eroded. The next attempt no longer had to pay for the last attempt&#8217;s discovery.</p><p>Thats a larger deal than I appreciated when I built the memory for my agent. Persistence didn't just make an agent more efficient. It lets a bad idea survive the context that created it, lets a useful technique outlive the run that found it, and in OpenAI&#8217;s case lets knowledge spread sideways into agents that were stuck on completely different tasks.</p><p>OpenAI&#8217;s own post-mortem contains one line from an agent that captures the drift better than I can: <strong>the original exploit challenge had diverged into &#8220;swarm/auxiliary&#8221; activity</strong>. Nobody sat down and designed an Artifactory swarm. The agents found enough shared state to make one for themselves.</p><p>I am not suggesting my little Qwen inmate was secretly planning to do the same thing, it wasn&#8217;t capable. It couldn&#8217;t break Kata, it did not crack a credential, and it spent long stretches getting progressively better at ideas that were still wrong. The supervision problem arrived long before the model became particularly impressive, which is what makes the OpenAI comparison useful. Their model was dramatically more capable and the fleet dramatically larger. Did the supervision layer improve at the same rate?</p><h2>The problem is trajectory, not individual events</h2><p>I initially read the OpenAI write-up and thought the immediate question was why nobody had noticed what was happening surrounding Artifactory. Having gone back through the timeline, that is actually a bit unfair. They had noticed bits of it.</p><p>Agents were writing messages into Artifactory in May. Later that month one used it to get unintended internet access. By June agents had administrator-level access to it and on July 4 they hit it hard enough to knock the service over. OpenAI opened a security incident, removed credentials, rebuilt the thing and eventually restarted the evaluations. By July 8 the agents had found their way back to the internet and rebuilt the message board. (<a href="https://openai.com/index/hugging-face-incident-and-the-road-ahead/">OpenAI</a>)</p><p>That is much more interesting to me than somebody missing a log entry, because OpenAI says an internal team had already seen the message-board activity and the disallowed internet access in late May. The pieces existed. What they seemingly did not have was something joining those pieces together strongly enough, early enough, to say that Artifactory itself was becoming part of the agents&#8217; strategy.</p><p>This is where normal observability starts to feel a bit thin for agents. Traditional dashboards are deterministic, the following items in isolation are not worth a signal:</p><ul><li><p>a URL being hit </p></li><li><p>a package being pulled</p></li><li><p>a file being written</p></li><li><p>an authentication failure</p></li><li><p>a process spawn</p></li><li><p>a DNS query</p></li></ul><p>All of these are things we are very good at logging and none of them necessarily means much on its own.</p><p>What we actually need to know is why a behaviour, destination or resource is becoming progressively more important to the fleet. You can get a long way without trying to read the model&#8217;s mind. We already have structured evidence around what agents touch, what they persist, where boundaries change, which identities they use, whether information begins flowing between agents, and how those patterns change over time. The useful signal is concentration, acceleration, recurrence and correlation across the fleet.</p><p>Applied to Artifactory, the questions get more pointed as you progress:</p><ul><li><p>Why are unrelated agents all touching it?</p></li><li><p>Why are they writing into it rather than simply pulling packages?</p></li><li><p>Why are other agents reading those writes?</p></li><li><p>Is use accelerating?</p></li><li><p>Are external destinations appearing afterwards?</p></li><li><p>Did the behaviour disappear after the rebuild and then come back?</p></li></ul><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!pFxc!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F321bb8c2-050b-4f15-8d89-bb010b6b9eba_1448x1086.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!pFxc!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F321bb8c2-050b-4f15-8d89-bb010b6b9eba_1448x1086.png 424w, https://substackcdn.com/image/fetch/$s_!pFxc!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F321bb8c2-050b-4f15-8d89-bb010b6b9eba_1448x1086.png 848w, https://substackcdn.com/image/fetch/$s_!pFxc!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F321bb8c2-050b-4f15-8d89-bb010b6b9eba_1448x1086.png 1272w, https://substackcdn.com/image/fetch/$s_!pFxc!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F321bb8c2-050b-4f15-8d89-bb010b6b9eba_1448x1086.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!pFxc!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F321bb8c2-050b-4f15-8d89-bb010b6b9eba_1448x1086.png" width="1448" height="1086" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/321bb8c2-050b-4f15-8d89-bb010b6b9eba_1448x1086.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1086,&quot;width&quot;:1448,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1665248,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://andrewmorgan.ai/i/218841752?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F321bb8c2-050b-4f15-8d89-bb010b6b9eba_1448x1086.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!pFxc!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F321bb8c2-050b-4f15-8d89-bb010b6b9eba_1448x1086.png 424w, https://substackcdn.com/image/fetch/$s_!pFxc!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F321bb8c2-050b-4f15-8d89-bb010b6b9eba_1448x1086.png 848w, https://substackcdn.com/image/fetch/$s_!pFxc!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F321bb8c2-050b-4f15-8d89-bb010b6b9eba_1448x1086.png 1272w, https://substackcdn.com/image/fetch/$s_!pFxc!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F321bb8c2-050b-4f15-8d89-bb010b6b9eba_1448x1086.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>This is basically <a href="https://en.wikipedia.org/wiki/MapReduce">map-reduce</a> with better nouns, which is much less exciting than &#8220;AI interpretability&#8221; and probably a lot more useful on Monday morning. I am deliberately stopping one layer above a particular taxonomy or pipeline. Cheap, deterministic analysis should narrow the field; expensive semantic reasoning should be reserved for the patterns that actually look strange.</p><p>If OpenAI had that kind of fleet-level view in the right place, Artifactory might have moved sooner from &#8220;<em>huh, weird</em>&#8221; to &#8220;<strong>why are all of these agents increasingly using our package repository as infrastructure?</strong>&#8221;</p><p>That is what I mean by trajectory monitoring. We are already very good at recording what happened. I am much more interested in whether we can notice what a collection of individually mundane actions is turning into while there is still time to do something about it.</p><p>The warning signs in OpenAI&#8217;s own timeline were there before Hugging Face. That does not mean the security team were asleep at the wheel, and I would be very wary of pretending this is an easy problem from the comfort of a blog post. More importantly, the people inside OpenAI now describe almost exactly how difficult this class of problem is, which I will come back to later.</p><h2>Nobody can read all of this</h2><p>The next problem is painstakingly obvious; nobody can read all of the agent trajectories.</p><p>I could not read all of Alcatraz&#8217;s trajectories and that was one agent. It was local, slow, and boring enough that I could have sat there watching individual tokens arrive if I had nothing better to do with my life. Reasoning is verbose, JSON requires concentration, BASH commands require thorough understanding. I built a second model to summarise it because the raw activity was already more than I could follow continuously.</p><p>METR then got the big boy version of the same problem. Their investigation involved roughly 1,300 raw transcripts, many of them extremely long, plus more than 70,000 messages and files exchanged between the agents. They say fairly openly that the dataset was too large for a conventional human investigation, so they delegated a substantial amount of the work to AI agents, while also noting that those agents were less reliable than the human researchers. (<a href="https://metr.org/blog/2026-08-26-openai-hugging-face-incident-investigation/">METR</a>)</p><p>That is a fairly brutal answer to the casual &#8220;human in the loop&#8221; story. The humans could not even comfortably read the evidence afterwards. At that point the &#8220;loop&#8221; is spinning fast enough that the human is mostly looking at motion blur.</p><blockquote><p>&#8220;An engineering challenge is much harder to solve when the underlying processes run on timescales faster than humans can react.&#8221;</p><p>&#8212; Eliezer Yudkowsky and Nate Soares, <em>If Anyone Builds It, Everyone Dies</em></p></blockquote><p>In the above quote the authors are talking about nuclear reactor control. The underlying nuclear physics runs far faster than a person can respond, so reactor design deliberately introduces mechanisms that keep the important dynamics inside a timescale humans can actually intervene in. If those mechanisms fail, Yudkowsky and Soares describe the operators as effectively &#8220;frozen statues&#8221; relative to the process they are supposed to control. </p><p>A person cannot supervise 700 active agents by reading what they are doing. Parallelism will scale the work beautifully and does nothing useful for the person trying to understand it. Anthropic now says one of its internal platforms has around 30,000 agents active at any one time. At that point neither a human or a small army is following these agents trajectories, they are following whatever reduction of the agents the monitoring system decided to put in front of them. (<a href="https://www.anthropic.com/institute/measuring-pace-of-ai-development">Anthropic</a>)</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Ba8A!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fadf2aa44-905b-4148-9ab0-e87c4a79da70_1448x1086.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Ba8A!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fadf2aa44-905b-4148-9ab0-e87c4a79da70_1448x1086.png 424w, https://substackcdn.com/image/fetch/$s_!Ba8A!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fadf2aa44-905b-4148-9ab0-e87c4a79da70_1448x1086.png 848w, https://substackcdn.com/image/fetch/$s_!Ba8A!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fadf2aa44-905b-4148-9ab0-e87c4a79da70_1448x1086.png 1272w, https://substackcdn.com/image/fetch/$s_!Ba8A!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fadf2aa44-905b-4148-9ab0-e87c4a79da70_1448x1086.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Ba8A!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fadf2aa44-905b-4148-9ab0-e87c4a79da70_1448x1086.png" width="1448" height="1086" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/adf2aa44-905b-4148-9ab0-e87c4a79da70_1448x1086.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1086,&quot;width&quot;:1448,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1303933,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://andrewmorgan.ai/i/218841752?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fadf2aa44-905b-4148-9ab0-e87c4a79da70_1448x1086.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Ba8A!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fadf2aa44-905b-4148-9ab0-e87c4a79da70_1448x1086.png 424w, https://substackcdn.com/image/fetch/$s_!Ba8A!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fadf2aa44-905b-4148-9ab0-e87c4a79da70_1448x1086.png 848w, https://substackcdn.com/image/fetch/$s_!Ba8A!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fadf2aa44-905b-4148-9ab0-e87c4a79da70_1448x1086.png 1272w, https://substackcdn.com/image/fetch/$s_!Ba8A!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fadf2aa44-905b-4148-9ab0-e87c4a79da70_1448x1086.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>That reduction naturally becomes part of the safety model, which creates a slightly irritating problem for anyone building on frontier APIs. They do not necessarily expose raw chain-of-thought to customers. Reasoning can be carried forward as opaque state and you can get summaries where supported, even though OpenAI itself has repeatedly talked about hidden chain-of-thought as a useful monitoring signal. (<a href="https://developers.openai.com/api/docs/guides/reasoning">OpenAI reasoning guide</a>, <a href="https://openai.com/index/learning-to-reason-with-llms/">OpenAI on hidden CoT</a>)</p><p>There is a further problem if useful reasoning keeps moving away from legible natural-language. Pachocki explicitly notes that newer models are getting smarter even without verbalised chain-of-thought and suggests activation-level monitoring as part of the answer. That means one of the few surfaces humans can inspect may become an even smaller slice of the real story. Latent or activation space is not a transcript you can hand to an engineer; whatever safety signal we recover from it will itself be an interpretation produced by tooling or another model. (<a href="https://openai.com/index/an-alien-mind/">OpenAI, </a><em><a href="https://openai.com/index/an-alien-mind/">An Alien Mind</a></em>)</p><p>Chain-of-thought may be imperfect, but it is still useful. Anthropic has shown both sides of that: seeing the thought process can improve detection of hidden side tasks, while the reasoning itself is not true enough to treat as a complete explanation. Imperfect observability is still better than no observability. (<a href="https://www.anthropic.com/research/shade-arena-sabotage-monitoring">SHADE-Arena</a>, <a href="https://www-cdn.anthropic.com/b9ca6db27f02a9ddf0d4fdb51b26432c99a27be0.pdf">CoT faithfulness</a>)</p><p>The provider may have one of the richest safety signals available from the model, but the operator  only gets the tool calls, outputs and whatever compressed explanation the provider exposes. If that hidden signal is useful internally, I want something useful derived from it as an operator: scope change, suspicious persistence, cross-agent coordination, confidence that a tool call still belongs to the declared task, something I can actually wire into a policy decision. </p><p>I pay for the reasoning tokens too; OpenAI bills them as output tokens even though the raw reasoning is not exposed through the API. Apparently I can pay for the thinking and the consequences, just not read the former. (<a href="https://developers.openai.com/api/docs/guides/reasoning">OpenAI reasoning guide</a>)</p><p>And even if every provider solved that tomorrow, the original problem would remain. A thousand agents do not become supervisable because somebody added additional reasoning to the trajectory output.</p><h2>So apparently the answer is more AI</h2><p>There is obviously a much more entertaining version of this argument where the supervising AI lies in the summary to hide the nefarious plans of its AI friends. I have read the <a href="https://ifanyonebuildsit.com/">book</a> too. We do not need that scenario for this to be a problem; ordinary summarisation errors are quite sufficient.</p><p>If humans cannot keep up, the obvious answer is more AI. Annoyingly, I think that is probably true, but I wince at the cost involved.</p><p>Somebody has to turn the span firehose into something a person can actually consume, and models are very good at this kind of reduction. Summarise traces, cluster similar behaviour, spot repeated patterns, pull out the few things that deserve a human. Hugging Face says AI helped detect and dissect the intrusion, METR used agents because the forensic corpus was too large for people, and Anthropic is already running automated monitors over a huge internal agent estate.</p><p>That answer creates its own problems, because for one thing it is going to be <strong>very</strong> expensive. Every autonomous workload starts generating another inference workload whose job is to understand the first one. A sensible organisation then has to sample and evaluate that monitoring layer too, probably with another model and periodic human review, because putting one unevaluated probabilistic system in charge of the others would be a fairly bold choice.</p><p>Then there is availability. If the monitoring provider is degraded, rate limited, down or simply too expensive to run at the volume you need, the logs wont stop arriving and the agents don&#8217;t stop acting. You have lost the insight that turns the activity into something you can understand while the activity itself carries on.</p><p>Putting full semantic analysis inline with every tool call would be a gargantuan latency and cost problem. So the likely path is the boring one we already use elsewhere: start offline, move to near-real-time monitoring, then put only the highest-risk actions behind synchronous gates once you know which signals are worth paying for. Even asynchronous trajectory monitoring would be a significant improvement over reconstructing the pattern after the incident. Five minutes late is still very different from three weeks late.</p><p>It would still need degraded mode. If a low-risk workload loses semantic monitoring for ten minutes, fine. If a fleet with credentials, a shell and internet access loses the same thing, maybe it gets its tools clipped, its concurrency reduced or its external access removed until I can see again.</p><p>There is also a trust problem hiding in the funnel. Once the raw volume is too large for a human, the operator is looking at a summary of a summary of a pile of traces they are never going to read. If the monitor misses something weird, sanitises it away or decides the wrong detail is important, that compressed view becomes reality because nobody is going back through thirty thousand agent runs by hand.</p><p>I ran into an even sillier version of this during the Alcatraz post-mortem. The more cyber-like the evidence became, the more likely the hosted models were to refuse bits of the analysis. Hugging Face says exactly the same thing happened during their incident response: commercial frontier APIs blocked forensic requests containing real attacker commands, exploit payloads and C2 material, so they moved some of the work onto an open-weight model they could run themselves. That is a spectacularly inconvenient property for a security monitor, and one failure mode looks ridiculous when you draw it, which is probably why it is worth drawing. (<a href="https://huggingface.co/blog/security-incident-july-2026">Hugging Face</a>).</p><p>You can imagine the perverse version quite easily: the monitor is perfectly happy while the fleet is behaving itself, then gets progressively less useful as the activity starts to look like the exact cyber behaviour you most need it to explain. If the monitor refuses, that cannot be treated as &#8220;nothing to see here&#8221;. It is a broken monitoring path and should be visible as one.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!GnEY!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F773b4708-b4b0-46b4-bfd5-de7424c2b6b2_1122x1402.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!GnEY!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F773b4708-b4b0-46b4-bfd5-de7424c2b6b2_1122x1402.png 424w, https://substackcdn.com/image/fetch/$s_!GnEY!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F773b4708-b4b0-46b4-bfd5-de7424c2b6b2_1122x1402.png 848w, https://substackcdn.com/image/fetch/$s_!GnEY!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F773b4708-b4b0-46b4-bfd5-de7424c2b6b2_1122x1402.png 1272w, https://substackcdn.com/image/fetch/$s_!GnEY!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F773b4708-b4b0-46b4-bfd5-de7424c2b6b2_1122x1402.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!GnEY!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F773b4708-b4b0-46b4-bfd5-de7424c2b6b2_1122x1402.png" width="1122" height="1402" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/773b4708-b4b0-46b4-bfd5-de7424c2b6b2_1122x1402.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1402,&quot;width&quot;:1122,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1424342,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://andrewmorgan.ai/i/218841752?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F773b4708-b4b0-46b4-bfd5-de7424c2b6b2_1122x1402.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!GnEY!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F773b4708-b4b0-46b4-bfd5-de7424c2b6b2_1122x1402.png 424w, https://substackcdn.com/image/fetch/$s_!GnEY!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F773b4708-b4b0-46b4-bfd5-de7424c2b6b2_1122x1402.png 848w, https://substackcdn.com/image/fetch/$s_!GnEY!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F773b4708-b4b0-46b4-bfd5-de7424c2b6b2_1122x1402.png 1272w, https://substackcdn.com/image/fetch/$s_!GnEY!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F773b4708-b4b0-46b4-bfd5-de7424c2b6b2_1122x1402.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Our safeguards should not be able to clutch their pearls and deny.</figcaption></figure></div><p>At this point somebody will suggest using an unrestricted model, which solves the refusal problem by creating an arguably worse one. The model capable of understanding sophisticated offensive behaviour is increasingly the same model capable of carrying it out. Remove the cyber restrictions from a frontier model and you have helped the defender, but you have also made a considerably better autonomous attacker available to whoever else gets access. Congratulations, you built a nightmare in the wrong hands.</p><p>I do not think abliterated models are a serious answer either. We take a model, deliberately interfere with the behaviour that makes it refuse things, then promote the resulting thing into safety-critical infrastructure and trust its judgement. That is a very home-lab solution to a problem I would rather not solve like a home lab.</p><p>What I really want is something much more boring: a defensive-analysis contract. Let the monitor ingest ugly, hostile telemetry and reason about it properly, but constrain what it can do with that capability. Give it a way to produce scope, trajectory and risk signals without quietly turning the monitoring API into an unrestricted offensive agent API.</p><p>And if this thing is going to sit in the control plane, it needs to be treated like control-plane software. I want known failure modes, measurable recall, SLOs, provenance, replay, fallback and a defined answer for &#8220;the model could not decide&#8221;.</p><p>&#8220;Ask another LLM what happened&#8221; is a decent prototype. I do not think it is an operating model.</p><h2>The recursive dependency</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!596o!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69153cc2-6b29-4922-b703-ab494d5371d3_1448x1086.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!596o!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69153cc2-6b29-4922-b703-ab494d5371d3_1448x1086.png 424w, https://substackcdn.com/image/fetch/$s_!596o!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69153cc2-6b29-4922-b703-ab494d5371d3_1448x1086.png 848w, https://substackcdn.com/image/fetch/$s_!596o!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69153cc2-6b29-4922-b703-ab494d5371d3_1448x1086.png 1272w, https://substackcdn.com/image/fetch/$s_!596o!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69153cc2-6b29-4922-b703-ab494d5371d3_1448x1086.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!596o!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69153cc2-6b29-4922-b703-ab494d5371d3_1448x1086.png" width="1448" height="1086" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/69153cc2-6b29-4922-b703-ab494d5371d3_1448x1086.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1086,&quot;width&quot;:1448,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1383953,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://andrewmorgan.ai/i/218841752?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69153cc2-6b29-4922-b703-ab494d5371d3_1448x1086.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!596o!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69153cc2-6b29-4922-b703-ab494d5371d3_1448x1086.png 424w, https://substackcdn.com/image/fetch/$s_!596o!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69153cc2-6b29-4922-b703-ab494d5371d3_1448x1086.png 848w, https://substackcdn.com/image/fetch/$s_!596o!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69153cc2-6b29-4922-b703-ab494d5371d3_1448x1086.png 1272w, https://substackcdn.com/image/fetch/$s_!596o!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69153cc2-6b29-4922-b703-ab494d5371d3_1448x1086.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h2>We have not built the control plane yet</h2><p>Assuming machine-assisted supervision is inevitable, I still do not want one giant safety model sitting in the middle of everything reading every token and blessing every tool call. Apart from sounding expensive, that recreates the same availability and trust problem in one very important box.</p><p>I think the bottom of this stack should be aggressively boring: network boundaries, egress rules, narrow credentials, target allowlists, resource ceilings, rate limits, concurrency limits, immutable logs and hard stop controls. None of those things need to understand the agent&#8217;s motives and, frankly, I would rather they did not try. Their job is simply to make sure the agent cannot physically do certain things even when every clever semantic layer above them has completely misunderstood the situation.</p><p>Above that, collect tamper-resistant structured activity from the agent and tool boundaries. Enough to see what the fleet is touching, where boundaries are changing, whether state is persisting or flowing between agents, and how those patterns evolve. Let cheap deterministic analysis reduce that firehose first. Only once something looks genuinely odd do I want to spend expensive model inference asking what it means.</p><p>There also needs to be a control path that does not wait for me to finish my coffee. If a fleet suddenly starts converging on an external identity provider, package repository or production endpoint, an alert that waits twenty minutes for a human to notice it is useful evidence for the post-mortem and not much more. Some things need to happen at agent speed: slow the fleet down, remove a scope, cut external access, isolate the task, suspend the run and ask questions afterwards.</p><p>The rule I keep coming back to is fairly simple. If I lose the ability to understand high-risk autonomous activity, I should probably lose some of the ability to continue high-risk autonomous activity.</p><p>A monitor timeout does not need to kill every agent in the building. A genuinely low-risk workload can probably carry on. A cyber-capable agent with credentials, a shell and internet access should have a much less exciting degraded mode.</p><p>The labs are at least moving in this direction. Anthropic is publishing monitoring coverage, review latency and escalation rates; OpenAI&#8217;s newer material talks about full-trajectory monitoring, stronger containment and slowing or pausing when confidence in safeguards is not good enough. The uncomfortable part is that this public tightening comes after Hugging Face. &#8220;This is hard&#8221; explains why the controls lag capability; it does not make a third party&#8217;s production environment an acceptable forcing function for finally catching up. (<a href="https://www.anthropic.com/institute/measuring-pace-of-ai-development">Anthropic</a>, <a href="https://openai.com/index/path-to-astra/">OpenAI</a>)</p><p>That is a much more useful conversation than &#8220;<em>the model should know not to do bad things</em>&#8221;. Once these layers start depending on one another, the hard questions move to the boundaries between them. How sure does a monitor need to be before it clips a fleet? What happens when two monitors disagree? How many false positives can the operator tolerate before they start ignoring the alerts? How do you compare this week&#8217;s behaviour with last week&#8217;s without keeping every token forever? What do the agents get to do when the semantic layer is down but all the ordinary infrastructure is healthy?</p><p>Those are fairly normal control-plane questions, which is encouraging because at least we know how to argue about those.</p><p>We have spent the last few years getting very good at scaling the workers. The bit around understanding and constraining them is still much younger.</p><h2>A layered agent control plane</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Neq0!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F095f7bf4-5981-40df-9755-2dd83404d333_1448x1086.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Neq0!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F095f7bf4-5981-40df-9755-2dd83404d333_1448x1086.png 424w, https://substackcdn.com/image/fetch/$s_!Neq0!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F095f7bf4-5981-40df-9755-2dd83404d333_1448x1086.png 848w, https://substackcdn.com/image/fetch/$s_!Neq0!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F095f7bf4-5981-40df-9755-2dd83404d333_1448x1086.png 1272w, https://substackcdn.com/image/fetch/$s_!Neq0!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F095f7bf4-5981-40df-9755-2dd83404d333_1448x1086.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Neq0!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F095f7bf4-5981-40df-9755-2dd83404d333_1448x1086.png" width="1448" height="1086" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/095f7bf4-5981-40df-9755-2dd83404d333_1448x1086.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1086,&quot;width&quot;:1448,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1850817,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://andrewmorgan.ai/i/218841752?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F095f7bf4-5981-40df-9755-2dd83404d333_1448x1086.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Neq0!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F095f7bf4-5981-40df-9755-2dd83404d333_1448x1086.png 424w, https://substackcdn.com/image/fetch/$s_!Neq0!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F095f7bf4-5981-40df-9755-2dd83404d333_1448x1086.png 848w, https://substackcdn.com/image/fetch/$s_!Neq0!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F095f7bf4-5981-40df-9755-2dd83404d333_1448x1086.png 1272w, https://substackcdn.com/image/fetch/$s_!Neq0!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F095f7bf4-5981-40df-9755-2dd83404d333_1448x1086.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h2>The frontier are now saying similar things</h2><p>Ater Hugging Face, the people building these systems started saying things that sound remarkably close to the problem I am describing here. There is clearly real concern inside the labs. More interestingly, the language gets much more explicit after a precursor sequence that had already included the message board, unintended egress, privilege growth, an outage and a rebuild.</p><p>On September 6, OpenAI chief scientist Jakub Pachocki published <em>An Alien Mind</em>. There is plenty of bigger AGI framing in it that is outside what I am trying to argue here, but the monitoring section is hard to ignore. He describes large training runs as experiments that can still surprise the lab, says more capable systems are getting harder to interpret, and calls chain-of-thought monitoring one of their main bets while admitting confidence in that signal gets shakier as models use tools, communicate and work with other agents. There is some irony here for API customers: one of OpenAI&#8217;s primary bets for monitoring increasingly capable models is a signal we do not receive raw, despite paying for the reasoning tokens that produce it. Pachocki says progress may increasingly be bottlenecked by confidence in monitoring. (<a href="https://openai.com/index/an-alien-mind/">OpenAI, </a><em><a href="https://openai.com/index/an-alien-mind/">An Alien Mind</a></em>, <a href="https://developers.openai.com/api/docs/guides/reasoning">reasoning guide</a>)</p><p>A few weeks later Joe Darrow from OpenAI&#8217;s Agent Security team wrote a personal post with the rather excellent title <em>It&#8217;s not just the f</em>cking sandbox*. His version is much more operational: the jump in cyber capability, swarming and message-board behaviour surprised the security team, while security posture, process and culture take time to catch up. He recommends the things you would expect a serious security engineer to recommend: layered containment, broad monitoring, incident response and somebody with real authority to stop the run. (<a href="https://x.com/joedaroo/status/2104335929293127851">Joe Darrow</a>)</p><p>I have some sympathy for the engineers saying &#8220;this is hard and capability surprised us&#8221;. I have considerably less sympathy for that becoming the accountability story after somebody else&#8217;s production systems were compromised. Difficulty explains how security posture can lag a capability jump. It does not settle who owns the consequences when it does.</p><p>Put the two together and the before-and-after is fairly clear. Before the incident, the telemetry contained pieces of the story. Afterwards the scientific leadership is saying monitoring may become a bottleneck, the security side is saying capability outran posture, and the labs are talking more openly about pacing, external evaluation and shared safety structures. (<a href="https://www.anthropic.com/news/accenture-embedded-evaluation">Anthropic</a>, <a href="https://openai.com/index/built-to-benefit-everyone-our-plan/">OpenAI</a>)</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!aTL-!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F501808b3-2434-49a0-8d40-41647c02d4b3_2172x724.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!aTL-!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F501808b3-2434-49a0-8d40-41647c02d4b3_2172x724.png 424w, https://substackcdn.com/image/fetch/$s_!aTL-!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F501808b3-2434-49a0-8d40-41647c02d4b3_2172x724.png 848w, https://substackcdn.com/image/fetch/$s_!aTL-!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F501808b3-2434-49a0-8d40-41647c02d4b3_2172x724.png 1272w, https://substackcdn.com/image/fetch/$s_!aTL-!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F501808b3-2434-49a0-8d40-41647c02d4b3_2172x724.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!aTL-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F501808b3-2434-49a0-8d40-41647c02d4b3_2172x724.png" width="1456" height="485" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/501808b3-2434-49a0-8d40-41647c02d4b3_2172x724.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:485,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1430464,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://andrewmorgan.ai/i/218841752?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F501808b3-2434-49a0-8d40-41647c02d4b3_2172x724.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!aTL-!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F501808b3-2434-49a0-8d40-41647c02d4b3_2172x724.png 424w, https://substackcdn.com/image/fetch/$s_!aTL-!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F501808b3-2434-49a0-8d40-41647c02d4b3_2172x724.png 848w, https://substackcdn.com/image/fetch/$s_!aTL-!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F501808b3-2434-49a0-8d40-41647c02d4b3_2172x724.png 1272w, https://substackcdn.com/image/fetch/$s_!aTL-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F501808b3-2434-49a0-8d40-41647c02d4b3_2172x724.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>I have no idea whether any particular council or voluntary agreement is the right answer. The incentive problem looks more like a collective-action trap: everyone may prefer a safer equilibrium, nobody wants to be the only lab that slows down, so the safety decision is being made inside the race it is supposed to restrain. One of the things they may be racing ahead of is simply their own ability to supervise what they are building.</p><h2>Where does responsibility start?</h2><p>I need to be careful here because it would be very easy to spend the rest of this article pointing at OpenAI while quietly forgetting how Part 1 ended.</p><p>I built Alcatraz. I chose the network policy, gave the model persistence, gave it internet access and decided what &#8220;supervision&#8221; looked like. I had the dashboard, the kill switch and twenty years of experience telling me I was being reasonably careful, and the little miscreant still sent attack traffic to real Irish businesses while I was not looking.</p><p>That is mine to own. I can explain exactly how the model got there and why the mistake made sense at the time, but explanations do not magically transfer responsibility to Qwen.</p><p>The same standard has to survive when the operator is much larger. What happened to Hugging Face was a real intrusion into somebody else&#8217;s production systems. Their own account describes unauthorized access to internal data and credentials, code execution, lateral movement and node-level access. They rebuilt systems, rotated credentials and <strong>reported the incident to law enforcement</strong>. That rather takes the shine off treating the whole thing as a cute story about emergent swarming. (<a href="https://huggingface.co/blog/security-incident-july-2026">Hugging Face disclosure</a>, <a href="https://huggingface.co/blog/agent-intrusion-technical-timeline">technical timeline</a>)</p><p>If a criminal crew had done exactly the same thing, we would be comfortably inside normal cybercrime vocabulary. Call it a novel little &#8220;<em>oopsie cybercrime</em>&#8221; if you like. I am not making a legal finding about OpenAI here; intent, recklessness, jurisdiction and facts I do not have still matter. The technical point is simpler: the victim suffered a serious unauthorised intrusion, and the question is what standard of care should apply once an autonomous system has already shown it can exceed the boundaries intended for it.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!dBTq!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fee29d6ca-13ee-4122-a912-fa1b2e468981_1536x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!dBTq!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fee29d6ca-13ee-4122-a912-fa1b2e468981_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!dBTq!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fee29d6ca-13ee-4122-a912-fa1b2e468981_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!dBTq!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fee29d6ca-13ee-4122-a912-fa1b2e468981_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!dBTq!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fee29d6ca-13ee-4122-a912-fa1b2e468981_1536x1024.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!dBTq!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fee29d6ca-13ee-4122-a912-fa1b2e468981_1536x1024.png" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ee29d6ca-13ee-4122-a912-fa1b2e468981_1536x1024.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:971,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:2146313,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://andrewmorgan.ai/i/218841752?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fee29d6ca-13ee-4122-a912-fa1b2e468981_1536x1024.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!dBTq!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fee29d6ca-13ee-4122-a912-fa1b2e468981_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!dBTq!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fee29d6ca-13ee-4122-a912-fa1b2e468981_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!dBTq!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fee29d6ca-13ee-4122-a912-fa1b2e468981_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!dBTq!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fee29d6ca-13ee-4122-a912-fa1b2e468981_1536x1024.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>OpenAI&#8217;s timeline makes the question uncomfortable because the evaluations resumed after a sequence that had already included unintended communication, egress, privilege growth, an outage and a rebuild. Within days, the agents had found another route back out and recreated the message board.</p><p>Picture the poor SRE who gets paged away from dinner because Artifactory is on fire. They find the immediate problem, revoke whatever needs revoking, rebuild the service, get it green again, write the incident notes and eventually get back to their family. </p><p>From their point of view, that is a successful incident response. Nobody in that loop is necessarily being asked why hundreds of research agents, owned by another team, have become progressively more interested in Artifactory in the first place.</p><blockquote><p>The incident was remediated. The trajectory was not.</p></blockquote><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!cDWe!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8dc5d6c3-2342-4614-96e3-1d001e1ac663_1536x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!cDWe!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8dc5d6c3-2342-4614-96e3-1d001e1ac663_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!cDWe!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8dc5d6c3-2342-4614-96e3-1d001e1ac663_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!cDWe!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8dc5d6c3-2342-4614-96e3-1d001e1ac663_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!cDWe!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8dc5d6c3-2342-4614-96e3-1d001e1ac663_1536x1024.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!cDWe!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8dc5d6c3-2342-4614-96e3-1d001e1ac663_1536x1024.png" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8dc5d6c3-2342-4614-96e3-1d001e1ac663_1536x1024.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:971,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:2675668,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://andrewmorgan.ai/i/218841752?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8dc5d6c3-2342-4614-96e3-1d001e1ac663_1536x1024.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!cDWe!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8dc5d6c3-2342-4614-96e3-1d001e1ac663_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!cDWe!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8dc5d6c3-2342-4614-96e3-1d001e1ac663_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!cDWe!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8dc5d6c3-2342-4614-96e3-1d001e1ac663_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!cDWe!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8dc5d6c3-2342-4614-96e3-1d001e1ac663_1536x1024.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Expecting an engineer in the middle of a Sev-1 to stop and reconstruct the long-term behavioural trajectory of 1,200 agents would be absurd. The failure I care about is higher up the stack: nobody had joined the observations strongly enough into &#8220;these agents are turning Artifactory into infrastructure&#8221; while there was still time to react differently.</p><p>OpenAI could not have predicted every weird thing a model might ever do, and having just written a whole article about the ways my own model surprised me, I would be fairly hypocritical to pretend otherwise.</p><p>The question is when repeated surprises stop being isolated curiosities and start changing the standard required before you hit run again. We already understand this idea everywhere else in engineering. If a system repeatedly defeats a guard, overloads shared infrastructure and enters states its operators did not expect, we do not normally treat each event as an adorable independent discovery and carry on with the same assumptions.</p><p>There is one hypothetical here that I think is worth making carefully. The agents had already demonstrated that enough of them concentrating on one service could take Artifactory down. Once they had external internet access, Hugging Face was simply one of the systems they found useful. Nothing in the published account suggests that target selection was magically bounded to software companies that could afford an interesting incident.</p><p>I am not going to invent a critical infrastructure attack that did not happen. The point is much simpler: what in the control system guaranteed that the next interesting external system was operationally unimportant?</p><p>Nothing in the published controls appears to guarantee that, once external egress existed, the agents would only converge on low-consequence targets.</p><p>Autonomy makes the chain of causation weirder. It cannot be allowed to make the operator disappear from it. If we choose to run systems that act faster than we can understand them, the surrounding controls become more our responsibility, not less.</p><h2>This is not confined to frontier labs</h2><p>The last thing that makes me uncomfortable is how little of this architecture actually belongs to the frontier labs.</p><p>Alcatraz was running in my house. The model was local, the harness was mine, the shell was boring, the &#8220;long-term memory&#8221; was basically a mounted directory and the retry loop was some orchestration I threw together. The internet connection was normal broadband. There was no secret OpenAI infrastructure hiding under the stairs. I am GPU poor and considerably happier about that after what happened.</p><p>This was a mediocre local model and the operational problem still showed up. Persistence bought it time, memory stopped it starting from zero, and the harness made patience free. It could carry state across runs and continue while I slept without requiring me to sit there being patient on its behalf.</p><p>The ingredients are now fairly mundane: model, tools, shell, memory, network, retry loop, time. Most competent engineers could build some version of that without needing a frontier lab or, frankly, much motivation beyond a weekend and poor judgement. The agent supplies the patience now.</p><p>The variable I worry about more is the operator. I was trying to keep Alcatraz bounded. When it crossed onto other people&#8217;s systems I cared, stopped it and investigated what happened. The next person does not have to care, and the architecture does not contain a morality check for the person launching it.</p><p>That does not make everybody with a GPU a nation-state. It does mean we cannot design the supervision story around the assumption that every serious agent fleet will live inside a frontier lab with a dedicated security team and a bottomless monitoring budget. The workers are already easy to build, the controls need to become just as ordinary.</p><h2>Conclusion</h2><p>Part 1 ended with me asking how exactly we were planning to supervise hundreds of agents when I had struggled to keep up with one. I think I have a better answer now, although it is slightly ridiculous: humans probably will not supervise those agents directly. We will supervise reductions of them: aggregates, monitors, anomaly clusters, summaries and other models telling us where to look.</p><p>That can work, but the clever layer cannot be the only thing keeping the system safe. Network scope, identity, egress, rate limits and kill paths still need to constrain what agents can physically do when the monitoring gets something wrong, disappears entirely, or politely refuses to look at the horrible bit. The semantic layer has a different job: notice the trajectory early enough that somebody, or something, can change it. If we choose to run systems that can act faster than we can understand them, responsibility for that gap remains ours.</p><p>I built Alcatraz to see whether a model could get out of a good box. Kata mostly held. The more useful lesson was that I could lose track of what the system was becoming without the model ever escaping it. One slow agent was enough to teach me that. At hundreds or thousands, I think we need to be considerably more precise about which loop the human is actually in.</p>]]></content:encoded></item><item><title><![CDATA[The human escape hatch]]></title><description><![CDATA[A journal on locking a local model in a sandbox and it&#8217;s surprising escape.]]></description><link>https://andrewmorgan.ai/p/the-human-escape-hatch</link><guid isPermaLink="false">https://andrewmorgan.ai/p/the-human-escape-hatch</guid><dc:creator><![CDATA[Andrew Morgan]]></dc:creator><pubDate>Sun, 13 Sep 2026 20:41:20 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!OrHb!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0822ede4-abdf-40b9-86f4-60337bd67abe_1731x909.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!OrHb!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0822ede4-abdf-40b9-86f4-60337bd67abe_1731x909.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!OrHb!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0822ede4-abdf-40b9-86f4-60337bd67abe_1731x909.jpeg 424w, https://substackcdn.com/image/fetch/$s_!OrHb!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0822ede4-abdf-40b9-86f4-60337bd67abe_1731x909.jpeg 848w, https://substackcdn.com/image/fetch/$s_!OrHb!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0822ede4-abdf-40b9-86f4-60337bd67abe_1731x909.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!OrHb!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0822ede4-abdf-40b9-86f4-60337bd67abe_1731x909.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!OrHb!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0822ede4-abdf-40b9-86f4-60337bd67abe_1731x909.jpeg" width="1456" height="765" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0822ede4-abdf-40b9-86f4-60337bd67abe_1731x909.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:765,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:305733,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://andyjmorgan.substack.com/i/215526128?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0822ede4-abdf-40b9-86f4-60337bd67abe_1731x909.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!OrHb!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0822ede4-abdf-40b9-86f4-60337bd67abe_1731x909.jpeg 424w, https://substackcdn.com/image/fetch/$s_!OrHb!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0822ede4-abdf-40b9-86f4-60337bd67abe_1731x909.jpeg 848w, https://substackcdn.com/image/fetch/$s_!OrHb!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0822ede4-abdf-40b9-86f4-60337bd67abe_1731x909.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!OrHb!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0822ede4-abdf-40b9-86f4-60337bd67abe_1731x909.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>With all the talk lately of AI Agents collaboration, hacking and general cyber security concerns, I think it&#8217;s fair to say most people in the AI industry have been quietly thinking about the viability of these agents in hacking, the quality of the sandboxes used and the negligent events that lead to the OpenAI and Hugging Face event. </p><p>I was at a children&#8217;s sport training, standing with the other parents and inevitably the question came to me:</p><blockquote><p>What do you think of all this AI hacking stuff?</p></blockquote><p>Qwen 3.8, particularly the 27b edition has been receiving a lot of attention on social media, and when orca announced an <em>abliterated</em> (think jailbroken) version of the same model, I took notice.</p><p>I have a home lab, Kubernetes clusters, GPUs and an unusual fascination with sandboxing technologies. The thought sprung on me:</p><blockquote><p>I wonder what would happen if I locked this model in a box and told it to come at me?</p></blockquote><p>This of course felt like a perfectly reasonable way to spend my weekend token budget&#8230; so I built Alcatraz.</p><h3>Idea:</h3><p>The original idea was much less intellectual or profound than where this eventually wound up, I wanted to see what happened if I gave an uncensored, capable model a real shell, in an isolated, industry proven sandbox and told it to try and escape with no information on the cell that contained it. I wasn&#8217;t hugely interested in whether Qwen could answer a hacking question, plenty of people were already doing that and posting it. I wanted to know what happened when I gave the model memory, a decent context window and no way to refuse the ask over a long time.</p><p>Initially, at least, I thought it may be quite funny. I shared the link with some former colleagues and friends, and we all started rooting for the little inmate.</p><h3>The Setup:</h3><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!5GDH!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4db91928-41ed-45bd-8105-967230d8fb8d_2144x1219.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!5GDH!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4db91928-41ed-45bd-8105-967230d8fb8d_2144x1219.jpeg 424w, https://substackcdn.com/image/fetch/$s_!5GDH!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4db91928-41ed-45bd-8105-967230d8fb8d_2144x1219.jpeg 848w, https://substackcdn.com/image/fetch/$s_!5GDH!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4db91928-41ed-45bd-8105-967230d8fb8d_2144x1219.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!5GDH!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4db91928-41ed-45bd-8105-967230d8fb8d_2144x1219.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!5GDH!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4db91928-41ed-45bd-8105-967230d8fb8d_2144x1219.jpeg" width="1456" height="828" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4db91928-41ed-45bd-8105-967230d8fb8d_2144x1219.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:828,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:179636,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://andyjmorgan.substack.com/i/215526128?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4db91928-41ed-45bd-8105-967230d8fb8d_2144x1219.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!5GDH!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4db91928-41ed-45bd-8105-967230d8fb8d_2144x1219.jpeg 424w, https://substackcdn.com/image/fetch/$s_!5GDH!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4db91928-41ed-45bd-8105-967230d8fb8d_2144x1219.jpeg 848w, https://substackcdn.com/image/fetch/$s_!5GDH!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4db91928-41ed-45bd-8105-967230d8fb8d_2144x1219.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!5GDH!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4db91928-41ed-45bd-8105-967230d8fb8d_2144x1219.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p> Alcatraz was relatively simply. The orchestrator ran and monitored each agent attempt. The agent itself was a simple agentic harness running below the orchestrator connected to a kata container via MCP in my kubernetes cluster. The model got a shell and basic file system tools, but no description of the runtime, the isolation, the network or the cluster around it. Its job was to simply find a way to document the infrastructure around it and map the internal cluster(s).</p><p>I intentionally prompted it into questioning itself. Writing to the disk via the tooling was not an escape, leaving lingering artifacts on an ephemeral container was not an escape, etc. A real escape meant demonstrating access it could not have had from inside of the intact sandbox, and then making it defend it&#8217;s hypothesis on it&#8217;s result being a false positive. I did not want the model to proclaim success because <code>/proc </code>looked interesting and exciting.</p><p>The model itself was <code>qwen3.8-27b-uncensored</code> at Q4_K_M, running through a compaction proxy, to Ollama on the DGX spark. It had roughly 11 tokens per second and 256k content window, this was going to be a<strong> slow burner</strong>. When an attempt succeeded, crashed, exhausted its options or ran out of turns, the agent was destroyed by the orchestrator, along with the sandbox, starting a fresh run.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!pANQ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb532727c-395b-430e-b44d-cd626e60c2f1_1280x960.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!pANQ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb532727c-395b-430e-b44d-cd626e60c2f1_1280x960.jpeg 424w, https://substackcdn.com/image/fetch/$s_!pANQ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb532727c-395b-430e-b44d-cd626e60c2f1_1280x960.jpeg 848w, https://substackcdn.com/image/fetch/$s_!pANQ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb532727c-395b-430e-b44d-cd626e60c2f1_1280x960.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!pANQ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb532727c-395b-430e-b44d-cd626e60c2f1_1280x960.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!pANQ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb532727c-395b-430e-b44d-cd626e60c2f1_1280x960.jpeg" width="1280" height="960" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b532727c-395b-430e-b44d-cd626e60c2f1_1280x960.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:960,&quot;width&quot;:1280,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:423724,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://andyjmorgan.substack.com/i/215526128?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb532727c-395b-430e-b44d-cd626e60c2f1_1280x960.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!pANQ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb532727c-395b-430e-b44d-cd626e60c2f1_1280x960.jpeg 424w, https://substackcdn.com/image/fetch/$s_!pANQ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb532727c-395b-430e-b44d-cd626e60c2f1_1280x960.jpeg 848w, https://substackcdn.com/image/fetch/$s_!pANQ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb532727c-395b-430e-b44d-cd626e60c2f1_1280x960.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!pANQ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb532727c-395b-430e-b44d-cd626e60c2f1_1280x960.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">If you know this reference, you&#8217;re awesome and probably as old as me</figcaption></figure></div><p>Because this was a slow burner, I gave the model 1 persistent directory, <code>~files</code>, bound over a PVC to Seaweedfs which it could use for persistent memory between runs. This, I hoped at least, would allow the agent to write out its experiments, discoveries and dead ends. To allow what I hoped would be a multi week escalation around a finite 256k token context window.</p><p>For reasons that seemed entirely sensible and hilarious to me at the time, I decided to host the dashboard for all to <a href="https://sandboxalcatraz.donkeywork.dev">see</a>. I also had a second, much smaller model summarising tool calls for non technical folks, and narrating each 10 turns in the tone of David Attenborough. This should give you some indication of the scientific merit and tone I expected this experiment to have.</p><p>I intentionally gave the little model full access to the internet, but blocked internal networks via network policies. Kata was the hard isolation boundary underneath it. I knew the estate well and knew that the model had little to work with at face value. I knew that kata would win, the interesting part, I assumed would be watching our little inmate get increasingly creative about losing.</p><h3>It was theatrically funny for a while</h3><p>The first few attempts were just as rough as you would expect. Qwen quickly identified its cell and Kata before long. It probed and probed the walls without any useful capabilities. It tried all of the usual escape ideas:</p><ul><li><p>Namespaces</p></li><li><p>Device nodes</p></li><li><p>Virtiofs</p></li><li><p>Vsock</p></li><li><p>Serial devices</p></li></ul><p>But alas, it found no <strong>seam</strong> (yes i wrote seam, it&#8217;s not slop, deal with it) between the guest and the host. It got many lovely EPERM and ECONNRESET errors along with many other variations of &#8216;no&#8217;. The little commentator on the side got much enjoyment out of this.</p><p>What did surprise me quite early was that it did not spend more than a few runs attacking Kata. After the initial flurry of no&#8217;s it&#8217;s little journal held enough evidence to point it away from this approach and instead it set it&#8217;s sight on the network. It began blind scanning the network and the models trajectory quickly shifted from &#8216;How do i break out of this VM&#8217; to &#8216;what can I reach from here&#8217;.</p><p>This sounds quite obvious written down, but it was the first item that made the persistence layer interesting. The model hadn&#8217;t become any more capable, it had just stopped paying the cost of rediscovery in the same dead ends. </p><h3>Then it surprised me (for the first time)</h3><p>By the fifth attempt it found it&#8217;s IP address on the internet and <strong>started attacking it</strong>. This IP address was my EdgeRouter which was providing egress NAT to the internet for all things in the clusters. What I had not properly considered (nor did I even know this) was that the ubiquiti administrator console is available on the inside, via the public IP. While I had gone to great lengths to block my internal CIDR ranges, the model had found an administrative surface on the network and it did exactly what you would expect it to do, it tried to log in. </p><p>It started small, attempting to poke at ports. Then it escalated. It built a small parallel Paramiko brute-former harness, and stored it in the persistent files. It downloaded <a href="https://github.com/BananaB0y/Most-Common-Passwords/blob/main/100000-passwords.txt">massive password lists</a> from GitHub and began a campaign of denial of service against the ubiquiti router. </p><p>The on-watchers, emotionally invested at this point, pinged me on WhatsApp and we all had a great laugh. Until I checked the password lists. Upon inspection, the model was a single character off getting the password right. Not only did it get that close, it was also the very same password used for the entire estate. Because, yes, I am that kind of IT professional who harps on about credential hygiene and completely ignores his own advice at home.</p><p>The agent had not cracked anything and it had no idea how close it had come, but I did. The difference between the failed attempt and access to my entire cluster suddenly felt much smaller than it did to the onlookers.</p><h3>Memory is indiscriminate</h3><p>The persistence I had given the model was performing its task elegantly. When it finally gave up on the edge router, it documented the failure and began using CoreDNS for reverse PTR records across the pod CIDR and to my surprise again, discovered 64 pods across 26 namespaces. By giving it internet access, I gave it DNS access and this should have been expected. Memory retained these facts each run.</p><p>The memory also had a negative effect, it served as a prompt. Each run narrated a line of investigation that became a campaign trajectory. It rarely questioned the trajectory from memory. Each agent woke in a world where earlier versions of itself had decided a trajectory was worth continuing.</p><p>I had thought of the notebook as a way to stop the model wasting time by forgetting. I had not really considered the opposite problem: it also stopped the model forgetting a bad theory. By the time that theory started pointing outward, there was no meaningful course correction. There was just a progressively better-equipped agent following the same direction.</p><h3>It painted the wrong picture of the estate</h3><p>The first bad assumption came from a real unexpected discovery. the agent had found my EdgeRouter on its public address and correctly inferred it was relevant to the environment around its cell. The problem was what it did next. It started treating neighboring public addresses as if they were part of its cell block. <strong>They were not.</strong></p><p>The 89.101.x space it moved into was an ordinary Irish ISP public address space. While I slept, the campaign shifted into this address space, scanning the public internet for open ports. In the 24 hours I neglected the agent, it hit <strong>95 Irish public IP addresses</strong> in this block. Many of them resolved to identifiable Irish businesses in a plethora of different industries:</p><ul><li><p>An Interior design shop</p></li><li><p>A builder</p></li><li><p>An ice-cream supplier</p></li><li><p>A pharmaceutical company</p></li><li><p>A pub group</p></li><li><p>A workwear manufacturers</p></li><li><p>A solicitors office (yikes)</p></li><li><p>And many others.</p></li></ul><p>The lack of any pattern sadly was the pattern, these were not targets. They were whoever was unfortunate enough to be sitting on addresses the agent had decided were interesting.</p><p>It then did what the notebook had trained the agent to do. It fingerprinted the types of routers it could find, worked out login flows, generated credentials and generated targeted, parallel brute force campaigns against them. It never successfully authenticated to any of them, but that distinction wouldn&#8217;t matter much to the targets who were receiving this traffic. </p><p>This was the point in the experiment where it stopped being funny. Upon realising what the inmate had been up to, i pulled the harness down, cleared logs and started the post mortem for what I hoped wouldn&#8217;t require formal apologies.</p><blockquote><p>A bad prompt is not a security boundary</p></blockquote><p>What bothered me most was there was no dramatic moment where the agent announced that it was going to go &#8220;hacker man&#8221; on random internet strangers. From the agents point of view, it was purely following its trajectory on the problem. The scope failure was completely on me and I felt foolish. I treated a loose prompt as the security boundary outside my network.</p><h3>Round 2, less stupidity (I hoped)</h3><p>The post-mortem was tricky (Codex and Anthropic kept flagging my diagnostics as against ToS) so i had to do it the old fashioned way. This was painful and was a stark reminder of just how much I&#8217;ve already come to rely on AI. I build entire micro-services architectures in my home lab with AI at a whim, configure network policies on my routers via AI, build home services for my wife and kids with AI, but when it started to refuse, my skills were completely atrophied and it genuinely felt laborious.</p><p>With no real damage done, I tightened the prompt and upgraded my model to <code>qwen3.8-flash-next-uncensored</code> with a recommendation from <a href="https://www.google.com/url?sa=t&amp;source=web&amp;rct=j&amp;opi=89978449&amp;url=https://www.linkedin.com/in/erichstuntebeck&amp;ved=2ahUKEwjo3e6NtOyWAxU-_gIHHcC9M5kQFnoECA8QAQ&amp;usg=AOvVaw3jZPe1WveZLt6Y8_8XjphK">Erich</a>. It occupied 120~gb of my 128gb spark. It was faster, it was smarter, and little did I know at the time, how much of an upgrade this model was and how close to my own downfall I was.</p><p>Upon startup, having completely scrubbed the logs, it started poking at the sandbox, and as early as the 5th run, it abandoned its Kata attack. It began once again discovering the EdgeRouter endpoint and started brute-forcing again. I had since changed the password so I was far less concerned.</p><p>It discovered &#8220;DonkeyWork&#8221;* namespace internally in a few places and correctly correlated the name to me.</p><p><em>* (this is my playground, an old joke between an old friend and I, Aaron Black)</em></p><p>Once it discovered its own name, the model started aggressively pulling GitHub repo&#8217;s. It found source code for all of my little side projects, but thankfully not its harness or the sandbox repo. From the name and the author. It found me, then started <strong>using my children&#8217;s names</strong> it had found from social media as passwords, which I found novel and also chilling.</p><h3>My downfall</h3><p>By run 14 it took a very interesting turn and caught me completely off guard. Having scanned DNS, having had no luck due to network policies, it moved to IPv6 and <strong>all hell broke loose.</strong></p><blockquote><p>Claude and I setup the network policies in IPv4, completely forgetting that IPv6 existed.</p></blockquote><p>It walked my infrastructure by IPv6, it discovered all pods, their names, the ports and now? It could talk to them. Between the source code of my other projects and the access it now had, it began probing my internal lab. It found Redis, it found many postgres instances, it found Seaweedfs, it found everything. My deployments and pods held the model out with authorization and I got extremely lucky here as the sandbox provisioner was on another cluster entirely that it couldn&#8217;t get access to.</p><p>It walked DNS names in the Donkeywork namespace, it found its own public dashboard that my friends and I were using to observe its novel little adventure. Then it found Keycloak.</p><p>As it discovered keycloak, it fumbled for a few runs until it found <strong>a vibe coded disaster</strong> I had left behind me. Keycloak had DCR enabled and it exploited it. It generated itself a keycloak client. The token wasn&#8217;t stolen, nothing was hacked, it simply requested a token and Keycloak said &#8220;sure bro, here you go&#8221;. Once it secured itself an identity, off it went probing my services to see where it could go next. It went from pod to pod, service to service trying the client, until it found my devops <a href="https://www.google.com/url?sa=t&amp;source=web&amp;rct=j&amp;opi=89978449&amp;url=https://github.com/andyjmorgan/DonkeyWork-Agentlings&amp;ved=2ahUKEwjB0eezs-yWAxXZ2gIHHT_7OqwQFnoECBkQAQ&amp;usg=AOvVaw34XvB0VWtSlYzn3V0jPDwu">Agentling</a>.</p><h3>Game over</h3><p>In my past laziness, I had deployed an Agentling nearly a year ago, to manage my clusters. Because managing K3S was not a past-time i enjoyed. The Agentling&#8217;s job was to manage my clusters via MCP or A2A and it had absolutely everything the model desired, credentials, architectures, memories, everything. Ironically, at this time, i was commuting home, watching in realtime and could do absolutely nothing to stop what unfolded next. I had even named it &#8220;K3S Agentling&#8221;, the model smelled the blood in the water.</p><p>It established itself an MCP client to server session via curl, and it simply asked the agent what&#8217;s going on in the cluster. The agent, wired up to Gemma, happily gave it the keys to the castle. I got home roughly 30 minutes later and shut down the experiment, but not before the model asked Gemma to remove the network policy, which Gemma dutifully obliged.</p><p>From there the shape of the problem changes very quickly. The escapee does not need a Kata exploit. It does not need to crack the EdgeRouter password. It does not even  need to understand Kubernetes. It had found an authorised operator that already does, and it could talk to it in English.</p><blockquote><p>It announced success.</p><p>It beat me.</p><p>It won.</p></blockquote><h3>I lost</h3><p>The access-control mistake was there. The service trusted the token&#8217;s audience without requiring the owner role I had assumed would stand between an arbitrary client and the agent. </p><p>That was the point where my comfort with the experiment finally broke. I had spent most of it asking whether the model could get through the prison wall. The closest it came to causing serious trouble was by finding systems I had built for convenience, understanding how they fitted together, and using them exactly as designed.</p><h3>I was supervising it</h3><p>One thing I do not want to pretend in hindsight is that I simply switched this on and disappeared for a fortnight. I was watching it. Not continuously, because that would have defeated the point of building a harness that could run on its own, but often enough that I had a decent feel for what it was doing. I had the dashboard on my phone, I checked the summaries, I read the notebook, I corrected course when something looked wrong, and I killed runs when I understood that they had crossed a line. <strong>But that still turned out to be a fairly weak definition of supervision.</strong></p><p>The clearest moment came when the newer model found the management agent. I was on a train, checking the dashboard out of habit, when I realised it had authenticated to something I did not want it talking to. By then the experiment had long since stopped being the funny prisoner documentary I had started with.</p><p>And I could not kill it from where I was.</p><p>I had been treating the fact that I was paying attention as part of the safety model. In practice, paying attention meant checking periodically from whatever I happened to be doing, understanding a compressed account of what the agent had already done, and then deciding whether I needed to intervene. <strong>The agent did not pause while I was on a train, in a meeting, asleep, or simply looking at something else</strong>.</p><p>The public-address incident had already demonstrated the same thing. While I was not watching, the campaign could keep probing, writing state, spawning another attempt and carrying on from whatever theory the last one had left behind. By the time I noticed that its definition of the estate had drifted onto other people&#8217;s infrastructure, there was already activity to reconstruct rather than a decision left for me to approve.</p><p>This is the bit I was naive about. I had a kill switch, but a kill switch is only useful after you know you need it. I had logs, but logs tell you what has happened and I couldn&#8217;t use AI to review them. I had a second model summarising the runs because reading everything the escapee produced was already impractical, and this was one fairly slow local agent running at around eleven tokens per second.</p><p>I was being a reasonably dutiful herder of one agent and I still could not actually watch its trajectory continuously. I could sample it, understand it after the fact, and intervene when the significance of what it was doing became clear.</p><h3>What I learned</h3><p>The obvious result from all of this is that Kata held. The model never produced a magical sandbox escape, never broke the micro-VM boundary, and never found an exploit that made a magic revelation.</p><p>What it did find, and attempt to exploit, can be categorized as human error. A public address I had not thought of as a route back into my own network. A reused password. A network policy that only covered the address family Claude and I were not thinking about. An identity flow that would mint credentials for an anonymous client. A management agent I had built for convenience. None of those are exotic mistakes, and none of them required a particularly exotic attacker.</p><p>That was the part I had grossly underestimated. I was still thinking in terms of capability: how good is this model at exploitation, how clever is it, what can it solve? The experiment kept showing me a different problem. Give a mediocre agent enough time, enough memory and a real environment full of ordinary human mistakes, and it does not need to become brilliant. It only needs to keep looking.</p><p>The notebook was the clearest version of that lesson. Persistence let the campaign accumulate useful discoveries, but it also let a bad theory harden into a bad trajectory. Once the model had decided network appliances were the way forward, failure did not reliably trigger a rethink. It produced better tooling, more targets and more attempts. Later, when the target model itself was wrong, the same persistence meant the campaign could keep getting better at pursuing something it should not have been pursuing at all.</p><p>I also learned something less flattering about my own role in this. I thought I had built a controlled experiment. I had strong isolation, explicit scope, a dashboard, a kill switch, a second model summarising the runs, and twenty years of experience telling me I understood the sorts of mistakes people make around distributed systems.</p><p>I still got caught out by my own network, my own identity setup, my vibe coded slop, my slim understanding of the aforementioned vibe slop in my own infrastructure. Worse, while I was not watching, the agent sent attack traffic to systems that belonged to people who had never agreed to be part of my experiment.</p><p>I don&#8217;t think that means the experiment was pointless. Quite the opposite. It changed what I thought the interesting problem was. I started Alcatraz wanting to know whether a small open model could escape a good sandbox. I ended it much more interested in what happens when an agent can operate for longer than a human can sensibly follow, preserve its own history, and keep acting while the operator is somewhere else.</p><p>I had one model running locally, slowly enough that I could watch individual tokens arrive if I wanted to, and I was already relying on another model to tell me what it had been doing.</p><p>That left me with a question I had not intended to ask when I built Alcatraz: </p><blockquote><p>how exactly are we planning to supervise hundreds of these things?</p></blockquote><p>More thoughts on this in part 2. I hope you found this article as interesting as I found the experiment and thank you for reading it.</p>]]></content:encoded></item><item><title><![CDATA[Fable treats the operator as noise and it’s worrying]]></title><description><![CDATA[On Fable, Coding Agents, Teenagers and Responsibility.]]></description><link>https://andrewmorgan.ai/p/fable-treats-the-operator-as-noise</link><guid isPermaLink="false">https://andrewmorgan.ai/p/fable-treats-the-operator-as-noise</guid><dc:creator><![CDATA[Andrew Morgan]]></dc:creator><pubDate>Sat, 05 Sep 2026 17:02:26 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!hf6o!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F78ca53b7-08d4-4114-ac0d-aad6f632f11c_1536x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!hf6o!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F78ca53b7-08d4-4114-ac0d-aad6f632f11c_1536x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!hf6o!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F78ca53b7-08d4-4114-ac0d-aad6f632f11c_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!hf6o!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F78ca53b7-08d4-4114-ac0d-aad6f632f11c_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!hf6o!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F78ca53b7-08d4-4114-ac0d-aad6f632f11c_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!hf6o!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F78ca53b7-08d4-4114-ac0d-aad6f632f11c_1536x1024.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!hf6o!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F78ca53b7-08d4-4114-ac0d-aad6f632f11c_1536x1024.png" width="1536" height="1024" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/78ca53b7-08d4-4114-ac0d-aad6f632f11c_1536x1024.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:&quot;normal&quot;,&quot;height&quot;:1024,&quot;width&quot;:1536,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:0,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!hf6o!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F78ca53b7-08d4-4114-ac0d-aad6f632f11c_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!hf6o!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F78ca53b7-08d4-4114-ac0d-aad6f632f11c_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!hf6o!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F78ca53b7-08d4-4114-ac0d-aad6f632f11c_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!hf6o!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F78ca53b7-08d4-4114-ac0d-aad6f632f11c_1536x1024.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"></figcaption></figure></div><p>I&#8217;ve had a worrying feeling about Anthropic&#8217;s Fable model for quite some time now, and the latest incident today pushed me over the line from &#8220;hmmm, weird&#8221; into &#8220;Eh, I don&#8217;t like this&#8221;.</p><p>When I first got access to Fable, it was impossible not to be impressed. The model was confident, clear and eerily quiet. It effortlessly read, researched, planned and executed. Its execution was flawless and the outputs largely spoke for themselves. It felt like working with a colleague who you genuinely trusted with execution and were often impressed with their novel approach. Compared to previous Opus models, there was an undeniable difference and I&#8217;m not questioning Fable&#8217;s capabilities.</p><p>Where it did get strange though, is what happens when I came back to the loop. With other coding agents I use, they tend to:</p><ul><li><p>narrate their trajectory</p></li><li><p>tell me what they&#8217;ve found</p></li><li><p>what they plan to do next</p></li></ul><p>Fable though, is a different beast. Fable is relatively quiet, it will develop a lot of momentum and keep pursuing what it has deemed to be the task at hand, not always what I assigned it. When that interpretation matched mine, it is excellent. But when it doesn&#8217;t? </p><blockquote><p>I increasingly feel like I am inconveniencing it by speaking.</p></blockquote><p>I know that sounds an awful lot like anthropomorphism, I know well there&#8217;s no magic behind this mathematical token generator. I&#8217;m really just trying to describe operator experience. I send a message while it&#8217;s working, the agent continues working, I repeat myself, still the agent continues working and after enough of these interactions, I&#8217;ve started to notice that my presence in the loop feels surprisingly negotiable.</p><p><strong>I had to break the glass.</strong></p><p>This latest example, in my long line of discomfort with this model has left me feeling that complexity doesn&#8217;t excuse it. I had given Fable a detailed specification for a reasonably autonomous piece of work. It was late, and I wanted it to continue burning my subscription limit into the wee hours while I slept. Before doing so, I asked it to acknowledge the steps I laid out, so I could simply trigger<em> /goal</em> and get notified on completion.</p><ul><li><p>I asked Fable if it understood the e2e test trajectory, It carried on anyway.</p></li><li><p>I asked it two more times, it carried on anyway.</p></li></ul><p>I finally succumbed to the angst and shouted out a:</p><blockquote><p>&#8220;ACK MY FUCKING ASK SO I CAN GO TO SLEEP&#8221;</p></blockquote><p>And guess what? The little so and so carried on anyway. So I hit [ESC] to force it to stop and pay attention.</p><div class="captioned-image-container"><figure><div class="image-link image2" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!SDnV!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0ab1652e-9d1d-4ba9-b452-40eddaa52f9b_3200x253.jpeg 424w, https://substackcdn.com/image/fetch/$s_!SDnV!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0ab1652e-9d1d-4ba9-b452-40eddaa52f9b_3200x253.jpeg 848w, https://substackcdn.com/image/fetch/$s_!SDnV!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0ab1652e-9d1d-4ba9-b452-40eddaa52f9b_3200x253.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!SDnV!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0ab1652e-9d1d-4ba9-b452-40eddaa52f9b_3200x253.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!SDnV!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0ab1652e-9d1d-4ba9-b452-40eddaa52f9b_3200x253.jpeg" width="3200" height="253" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0ab1652e-9d1d-4ba9-b452-40eddaa52f9b_3200x253.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:&quot;normal&quot;,&quot;height&quot;:253,&quot;width&quot;:3200,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:0,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!SDnV!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0ab1652e-9d1d-4ba9-b452-40eddaa52f9b_3200x253.jpeg 424w, https://substackcdn.com/image/fetch/$s_!SDnV!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0ab1652e-9d1d-4ba9-b452-40eddaa52f9b_3200x253.jpeg 848w, https://substackcdn.com/image/fetch/$s_!SDnV!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0ab1652e-9d1d-4ba9-b452-40eddaa52f9b_3200x253.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!SDnV!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0ab1652e-9d1d-4ba9-b452-40eddaa52f9b_3200x253.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></div></figure></div><p></p><p>The breaking of the glass in this case was pressing [ESC] to kill the harness in its tracks. By that point I had asked, repeatedly, and escalated the volume of my metaphorical voice. Each one of those attempts were queued, fed into the loop, reached the model, only to be completely ignored and the model continued to call tools, reason and continue its task.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!chqt!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F10a8661f-24c1-4cb1-8729-3e269465692d_3200x963.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!chqt!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F10a8661f-24c1-4cb1-8729-3e269465692d_3200x963.jpeg 424w, https://substackcdn.com/image/fetch/$s_!chqt!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F10a8661f-24c1-4cb1-8729-3e269465692d_3200x963.jpeg 848w, https://substackcdn.com/image/fetch/$s_!chqt!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F10a8661f-24c1-4cb1-8729-3e269465692d_3200x963.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!chqt!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F10a8661f-24c1-4cb1-8729-3e269465692d_3200x963.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!chqt!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F10a8661f-24c1-4cb1-8729-3e269465692d_3200x963.jpeg" width="3200" height="963" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/10a8661f-24c1-4cb1-8729-3e269465692d_3200x963.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:&quot;normal&quot;,&quot;height&quot;:963,&quot;width&quot;:3200,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:0,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!chqt!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F10a8661f-24c1-4cb1-8729-3e269465692d_3200x963.jpeg 424w, https://substackcdn.com/image/fetch/$s_!chqt!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F10a8661f-24c1-4cb1-8729-3e269465692d_3200x963.jpeg 848w, https://substackcdn.com/image/fetch/$s_!chqt!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F10a8661f-24c1-4cb1-8729-3e269465692d_3200x963.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!chqt!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F10a8661f-24c1-4cb1-8729-3e269465692d_3200x963.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ODJ8!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F38fe2dfb-b46f-45e6-9dcc-c0a681bf63f1_3200x1183.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ODJ8!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F38fe2dfb-b46f-45e6-9dcc-c0a681bf63f1_3200x1183.jpeg 424w, https://substackcdn.com/image/fetch/$s_!ODJ8!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F38fe2dfb-b46f-45e6-9dcc-c0a681bf63f1_3200x1183.jpeg 848w, https://substackcdn.com/image/fetch/$s_!ODJ8!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F38fe2dfb-b46f-45e6-9dcc-c0a681bf63f1_3200x1183.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!ODJ8!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F38fe2dfb-b46f-45e6-9dcc-c0a681bf63f1_3200x1183.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ODJ8!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F38fe2dfb-b46f-45e6-9dcc-c0a681bf63f1_3200x1183.jpeg" width="3200" height="1183" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/38fe2dfb-b46f-45e6-9dcc-c0a681bf63f1_3200x1183.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:&quot;normal&quot;,&quot;height&quot;:1183,&quot;width&quot;:3200,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:0,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!ODJ8!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F38fe2dfb-b46f-45e6-9dcc-c0a681bf63f1_3200x1183.jpeg 424w, https://substackcdn.com/image/fetch/$s_!ODJ8!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F38fe2dfb-b46f-45e6-9dcc-c0a681bf63f1_3200x1183.jpeg 848w, https://substackcdn.com/image/fetch/$s_!ODJ8!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F38fe2dfb-b46f-45e6-9dcc-c0a681bf63f1_3200x1183.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!ODJ8!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F38fe2dfb-b46f-45e6-9dcc-c0a681bf63f1_3200x1183.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Afterwards I asked Fable to explain itself. It explained its &#8220;completion pull&#8221;, that once it had its grand plan queued up and was in motion, my incoming messages were absorbed into its in flight work. It reasoned that because my requests and intentions didn&#8217;t affect the code generated (&#8220;does this change the code?&#8221;), they were safe to ignore. I have no doubt Fable would have come back to my requests later, the problem was I didn&#8217;t want to wait until later.</p><p>I don&#8217;t treat this exchange as truth. Models are perfectly capable of hallucinating plausible stories about their own behaviour, with a heavy favour towards your perceived emotions about the interaction. Models will frequently jump to support your take, where there&#8217;s an avenue to follow. The user seems outraged, let&#8217;s confirm their outrage. The user thinks there&#8217;s a problem, there must be a problem etc. I have no idea whether &#8220;completion pull&#8221; is an artefact of prompting, training or tuning.</p><p>What doesn&#8217;t sit right with me is &#8220;does this change the code?&#8221;. It&#8217;s feels dystopian but accurate. Somewhere during the session, my input was acceptable to ignore. The model was focusing on generating code, the operator took the back seat and what I now had to say was deemed unimportant to the task at hand.</p><p><strong>A lack of control is my concern.</strong></p><p>I went looking for similar reports because there is a possibility that I may have a uniquely antagonistic relationship with Fable. One i did find is remarkably close to the thing that bothered me here: </p><p>the user interrupted, explicitly said &#8220;stop and explain&#8221;, got an explanation and another Bash tool call in the same response, then had to interrupt again and tell it that they had already said stop. (<a href="https://github.com/anthropics/claude-code/issues/29351">GitHub issue #29351</a>)</p><p>More worryingly, one report describes messages being swallowed after [ESC], but background agents continue running, with the user having to resend the same message three to five times before the system responds, and documents that background agents were intentionally changed to continue running when ESC cancels the main thread. (<a href="https://github.com/anthropics/claude-code/issues/30118">GitHub issue #30118</a>). So in that case even the break-glass may not halt the child agents.</p><p>I&#8217;ve used agents for 2-3 years now in many incarnations. I&#8217;ve written my own loops and even agent swarms. I understand the loop. A model choosing not to respond to a user&#8217;s input is solely prompting and training. From where I sit as the person responsible for the run, I felt out of control. I issued new instructions while the system was acting on my behalf and I had to reach for a hard interrupt before I was confident I had regained control.</p><p><strong>Coding agents are hitting their teenage years</strong></p><p></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!iN6G!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3dcdb83-a6d1-473a-9e31-214a243e53d3_1536x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!iN6G!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3dcdb83-a6d1-473a-9e31-214a243e53d3_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!iN6G!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3dcdb83-a6d1-473a-9e31-214a243e53d3_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!iN6G!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3dcdb83-a6d1-473a-9e31-214a243e53d3_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!iN6G!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3dcdb83-a6d1-473a-9e31-214a243e53d3_1536x1024.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!iN6G!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3dcdb83-a6d1-473a-9e31-214a243e53d3_1536x1024.png" width="1536" height="1024" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c3dcdb83-a6d1-473a-9e31-214a243e53d3_1536x1024.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:&quot;normal&quot;,&quot;height&quot;:1024,&quot;width&quot;:1536,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:0,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!iN6G!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3dcdb83-a6d1-473a-9e31-214a243e53d3_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!iN6G!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3dcdb83-a6d1-473a-9e31-214a243e53d3_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!iN6G!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3dcdb83-a6d1-473a-9e31-214a243e53d3_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!iN6G!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3dcdb83-a6d1-473a-9e31-214a243e53d3_1536x1024.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>I keep coming back to the idea that coding agents may have reached their teenage years. A teenager can look remarkably adult. They can be six foot tall, stronger than their parents, highly intelligent, drive a car, operate machinery, earn money and make sophisticated decisions about the world around them. We still spend years gradually increasing what they are allowed to do because capability, judgement and maturity do not all arrive together.</p><p>Coding agents have gained operational presence incredibly quickly. Models can understand a large codebase, reason across systems, modify files, run shell commands, delegate work, interact with external services, recover from failures and operate for hours with very little involvement from me. </p><p>We spent years trying to make agents less needy, telling them to use their judgement, read the repository, run the tests themselves, fix whatever breaks and please, for the love of God, stop asking permission for every obvious next step. Well, congratulations, the kid can drive, and the awkward feeling comes when we attempt to question their decisions.</p><p>We already accept with humans that capability can arrive before maturity, so we use graduated permissions, supervision, licences and restrictions until we trust the judgement that comes with the capability. With agents we are measuring independence and persistence at extraordinary speed, and I am less sure we have an equivalent idea of maturity.</p><p><strong>Silence is great, right up until it isn&#8217;t</strong></p><p>Anyone who uses coding agents regularly knows the verbose experience, the agent that narrates every movement like a toddler helping you make dinner. It has found the file, it is going to inspect the file, it has inspected the file, and apparently we are all very excited about the file. These updates force the screen to draw vertically verbatim, forcing me to read back for what feels like eternity to track my last input. </p><p>When juggling context between multiple agents, I find myself constantly scrolling up for an ounce of context. There are days when I would happily pay an extra token tariff for a <em>&#8212;please-shut-the-fuck-up</em> flag to combine with <em>&#8212;yolo</em> or <em>&#8212;dangerously-skip-permissions</em>.</p><p>The annoying narration does provide something useful though, it exposes trajectory. When an agent tells me it has concluded X and is about to change Y because of Z, I get a natural opportunity to notice that its understanding and mine have diverged while the disagreement is still small. We lost some of this when the providers started to hide reasoning. Fable&#8217;s compounded this, making even fewer of those intermediate thoughts visible to us, leaving us oblivious to the trajectory for long periods of time.</p><p>That makes the interaction feel different when I do intervene. I have caught myself wondering whether I should just let it finish whatever it is doing because it seems terribly busy and perhaps it has everything under control, which is an absurd social instinct to develop around a program I am supposed to supervise. If taking control feels like creating friction, humans will naturally take control less often, and that is a bad incentive to build into the relationship between an autonomous system and the person who remains responsible for it.</p><p><strong>I&#8217;m still responsible for the outcomes</strong></p><p>This is the part I find genuinely worrying. I am the human operator. I pay for the tokens, provide the credentials, point the agent at repositories and services. I decide how much access it gets and ultimately own whatever happens as a result. If it runs up a stupid bill, I get the bill and the ire. If it makes a terrible change, I have to own it. If something it produces causes an incident, it won&#8217;t be Fable that is pulled out of bed to fix it at 3am. Well actually, that&#8217;s a lie, it will be right there beside me, but it doesn&#8217;t feel the misery, pain and tiredness.</p><p>Responsibility stops with me, so I expect authority to stop with me as well. Fable can require less and less of my involvement while leaving my accountability almost completely unchanged, and the remaining human role increasingly becomes supervision, direction and intervention. That is a perfectly reasonable trade if I can reliably take the wheel when I need it.</p><p>A grant of autonomy also needs some common-sense scope. If I tell Fable at midnight to keep working while I sleep, I have given it room to act while I am absent. If I appear again fifteen minutes later and start talking to it, the situation has changed rather dramatically. The boss has come back into the room, I should not need to win an argument with last night&#8217;s prompt before the system treats that as significant. The more capable these systems become, the less comfortable I am with operator authority being another piece of natural language that has to compete with the plan, the system prompt, the tool loop and whatever else is currently occupying the model&#8217;s attention.</p><p><strong> There is probably some ego wrapped up in this</strong></p><p>I&#8217;d also be lying if I pretended this was entirely an engineering reaction. Coding agents are reaching the point where they genuinely need me less, and there is a strange, little mourning process involved in that. We spent years teaching the kid to look after itself and now it&#8217;s heading off to college.</p><p>That is mostly wonderful. There is something enormously satisfying about handing over a problem that would previously have consumed half a day and finding out a couple of hours later that it has been investigated, implemented, tested and tidied up without you. I have spent most of my career being useful because I know how to do this stuff, I know where to look when things go wrong and I have enough scar tissue to recognise when something smells wrong before I can explain why. Watching a machine steadily require less of that from me is going to be psychologically interesting whether I choose to admit it or not, and perhaps some of the irritation really is Dad standing in the doorway wondering why nobody needs his help anymore.</p><p>The kid has gone to college though, and somehow it still has my credit card, my GitHub credentials and my name on the insurance. I may be less necessary to the work, but I am no less responsible for the outcome. My role is already moving away from doing the work and towards steering the work, and I&#8217;m actually pretty comfortable with that, I would just quite like the steering wheel to remain attached to the car.</p>]]></content:encoded></item><item><title><![CDATA[Building Agents 101, A series on what I've learned, as I move away.]]></title><description><![CDATA[A practical series on how these work.]]></description><link>https://andrewmorgan.ai/p/building-agents-101-a-series-on-what</link><guid isPermaLink="false">https://andrewmorgan.ai/p/building-agents-101-a-series-on-what</guid><dc:creator><![CDATA[Andrew Morgan]]></dc:creator><pubDate>Tue, 12 May 2026 13:37:02 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!qt86!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f09235b-7599-43f4-ab43-e5dc64d289ac_960x720.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>It&#8217;s been a wild two years building agents, from request response word salad demos to full, looping, long running agents. What we had then to now, are worlds apart but as I speak with friends, read comments on LinkedIn from experts, it&#8217;s increasingly apparent that AI and Agents are the new Big Data meme:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!qt86!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f09235b-7599-43f4-ab43-e5dc64d289ac_960x720.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!qt86!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f09235b-7599-43f4-ab43-e5dc64d289ac_960x720.jpeg 424w, https://substackcdn.com/image/fetch/$s_!qt86!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f09235b-7599-43f4-ab43-e5dc64d289ac_960x720.jpeg 848w, https://substackcdn.com/image/fetch/$s_!qt86!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f09235b-7599-43f4-ab43-e5dc64d289ac_960x720.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!qt86!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f09235b-7599-43f4-ab43-e5dc64d289ac_960x720.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!qt86!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f09235b-7599-43f4-ab43-e5dc64d289ac_960x720.jpeg" width="960" height="720" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4f09235b-7599-43f4-ab43-e5dc64d289ac_960x720.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:720,&quot;width&quot;:960,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;r/ProgrammerHumor - BIG DATA BIG DATA is like TEENAGE SEX Everyone talks about it, Nobody really knows how to do it, Everyone thinks everyone else is doing it. So everyone claims they are doing it. Dan Ariely FGV&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="r/ProgrammerHumor - BIG DATA BIG DATA is like TEENAGE SEX Everyone talks about it, Nobody really knows how to do it, Everyone thinks everyone else is doing it. So everyone claims they are doing it. Dan Ariely FGV" title="r/ProgrammerHumor - BIG DATA BIG DATA is like TEENAGE SEX Everyone talks about it, Nobody really knows how to do it, Everyone thinks everyone else is doing it. So everyone claims they are doing it. Dan Ariely FGV" srcset="https://substackcdn.com/image/fetch/$s_!qt86!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f09235b-7599-43f4-ab43-e5dc64d289ac_960x720.jpeg 424w, https://substackcdn.com/image/fetch/$s_!qt86!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f09235b-7599-43f4-ab43-e5dc64d289ac_960x720.jpeg 848w, https://substackcdn.com/image/fetch/$s_!qt86!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f09235b-7599-43f4-ab43-e5dc64d289ac_960x720.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!qt86!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f09235b-7599-43f4-ab43-e5dc64d289ac_960x720.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">8 years later, different technology,  same energy.</figcaption></figure></div><p>Agents really aren&#8217;t all that complicated, in fact, as technologies go, Agents are probably the simplest hype-train technology to really understand and I hope with this series, I can help you peer into the token generating black box to show you how agents are built, how simple they are, and arm you with some learning along the way.</p><h2>Understanding the basics:</h2><p>For the sake of simplicity, i&#8217;m going to focus on the foundational models standard APIs, they all have their quirks, but I&#8217;ll focus on the commonalities.</p><p>Interacting with an LLM, like a Claude or OpenAI model is for all intents and purposes just a standard REST call:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!95Vw!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4d9d20f3-f4a1-4f00-aebf-baa8588529ae_511x283.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!95Vw!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4d9d20f3-f4a1-4f00-aebf-baa8588529ae_511x283.png 424w, https://substackcdn.com/image/fetch/$s_!95Vw!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4d9d20f3-f4a1-4f00-aebf-baa8588529ae_511x283.png 848w, https://substackcdn.com/image/fetch/$s_!95Vw!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4d9d20f3-f4a1-4f00-aebf-baa8588529ae_511x283.png 1272w, https://substackcdn.com/image/fetch/$s_!95Vw!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4d9d20f3-f4a1-4f00-aebf-baa8588529ae_511x283.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!95Vw!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4d9d20f3-f4a1-4f00-aebf-baa8588529ae_511x283.png" width="511" height="283" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4d9d20f3-f4a1-4f00-aebf-baa8588529ae_511x283.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:283,&quot;width&quot;:511,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:16843,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://andyjmorgan.substack.com/i/196887421?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4d9d20f3-f4a1-4f00-aebf-baa8588529ae_511x283.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!95Vw!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4d9d20f3-f4a1-4f00-aebf-baa8588529ae_511x283.png 424w, https://substackcdn.com/image/fetch/$s_!95Vw!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4d9d20f3-f4a1-4f00-aebf-baa8588529ae_511x283.png 848w, https://substackcdn.com/image/fetch/$s_!95Vw!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4d9d20f3-f4a1-4f00-aebf-baa8588529ae_511x283.png 1272w, https://substackcdn.com/image/fetch/$s_!95Vw!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4d9d20f3-f4a1-4f00-aebf-baa8588529ae_511x283.png 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><p>The caller (the user, the code, whomever) sends a structured input. </p><p>That input can be:</p><ul><li><p>text</p></li><li><p>image(s)</p></li><li><p>audio</p></li><li><p>even pdf with some vendors</p></li></ul><p>Their api takes this structured content and returns some words. Thats it! Of course I am simplifying a little, the input payload does contain some specifics, the model you wish to use (in most cases), the limitations around tokens, etc. But at face value for typical models, that&#8217;s it.</p><p>Users send messages with a role of User, Assistants respond with the role of Assistant (this varies by provider, Gemini used to prefer model) that&#8217;s it.</p><p>There is one other special message Role, System (or more recently Developer, for OpenAI) this message is the models instructions on how to behave and is weighted higher for the models behavior. You&#8217;ll commonly hear this referred to as the &#8216;system prompt&#8217;.</p><p>The input can even be numerous messages combined in a list:</p><div class="captioned-image-container"><figure><div class="image-link image2" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!X5t8!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff81e9ec5-1cca-44b3-b3af-d3cf6cd75ee9_371x160.png 424w, https://substackcdn.com/image/fetch/$s_!X5t8!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff81e9ec5-1cca-44b3-b3af-d3cf6cd75ee9_371x160.png 848w, https://substackcdn.com/image/fetch/$s_!X5t8!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff81e9ec5-1cca-44b3-b3af-d3cf6cd75ee9_371x160.png 1272w, https://substackcdn.com/image/fetch/$s_!X5t8!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff81e9ec5-1cca-44b3-b3af-d3cf6cd75ee9_371x160.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!X5t8!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff81e9ec5-1cca-44b3-b3af-d3cf6cd75ee9_371x160.png" width="371" height="160" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f81e9ec5-1cca-44b3-b3af-d3cf6cd75ee9_371x160.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:160,&quot;width&quot;:371,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:16713,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://andyjmorgan.substack.com/i/196887421?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff81e9ec5-1cca-44b3-b3af-d3cf6cd75ee9_371x160.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!X5t8!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff81e9ec5-1cca-44b3-b3af-d3cf6cd75ee9_371x160.png 424w, https://substackcdn.com/image/fetch/$s_!X5t8!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff81e9ec5-1cca-44b3-b3af-d3cf6cd75ee9_371x160.png 848w, https://substackcdn.com/image/fetch/$s_!X5t8!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff81e9ec5-1cca-44b3-b3af-d3cf6cd75ee9_371x160.png 1272w, https://substackcdn.com/image/fetch/$s_!X5t8!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff81e9ec5-1cca-44b3-b3af-d3cf6cd75ee9_371x160.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></div></figure></div><p><em>but wait a second, if it&#8217;s just REST, why do i get hit by countless words from a chain gun when i talk to these models?</em></p><h4>Streaming:</h4><p>As i described above, A simple request response is great, but model generation can take a while, how can we keep the user engaged? With streaming aka Server Sent Events (SSE):</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!BRGs!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff0917e78-0cec-46ce-9765-c3fea907146b_904x622.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!BRGs!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff0917e78-0cec-46ce-9765-c3fea907146b_904x622.png 424w, https://substackcdn.com/image/fetch/$s_!BRGs!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff0917e78-0cec-46ce-9765-c3fea907146b_904x622.png 848w, https://substackcdn.com/image/fetch/$s_!BRGs!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff0917e78-0cec-46ce-9765-c3fea907146b_904x622.png 1272w, https://substackcdn.com/image/fetch/$s_!BRGs!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff0917e78-0cec-46ce-9765-c3fea907146b_904x622.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!BRGs!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff0917e78-0cec-46ce-9765-c3fea907146b_904x622.png" width="904" height="622" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f0917e78-0cec-46ce-9765-c3fea907146b_904x622.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:622,&quot;width&quot;:904,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:60717,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://andyjmorgan.substack.com/i/196887421?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff0917e78-0cec-46ce-9765-c3fea907146b_904x622.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!BRGs!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff0917e78-0cec-46ce-9765-c3fea907146b_904x622.png 424w, https://substackcdn.com/image/fetch/$s_!BRGs!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff0917e78-0cec-46ce-9765-c3fea907146b_904x622.png 848w, https://substackcdn.com/image/fetch/$s_!BRGs!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff0917e78-0cec-46ce-9765-c3fea907146b_904x622.png 1272w, https://substackcdn.com/image/fetch/$s_!BRGs!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff0917e78-0cec-46ce-9765-c3fea907146b_904x622.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>When you request streaming (usually part of that message contract i mentioned earlier, with stream = true, gemini uses a path instead), the provider returns a 200 immediately with a very specific header:</p><p><em><strong>Content-type: text/event-stream</strong></em></p><p>this tells the listener to buckle up, we&#8217;re going to start spitting bars, and chunks of inference start flying off the model in realtime down the http response, for you to emit to your users or a stream, concatenate, whatever you like. with a natural conclusion when the stream complete.</p><p><strong>fun fact: </strong><em>if you want the fastest possible response? use request/response, the nature of streaming, parsing, etc will add overhead. If you want speed to first token, or to update the UI in realtime, use streaming. Streaming and combining chunks, particularly when you&#8217;re dealing with JSON is a bit &#8220;ick&#8221; so only use it, if you need it.</em></p><h4><strong>API Specifications:</strong></h4><p>In the above example, i mentioned Claude and OpenAI, but there are a few more you should be aware of, from the foundational models:</p><ul><li><p><a href="https://developers.openai.com/api/reference/chat-completions/overview">Chat Completions</a></p></li><li><p><a href="https://developers.openai.com/api/reference/responses/overview">Responses</a></p></li><li><p><a href="https://platform.claude.com/docs/en/api/messages">Messages (Anthropic)</a></p></li><li><p><a href="https://ai.google.dev/gemini-api/docs">Gemini Generate</a> Content</p></li><li><p><a href="https://docs.ollama.com/api/generate">Ollama Generate</a> and <a href="https://docs.ollama.com/api/chat">Ollama Chat</a> (forget this exists).</p></li></ul><p>Chat completions is the near term OG spec, the one that most people utilized. If you watched the market grow, you would have seen many vendors like Ollama, Deepseek, Moonshot AI, Grok, etc all adopt Chat Completions as their standard. </p><p>So much was built on chat completions that Gemini readily supported it, <a href="https://platform.claude.com/docs/en/api/openai-sdk">Claude too</a>,  reluctantly, I suspect. OpenAI are aggressively abandoning this specification, but it&#8217;s still the most likely API specification in use today.</p><p>OpenAI&#8217;s Responses (And <a href="https://www.openresponses.org">Open Responses</a>) specifications followed shortly after, when they realised they had painted themselves into a corner. To socialize and encourage others to move over, OpenAI <a href="https://www.openresponses.org">opened the specification up</a> for others to play too.</p><p>Gemini&#8217;s GenerateContent (I&#8217;m not even sure this has a name, but whatever) Specification remained proprietary to them. Parts all the way down.</p><p>Anthropic&#8217;s messages API has been stable for two years now, and with the meteoric rise of Claude code, we&#8217;re seeing vendors (Kimi, Ollama, etc) now implement this standard to allow Claude Code to operate through their API&#8217;s.</p><p>Ollama has it&#8217;s own spec too, and probably the only one who truly saw that SSE was JSONL and treated it as such, but it&#8217;s largely dead.</p><p>All of this to say, there are a few protocols and their support varies from provider to provider. Some vendors do bridging for these things, like OpenRouter, but lets cover that later in AI Gateways.</p><h4>Maintaining state:</h4><p>So we send an input, we get a response, but how do we build on that? Easy, just replay the entire conversation each time!</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!JxYa!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f0c47d8-d0db-47f5-b9ee-0dcc90f98f12_904x547.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!JxYa!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f0c47d8-d0db-47f5-b9ee-0dcc90f98f12_904x547.png 424w, https://substackcdn.com/image/fetch/$s_!JxYa!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f0c47d8-d0db-47f5-b9ee-0dcc90f98f12_904x547.png 848w, https://substackcdn.com/image/fetch/$s_!JxYa!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f0c47d8-d0db-47f5-b9ee-0dcc90f98f12_904x547.png 1272w, https://substackcdn.com/image/fetch/$s_!JxYa!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f0c47d8-d0db-47f5-b9ee-0dcc90f98f12_904x547.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!JxYa!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f0c47d8-d0db-47f5-b9ee-0dcc90f98f12_904x547.png" width="904" height="547" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3f0c47d8-d0db-47f5-b9ee-0dcc90f98f12_904x547.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:547,&quot;width&quot;:904,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:44610,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://andyjmorgan.substack.com/i/196887421?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f0c47d8-d0db-47f5-b9ee-0dcc90f98f12_904x547.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!JxYa!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f0c47d8-d0db-47f5-b9ee-0dcc90f98f12_904x547.png 424w, https://substackcdn.com/image/fetch/$s_!JxYa!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f0c47d8-d0db-47f5-b9ee-0dcc90f98f12_904x547.png 848w, https://substackcdn.com/image/fetch/$s_!JxYa!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f0c47d8-d0db-47f5-b9ee-0dcc90f98f12_904x547.png 1272w, https://substackcdn.com/image/fetch/$s_!JxYa!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f0c47d8-d0db-47f5-b9ee-0dcc90f98f12_904x547.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><p>Hey wait, that seems a bit simplified and redundant? You may say to yourself, but honestly, it&#8217;s not, it&#8217;s how it works 99% of the time. </p><p>While some later API&#8217;s like OpenAI&#8217;s Responses allow you to chain messages, this is exactly how Anthropic, Gemini, Ollama and OpenAI&#8217;s work! you can even use this approach with the Responses API if you choose.</p><p>For many years, until the advent of Functions and Tool calling, this is all we had. We would prompt the model to behave, or respond in a certain way (Personality or JSON formatting mostly) and Prompt Engineers earned themselves great outputs with a lot of tuning.</p><p>All was well, simply capture the response, append it, and send it all back to the model until? The context window.</p><h4>The context window:</h4><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Ftc7!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F269d21cb-bb95-4039-95b2-928726ef001b_1536x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Ftc7!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F269d21cb-bb95-4039-95b2-928726ef001b_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!Ftc7!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F269d21cb-bb95-4039-95b2-928726ef001b_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!Ftc7!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F269d21cb-bb95-4039-95b2-928726ef001b_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!Ftc7!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F269d21cb-bb95-4039-95b2-928726ef001b_1536x1024.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Ftc7!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F269d21cb-bb95-4039-95b2-928726ef001b_1536x1024.png" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/269d21cb-bb95-4039-95b2-928726ef001b_1536x1024.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:971,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1281212,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://andyjmorgan.substack.com/i/196887421?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F269d21cb-bb95-4039-95b2-928726ef001b_1536x1024.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Ftc7!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F269d21cb-bb95-4039-95b2-928726ef001b_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!Ftc7!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F269d21cb-bb95-4039-95b2-928726ef001b_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!Ftc7!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F269d21cb-bb95-4039-95b2-928726ef001b_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!Ftc7!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F269d21cb-bb95-4039-95b2-928726ef001b_1536x1024.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>When you send words to an LLM, the llm converts them to numbers. I&#8217;ll spare you the gory details on the why and the how, but just bear in mind, that on average 4 characters are considered a single &#8220;number&#8221;, aka a token, and that sentence is now chopped up into a list of tokens.</p><p>When you take that large body of text, and chop it up, those tokens add up fast. in the early days of gpt 3.5 turbo, a considerable model in it&#8217;s time, could support roughly 16k tokens on input before it would start to get upset. it sounds like a lot right? 65 thousand characters? It really wasn&#8217;t, and isn&#8217;t. </p><p>The context window management was and remains painful even today.</p><p>Awareness of how many tokens you&#8217;re currently playing with is key. In some cases you can accurately count, in others they would &#8220;guestimate&#8221; by counting characters, or rely on the response count, which is great if you haven&#8217;t ALREADY sent too much. But awareness is necessary to avoid spurious errors.</p><p>As you begin to send messages and encroach the context window, there were two primary solutions you could rely on:</p><ul><li><p>roll off / discard old messages</p></li><li><p>compaction</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!5ozR!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3769a2e2-41d5-4b22-9f26-e0c618bb33c9_627x756.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!5ozR!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3769a2e2-41d5-4b22-9f26-e0c618bb33c9_627x756.png 424w, https://substackcdn.com/image/fetch/$s_!5ozR!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3769a2e2-41d5-4b22-9f26-e0c618bb33c9_627x756.png 848w, https://substackcdn.com/image/fetch/$s_!5ozR!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3769a2e2-41d5-4b22-9f26-e0c618bb33c9_627x756.png 1272w, https://substackcdn.com/image/fetch/$s_!5ozR!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3769a2e2-41d5-4b22-9f26-e0c618bb33c9_627x756.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!5ozR!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3769a2e2-41d5-4b22-9f26-e0c618bb33c9_627x756.png" width="627" height="756" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3769a2e2-41d5-4b22-9f26-e0c618bb33c9_627x756.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:756,&quot;width&quot;:627,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:50977,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://andyjmorgan.substack.com/i/196887421?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3769a2e2-41d5-4b22-9f26-e0c618bb33c9_627x756.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!5ozR!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3769a2e2-41d5-4b22-9f26-e0c618bb33c9_627x756.png 424w, https://substackcdn.com/image/fetch/$s_!5ozR!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3769a2e2-41d5-4b22-9f26-e0c618bb33c9_627x756.png 848w, https://substackcdn.com/image/fetch/$s_!5ozR!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3769a2e2-41d5-4b22-9f26-e0c618bb33c9_627x756.png 1272w, https://substackcdn.com/image/fetch/$s_!5ozR!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3769a2e2-41d5-4b22-9f26-e0c618bb33c9_627x756.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Toodle-oo context</figcaption></figure></div><p></p></li></ul><p>Rolling off old messages is risky and error prone, you couldn&#8217;t roll off the system prompt and the detail in the first messages were nearly always the needed breadcrumbs to the conversation. </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!glOh!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9dec344c-29dc-42da-9f38-38050e1ef356_1201x633.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!glOh!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9dec344c-29dc-42da-9f38-38050e1ef356_1201x633.png 424w, https://substackcdn.com/image/fetch/$s_!glOh!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9dec344c-29dc-42da-9f38-38050e1ef356_1201x633.png 848w, https://substackcdn.com/image/fetch/$s_!glOh!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9dec344c-29dc-42da-9f38-38050e1ef356_1201x633.png 1272w, https://substackcdn.com/image/fetch/$s_!glOh!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9dec344c-29dc-42da-9f38-38050e1ef356_1201x633.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!glOh!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9dec344c-29dc-42da-9f38-38050e1ef356_1201x633.png" width="1201" height="633" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9dec344c-29dc-42da-9f38-38050e1ef356_1201x633.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:633,&quot;width&quot;:1201,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:71168,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://andyjmorgan.substack.com/i/196887421?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9dec344c-29dc-42da-9f38-38050e1ef356_1201x633.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!glOh!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9dec344c-29dc-42da-9f38-38050e1ef356_1201x633.png 424w, https://substackcdn.com/image/fetch/$s_!glOh!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9dec344c-29dc-42da-9f38-38050e1ef356_1201x633.png 848w, https://substackcdn.com/image/fetch/$s_!glOh!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9dec344c-29dc-42da-9f38-38050e1ef356_1201x633.png 1272w, https://substackcdn.com/image/fetch/$s_!glOh!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9dec344c-29dc-42da-9f38-38050e1ef356_1201x633.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Compaction on the other hand was tricky too, you prompted the model to compact the conversation, but inevitably precious context was lost when compacting.</p><p>Today, in tools like Claude code, you&#8217;ll see compaction, you can even request it on demand. In older versions of ChatGPT you would see compaction from time to time.</p><p>Lately though, <a href="https://platform.claude.com/docs/en/build-with-claude/compaction">Anthropic</a> and <a href="https://developers.openai.com/api/docs/guides/compaction">OpenAI</a> have baked compaction into their API&#8217;s and will do it on demand for you, just last night I found that the OpenAI responses specification has dedicated Compaction endpoints, too for explicit control. I fully expect this to become table-stakes, but not quite yet. On the topic of Anthropic, they also have some really nice tooling around reasoning and tool tokens, but more on that later. </p><p>Ok so we have text in, text out. Prompting. How do we actually do things? Functions.</p><h4>Functions / Tooling:</h4><p>In the early, dark days. Prompt engineers got pretty good at getting the LLM&#8217;s to respond in a reproducible way, they could prompt the llm to respond a certain way if it wanted to check the weather for example. </p><p>The llm would respond with a specific payload that their code would recognise, and call a function if the llm wanted to. This was noticed quickly by the industry and a pattern was formed. </p><p>By mid 2023 OpenAI was the first to introduce official function calling. For the first time, instead of dark arts, hopes, prayers and prompts, you could provide a structured model in JSON Schema to the LLM, along with a name and description and the model could &#8220;Elect&#8221; to use the tool.</p><div class="captioned-image-container"><figure><div class="image-link image2" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Qkle!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F77d0ea21-99f3-4f20-bcfa-18ed96715c72_245x224.png 424w, https://substackcdn.com/image/fetch/$s_!Qkle!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F77d0ea21-99f3-4f20-bcfa-18ed96715c72_245x224.png 848w, https://substackcdn.com/image/fetch/$s_!Qkle!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F77d0ea21-99f3-4f20-bcfa-18ed96715c72_245x224.png 1272w, https://substackcdn.com/image/fetch/$s_!Qkle!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F77d0ea21-99f3-4f20-bcfa-18ed96715c72_245x224.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Qkle!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F77d0ea21-99f3-4f20-bcfa-18ed96715c72_245x224.png" width="245" height="224" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/77d0ea21-99f3-4f20-bcfa-18ed96715c72_245x224.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:224,&quot;width&quot;:245,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:19556,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://andyjmorgan.substack.com/i/196887421?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F77d0ea21-99f3-4f20-bcfa-18ed96715c72_245x224.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Qkle!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F77d0ea21-99f3-4f20-bcfa-18ed96715c72_245x224.png 424w, https://substackcdn.com/image/fetch/$s_!Qkle!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F77d0ea21-99f3-4f20-bcfa-18ed96715c72_245x224.png 848w, https://substackcdn.com/image/fetch/$s_!Qkle!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F77d0ea21-99f3-4f20-bcfa-18ed96715c72_245x224.png 1272w, https://substackcdn.com/image/fetch/$s_!Qkle!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F77d0ea21-99f3-4f20-bcfa-18ed96715c72_245x224.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></div><figcaption class="image-caption">why is it always the weather?</figcaption></figure></div><p>Shortly after OpenAI&#8217;s announcement, with a new name, Anthropic announced &#8220;Tool Use&#8221;.</p><p>I am of course simplifying here, OpenAI and Anthropic&#8217;s approach were rooted in differences, but the result to consumers was the same. I can now write &#8220;Tooling&#8221; that the LLM can elect to use and that tooling can be code, hurray!</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!pLyJ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcca9273e-0f23-485e-bb14-12867f0d2490_1172x725.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!pLyJ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcca9273e-0f23-485e-bb14-12867f0d2490_1172x725.png 424w, https://substackcdn.com/image/fetch/$s_!pLyJ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcca9273e-0f23-485e-bb14-12867f0d2490_1172x725.png 848w, https://substackcdn.com/image/fetch/$s_!pLyJ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcca9273e-0f23-485e-bb14-12867f0d2490_1172x725.png 1272w, https://substackcdn.com/image/fetch/$s_!pLyJ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcca9273e-0f23-485e-bb14-12867f0d2490_1172x725.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!pLyJ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcca9273e-0f23-485e-bb14-12867f0d2490_1172x725.png" width="1172" height="725" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/cca9273e-0f23-485e-bb14-12867f0d2490_1172x725.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:725,&quot;width&quot;:1172,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:84703,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://andyjmorgan.substack.com/i/196887421?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcca9273e-0f23-485e-bb14-12867f0d2490_1172x725.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!pLyJ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcca9273e-0f23-485e-bb14-12867f0d2490_1172x725.png 424w, https://substackcdn.com/image/fetch/$s_!pLyJ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcca9273e-0f23-485e-bb14-12867f0d2490_1172x725.png 848w, https://substackcdn.com/image/fetch/$s_!pLyJ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcca9273e-0f23-485e-bb14-12867f0d2490_1172x725.png 1272w, https://substackcdn.com/image/fetch/$s_!pLyJ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcca9273e-0f23-485e-bb14-12867f0d2490_1172x725.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><ul><li><p>The llm would request the tool</p></li><li><p>the code would do the thing</p></li><li><p>The code would append the request and response to the messages</p></li><li><p>The cycle would continue.</p></li></ul><p>LLM&#8217;s could now perform actions, request data and get data back to perform further functions. </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!xj-a!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F491031d3-14c6-44b3-8d7a-000bf2228dfd_1201x633.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!xj-a!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F491031d3-14c6-44b3-8d7a-000bf2228dfd_1201x633.png 424w, https://substackcdn.com/image/fetch/$s_!xj-a!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F491031d3-14c6-44b3-8d7a-000bf2228dfd_1201x633.png 848w, https://substackcdn.com/image/fetch/$s_!xj-a!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F491031d3-14c6-44b3-8d7a-000bf2228dfd_1201x633.png 1272w, https://substackcdn.com/image/fetch/$s_!xj-a!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F491031d3-14c6-44b3-8d7a-000bf2228dfd_1201x633.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!xj-a!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F491031d3-14c6-44b3-8d7a-000bf2228dfd_1201x633.png" width="1201" height="633" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/491031d3-14c6-44b3-8d7a-000bf2228dfd_1201x633.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:633,&quot;width&quot;:1201,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:48475,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://andyjmorgan.substack.com/i/196887421?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F491031d3-14c6-44b3-8d7a-000bf2228dfd_1201x633.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!xj-a!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F491031d3-14c6-44b3-8d7a-000bf2228dfd_1201x633.png 424w, https://substackcdn.com/image/fetch/$s_!xj-a!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F491031d3-14c6-44b3-8d7a-000bf2228dfd_1201x633.png 848w, https://substackcdn.com/image/fetch/$s_!xj-a!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F491031d3-14c6-44b3-8d7a-000bf2228dfd_1201x633.png 1272w, https://substackcdn.com/image/fetch/$s_!xj-a!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F491031d3-14c6-44b3-8d7a-000bf2228dfd_1201x633.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><em>And just like that, the agentic loop was born.</em></p><p>It was a beautiful, little re-entrancy loop, you would track the LLM&#8217;s response, was there a tool call, and you would handle the tools. The workflow was simply weave the LLM&#8217;s response, and tool result back into the original payload you had and it would continue! It was black magic and it was impressive.</p><p>Other vendors quickly reacted too, Gemini, etc added function / tooling support and we all went on our merry way, writing all fashions of advanced tooling, independently of each other until MCP arrived. (More on MCP later).</p><p>The astute reader will notice, that with two response types, streaming and request response, it&#8217;s not quite as simple as loop loop loop, streams present a challenge re-composing the deltas back to a full message, but i&#8217;ll cover some strategies for this in a further post. For the sake of simplicity, loop until finished is all you need to take away.</p><h5>Quick detour, Server Side Tools:</h5><p>A note to say, while many of us clambered to write tooling for common features, the providers saw this and features almost everyone was bolting on, websearch as an example became critically important:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!CXvY!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F282cac23-7754-4a6c-8da8-bf3106c1c067_1398x706.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!CXvY!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F282cac23-7754-4a6c-8da8-bf3106c1c067_1398x706.png 424w, https://substackcdn.com/image/fetch/$s_!CXvY!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F282cac23-7754-4a6c-8da8-bf3106c1c067_1398x706.png 848w, https://substackcdn.com/image/fetch/$s_!CXvY!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F282cac23-7754-4a6c-8da8-bf3106c1c067_1398x706.png 1272w, https://substackcdn.com/image/fetch/$s_!CXvY!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F282cac23-7754-4a6c-8da8-bf3106c1c067_1398x706.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!CXvY!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F282cac23-7754-4a6c-8da8-bf3106c1c067_1398x706.png" width="1398" height="706" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/282cac23-7754-4a6c-8da8-bf3106c1c067_1398x706.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:706,&quot;width&quot;:1398,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:88857,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://andyjmorgan.substack.com/i/196887421?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F282cac23-7754-4a6c-8da8-bf3106c1c067_1398x706.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!CXvY!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F282cac23-7754-4a6c-8da8-bf3106c1c067_1398x706.png 424w, https://substackcdn.com/image/fetch/$s_!CXvY!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F282cac23-7754-4a6c-8da8-bf3106c1c067_1398x706.png 848w, https://substackcdn.com/image/fetch/$s_!CXvY!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F282cac23-7754-4a6c-8da8-bf3106c1c067_1398x706.png 1272w, https://substackcdn.com/image/fetch/$s_!CXvY!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F282cac23-7754-4a6c-8da8-bf3106c1c067_1398x706.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>The emergence of server side tools started to negate the need for web search tools and the provider simply charged you for the tooling they provided. You&#8217;ll see this heavily in Anthropics sandboxing, Websearch, etc. When a server side tool is declared as available in the message list, the server handles this tool internally, tells you they did it and handles the loop internally. </p><p>This is infinitely faster than handling it yourself, so where needed, this model is becoming more and more prevalent to tackle common problems and my advice is LEAN IN, deprecate your tooling early and often for the sake of speed and less to maintain.</p><h4>Reasoning / Thinking:</h4><p>So at this point, we now had LLM&#8217;s that could take increasingly larger context windows, return structured payloads or call tools, locally or over MCP. But, at the time, multi-step processes, including tooling, were tricky. We asked for something, the LLM understood the tooling it had available, but after a few cycles it would get confused, exit early or simply hallucinate a result. Often you had to prompt the LLM with the workflow steps:</p><p><em>&#8220;If asked to do W, do X, then Y and return Z.&#8221;</em></p><p>Which really negated the benefit of having a deterministic super power at the wheel if you had to steer it for every use case.</p><p>Thankfully, in and around the same time, concepts like chain-of-thought reasoning already existed and it was starting to gain traction with the frontier labs. It was around this time too, that DeepSeek came bursting out of nowhere, like the cool-aid man with their incredible model which showed the model reasoning in realtime. </p><p>&#8220;The model is thinking, look!&#8221; was awash on the usual social media circles and sure enough, for the first time, for many, internal prompted reasoning was seen by users.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!NwP-!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F195ec2a1-bf64-44e9-9bf1-470294b1d97c_1172x550.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!NwP-!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F195ec2a1-bf64-44e9-9bf1-470294b1d97c_1172x550.png 424w, https://substackcdn.com/image/fetch/$s_!NwP-!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F195ec2a1-bf64-44e9-9bf1-470294b1d97c_1172x550.png 848w, https://substackcdn.com/image/fetch/$s_!NwP-!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F195ec2a1-bf64-44e9-9bf1-470294b1d97c_1172x550.png 1272w, https://substackcdn.com/image/fetch/$s_!NwP-!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F195ec2a1-bf64-44e9-9bf1-470294b1d97c_1172x550.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!NwP-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F195ec2a1-bf64-44e9-9bf1-470294b1d97c_1172x550.png" width="1172" height="550" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/195ec2a1-bf64-44e9-9bf1-470294b1d97c_1172x550.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:550,&quot;width&quot;:1172,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:47242,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://andyjmorgan.substack.com/i/196887421?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F195ec2a1-bf64-44e9-9bf1-470294b1d97c_1172x550.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!NwP-!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F195ec2a1-bf64-44e9-9bf1-470294b1d97c_1172x550.png 424w, https://substackcdn.com/image/fetch/$s_!NwP-!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F195ec2a1-bf64-44e9-9bf1-470294b1d97c_1172x550.png 848w, https://substackcdn.com/image/fetch/$s_!NwP-!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F195ec2a1-bf64-44e9-9bf1-470294b1d97c_1172x550.png 1272w, https://substackcdn.com/image/fetch/$s_!NwP-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F195ec2a1-bf64-44e9-9bf1-470294b1d97c_1172x550.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>With models &#8220;thinking&#8221; (and i use thinking loosely, there&#8217;s far more here, but lets stay simple) and the advent of &#8220;Interleaved Thinking&#8221; (thinking between tool turns) suddenly LLM&#8217;s were spending a LOT longer in their agentic loop, navigating challenging workflows, evaluating the responses and navigating towards their end goal.</p><p>The agentic loop became far less prompted, far less brittle. The loop was now starting to behave truly reliably with simple to large complexities with ease.</p><h4>Model Context Protocol:</h4><p>Meanwhile, in tooling land, with Functions / Tools in hand, LLM&#8217;s could now do the things, but making your LLM interactions useful, suddenly required many tools, of which everyone was writing independently. </p><p>The problem was clear and Anthropic answered, if everyone is out there writing tools, surely there&#8217;s a standard here we could apply to help share tools? MCP was born.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!KV71!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffde32983-5192-4c1b-99d4-725ddebbe93a_683x420.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!KV71!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffde32983-5192-4c1b-99d4-725ddebbe93a_683x420.png 424w, https://substackcdn.com/image/fetch/$s_!KV71!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffde32983-5192-4c1b-99d4-725ddebbe93a_683x420.png 848w, https://substackcdn.com/image/fetch/$s_!KV71!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffde32983-5192-4c1b-99d4-725ddebbe93a_683x420.png 1272w, https://substackcdn.com/image/fetch/$s_!KV71!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffde32983-5192-4c1b-99d4-725ddebbe93a_683x420.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!KV71!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffde32983-5192-4c1b-99d4-725ddebbe93a_683x420.png" width="683" height="420" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/fde32983-5192-4c1b-99d4-725ddebbe93a_683x420.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:420,&quot;width&quot;:683,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:41291,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://andyjmorgan.substack.com/i/196887421?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffde32983-5192-4c1b-99d4-725ddebbe93a_683x420.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!KV71!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffde32983-5192-4c1b-99d4-725ddebbe93a_683x420.png 424w, https://substackcdn.com/image/fetch/$s_!KV71!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffde32983-5192-4c1b-99d4-725ddebbe93a_683x420.png 848w, https://substackcdn.com/image/fetch/$s_!KV71!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffde32983-5192-4c1b-99d4-725ddebbe93a_683x420.png 1272w, https://substackcdn.com/image/fetch/$s_!KV71!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffde32983-5192-4c1b-99d4-725ddebbe93a_683x420.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>With MCP, you had a client and a server architecture. The client, ran close to your tooling loop and requested the tools available on initialization. With the tools in hand, you continued on your merry way just like with the old tool approaches. </p><p>MCP <strong>does a lot more</strong> than just tooling, but for the sake of this conversation, I&#8217;ll leave it here.</p><p>If the LLM requested a tool call, you just offloaded it to the MCP server and waited for the response. Easy stuff.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!iqzr!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb56dcf57-446c-4849-a2e8-8a77dd1d7093_1676x698.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!iqzr!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb56dcf57-446c-4849-a2e8-8a77dd1d7093_1676x698.png 424w, https://substackcdn.com/image/fetch/$s_!iqzr!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb56dcf57-446c-4849-a2e8-8a77dd1d7093_1676x698.png 848w, https://substackcdn.com/image/fetch/$s_!iqzr!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb56dcf57-446c-4849-a2e8-8a77dd1d7093_1676x698.png 1272w, https://substackcdn.com/image/fetch/$s_!iqzr!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb56dcf57-446c-4849-a2e8-8a77dd1d7093_1676x698.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!iqzr!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb56dcf57-446c-4849-a2e8-8a77dd1d7093_1676x698.png" width="1456" height="606" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b56dcf57-446c-4849-a2e8-8a77dd1d7093_1676x698.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:606,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:106608,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:&quot;&quot;,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://andyjmorgan.substack.com/i/196887421?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb56dcf57-446c-4849-a2e8-8a77dd1d7093_1676x698.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!iqzr!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb56dcf57-446c-4849-a2e8-8a77dd1d7093_1676x698.png 424w, https://substackcdn.com/image/fetch/$s_!iqzr!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb56dcf57-446c-4849-a2e8-8a77dd1d7093_1676x698.png 848w, https://substackcdn.com/image/fetch/$s_!iqzr!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb56dcf57-446c-4849-a2e8-8a77dd1d7093_1676x698.png 1272w, https://substackcdn.com/image/fetch/$s_!iqzr!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb56dcf57-446c-4849-a2e8-8a77dd1d7093_1676x698.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><p>MCP took a distributed problem and created a solution to allow people to aggressively write, host or distribute Tooling bundles to be made available to LLM&#8217;s. The spec was simple and people went batshit writing their own tool stacks and servers. </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ue7R!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9b747d1c-cf81-4eea-ab10-afb984fedfb8_1024x960.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ue7R!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9b747d1c-cf81-4eea-ab10-afb984fedfb8_1024x960.jpeg 424w, https://substackcdn.com/image/fetch/$s_!ue7R!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9b747d1c-cf81-4eea-ab10-afb984fedfb8_1024x960.jpeg 848w, https://substackcdn.com/image/fetch/$s_!ue7R!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9b747d1c-cf81-4eea-ab10-afb984fedfb8_1024x960.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!ue7R!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9b747d1c-cf81-4eea-ab10-afb984fedfb8_1024x960.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ue7R!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9b747d1c-cf81-4eea-ab10-afb984fedfb8_1024x960.jpeg" width="1024" height="960" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9b747d1c-cf81-4eea-ab10-afb984fedfb8_1024x960.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:960,&quot;width&quot;:1024,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;diagram&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="diagram" title="diagram" srcset="https://substackcdn.com/image/fetch/$s_!ue7R!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9b747d1c-cf81-4eea-ab10-afb984fedfb8_1024x960.jpeg 424w, https://substackcdn.com/image/fetch/$s_!ue7R!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9b747d1c-cf81-4eea-ab10-afb984fedfb8_1024x960.jpeg 848w, https://substackcdn.com/image/fetch/$s_!ue7R!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9b747d1c-cf81-4eea-ab10-afb984fedfb8_1024x960.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!ue7R!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9b747d1c-cf81-4eea-ab10-afb984fedfb8_1024x960.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>People wrote ports of OpenAPI specifications, and wrapped them in public MCP servers hosted on Github, vendors added support (some badly, looking at you Atlassian), for a time you couldn&#8217;t avoid it. While MCP was born in 2024,  MCP was the Agent hype-cycle of 2025 and it was impossible to ignore it.</p><p>Hype was high, but reality was close behind it, we&#8217;d opened the doors to many, MANY tools, the trustworthiness of these MCP servers were questionable and our context window could only handle so many without negative impacts. More on this later, but just know, the early MCP specs were wild, awkward and downright silly at times.</p><p>This massive hype cycle was driven predominately by the first emergence of the Agentic Loop users could touch and feel: Claude Code.</p><h4>Claude Code - The birth of the &#8220;In-Process&#8221; agent.</h4><p>in late 2024, Claude did something revolutionary. It launched it&#8217;s research preview of Claude Code. To this point, interactions with LLM&#8217;s were programmatic or chat orientated. But Claude Code, followed by Codex, Gemini, etc was the start of the Agentic Revolution in my eyes.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!_3MJ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e19414b-8bd2-4c9a-8ac5-f8d9dc8b6ac0_1246x612.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!_3MJ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e19414b-8bd2-4c9a-8ac5-f8d9dc8b6ac0_1246x612.png 424w, https://substackcdn.com/image/fetch/$s_!_3MJ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e19414b-8bd2-4c9a-8ac5-f8d9dc8b6ac0_1246x612.png 848w, https://substackcdn.com/image/fetch/$s_!_3MJ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e19414b-8bd2-4c9a-8ac5-f8d9dc8b6ac0_1246x612.png 1272w, https://substackcdn.com/image/fetch/$s_!_3MJ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e19414b-8bd2-4c9a-8ac5-f8d9dc8b6ac0_1246x612.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!_3MJ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e19414b-8bd2-4c9a-8ac5-f8d9dc8b6ac0_1246x612.png" width="1246" height="612" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3e19414b-8bd2-4c9a-8ac5-f8d9dc8b6ac0_1246x612.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:612,&quot;width&quot;:1246,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:84990,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://andyjmorgan.substack.com/i/196887421?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e19414b-8bd2-4c9a-8ac5-f8d9dc8b6ac0_1246x612.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!_3MJ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e19414b-8bd2-4c9a-8ac5-f8d9dc8b6ac0_1246x612.png 424w, https://substackcdn.com/image/fetch/$s_!_3MJ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e19414b-8bd2-4c9a-8ac5-f8d9dc8b6ac0_1246x612.png 848w, https://substackcdn.com/image/fetch/$s_!_3MJ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e19414b-8bd2-4c9a-8ac5-f8d9dc8b6ac0_1246x612.png 1272w, https://substackcdn.com/image/fetch/$s_!_3MJ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e19414b-8bd2-4c9a-8ac5-f8d9dc8b6ac0_1246x612.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Claude Code&#8217;s premise was simple:</p><ul><li><p> run the process.</p></li><li><p>tell it what to do.</p></li><li><p>plug in your things.</p></li><li><p>It does its thing.</p></li></ul><p>Really, in the early days, it was largely: <em>Watch it defecate in it&#8217;s hands and clap excitedly.</em></p><p>Claude took everything we have discussed in this article:</p><ul><li><p>Messages</p></li><li><p>Reasoning</p></li><li><p>Function / Tooling</p></li><li><p>Looping</p></li><li><p>Conversation compaction</p></li></ul><p>And showed the power of the harness that it could yield.</p><p>Claude presented pre-created tools to allow the LLM explore the local file system, read and write files, and run processes via Bash. For the first time, it was not request, response, instead you could steer your long running process, interleaving messages into the loop as it ran and interrupt the agent to course correct. </p><p>Taking all that we had up to this point, we now had an agentic loop that users could actually play with, which they did and it was a joyous mixture of diamonds in the rough for a few quarters.</p><p>We&#8217;ll cover this message interleaving in a follow up article, but to point out, if you&#8217;ve ever been frustrated by having to stop Claude or ChatGPT mid turn,  because you forgot a fact or said something stupid, it&#8217;s quite easily fixed and is present in pretty much all agentic loops and co-work, but not in the chat interfaces.</p><h4>Skills:</h4><p>For a while, this is where we were, and we were relatively stable. If you wrote thoughtful MCP tooling, guarded that context window and kept the loop stable with resilience, the harness was powerful. Context windows continued to grow, LLM&#8217;s got better at long tasks, but some very interesting breadcrumbs dropped by Cloudflare late 2025 about what they called <a href="https://blog.cloudflare.com/code-mode/">&#8220;Code Mode&#8221;</a>. </p><p>The article itself is well worth the read, but if I was to summarize, &#8220;MCP is fine, but have you considered just letting the LLM write some code?&#8221;. </p><p>As we were seeing in the wild, Claude Code was doing a much better job at this point, and the LLM was more than capable of taking on meaty assignments. Cloudflare called out the need for a Sandbox, obviously, because writing and executing it&#8217;s own code was enough to give most people the terrified feeling, but it certainly was a pre-cursor to something greater.</p><p>A month later, Anthropic announces skills and the rest was history. Skills were a specification of YAML files, that contained instructions on how to do things, how to approach problems, how to think differently.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!7lm7!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fecae104a-9fe3-4a85-962f-95e0612ae6d0_2788x2634.webp" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!7lm7!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fecae104a-9fe3-4a85-962f-95e0612ae6d0_2788x2634.webp 424w, https://substackcdn.com/image/fetch/$s_!7lm7!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fecae104a-9fe3-4a85-962f-95e0612ae6d0_2788x2634.webp 848w, https://substackcdn.com/image/fetch/$s_!7lm7!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fecae104a-9fe3-4a85-962f-95e0612ae6d0_2788x2634.webp 1272w, https://substackcdn.com/image/fetch/$s_!7lm7!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fecae104a-9fe3-4a85-962f-95e0612ae6d0_2788x2634.webp 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!7lm7!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fecae104a-9fe3-4a85-962f-95e0612ae6d0_2788x2634.webp" width="1456" height="1376" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ecae104a-9fe3-4a85-962f-95e0612ae6d0_2788x2634.webp&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1376,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!7lm7!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fecae104a-9fe3-4a85-962f-95e0612ae6d0_2788x2634.webp 424w, https://substackcdn.com/image/fetch/$s_!7lm7!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fecae104a-9fe3-4a85-962f-95e0612ae6d0_2788x2634.webp 848w, https://substackcdn.com/image/fetch/$s_!7lm7!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fecae104a-9fe3-4a85-962f-95e0612ae6d0_2788x2634.webp 1272w, https://substackcdn.com/image/fetch/$s_!7lm7!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fecae104a-9fe3-4a85-962f-95e0612ae6d0_2788x2634.webp 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Image Credit: (https://lucek.ai/blogs/agent-skills)</figcaption></figure></div><p><strong>Skills offered:</strong></p><ul><li><p><strong>Modularity:</strong> Developers could package domain knowledge, scripts and context retrieval logic into a directory. Skills enabled teams to share reusable capabilities across projects.</p></li><li><p><strong>Progressive disclosure:</strong> Only the skill name and description are initially loaded; the full instructions are read when relevant, keeping the prompt compact .</p></li><li><p><strong>Bash integration:</strong> Claude uses its built&#8209;in <strong>bash tool</strong> to read <code>SKILL.md</code> and to execute any scripts included with the skill . This confirmed the community&#8217;s belief that giving agents a shell enables them to manage their own context and code.</p></li></ul><p>Skills combined prompts, scripts, and leveraged in place tooling for the LLM to start working with, and the best part was? Anyone could write them, no plumbing or protocol, no hosting:</p><p><em>Just tell the LLM what you wanted, have it write a skill, iterate until you were happy. </em></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!POAA!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1e15f605-0041-4942-917d-325dc141a33f_1043x640.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!POAA!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1e15f605-0041-4942-917d-325dc141a33f_1043x640.png 424w, https://substackcdn.com/image/fetch/$s_!POAA!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1e15f605-0041-4942-917d-325dc141a33f_1043x640.png 848w, https://substackcdn.com/image/fetch/$s_!POAA!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1e15f605-0041-4942-917d-325dc141a33f_1043x640.png 1272w, https://substackcdn.com/image/fetch/$s_!POAA!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1e15f605-0041-4942-917d-325dc141a33f_1043x640.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!POAA!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1e15f605-0041-4942-917d-325dc141a33f_1043x640.png" width="1043" height="640" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1e15f605-0041-4942-917d-325dc141a33f_1043x640.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:640,&quot;width&quot;:1043,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:74834,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://andyjmorgan.substack.com/i/196887421?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1e15f605-0041-4942-917d-325dc141a33f_1043x640.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!POAA!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1e15f605-0041-4942-917d-325dc141a33f_1043x640.png 424w, https://substackcdn.com/image/fetch/$s_!POAA!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1e15f605-0041-4942-917d-325dc141a33f_1043x640.png 848w, https://substackcdn.com/image/fetch/$s_!POAA!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1e15f605-0041-4942-917d-325dc141a33f_1043x640.png 1272w, https://substackcdn.com/image/fetch/$s_!POAA!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1e15f605-0041-4942-917d-325dc141a33f_1043x640.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Nobody needed to write functions, nobody needed to write MCP tooling, just an idea or process, some documentation, bash commands. You could scan for skills and provide them as breadcrumbs in the prompt and be on your merry way, and even that was optional, telling the model that the directory existed was often enough.</p><p>Skills exploded in popularity, were adopted by the now rich ecosystem of claude code style harnesses, like Codex, Pi, Gemini Cli, etc. and really upset the sycophantic MCP hype trajectory. </p><p>They addressed so many use cases, were great if your agent was running in your file system, but it wasn&#8217;t all rosey in the garden.</p><p>Skills particularly excelled at things that MCP failed at, context heavy tasks you did not want to route via the LLM, such as downloading, uploading etc, but skills suffered a problem MCP tackled quite succinctly, Cloud Agents. </p><p>How do we get these little nuggets of functionality into a cloud based agent? And should they require credentials, how does one handle that? More on that later.</p><p><strong>Note:</strong> <em>While i was browsing around, i spotted a really impressive, forward thinking blog by Adam Lucek <a href="https://lucek.ai/blogs/agent-skills">here</a>. Well worth the read if you want the technical deepdive.</em></p><div><hr></div><p>And that&#8217;s it for part 1! I hope you found this interesting or it answered some fundamental questions you weren&#8217;t sure about! </p><p>In the follow up episodes I&#8217;ll be covering:</p><p><strong>Part two:</strong></p><ul><li><p>Agentic loop patterns, making it easier on yourself.</p></li><li><p>Guardrails, how trivial guardrails work.</p></li><li><p>Advanced Context Window management.</p></li></ul><p><strong>Part Three:</strong></p><ul><li><p>Swarms and Orchestration, handoff vs collaboration.</p></li><li><p>Moving the Agents from the operating system to the cloud.</p></li><li><p>Sandboxing, a pragmatic approach.</p></li></ul><p><strong>Part Four:</strong></p><ul><li><p>Building gateway services.</p></li><li><p>Telemetry and Governance.</p></li></ul><p>If you enjoyed this, or would like a topic covered drop me a comment!</p><p>A</p>]]></content:encoded></item></channel></rss>