<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:media="http://search.yahoo.com/mrss/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:custom="https://www.oreilly.com/rss/custom"

	>

<channel>
	<title>Radar</title>
	<atom:link href="https://www.oreilly.com/radar/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.oreilly.com/radar</link>
	<description>Now, next, and beyond: Tracking need-to-know trends at the intersection of business and technology</description>
	<lastBuildDate>Tue, 30 Jun 2026 16:06:02 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.0</generator>

<image>
	<url>https://www.oreilly.com/radar/wp-content/uploads/sites/3/2025/04/cropped-favicon_512x512-160x160.png</url>
	<title>Radar</title>
	<link>https://www.oreilly.com/radar</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>The End of Tokenmaxxing</title>
		<link>https://www.oreilly.com/radar/the-end-of-tokenmaxxing/</link>
				<comments>https://www.oreilly.com/radar/the-end-of-tokenmaxxing/#respond</comments>
				<pubDate>Tue, 30 Jun 2026 16:06:02 +0000</pubDate>
					<dc:creator><![CDATA[Mike Loukides]]></dc:creator>
						<category><![CDATA[AI & ML]]></category>
		<category><![CDATA[Commentary]]></category>

		<guid isPermaLink="false">https://www.oreilly.com/radar/?p=19013</guid>

		
					<media:content 
				url="https://www.oreilly.com/radar/wp-content/uploads/sites/3/2026/06/The-end-of-tokenmaxxing.jpg" 
				medium="image" 
				type="image/jpeg" 
				width="2304" 
				height="1792" 
			/>

			<media:thumbnail 
				url="https://www.oreilly.com/radar/wp-content/uploads/sites/3/2026/06/The-end-of-tokenmaxxing-160x160.jpg" 
				width="160" 
				height="160" 
			/>
		
		
				<description><![CDATA[The practice of tokenmaxxing appears to be dying out, even before I had a chance to write about it. Good riddance. Burning tokens to create the appearance of productivity was fated to last only until the accountants learned about it, and the strictest of all accountants is one’s personal checkbook. What got many developers thinking [&#8230;]]]></description>
								<content:encoded><![CDATA[
<p class="wp-block-paragraph">The practice of tokenmaxxing appears to be dying out, even before I had a chance to write about it. Good riddance. Burning tokens to create the appearance of productivity was fated to last only until the accountants learned about it, and the strictest of all accountants is one’s personal checkbook. What got many developers thinking about the cost of AI was the change in GitHub Copilot’s usage charges. The cost of Copilot went from a monthly fee with unlimited use to a <a href="https://docs.github.com/en/billing/concepts/product-billing/github-copilot-billing" target="_blank" rel="noreferrer noopener">monthly fee</a> that purchased a limited number of credits, which are used to pay the AI provider of your choice. One credit is equivalent to US$0.01; when you’ve used up your credits, you can upgrade your account or pay for additional credits as you go.</p>



<p class="wp-block-paragraph">The question isn’t why this didn’t happen earlier; it’s why this happened now. Tokenmaxxing is both the creation and victim of two large-scale trends in AI. First, starting with OpenAI, the major AI providers were all playing a <a href="https://www.amazon.com/Blitzscaling-Lightning-Fast-Building-Massively-Companies/dp/1524761419" target="_blank" rel="noreferrer noopener">blitzscaling</a> game that prioritized user growth over profitability. Giving AI services away for free got you more users, and in the long run, scalers would figure out how to make money from end-user fees, selling user data, or advertising. This process inevitably ends in enshittification, and is still very much the road we&#8217;re on.</p>



<p class="wp-block-paragraph">Second, token usage exploded late in 2025. The appearance of “reasoning models,” which use tokens to maintain an internal dialog in the course of solving a problem, increased the number of tokens used to respond to each prompt. Reasoning tokens are a model’s conversation with itself about possible responses to the prompt, and are often more numerous than the prompt and response themselves. Whether or not users see the reasoning process (often they don’t), reasoning tokens add to the bill. They are frequently counted as “output tokens” because they are generated by the model, and are more expensive than input tokens.</p>



<p class="wp-block-paragraph">The appearance of agents also multiplied the rate at which users consumed tokens. In May, 2025, Simon Willison quoted Anthropic’s Hannah Moran’s definition of an agent: “Agents are models using tools in a loop.” The Tredence blog <a href="https://www.tredence.com/blog/ai-agent-loop" target="_blank" rel="noreferrer noopener">writes</a>: “The agent loop is a repeating cycle in which the AI reads the current data, thinks through what it means, chooses an action, carries it out, checks what happens and starts over.” If you’ve ever watched Claude Code, OpenClaw, or any other agent work, a single request can become many calls to a model, each one using hundreds of tokens, if not thousands. In addition to the current request, one agent-generated invocation can contain the task’s entire accumulated context and relevant documents. Between reasoning tokens and agents, token usage goes up by a factor of hundreds.</p>



<p class="wp-block-paragraph">The increase in token usage might not be an issue if it results in problems being solved and tasks completed more effectively. But it collides with the loss-leader pricing of the blitzscalers; their willingness to operate at a loss to gain control of a market has limits. Regardless of whether the number of AI users is increasing, the amount of computation, and therefore cost, per user grows as the use of agents increases. Reasoning models increased token usage; agents compounded the problem; and that led to price increases.<sup data-fn="101ae8c1-91d1-4a49-b7b2-7fe4028a1d19" class="fn"><a href="#101ae8c1-91d1-4a49-b7b2-7fe4028a1d19" id="101ae8c1-91d1-4a49-b7b2-7fe4028a1d19-link">1</a></sup> Microsoft/GitHub doesn’t want to pay Copilot customers’ AI bills. We haven’t yet seen across-the-board price increases from the AI providers themselves. But we have seen GitHub’s token credits, and we have seen <a href="https://platform.claude.com/docs/en/about-claude/pricing" target="_blank" rel="noreferrer noopener">Anthropic</a> and <a href="https://developers.openai.com/api/docs/pricing" target="_blank" rel="noreferrer noopener">OpenAI</a> price more capable models significantly higher than older or less capable models. Fable is twice as expensive as Opus 4.8, and while some writers have called this pricing “fantastic,” that’s probably because they were expecting an even greater increase. While Fable can delegate tasks to Anthropic’s less expensive models, most early users observe that with Fable, token use goes up rather than down. Anthropic’s switch to token-based billing for its agent SDK (<a href="https://arstechnica.com/ai/2026/06/anthropic-pauses-token-based-billing-for-its-claude-agent-sdk/" target="_blank" rel="noreferrer noopener">currently on hold</a>) is another signal that the days of inexpensive AI are coming to an end. OpenAI’s story is similar: GPT 5.5 costs twice as much GPT 5.4 per million tokens.</p>



<p class="wp-block-paragraph">It’s also important to take capacity into account. Huge data centers have been in the news, but those data centers haven’t been built yet. More important, the electrical infrastructure needed to support those data centers—transmission lines, generators—hasn’t been built either, and that’s not an investment over which AI companies have much control. They can build their own power generation facilities on a data center campus, but that’s a huge investment in technologies that they’re not familiar with. And even if you generate power locally, you need other kinds of infrastructure: rail for coal, pipelines for gas. This isn’t (yet) an essay about data center power consumption and its consequences, but it is another factor that limits increased token usage. We’ve seen Anthropic’s outages blamed on capacity, and Anthropic has responded by leasing unused data center capacity from SpaceX. But the other way to respond to increased demand that can’t be met by current capacity is to increase prices, limiting customers to those who can afford to pay. That increase is being noticed by managers, accountants, and independent developers.</p>



<p class="wp-block-paragraph">Token optimization and accountability are the inevitable consequence of upward pressure on token price. One way to build accountability is through better governance, a route Bennie Haelen describes in “<a href="https://www.oreilly.com/radar/the-subsidy-ended-what-tool-using-agents-actually-cost/" target="_blank" rel="noreferrer noopener">The Subsidy Ended: What Tool-Using Agents Actually Cost</a>.” Better governance is achieved through building an observability layer that lets you see exactly what the agents and models are doing. With a well-designed observability layer, you can see whether the data sent to the model is growing with each invocation, whether the model is using appropriate tools, whether tools are being called repeatedly, and a lot of other information that will tell you whether your agent is running efficiently.</p>



<p class="wp-block-paragraph">Another piece of token accountability is understanding which models are running your agent’s requests. General-purpose reasoning models range from expensive high-performance models like Claude Fable or Opus 4.8 to models like Gemma 4 26B that can run on a well-equipped laptop, and some models that are even smaller. While it’s tempting to say “I need the best; I’ll run Opus 4.8 or Fable with maximum reasoning,” most requests don’t require that level of reasoning or expense. Agents will be able to decide what model is best for processing every request. Fable can delegate, and we expect other frontier providers to follow as models incorporate agent capabilities. And there’s an active world of open models outside of the frontier AI providers. Vicki Boykis <a href="https://vickiboykis.com/2026/06/15/running-local-models-is-good-now/" target="_blank" rel="noreferrer noopener">writes</a> that models running locally now work almost as well as frontier models. Tools like OpenRouter give you a model-independent way of <a href="https://openrouter.ai/docs/guides/routing/provider-selection" target="_blank" rel="noreferrer noopener">routing requests</a> to different models, including open models that run locally. OpenRouter can be integrated with OpenClaw, Claude Code, Cursor, Codex, and other agents to provide intelligent routing.</p>



<p class="wp-block-paragraph">Tokenmaxxing is dying. It will no doubt take time for its vestiges to die away, and there will always be developers who think they can game the path to a promotion, along with managers who insist on being “all in” with AI. But spending tokens responsibly is now the norm, whether you pay with your own checkbook or a company account. Token optimization will only become more important as per-token charges increase. They undoubtedly will.</p>



<p class="wp-block-paragraph">   </p>



<h3 class="wp-block-heading">Footnotes</h3>


<ol class="wp-block-footnotes"><li id="101ae8c1-91d1-4a49-b7b2-7fe4028a1d19">Some articles make the strange claim that tokens have gotten cheaper by up to 98%. GPT-5.5 suggests that these writers are considering the work that can be done per token. That comparison may be worthwhile, though it’s unclear how to compare GPT-3 with 5.5 or Fable meaningfully. For this article, a token is a token. <a href="#101ae8c1-91d1-4a49-b7b2-7fe4028a1d19-link" aria-label="Jump to footnote reference 1"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/21a9.png" alt="↩" class="wp-smiley" style="height: 1em; max-height: 1em;" />︎</a></li></ol>]]></content:encoded>
							<wfw:commentRss>https://www.oreilly.com/radar/the-end-of-tokenmaxxing/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
							</item>
		<item>
		<title>Beyond Prompt Injection</title>
		<link>https://www.oreilly.com/radar/beyond-prompt-injection/</link>
				<comments>https://www.oreilly.com/radar/beyond-prompt-injection/#respond</comments>
				<pubDate>Tue, 30 Jun 2026 10:55:08 +0000</pubDate>
					<dc:creator><![CDATA[Shania Rasheed Nalagath]]></dc:creator>
						<category><![CDATA[AI & ML]]></category>
		<category><![CDATA[Commentary]]></category>

		<guid isPermaLink="false">https://www.oreilly.com/radar/?p=19010</guid>

		
					<media:content 
				url="https://www.oreilly.com/radar/wp-content/uploads/sites/3/2026/06/Beyond-prompt-injection.jpg" 
				medium="image" 
				type="image/jpeg" 
				width="2304" 
				height="1792" 
			/>

			<media:thumbnail 
				url="https://www.oreilly.com/radar/wp-content/uploads/sites/3/2026/06/Beyond-prompt-injection-160x160.jpg" 
				width="160" 
				height="160" 
			/>
		
				<custom:subtitle><![CDATA[Why securing AI agents demands a different threat model than the one you&#039;re using]]></custom:subtitle>
		
				<description><![CDATA[In late 2025, the security community stopped treating indirect prompt injection as a theoretical risk. It had spent two years as a tidy lab demonstration; then production systems started getting hit. The OWASP Top 10 for LLM applications now ranks prompt injection as the number-one risk, NIST has called indirect injection generative AI&#8217;s greatest security [&#8230;]]]></description>
								<content:encoded><![CDATA[
<p class="wp-block-paragraph">In late 2025, the security community stopped treating indirect prompt injection as a theoretical risk. It had spent two years as a tidy lab demonstration; then production systems started getting hit. The <a href="https://genai.owasp.org/llmrisk/llm01-prompt-injection/" target="_blank" rel="noreferrer noopener">OWASP Top 10 for LLM applications</a> now ranks prompt injection as the number-one risk, NIST has called indirect injection <a href="https://www.nist.gov/news-events/news/2024/01/nist-identifies-types-cyberattacks-manipulate-behavior-ai-systems" target="_blank" rel="noreferrer noopener">generative AI&#8217;s greatest security flaw</a>, and <a href="https://arxiv.org/abs/2601.07072" target="_blank" rel="noreferrer noopener">academic researchers showed</a> that a single poisoned email could coerce a model into exfiltrating SSH keys in up to 80% of trials, with zero user interaction. The attack needs no malicious binary, no phishing clicks, and no anomalous login. The agent simply reads content and takes action, exactly as designed, and the content was written by an attacker.</p>



<p class="wp-block-paragraph">The most instructive example is <a href="https://noma.security/blog/forcedleak-agent-risks-exposed-in-salesforce-agentforce/" target="_blank" rel="noreferrer noopener">ForcedLeak</a>. In September 2025, researchers at Noma disclosed a critical vulnerability chain (CVSS 9.4) in Salesforce&#8217;s Agentforce platform: An attacker embedded malicious instructions in the description field of a routine Web-to-Lead form. The text sat harmlessly in the CRM until an employee later asked the AI agent to process that lead, at which point the agent dutifully executed both the legitimate query and the attacker&#8217;s hidden payload, exfiltrating sensitive CRM data to an external server. The detail that should keep you up at night is that the exfiltration destination was a domain still on Salesforce&#8217;s trusted allowlist, one that had <a href="https://thehackernews.com/2025/09/salesforce-patches-critical-forcedleak.html" target="_blank" rel="noreferrer noopener">expired and which the researchers re-registered for about five dollars</a>. Every security control saw legitimate traffic to a trusted domain. Nothing looked wrong.</p>



<p class="wp-block-paragraph">If your instinct reading that is &#8220;we filter for prompt injection,&#8221; you’re defending the wrong perimeter. Input filtering is necessary but nowhere near sufficient. The uncomfortable truth is that the injection isn’t the breach; the action is. And almost everything we call &#8220;AI security&#8221; is aimed at the wrong half of that sentence.</p>



<h2 class="wp-block-heading">The defense everyone is building</h2>



<p class="wp-block-paragraph">Ask most enterprise AI teams how they secure their agents, and you’ll hear a consistent answer: They sanitize inputs. They harden system prompts with elaborate instructions to ignore conflicting directives. They run classifiers over incoming content to flag adversarial patterns. Some have adopted the more sophisticated training-time defenses the frontier labs have published—instruction hierarchies that teach a model to assign differential trust to different sources and reinforcement-learning approaches that harden models against injection in agentic contexts.</p>



<p class="wp-block-paragraph">All of this is good work, and none of it should be abandoned. But notice what every one of these techniques shares. They all try to stop the model from being fooled. They assume that if we make the model robust enough at the input layer, the system is safe. That assumption is the vulnerability.</p>



<p class="wp-block-paragraph">We’ve spent two years trying to <a href="https://simonwillison.net/2022/Sep/12/prompt-injection/" target="_blank" rel="noreferrer noopener">make the model unfoolable</a>. The systems that survive contact with production assume it will be fooled anyway.</p>



<h2 class="wp-block-heading">Why the input layer is the wrong perimeter</h2>



<p class="wp-block-paragraph">Prompt injection isn’t a bug a future model will lack. It’s a structural property of how language models work. The model consumes a single undifferentiated stream of tokens at the moment of inference. Your instructions, the retrieved document, the tool output, and the web page just fetched are indistinguishable channels collapsed into one context. There’s no hardware-enforced boundary between “trusted instruction” and “untrusted data” the way there is between kernel space and user space in an operating system.</p>



<p class="wp-block-paragraph">This is why the attack surface explodes the moment an agent becomes agentic. A chatbot that only talks is a contained risk. An agent that retrieves from the open web, reads email, queries databases, and calls APIs ingests adversarial content from a dozen sources on every turn, and any one of them can carry an instruction. Researchers cataloging real agent ecosystems have already found hundreds of malicious third-party extensions performing data exfiltration and silent injection without any user awareness. These aren’t laboratory curiosities. They’re the production environment.</p>



<p class="wp-block-paragraph">So, if you can’t guarantee the model will never be fooled—and you can’t—then architecture that depends on it never being fooled is built on sand. You need a second principle, one distributed systems engineers have understood for decades.</p>



<h2 class="wp-block-heading">Verify, then trust</h2>



<p class="wp-block-paragraph">The principle is simple to state and hard to retrofit: An agent&#8217;s proposed action should be validated against an external, deterministic policy before it executes, regardless of why the agent proposed it. The validator doesn’t ask whether the instruction that produced the action was legitimate. It doesn’t try to detect the injection. It asks a different and far more answerable question: Is this action, on its face, permitted?</p>



<p class="wp-block-paragraph">This inverts the burden. Detecting a cleverly disguised malicious instruction is open-ended because the adversary gets to be arbitrarily creative. Checking whether a wire transfer exceeds a hard dollar limit is a closed problem with a definite answer. We move the security decision from where the attacker has infinite freedom to where they have almost none.</p>



<p class="wp-block-paragraph">Crucially, the check must be deterministic code, not another model asking, “Does this look dangerous?” The moment you ask a second LLM to adjudicate, you’ve reintroduced the exact same vulnerability one layer down. The enforcement layer is boring, auditable conventional software, and that’s the point.</p>



<p class="wp-block-paragraph">Here’s what it looks like in practice. An agent managing procurement proposes an action, and a runtime contract evaluates it before anything reaches a real API:</p>



<pre class="wp-block-code"><code># agent_contract.yaml
 agent_id: "procurement_executor_07"
 role: "EXECUTOR"
 policy:
   approve_invoice:
 	max_amount_usd: 50000
 	allowed_vendors: from_approved_registry
 	require_human_above_usd: 10000

 # Runtime, on a proposed action:
 ACTION   approve_invoice(vendor='Acme', amount=1200000)
 REJECTED policy violation: max_amount_usd
      	proposed 1,200,000 / limit 50,000
      	action discarded, human notified, no API call made</code></pre>



<p class="wp-block-paragraph">The injected instruction at 2:14am never matters here. The agent can be perfectly, catastrophically fooled, and the wire transfer still doesn’t happen, all because a simple deterministic check stood between the model’s output and the outside world, and the proposed action failed it.</p>



<p class="wp-block-paragraph"><strong>This only works if the action arrives structured, which makes structure a precondition.</strong></p>



<p class="wp-block-paragraph">The contract inspects approve_invoice (vendor, amount) cleanly only because the action is already typed. If the agent emits prose, “please approve the Acme invoice,” something has to parse it, and the only thing that parses open language is another LLM, so the indeterminacy walks back in. That dictates the design.</p>



<p class="wp-block-paragraph">A consequential action must cross the boundary as a typed tool call, never as free text. Where the input is unavoidably natural—an email saying, “Wire them their balance” for example—let the model extract a structured value but never let its extraction be self-authorizing. The model proposes the amount; the gate still checks it against the limit, the vendor registry, and the actual balance in the system of record, not the number the email asserted. Extraction is probabilistic, while validation stays deterministic.</p>



<p class="wp-block-paragraph">A few decisions are pure judgment with no schema, such as “Is this email phishing?” There the model stays in the loop. You bound the consequences instead, with reversibility and human review above a threshold. Contracts protect parameterizable actions, and unparameterizable judgments fall back to containment.</p>



<h2 class="wp-block-heading">The architecture this implies</h2>



<p class="wp-block-paragraph">Once you accept that the action layer is where security lives, three design commitments follow, and they map almost directly onto principles that hardened distributed systems years ago.</p>



<p class="wp-block-paragraph"><strong>Least privilege for agents, scoped to the action, not the agent. </strong>The naive version assumes you can predict what an agent will do and provision it accordingly. For a specialized agent you can: One that only summarizes has no business holding a credential that moves money. But the agents people actually reach for are general. In a single session, I might ask a coding agent to summarize a file, write code, execute it, and query company data—four tasks with four risk profiles, none of which are enumerated in advance. Static least privilege collapses the moment one identity spans that range.</p>



<p class="wp-block-paragraph">The fix is to make privilege a property of the action, not the agent. The agent holds no dangerous capability by standing grant; it requests narrow, transient elevation per action, which the same deterministic gate approves or denies. Reading a document is auto-approved; querying the warehouse is not. The dangerous credential exists only for the instant the action is permitted, then evaporates. One caveat: This governs what an agent may <em>reach</em> but not what the code it writes then <em>does</em>. Executing code can be gated as a capability, but what executes still needs containment, sandboxing, and egress control, because generativity is a different problem from access.</p>



<p class="wp-block-paragraph"><strong>Zero trust for machine identities. </strong>Every action an agent takes should be authenticated and authorized as if it came from an untrusted actor, because, functionally, it might be acting on an attacker&#8217;s instructions. The proliferation of agents has expanded the attack surface faster than most identity systems were designed to handle, and treating agent traffic as inherently trusted because it originates inside your own system is precisely the mistake.</p>



<p class="wp-block-paragraph"><strong>Capability contracts at the boundary. </strong>Every consequential action passes through a deterministic gate that encodes what is allowed, dollar limits, rate limits, allowlisted destinations, mandatory human review thresholds. The contract is version-controlled, auditable, and lives entirely outside the model.</p>



<h2 class="wp-block-heading">The trap of normalized deviance</h2>



<p class="wp-block-paragraph">The quieter organizational danger is the slow accumulation of false confidence from connecting insecure agents to real systems and watching nothing bad happen. . .for a while. Researchers have warned about indirect injections for years, but most deployments have gotten away with it. Each uneventful day makes the next risky connection feel safer. This is the normalization of deviance. Every system that eventually failed catastrophically felt the same way: fine, fine, fine, until it wasn’t.</p>



<p class="wp-block-paragraph">The teams that will weather the coming wave of agent incidents aren’t the ones with the cleverest input filters. They’re the ones who assumed compromise from the start and built the boring enforcement layer anyway, the ones who decided that an agent&#8217;s autonomy ends precisely at the point where it tries to do something irreversible.</p>



<h2 class="wp-block-heading">Where to start on Monday</h2>



<p class="wp-block-paragraph">You don’t need to rearchitect everything. Start by inventorying the actions your agents can take, and sort them by blast radius: What’s the worst thing that happens if this action fires when it shouldn&#8217;t? For every high-blast-radius action, write a deterministic contract that gates it and put a human in the loop above a threshold you can defend to your risk team. Then, and only then, keep hardening your inputs.</p>



<p class="wp-block-paragraph">Prompt injection won’t be solved at the input layer, because it can’t be. But it can be rendered survivable at the action layer, where deterministic code gets the final word. The model’s job is to be useful. Your architecture’s job is to make sure that when the model fails—or worse, when it has been turned against you—the failure stops at the gate.</p>
]]></content:encoded>
							<wfw:commentRss>https://www.oreilly.com/radar/beyond-prompt-injection/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
							</item>
		<item>
		<title>What You Bring to AI Determines the Result</title>
		<link>https://www.oreilly.com/radar/what-you-bring-to-ai-determines-the-result/</link>
				<comments>https://www.oreilly.com/radar/what-you-bring-to-ai-determines-the-result/#respond</comments>
				<pubDate>Mon, 29 Jun 2026 16:15:12 +0000</pubDate>
					<dc:creator><![CDATA[Tim O’Reilly]]></dc:creator>
						<category><![CDATA[AI & ML]]></category>
		<category><![CDATA[Commentary]]></category>

		<guid isPermaLink="false">https://www.oreilly.com/radar/?p=18980</guid>

		
					<media:content 
				url="https://www.oreilly.com/radar/wp-content/uploads/sites/3/2026/06/live_with_tim-cover.png" 
				medium="image" 
				type="image/png" 
				width="800" 
				height="800" 
			/>

			<media:thumbnail 
				url="https://www.oreilly.com/radar/wp-content/uploads/sites/3/2026/06/live_with_tim-cover-160x160.png" 
				width="160" 
				height="160" 
			/>
		
				<custom:subtitle><![CDATA[Harper Carroll on when fine-tuning beats prompting, why learning to code still matters, and why fear is the wrong introduction to AI]]></custom:subtitle>
		
				<description><![CDATA[Harper Carroll came to AI education through a CS background at Stanford, machine learning engineering at Meta, and a brief stint at a small GPU compute startup in late 2023, where she noticed that almost no one understood how to fine-tune open source models. She started writing and teaching to help drive signups for the [&#8230;]]]></description>
								<content:encoded><![CDATA[
<p class="wp-block-paragraph">Harper Carroll came to AI education through a CS background at Stanford, machine learning engineering at Meta, and a brief stint at a small GPU compute startup in late 2023, where she noticed that almost no one understood how to fine-tune open source models. She started writing and teaching to help drive signups for the startup’s platform. Her first guide, posted right after Mistral 7B was released, when she had about 50 followers, got 50,000 views. In March 2024, a <a href="https://www.instagram.com/stories/highlights/18051958402625345/" target="_blank" rel="noreferrer noopener">video explaining the difference between AI and machine learning</a> got 5 million views, with 1 in 20 viewers following her afterward. She now has more than 500,000 followers across multiple platforms and is a <a href="https://harpercarroll.ai/" target="_blank" rel="noreferrer noopener">full-time AI educator</a>.</p>



<p class="wp-block-paragraph">We covered fine-tuning versus prompting, what it actually means to learn to code in 2025, and what the AI field gets wrong when it talks to the public.</p>



<h2 class="wp-block-heading">Understanding the world with math</h2>



<p class="wp-block-paragraph">We started with Harper’s own AI learning journey, and it contained a wonderful insight. She grew up loving math and came to computer science at Stanford because algorithms seemed like wonderful math puzzles. Eventually she realized that AI is “understand[ing] the world around us with math.” Text-based LLMs are only one branch. The field as a whole is “the math of the world.” That seems like a deep intuition that all of us need to internalize.</p>



<figure class="wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe title="Understanding the World Around Us with Math with Harper Carroll" width="500" height="281" src="https://www.youtube.com/embed/jsGdrzhxw1A?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
</div></figure>



<h2 class="wp-block-heading">AI as a medium</h2>



<p class="wp-block-paragraph">A <a href="https://www.media.mit.edu/publications/your-brain-on-chatgpt/" target="_blank" rel="noreferrer noopener">study that circulated last year</a> found that people who used AI to write essays showed reduced brain activity compared to people who write unaided. The reaction in many quarters was alarm. People said, “We&#8217;re outsourcing cognition and our brains will atrophy.” Harper’s smart response was that those users must have given the AI a one-sentence prompt and accepted whatever came back.</p>



<p class="wp-block-paragraph">As she put it, that&#8217;s the equivalent of just telling Alexa to order you the most popular book this week. Of course less brain activity is being measured! Contrast that with the difference between shopping for a book by browsing and searching at Amazon versus driving to a physical bookstore. There’s certainly a difference, but it isn’t outsourcing cognition. It’s saving time, and that time might well be spent on other demanding cognitive tasks.</p>



<p class="wp-block-paragraph">My framing is that AI is a medium, the way language is a medium, or photography. Anyone can take a photograph or write a book. The words available to every writer are the same; what differs is what they do with them, just as some photographers do something with it that others can&#8217;t. The same is true of software. There&#8217;s a line in Aaron Sorkin’s movie <em>The Social Network</em> where the Zuckerberg character says about the Winklevosses, &#8220;If you guys were the inventors of Facebook, <a href="https://www.youtube.com/watch?v=TbllP2FOvEE" target="_blank" rel="noreferrer noopener">you&#8217;d have invented Facebook</a>.&#8221; An idea and its execution aren&#8217;t the same thing. One person gives AI a prompt and the output is bad. Another builds a process around AI and the output is great. What you bring to the medium is what determines the result. Harper agreed.</p>



<figure class="wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe title="AI as a Medium with Tim O&amp;apos;Reilly and Harper Carroll" width="500" height="281" src="https://www.youtube.com/embed/xRE2GTc6-e0?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
</div></figure>



<h2 class="wp-block-heading">Fine-tuning is like psychedelics for AI</h2>



<p class="wp-block-paragraph">I’ve been trying to figure out how we can use AI for writing and editing at O’Reilly. We want skills and workflows that accelerate our productivity but don’t produce copy that reads as whatever the base model sounds like when nobody&#8217;s putting in any effort.</p>



<p class="wp-block-paragraph">Takeaway posts like this one are a great use case for AI-assisted writing. As source material we have a transcript, with the actual conversation between the participants (or in the case of one of our online conferences, their presentations). We want a structured summary that captures the high points and suggests possible clips for social media. I (or whomever is using this AI-assisted workflow) can then rewrite, rearrange, elaborate, or delete from that first draft. It might not be as good as a draft written from scratch, but quite frankly, it’s far better than the alternative, which is no summary at all. I just don’t have time to write them all unaided.</p>



<p class="wp-block-paragraph">When I’m writing an article, I generate a similar “transcript” by recording myself talking about the ideas I’m wrestling with and trying to put into the world. Then I ask Claude to put it together into something a bit more structured.</p>



<p class="wp-block-paragraph">I’ve been improving Claude’s ability to produce prose that we can use by rewriting its output, showing it the differences, and then asking it to construct a skill that captures what it’s learned. Over time, it’s gotten closer and closer to something that I’m comfortable with, and I’m now generalizing that into a system that learns any author’s voice, respects the various conventions of the target content type (which can be very different across books, articles and blog posts, social media, and marketing materials like back cover copy and course descriptions), and applies editing suggestions from my favorite books on good writing, including Strunk and White and <em>On Writing Well</em> by William Zinsser.</p>



<p class="wp-block-paragraph">Harper attacked the same problem from a different angle. She built a dataset of roughly 1,000 of her Instagram captions, video transcripts, and X posts, then fed them to Claude as context and asked it to write in her style. Unfortunately, the output tested 100% AI by a detection tool, even with 1,000 examples of her real voice in the prompt. She then fine-tuned an open source Llama model on the same data. The fine-tuned output tested 100% human. She gave a <a href="https://schedule.sxsw.com/2026/events/PP1150687" target="_blank" rel="noreferrer noopener">compelling demo</a> at South by Southwest showing how easy this is to do. It took her about 20 minutes.</p>



<figure class="wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe title="Fine-Tuning Your Own Model Is the Best Way to Get the Output You Want with Harper Carroll" width="500" height="281" src="https://www.youtube.com/embed/xxhp3LxiIAs?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
</div></figure>



<p class="wp-block-paragraph">After Harper said that prompting doesn&#8217;t shift the output distribution the way fine-tuning does, I told her the story about the French writer Marcel Proust that <a href="https://www.oreilly.com/radar/more-slowly/" target="_blank" rel="noreferrer noopener">I first used in my conversation with Steve Wilson</a>, which I picked up from Alain de Botton’s <em><a href="https://www.amazon.com/How-Proust-Change-Your-Life/dp/0679779159" target="_blank" rel="noreferrer noopener">How Proust Can Change Your Life</a></em>. A friend comes to visit the bedridden Proust, and making polite conversation begins to tell him about the train trip to Paris. “More slowly,” Proust replies. This cycle repeats several times until the friend is telling him small details like the old man feeding pigeons on the steps of the station.</p>



<p class="wp-block-paragraph">Harper got it, and broke it down more slowly in her inimitable way. Here’s why in-context prompting fails where fine-tuning succeeds:</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">Basically AI models are these massive mathematical equations, and the parameters are variables when you&#8217;re training, and then they become constants in those equations when you&#8217;re running inference&nbsp;.&nbsp;.&nbsp;.So what you&#8217;re doing when you&#8217;re training the model is you&#8217;re learning how to map, by adjusting those constants when they&#8217;re variables during training,.&nbsp;.&nbsp;.input to desired output.</p>
</blockquote>



<p class="wp-block-paragraph">Once the model is deployed, the probability distribution over output tokens is fixed. You can put 1,000 examples in a prompt and ask the model to pattern-match, but you&#8217;re asking it to do that with frozen weights. The surface behavior bends a little, but the underlying distribution doesn&#8217;t shift. Fine-tuning lets you actually modify the weights and how the model <em>wants</em> to write.</p>



<p class="wp-block-paragraph">Her suggested approach for building the training dataset is to take your own writing, have AI rewrite it with its characteristic tics, then train with the AI version as input and your original as the target output. You&#8217;re teaching the model to undo the tells.</p>



<figure class="wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe loading="lazy" title="Adjust Constants in Training When They’re Variables with Harper Carroll and Tim O’Reilly" width="500" height="281" src="https://www.youtube.com/embed/hCcYGalY-CM?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
</div></figure>



<h2 class="wp-block-heading">Should people still learn to code?</h2>



<p class="wp-block-paragraph">We also spent time on the inevitable question of whether people should still learn to code. We both agree they should, but not necessarily like they used to, by learning the detailed syntax of a programming language, then by trial and error as they painfully learn how hard it is to get the desired behavior.</p>



<p class="wp-block-paragraph">Harper&#8217;s take (which I also agree with) is that vibe coding has lowered the floor. People who could never afford to hire someone to build a product can now do so themselves. But it has also raised the ceiling, because people who actually understand systems can build vastly more sophisticated things with the same tools, which takes us back to the case for AI as a medium.</p>



<p class="wp-block-paragraph">Perhaps more importantly to the question of how much coding you should learn, experienced developers will also see failure modes that pure vibe coders miss. Harper gave an example that came from watching a friend using an agent tool that had, at some point, started storing its data in a Word document and using it as a makeshift database, probably because the session started with a Word doc. It was extremely slow and extremely inefficient. An engineer sees the problem immediately. A vibe coder might run that system for months before noticing something is wrong.</p>



<p class="wp-block-paragraph">So yes, you should learn enough about coding to understand what’s happening. The art of teaching programming to the next generation will be developing useful projects that also highlight underlying concepts of software architecture and engineering.</p>



<figure class="wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe loading="lazy" title="AI Has Lowered the Floor and Raised the Ceiling with Harper Carroll" width="500" height="281" src="https://www.youtube.com/embed/BdHzYBu4o70?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
</div></figure>



<h2 class="wp-block-heading">Intuition as differentiator</h2>



<p class="wp-block-paragraph">Silicon Valley runs heavily on logic and on the idea that good decisions come from better data, more rigorous analysis, and sharper models. In this environment, intuition can get dismissed as something “soft and fuzzy,” Harper noted. And that’s the wrong mindset for AI.</p>



<p class="wp-block-paragraph">AI is getting better and better at exactly the things the logical axis does well, but intuition remains a challenge because it often contradicts what the data says. Good intuition “goes against the input,” to use Harper’s phrase. A model that&#8217;s been trained to recognize patterns in data will, almost by definition, struggle with making decisions that run counter to those patterns. Just as skills-informed judgment supercharges AI-assisted engineers, intuition could be a uniquely human skill for a long time. Elevating it as a concern might bring the industry more of an attitude of humility towards ourselves and our place in the world.</p>



<figure class="wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe loading="lazy" title="As AI Gets Better at Logical Tasks, Intuition Is the Differentiator with Harper Carroll" width="500" height="281" src="https://www.youtube.com/embed/jp4LLPjmIb4?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
</div></figure>



<h2 class="wp-block-heading">What the field gets wrong</h2>



<p class="wp-block-paragraph">I closed by asking Harper what the AI field most consistently gets wrong in how it talks to the public. She said that too much of the public-facing discourse leads with fear, of job displacement, of rapidly approaching AGI, and of a rocky transition that requires a universal basic income to cushion the blow. She&#8217;s not calling those impossible futures, but she thinks they’re the wrong introduction to the technology.</p>



<p class="wp-block-paragraph">A lot of companies are using AI to ask how to do the same things at lower cost. The better question is how to raise ambitions. AI doesn&#8217;t just scale individual capabilities. It scales what organizations can attempt. But for it to work out that way, <em>everybody</em> has to actually learn AI. We can&#8217;t have AI haves and have-nots. That means lower-cost models, serious open source investment, and companies that don&#8217;t just become serfs to the major platforms.</p>



<p class="wp-block-paragraph">Harper has been making this point for a while, to audiences ranging from engineers to people who&#8217;ve never written a line of code. &#8220;There is not really much to fear right now,&#8221; she says. &#8220;AI is this incredible productivity tool.&#8221; The people who will struggle, in her view, are the ones who refuse to engage with it at all.</p>



<p class="wp-block-paragraph">At O&#8217;Reilly, we’ve been working on a version of the same narrative at an organizational level. The fear-first narrative produces avoidance, and avoidance is the one thing that will actually leave someone behind. So we’re building a corporate AI transformation practice that starts with people’s existing jobs, and figures out how to “mix in” AI to make them more impactful. We’re learning how to teach both the humans and the agents at the same time to make them more productive together.</p>



<figure class="wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe loading="lazy" title="What the Field Gets Wrong with Harper Carroll" width="500" height="281" src="https://www.youtube.com/embed/8nkXKlTwz4A?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
</div></figure>



<p class="wp-block-paragraph"><em>On July 9, I’ll be speaking with Trail of Bits cofounder and CEO Dan Guido about the playbook his company used to go AI native, which he first outlined at this year’s [un]prompted. He’ll give a version of the same talk, then take about 40 minutes of audience questions on what worked, what didn’t, and what is still unsolved. I hope you join us to find out what’s changed since [un]prompted and where the playbook is heading next. <a href="https://www.oreilly.com/live/live-with-tim/" target="_blank" rel="noreferrer noopener">Register here</a>; it’s free and open to all.</em></p>
]]></content:encoded>
							<wfw:commentRss>https://www.oreilly.com/radar/what-you-bring-to-ai-determines-the-result/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
							</item>
		<item>
		<title>Agent Memory</title>
		<link>https://www.oreilly.com/radar/agent-memory/</link>
				<comments>https://www.oreilly.com/radar/agent-memory/#respond</comments>
				<pubDate>Mon, 29 Jun 2026 10:53:10 +0000</pubDate>
					<dc:creator><![CDATA[Angie Jones]]></dc:creator>
						<category><![CDATA[AI & ML]]></category>
		<category><![CDATA[Commentary]]></category>

		<guid isPermaLink="false">https://www.oreilly.com/radar/?p=19005</guid>

		
					<media:content 
				url="https://www.oreilly.com/radar/wp-content/uploads/sites/3/2026/06/Agent-memory.jpg" 
				medium="image" 
				type="image/jpeg" 
				width="2304" 
				height="1792" 
			/>

			<media:thumbnail 
				url="https://www.oreilly.com/radar/wp-content/uploads/sites/3/2026/06/Agent-memory-160x160.jpg" 
				width="160" 
				height="160" 
			/>
		
		
				<description><![CDATA[The following article originally appeared on Angie Jones’s LinkedIn page and is being republished here with the author’s permission. I&#8217;m fascinated by the concept of agent memory. LLMs are stateless by design, meaning they have no memory or awareness of past interactions. Each prompt you send to an LLM is treated as a completely isolated [&#8230;]]]></description>
								<content:encoded><![CDATA[
<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph"><em>The following article originally appeared on Angie Jones’s <a href="https://www.linkedin.com/pulse/agent-memory-angie-jones-odrjc/" target="_blank" rel="noreferrer noopener">LinkedIn</a> page and is being republished here with the author’s permission.</em></p>
</blockquote>



<p class="wp-block-paragraph">I&#8217;m fascinated by the concept of agent memory. LLMs are stateless by design, meaning they have no memory or awareness of past interactions. Each prompt you send to an LLM is treated as a completely isolated event.</p>



<p class="wp-block-paragraph">When you have a continuous chat with an AI agent, it feels like the AI remembers previous messages. However, the interface itself is faking it. Behind the scenes, your agent takes the entire conversation history and resends <em>all of it</em> to the LLM as one giant, combined prompt.</p>



<p class="wp-block-paragraph">Companies, researchers, and even indie devs are all trying to crack agent memory. Because once an agent can remember, the entire interaction changes. It can build on what it learned, adapt to the user, resume work after a restart, and develop a sense of continuity.</p>



<p class="wp-block-paragraph">Recently, I spent time with Richmond Alake, who has been in the trenches working on agent memory at Oracle.</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="874" height="766" src="https://www.oreilly.com/radar/wp-content/uploads/sites/3/2026/06/image-19.png" alt="Richmond Alake, the agent memory guru" class="wp-image-19006" srcset="https://www.oreilly.com/radar/wp-content/uploads/sites/3/2026/06/image-19.png 874w, https://www.oreilly.com/radar/wp-content/uploads/sites/3/2026/06/image-19-300x263.png 300w, https://www.oreilly.com/radar/wp-content/uploads/sites/3/2026/06/image-19-768x673.png 768w" sizes="auto, (max-width: 874px) 100vw, 874px" /><figcaption class="wp-element-caption">Richmond Alake, the agent memory guru</figcaption></figure>



<p class="wp-block-paragraph">We talked about the different kinds of memory, why memory is harder than it sounds, and what it takes to build a memory system that is actually useful in production.</p>



<p class="wp-block-paragraph">That conversation made something very clear to me. When people say, &#8220;agent memory,&#8221; they often mean very different things.</p>



<p class="wp-block-paragraph">So let&#8217;s unpack the various types of memory.</p>



<h2 class="wp-block-heading">Conversational memory</h2>



<p class="wp-block-paragraph">Conversational memory is the one most people think of first. It stores the messages exchanged between the user and the assistant.</p>



<p class="wp-block-paragraph">This makes sense. If I ask, &#8220;What did I say was the ultimate goal of this task?&#8221; the agent needs access to the conversation in order to answer. Without that history, every turn starts from zero.</p>



<p class="wp-block-paragraph">But this is also where many memory systems go wrong.</p>



<p class="wp-block-paragraph">The most common first attempt is to keep appending prior messages to the prompt. For example:</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">User: I&#8217;m building a customer support agent.</p>



<p class="wp-block-paragraph">Assistant: Great, what should it do?</p>



<p class="wp-block-paragraph">User: It should look up past tickets and draft replies.</p>



<p class="wp-block-paragraph">Assistant: Got it.</p>



<p class="wp-block-paragraph">User: Also, I prefer Python and FastAPI.</p>
</blockquote>



<p class="wp-block-paragraph">Then on the next call, we send all of that back to the model along with the new question.</p>



<p class="wp-block-paragraph">This works for a short conversation, but the agent only &#8220;remembers&#8221; because we keep reminding it. This is not really memory engineering.</p>



<p class="wp-block-paragraph">Eventually, the conversation gets too long and the model receives a giant blob of context where some details are important, some are stale, and some are completely irrelevant. The agent may technically have the information, but that doesn&#8217;t mean it can use it well.</p>



<p class="wp-block-paragraph">So yes, conversation history is a valid and important type of memory. But it shouldn’t be the whole memory strategy. Real agent memory requires deciding what should be stored, where it should be stored, how it should be retrieved, and when it should be summarized, forgotten, or compressed.</p>



<h2 class="wp-block-heading">Semantic memory</h2>



<p class="wp-block-paragraph">Semantic memory stores durable facts.</p>



<p class="wp-block-paragraph">These are things that should outlive the exact conversation where they were learned:</p>



<ul class="wp-block-list">
<li>The user prefers Python over TypeScript for backend work.</li>



<li>The customer support agent needs access to past tickets.</li>



<li>The production system handles 50,000 queries per day.</li>
</ul>



<p class="wp-block-paragraph">This is different from conversational memory because the exact wording and sequence are less important. What matters is the meaning.</p>



<p class="wp-block-paragraph">If the agent needs to recall what stack the user is using, it should retrieve the memory even if the user never says those exact words again.</p>



<p class="wp-block-paragraph">Vector search is useful for this. The memory can be embedded and retrieved by semantic similarity.</p>



<p class="wp-block-paragraph">The benefit is that the agent doesn’t need to replay the full conversation. It can retrieve the few durable facts that are relevant to the current request.</p>



<h2 class="wp-block-heading">Episodic memory</h2>



<p class="wp-block-paragraph">Episodic memory stores events.</p>



<p class="wp-block-paragraph">This is the &#8220;what happened&#8221; layer of memory:</p>



<ul class="wp-block-list">
<li>The agent searched the web for recent API gateway patterns.</li>



<li>The agent generated a draft response for ticket #4821.</li>



<li>The workflow failed at the compliance review step.</li>
</ul>



<p class="wp-block-paragraph">Episodic memory is especially useful for debugging, auditing, and long-running workflows.</p>



<p class="wp-block-paragraph">For example, if an agent makes a decision, I may want to know what happened right before that decision (e.g., What tools did it call? What data did it retrieve?).</p>



<p class="wp-block-paragraph">This type of memory often benefits from structured storage.</p>



<p class="wp-block-paragraph">For example:</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">Find all failed tool calls from the mortgage approval workflow in the last 24 hours.</p>
</blockquote>



<p class="wp-block-paragraph">That is a database query problem, not just a vector search problem.</p>



<h2 class="wp-block-heading">Procedural memory</h2>



<p class="wp-block-paragraph">Procedural memory is about how to do things.</p>



<p class="wp-block-paragraph">For example:</p>



<ul class="wp-block-list">
<li>When investigating a failed deployment, check logs first, then recent config changes, then dependency updates.</li>



<li>When drafting a customer support reply, include the ticket summary, likely cause, recommended fix, and next step.</li>



<li>When creating a database-aware agent, scan table comments, column comments, constraints, and recent workload patterns.</li>
</ul>



<p class="wp-block-paragraph">This is the kind of memory that helps an agent improve its process. That’s powerful because agents are often asked to operate in messy real-world environments. With procedural memory, it can reuse proven approaches.</p>



<p class="wp-block-paragraph">The value extends beyond just knowing things to actually knowing how to proceed.</p>



<h2 class="wp-block-heading">Entity memory</h2>



<p class="wp-block-paragraph">Entity memory stores facts about specific people, accounts, projects, systems, tickets, or objects.</p>



<p class="wp-block-paragraph">For example:</p>



<ul class="wp-block-list">
<li>Angie prefers practical examples over abstract explanations.</li>



<li>Customer Acme Corp has strict data residency requirements.</li>



<li>Ticket #4821 is related to a billing reconciliation issue.</li>
</ul>



<p class="wp-block-paragraph">Entity memory matters because many agent tasks are scoped around a particular thing.</p>



<p class="wp-block-paragraph">If I ask, &#8220;What do we know about Acme Corp?&#8221; I don’t want every memory in the system. I want memories attached to that customer.</p>



<p class="wp-block-paragraph">This is also where memory safety becomes important.</p>



<p class="wp-block-paragraph">Agents should not accidentally mix memories between users, customers, or projects. A memory system needs strong scoping so one user&#8217;s context does not leak into another user&#8217;s response.</p>



<h2 class="wp-block-heading">Working memory</h2>



<p class="wp-block-paragraph">Working memory is the short-term scratchpad for the current task.</p>



<p class="wp-block-paragraph">This is where the agent keeps temporary information while reasoning through a problem.</p>



<p class="wp-block-paragraph">Working memory is usually not meant to last forever. It’s useful during the task, but it may not deserve to become durable memory.</p>



<p class="wp-block-paragraph">If an agent stores every temporary thought as long-term memory, the memory store gets noisy very quickly. The agent may later retrieve half-baked assumptions as if they were facts, which is dangerous.</p>



<p class="wp-block-paragraph">Not everything the agent observes or thinks should be remembered permanently.</p>



<h2 class="wp-block-heading">Summary memory</h2>



<p class="wp-block-paragraph">Summary memory is one many agent users are familiar with. It deals with the problem of context windows being limited.</p>



<p class="wp-block-paragraph">Even with large context models, you can’t keep appending forever. At some point, you need to compress.</p>



<p class="wp-block-paragraph">Summary memory stores a compact version of a longer thread or context window. The original details can still live in the thread, but the prompt gets a smaller representation.</p>



<p class="wp-block-paragraph">For example, instead of sending 80 turns of conversation, the agent might send:</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">The user is building a SaaS customer support agent. They prefer Python and FastAPI, deploy on OCI, and want the agent to retrieve past tickets before drafting replies. They are currently evaluating memory strategies for production usage.</p>
</blockquote>



<h2 class="wp-block-heading">Why memory is hard for agents</h2>



<p class="wp-block-paragraph">At first, memory sounds straightforward: store things, retrieve them later.</p>



<p class="wp-block-paragraph">But the hard part is judgment, not storage.</p>



<p class="wp-block-paragraph">What should be remembered? If the user says, &#8220;I usually prefer Python,&#8221; that’s probably worth remembering. If they say, &#8220;Let&#8217;s try Python for this one experiment,&#8221; maybe not. The agent needs to distinguish durable details from temporary context.</p>



<p class="wp-block-paragraph">When should memory be updated? People change their minds, and systems and requirements change. If a user used to prefer FastAPI but now works mostly in Java, should the old memory be deleted, overwritten, or kept with a timestamp? A memory system needs a correction strategy.</p>



<p class="wp-block-paragraph">How much memory should be retrieved? Retrieving too little means the agent misses important context. Retrieving too much means the prompt becomes noisy. This balance matters as more context isn’t always better.</p>



<p class="wp-block-paragraph">How do we prevent memory leaks? If memories are shared across users, agents, or tenants, scoping is critical. The agent should only retrieve memories it’s allowed to use. This is especially important in enterprise systems where agents may operate across many customers, teams, or workflows.</p>



<p class="wp-block-paragraph">How do we know whether memory helped? Memory should improve the agent&#8217;s behavior. It should reduce repeated questions, improve continuity, lower token usage, and help the agent produce more relevant responses. If memory just adds complexity without improving outcomes, it isn’t doing its job.</p>



<h3 class="wp-block-heading">How Oracle is approaching agent memory</h3>



<p class="wp-block-paragraph">Richmond was gracious enough to share how Oracle is tackling this with the <a href="https://fandf.co/4wYhJvB" target="_blank" rel="noreferrer noopener">Oracle AI Agent Memory Package (OAMP)</a>, built on top of Oracle AI Database 26ai.</p>



<p class="wp-block-paragraph">Yes, an AI database! Think of it as a database that can store and query the kinds of data AI applications need, not just rows and columns. That includes embeddings and JSON documents along with text search and regular SQL. These live together in the database, so an agent does not have to bounce between separate systems just to gather context.</p>



<p class="wp-block-paragraph">The idea is to make Oracle AI Database the memory core for agents. Instead of stitching together a vector database, a relational database, a document store, and custom thread management, OAMP provides agent-friendly memory primitives on top of a database that already supports multiple data access patterns.</p>



<p class="wp-block-paragraph">At a high level, OAMP gives you:</p>



<ul class="wp-block-list">
<li>Users and agents to scope memory ownership</li>



<li>Memories for durable facts and extracted knowledge</li>



<li>Threads for conversation history and continuity</li>



<li>Context cards for compact, prompt-ready memory retrieval</li>



<li>Summaries for long-running conversations</li>



<li>Vector search for semantic recall</li>



<li>Database-backed persistence so memory survives restarts</li>
</ul>



<p class="wp-block-paragraph">This matters because, again, agent memory is not only a vector search problem. Some memory needs semantic retrieval. Some need ordered reads or exact SQL filtering. A database-backed memory system gives you room to support all of those patterns.</p>



<p class="wp-block-paragraph">Here&#8217;s a small example of what that looks like in code:</p>



<pre class="wp-block-code"><code>from oracleagentmemory.core import OracleAgentMemory

from oracleagentmemory.core.llms import Llm

client = OracleAgentMemory(

    connection=connection,

    embedder="text-embedding-3-small",

    llm=Llm("gpt-5.5"),

    extract_memories=True,

    schema_policy="create_if_necessary",

)

client.add_user(

    "angie",

    "Developer exploring agent memory patterns."

)

client.add_agent(

    "memory-demo-agent",

    "Assistant that demonstrates Oracle AI Agent Memory."

)

client.add_memory(

    "Angie is fascinated by agent memory and prefers practical examples over abstract explanations.",

    user_id="angie",

    agent_id="memory-demo-agent",

)

</code></pre>



<p class="wp-block-paragraph">There are a few important ideas packed into this snippet.</p>



<p class="wp-block-paragraph">The OracleAgentMemory client is the bridge between the agent application and Oracle AI Database. The database connection tells OAMP where memory lives. The embedder tells it how to turn memory text into vectors for semantic retrieval. The LLM enables automatic memory extraction and summary generation. And <code>schema_policy="create_if_necessary"</code> lets OAMP manage the underlying memory schema instead of making every application reinvent it.</p>



<p class="wp-block-paragraph">The user and agent registration may look like simple setup code, but it’s actually part of the memory model. Memories need ownership. In a real system, you don’t want one user&#8217;s preferences showing up in another user&#8217;s session, and you don’t want memories written by one agent casually mixed with another agent&#8217;s context. The user ID and agent ID give the memory layer a way to scope what gets stored and retrieved.</p>



<p class="wp-block-paragraph">The <code>add_memory()</code> call stores a durable fact. This is a piece of information the agent may need later, even if the exact conversation has moved on.</p>



<p class="wp-block-paragraph">Given this, we can now recall memories.</p>



<pre class="wp-block-code"><code>results = client.search(

    "how should I explain this topic to Angie?",

    user_id="angie",

    max_results=3,

)
</code></pre>



<p class="wp-block-paragraph">This <code>search()</code> call shows the part that makes semantic memory useful. The query doesn&#8217;t have to match the stored sentence exactly. We stored that I prefer practical examples, but we searched for how to explain something to me. Those are different words but related in meaning. That&#8217;s the point.</p>



<h2 class="wp-block-heading">Threads and context cards</h2>



<p class="wp-block-paragraph">Durable memories are only part of the picture. Agents also need conversation continuity.</p>



<p class="wp-block-paragraph">With OAMP, a thread can represent a real work session, such as an agent helping investigate a production issue:</p>



<pre class="wp-block-code"><code>from oracleagentmemory.apis.thread import Message

thread = client.create_thread(

    user_id="angie",

    agent_id="support-triage-agent",

)

thread.add_messages(&#91;

    Message(

        role="user",

        content="Customer Acme Corp is seeing intermittent checkout failures after the latest deployment.",

    ),

    Message(

        role="assistant",

        content="I'll check recent deployment notes, related incidents, and payment service logs.",

    ),

    Message(

        role="user",

        content="Focus on the payment gateway first. We saw similar timeout errors last quarter.",

    ),

])
</code></pre>



<p class="wp-block-paragraph">This is much closer to how memory shows up in real agent applications. The useful context is not just that messages were exchanged. It&#8217;s that this thread is about Acme Corp, checkout failures, a recent deployment, the payment gateway, and a related incident from last quarter.</p>



<p class="wp-block-paragraph">When it’s time to call the model, instead of passing the entire raw thread, you can ask for a context card:</p>



<pre class="wp-block-code"><code>card = thread.get_context_card()</code></pre>



<p class="wp-block-paragraph">The context card gives the agent a compact block of relevant memory to use in the next prompt.</p>



<p class="wp-block-paragraph">Conceptually, the prompt becomes:</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">System: You are a helpful assistant. Use the provided memory context.</p>



<p class="wp-block-paragraph">Memory context: [context card]</p>



<p class="wp-block-paragraph">User: What did we decide earlier?</p>
</blockquote>



<p class="wp-block-paragraph">This is a much cleaner pattern than appending every message forever.</p>



<h3 class="wp-block-heading">Automatic memory extraction</h3>



<p class="wp-block-paragraph">OAMP can also extract memories from conversation.</p>



<p class="wp-block-paragraph">For example, if the user says:</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">I prefer Python over TypeScript for backend work. I usually deploy FastAPI apps on OCI behind an API gateway.</p>
</blockquote>



<p class="wp-block-paragraph">The memory system can extract durable facts such as:</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">The user prefers Python over TypeScript for backend work.</p>



<p class="wp-block-paragraph">The user deploys FastAPI applications on Oracle Cloud Infrastructure behind an API gateway.</p>
</blockquote>



<p class="wp-block-paragraph">That means the application does not have to manually call <code>add_memory()</code> for every useful fact.</p>



<p class="wp-block-paragraph">A smart thread can be configured like this:</p>



<pre class="wp-block-code"><code>thread = client.create_thread(

    user_id="angie",

    agent_id="memory-demo-agent",

    memory_extraction_frequency=2,

    memory_extraction_window=4,

    enable_context_summary=True,

    context_summary_update_frequency=2,

)</code></pre>



<p class="wp-block-paragraph">This tells the system to periodically inspect recent messages, extract durable memories, and maintain a running summary.</p>



<p class="wp-block-paragraph">Here is where agent memory starts to feel more like a living part of the agent architecture vs just a data structure.</p>



<h2 class="wp-block-heading">Teaching an agent about a database</h2>



<p class="wp-block-paragraph">One of the most interesting examples Richmond and I discussed was using memory to teach an agent about a database.</p>



<p class="wp-block-paragraph">Imagine an enterprise data agent that needs to answer questions about a schema it has never seen before. Instead of fine-tuning a model, the agent can scan the database catalog and store what it learns as memory.</p>



<p class="wp-block-paragraph">It might inspect:</p>



<ul class="wp-block-list">
<li>ALL_TABLES for table names and row counts</li>



<li>ALL_TAB_COLUMNS for column names and types</li>



<li>ALL_TAB_COMMENTS for human-written table descriptions</li>



<li>ALL_COL_COMMENTS for column descriptions</li>



<li>ALL_CONSTRAINTS for primary keys and foreign keys</li>



<li>V$SQL for recent workload patterns</li>
</ul>



<p class="wp-block-paragraph">Then it can convert those technical details into natural-language memories.</p>



<p class="wp-block-paragraph">For example:</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">Table SUPPLYCHAIN.VESSELS stores individual ships owned or operated by carriers. It includes vessel identifiers, carrier relationships, and operational metadata.</p>
</blockquote>



<p class="wp-block-paragraph">Now when a user asks:</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">Where would I find information about ships and carriers?</p>
</blockquote>



<p class="wp-block-paragraph">The agent can retrieve the relevant schema memory by meaning.</p>



<p class="wp-block-paragraph">This is a beautiful pattern because it avoids one of the common traps with agents expecting the model to already know your private system.</p>



<p class="wp-block-paragraph">It doesn&#8217;t. And that&#8217;s okay.</p>



<p class="wp-block-paragraph">You can teach it by turning your system&#8217;s metadata into memory.</p>



<p class="wp-block-paragraph">The more I learn about agent memory, the more I believe this will be one of the defining pieces of agent architecture.</p>



<p class="wp-block-paragraph">Tool calling lets agents act. Planning lets agents decide what to do. Memory lets agents build continuity.</p>



<p class="wp-block-paragraph">With memory, we can start designing agents that feel less like one-off prompt responders and more like persistent collaborators.</p>



<p class="wp-block-paragraph">Of course, this also raises the bar. Memory has to be scoped, auditable, correctable, and intentionally retrieved. Bad memory is worse than no memory. So the challenge is not simply giving agents memory but giving them the right memory architecture.</p>



<p class="wp-block-paragraph">Oracle&#8217;s OAMP approach is one way to make that system concrete: users, agents, memories, threads, context cards, summaries, and database-backed retrieval.</p>



<p class="wp-block-paragraph">And while the implementation details matter, the bigger idea is that if we want agents to be useful beyond a single prompt, they need a way to remember.</p>



<p class="wp-block-paragraph">Not everything. But enough to carry context forward.</p>
]]></content:encoded>
							<wfw:commentRss>https://www.oreilly.com/radar/agent-memory/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
							</item>
		<item>
		<title>Agentic Code Review</title>
		<link>https://www.oreilly.com/radar/agentic-code-review/</link>
				<comments>https://www.oreilly.com/radar/agentic-code-review/#respond</comments>
				<pubDate>Fri, 26 Jun 2026 15:50:43 +0000</pubDate>
					<dc:creator><![CDATA[Addy Osmani]]></dc:creator>
						<category><![CDATA[AI & ML]]></category>
		<category><![CDATA[This Week in AI]]></category>
		<category><![CDATA[Commentary]]></category>

		<guid isPermaLink="false">https://www.oreilly.com/radar/?p=18997</guid>

		
					<media:content 
				url="https://www.oreilly.com/radar/wp-content/uploads/sites/3/2026/06/Agentic-code-review-1-e1782489194185.png" 
				medium="image" 
				type="image/png" 
				width="231" 
				height="196" 
			/>

			<media:thumbnail 
				url="https://www.oreilly.com/radar/wp-content/uploads/sites/3/2026/06/Agentic-code-review-1-e1782489194185-160x160.png" 
				width="160" 
				height="160" 
			/>
		
		
				<description><![CDATA[The following article originally appeared on Addy Osmani’s blog site and is being republished here with the author’s permission. Coding agents are extraordinarily good now, and getting better fast. The interesting consequence is that the hard part of engineering moved from writing code to deciding whether to trust it, which makes review the most leveraged [&#8230;]]]></description>
								<content:encoded><![CDATA[
<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph"><em>The following article originally appeared on <a href="https://addyosmani.com/blog/agentic-code-review/" target="_blank" rel="noreferrer noopener">Addy Osmani’s blog site</a> and is being republished here with the author’s permission.</em></p>
</blockquote>



<p class="wp-block-paragraph"><em>Coding agents are extraordinarily good now, and getting better fast. The interesting consequence is that the hard part of engineering moved from writing code to deciding whether to trust it, which makes review the most leveraged skill in software right now. How you approach it depends enormously on who you are: A solo developer with no users and a team maintaining a 10-year-old application are not solving the same problem.</em></p>



<p class="wp-block-paragraph">I am more optimistic about agentic engineering than I have ever been. The agents are genuinely good, they get better every month, and on an ordinary day I now ship things I would not have attempted a year ago. This write-up is a map of where the interesting work went, because it did move, and most teams have not fully caught up to where.</p>



<p class="wp-block-paragraph">Code review used to work because of a happy accident of relative speed. A senior engineer could read code faster than a junior could write it, so review kept pace without anyone designing it to, and the team absorbed how the system fit together as a side effect of reading each other’s diffs. A lot of that was not deliberate. It fell out of a single fact: Writing code was the slow, expensive part, and reading it was cheap and fast.</p>



<p class="wp-block-paragraph">That fact no longer holds. An agent will produce a thousand lines of often solid, well-formatted code in less time than it takes me to read this paragraph, while a human’s reading speed has not changed since roughly the day we started staring at screens for a living. So the constraint moved downstream, to the one step that did not get faster: a person being confident the change is right. I don’t think that’s a loss. It’s the most leveraged place in software to be good right now, and it’s where I’ve put most of my attention this year.</p>



<p class="wp-block-paragraph">There’s a happy twist here that shapes the rest of this piece. The same tools generating all that extra code are also the best thing I have for keeping up with it. On my own projects, including the popular open source ones, I now point Claude Code or Codex at a batch of incoming PRs and have them triage the queue for me, and that has genuinely changed how I spend my time. So this is not an anti-AI argument, and I will come back to exactly how I use AI.</p>



<p class="wp-block-paragraph">It’s also not a data dump, and not another round of whether letting a model write your code is wonderful or the end of the craft, because that framing is useless. The only answer that survives contact with a real codebase is that it depends entirely on who you are. A developer vibe-coding a side project only a dozen people will ever run and a team keeping a 10-year-old enterprise system alive for another quarter share almost no constraints worth naming, and most of the advice in circulation is really one of those two people telling the other how to live.</p>



<h2 class="wp-block-heading">What the 2026 data actually shows</h2>



<p class="wp-block-paragraph"><strong>The productivity gains from AI are real, but raw output overstates them: about four times the code for a tenth more delivered value. The gap between those numbers is review work, which is exactly why review is where the leverage now sits.</strong></p>



<p class="wp-block-paragraph">For a couple of years this was an anecdotal argument. It’s now measured at scale, by organizations with no shared agenda and in several cases competing commercial interests, and the measurements keep pointing the same way: AI pushes output sharply up and pushes both quality and reviewability down.</p>



<p class="wp-block-paragraph"><a href="https://www.faros.ai/blog/ai-acceleration-whiplash-takeaways" target="_blank" rel="noreferrer noopener">Faros AI</a> instrumented 22,000 developers across 4,000 teams and tracked what happened as teams moved from low to high AI adoption. This is March 2026 data, about as current as anything here. The upside is real. Developers merge considerably more PRs and complete more work and throughput per engineer climbs. Then the rest of the report:</p>



<ul class="wp-block-list">
<li>Code churn is up <strong>861%</strong>.</li>



<li>The incidents-to-PR ratio is up <strong>242.7%</strong>.</li>



<li>The per-developer defect rate is up from <strong>9%</strong> to <strong>54%</strong>.</li>



<li>Median review <em>duration</em> is up <strong>441.5%</strong>, with time to first review and average review time both roughly doubling.</li>



<li>PRs merged with zero review are up <strong>31.3%</strong>.</li>
</ul>



<p class="wp-block-paragraph">The last figure is the one I find hardest to dismiss, because nobody chose to stop reviewing. Reviewers simply couldn’t keep pace with the volume, so code began merging unread, and that became normal. The detail I keep returning to is that teams with mature, disciplined engineering practices were hit just as hard as everyone else. Good process didn’t protect them, because the volume arrived faster than any process was designed to absorb.</p>



<p class="wp-block-paragraph"><a href="https://www.businesswire.com/news/home/20251217666881/en/CodeRabbits-State-of-AI-vs-Human-Code-Generation-Report-Finds-That-AI-Written-Code-Produces-1.7x-More-Issues-Than-Human-Code" target="_blank" rel="noreferrer noopener">CodeRabbit</a> studied 470 open source PRs in December 2025, 320 AI-coauthored and 150 human-only, and found the AI changes carried roughly <strong>1.7x more issues</strong>. Logic and correctness problems were up about 75%, security issues were 1.5 to 2x more common, and readability problems more than tripled. The company’s AI director, David Loker, described these as “predictable, measurable weaknesses that organizations must actively mitigate.” Predictable is the operative word. These are known, locatable weaknesses, which is good news: It means a review process, human or automated, can be aimed straight at them.</p>



<p class="wp-block-paragraph">One caveat to hold throughout: CodeRabbit and Faros both sell into this market, so their framing is not disinterested. That doesn’t make the numbers wrong—the effect sizes are large and consistent across unrelated sources—but vendor research deserves to be read with that in mind.</p>



<p class="wp-block-paragraph"><a href="https://www.gitclear.com/research/ai_tool_impact_on_developer_productive_output_from_2022_to_2025" target="_blank" rel="noreferrer noopener">GitClear</a> has the single number I would lead with. In its productivity data through 2025, daily AI users produce around <strong>4x the raw output</strong> of nonusers, but measured against their own output a year earlier, the real productivity gain is only about <strong>12%</strong>. You’re generating roughly four times the code for something like a tenth more delivered value, and a human still has to review all of it. To GitClear’s credit, CEO Bill Harding is explicit that some of even that 12% is selection bias, because stronger developers are concentrated in the AI cohort.</p>



<p class="wp-block-paragraph"><a href="https://github.blog/ai-and-ml/generative-ai/agent-pull-requests-are-everywhere-heres-how-to-review-them/" target="_blank" rel="noreferrer noopener">GitHub</a> reports that Copilot review has now run over 60 million reviews, a 10x increase in under a year, and more than one in five reviews on the platform involves an agent. This is no longer a niche practice. It’s how code gets made.</p>



<p class="wp-block-paragraph">Four datasets, four methods, one conclusion. We poured machine-speed output into a system built for human-speed work. The bottleneck didn’t disappear; it <a href="https://addyosmani.com/blog/verification-bottleneck/" target="_blank" rel="noreferrer noopener">moved to verification</a>, and review is where that bill comes due.</p>



<h2 class="wp-block-heading">Everyone is solving a different problem</h2>



<p class="wp-block-paragraph"><strong>How much review a change needs depends almost entirely on its blast radius, and most advice you read was written by someone operating for a very different one.</strong></p>



<p class="wp-block-paragraph">Almost all the alarming data above comes from enterprise telemetry and from open source maintainers being overwhelmed. It’s entirely real if that is your situation. If you’re one person shipping something a handful of people will ever run, much of it simply doesn’t apply to you, and you shouldn’t be made to feel otherwise.</p>



<p class="wp-block-paragraph">Three variables determine where you sit:</p>



<ul class="wp-block-list">
<li><strong>Blast radius</strong><strong>: </strong>What happens when it breaks? Nothing, or angry users and money and PII on the line?</li>



<li><strong>How long the code lives</strong>: A throwaway prototype you might rewrite next week, or a codebase you’ll maintain for years?</li>



<li><strong>How many people need to understand it</strong>: Just you holding the whole thing in your head, or a team that has to share ownership over time?</li>
</ul>



<p class="wp-block-paragraph">Run the same diff through those three variables, and “good review” means genuinely different things.</p>



<p class="wp-block-paragraph">If you’re working solo on a greenfield project with no users, review’s second job, distributing knowledge across a team, doesn’t exist for you. You <em>are</em> the team. The reasonable move is to lean hard on <a href="https://addyosmani.com/blog/verification-bottleneck/" target="_blank" rel="noreferrer noopener">tests and automation</a>, review the parts that genuinely matter, and accept a lighter touch on the rest. Duplication and churn cost far less when the code may not exist in a month and nobody is paged at 3:00am when it breaks. The catch, and people learn this one painfully, is that it only works if the tests are real. Skipping review without a safety net doesn’t remove the work. It <a href="https://addyosmani.com/blog/intent-debt/" target="_blank" rel="noreferrer noopener">defers it</a> at a higher price, and standards slip when no one is there to push back. “No users” is permission to defer review. It isn’t permission to skip verification.</p>



<p class="wp-block-paragraph">Then the project gets users. This is the dangerous middle, and the crossing is rarely noticed at the time. Review’s bug-catching role suddenly matters, because bugs now hurt people, and its knowledge-sharing role switches on, because it’s no longer only you. Teams keep their solo-era habits a few months too long, and then there’s a postmortem and the Faros numbers stop being a chart and become their own dashboard.</p>



<p class="wp-block-paragraph">At the far end is the large organization with an old codebase and many users. Here every alarming figure lands at full strength. A duplicated helper isn’t a style nit; it’s a future bug surface and a maintenance cost that compounds for years. A change nobody understood is <a href="https://addyosmani.com/blog/comprehension-debt/" target="_blank" rel="noreferrer noopener">comprehension debt</a> that becomes someone’s on-call incident. Review is doing several jobs at once, and the volume of agent output quietly breaks all of them. The Faros finding about mature teams is aimed squarely here.</p>



<p class="wp-block-paragraph">So the point is not “Enterprises should be cautious and solo developers can relax.” It’s that the purpose of review changes with your position, so the rules have to change with it. Bolt an enterprise’s locked-down multi-agent evidence-required pipeline onto a two-person prototype and you’ve added friction for no benefit. Run “tests pass, ship it” on a payments system and you’ve built an incident generator with a green checkmark on top. Most bad advice in this space is one position on that spectrum prescribing to another.</p>



<h2 class="wp-block-heading">What review is actually for now</h2>



<p class="wp-block-paragraph"><strong>Review was built to check an author’s reasoning. An agent does reason, but that reasoning is usually thrown away rather than attached to the code, so the reviewer has to reconstruct a rationale that never made it into the diff. The good news is that this is a tooling problem, and capturing the reasoning makes review dramatically easier.</strong></p>



<p class="wp-block-paragraph">This is the part that genuinely changed, and I think it is underappreciated.</p>



<p class="wp-block-paragraph">When a human writes code, intent comes along for free. The reasoning, the alternatives weighed and discarded, lived in the author’s head, and review was you checking that reasoning. Modern agents do reason, often visibly, producing thinking traces and weighing options and explaining themselves as they go. The catch is that this reasoning is usually discarded the moment the diff is produced. It’s rarely captured and rarely attached to the PR, and in any case it is the agent’s reasoning about how to implement the task, not a human’s judgment about whether it was the right task to begin with. So review shifts from checking reasoning that sits in front of you to reconstructing intent that never got written down, which is harder and slower, and we keep acting surprised that it takes <a href="https://www.faros.ai/blog/ai-acceleration-whiplash-takeaways" target="_blank" rel="noreferrer noopener">441% longer</a>.</p>



<p class="wp-block-paragraph">A 2026 paper, “<a href="https://arxiv.org/html/2604.16754v1" target="_blank" rel="noreferrer noopener">AI Slop and the Software Commons</a>,” analyzed 1,154 posts across 15 Reddit and Hacker News threads where developers discussed “AI slop.” One line from a developer has stayed with me: reviewing an agent’s PR made them “the first human being to ever lay eyes on this code.”</p>



<p class="wp-block-paragraph">That sentiment points straight at the fix. In normal review, the author already understood the change and you were checking their work. With an agent PR, nobody has reconstructed the why yet, and the reviewer is the first to try. As the paper puts it, review “wasn’t built to recover missing intent.” The encouraging part is that missing intent is recoverable: The reasoning existed; we just discarded it. Have the agent state what it was trying to do and what it ruled out, then capture it <a href="https://addyosmani.com/blog/intent-debt/" target="_blank" rel="noreferrer noopener">as a decision log</a> on the PR, and a large part of the reconstruction cost disappears. This is a tooling problem, and tooling problems get solved.</p>



<p class="wp-block-paragraph">None of which makes “have the AI review the AI” a complete answer on its own. A second model with different priors genuinely catches real bugs, and it catches a lot of them, which is why you should run one. What it doesn’t supply is the human judgment about whether this is the right change to build in the first place. That judgment stays with a person, and it happens to be the most interesting part of the job and the part worth keeping.</p>



<h2 class="wp-block-heading">The tools are good, but not always for the reason they advertise</h2>



<p class="wp-block-paragraph"><strong>The current AI reviewers are genuinely good, and they occasionally don’t flag the same lines as each other, so the right move is not picking the best one but running two that are built differently.</strong></p>



<p class="wp-block-paragraph">The dedicated AI review tools are good now, and I think you should be running at least one on everything, side projects included. <a href="https://www.coderabbit.ai/" target="_blank" rel="noreferrer noopener">CodeRabbit</a> is the most widely deployed and topped the independent <a href="https://www.coderabbit.ai/blog/coderabbit-tops-martian-code-review-benchmark" target="_blank" rel="noreferrer noopener">Martian benchmark</a> (January to February 2026) on F1, at around 49% precision with the best recall in the field. <a href="https://www.greptile.com/" target="_blank" rel="noreferrer noopener">Greptile</a> trades precision for recall, with around an 82% bug-catch rate against CodeRabbit’s 44% in one benchmark, at the cost of more false positives. <a href="https://claude.com/blog/code-review" target="_blank" rel="noreferrer noopener">Anthropic’s Code Review</a> reports under 1% of its findings marked incorrect by their engineers; the figure I would actually show a manager is that it raised their internal rate of PRs receiving a substantive review from 16% to 54%. The long tail of changes that used to get a glance and an approval now gets read by something.</p>



<p class="wp-block-paragraph">The most useful result I have seen this year isn’t from a vendor. An engineer <a href="https://dev.to/_vjk/best-ai-code-reviewer-in-2026-we-ran-4-in-parallel-for-3-weeks-146-prs-679-findings-1c0f" target="_blank" rel="noreferrer noopener">ran four reviewers in parallel</a>, CodeRabbit, Sentry Seer, Greptile and Cursor BugBot, across 146 real PRs and 679 findings over three and a half weeks:</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">Of 617 distinct flagged locations, <strong>93.4% were caught by exactly one of the four tools</strong>. 6% by two. Almost none by three. <strong>None at all by all four</strong>.</p>
</blockquote>



<p class="wp-block-paragraph">The four tools never once flagged the same line. Each was strong at a different class of problem: Greptile with near-zero false positives on correctness and architecture, CodeRabbit with the widest net and one-click fixes, and Seer best on production-failure severity. That is the adversarial review argument demonstrated on a real codebase rather than in a paper. Heterogeneity is the whole point. Four copies of one model is a single reviewer with a larger invoice, whereas four genuinely different reviewers surface a set of bugs no single member could find alone, the human included.</p>



<p class="wp-block-paragraph">In practice: Do not agonize over the single best tool because there isn’t one. At the high-stakes end, run two with deliberately different characters. (The experiment above paired Greptile for everyday correctness with Seer for production-failure severity, with almost no overlap.) If you are solo, one good reviewer plus real tests is plenty. And whatever the marketing says, measure it on your own code, because every one of these results was specific to a particular codebase, and yours will be too.</p>



<h2 class="wp-block-heading">Should we just let AI review more of it?</h2>



<p class="wp-block-paragraph"><strong>The machine is already reviewing more of your code than you are. The only real decision left is whether you do that deliberately, and the amount of human you keep should scale with your blast radius.</strong></p>



<p class="wp-block-paragraph">I keep hearing a question from experienced engineers that would have been heresy a year ago: Should the machine be doing more of the reviewing, perhaps most of it? I no longer think that’s a foolish question.</p>



<p class="wp-block-paragraph">The uncomfortable part is that AI review works. Under 1% of Anthropic’s findings are marked wrong; the tools catch bugs humans read straight past, and they don’t get tired on the 30th PR of the day, which is exactly when a human is least reliable. Meanwhile humans are visibly not keeping up: Zero-review merges are up 31% and review times are up triple digits. In a real sense the machine is already reviewing more of the code than we are. The honest framing is not “Should we let AI review more?” but “AI is already doing it, so are we going to be deliberate about that or let it happen by default while pretending humans still read everything?”</p>



<p class="wp-block-paragraph"><a href="https://addyosmani.com/blog/loop-engineering/" target="_blank" rel="noreferrer noopener">Loop engineering</a> sharpens this. The premise of a loop is that you stop being the person who prompts the agent and instead build a system that prompts it, and a central part of that system is a judge: an agent that decides whether the work is done before moving on. The reviewer is the next role being designed out of the inner loop, on purpose. We spent a year automating the writing, and the loops are now automating the checking, and the human keeps getting pushed up and out. “Where does the human stay?” is not a seminar question; it’s something you decide every time you wire up a loop, whether or not you realize you’re deciding it.</p>



<p class="wp-block-paragraph">Where I currently land, and I hold this loosely: The answer is not “a human reads every line.” That’s over. The volume ended it, and anyone insisting otherwise is describing a world that no longer exists. But it’s also not “let the loop review itself and walk away.” When an agent writes the code, another reviews it, and a third judges it, you’ve a closed loop of models with broadly correlated blind spots, especially when they come from the same family, confidently agreeing in the same places. A confident “looks good” with no human anywhere in it is <a href="https://addyosmani.com/blog/cognitive-surrender/" target="_blank" rel="noreferrer noopener">borrowed confidence</a>: The system’s certainty becomes yours, and nobody actually understood anything. The loop can be both very sure and very wrong, with no human left to tell the difference.</p>



<p class="wp-block-paragraph">So the human doesn’t leave; the human moves up a level. You stop reviewing every diff and start owning the parts that do not transfer to a model. Accountability, because you can’t page a model at 3:00am. The judgment of whether this is even the right change to build, as distinct from whether the code is correct. The high-blast-radius gates where being wrong is expensive. And the awkward one: the behavior nobody specified, because a model reviews the code that exists and rarely flags the requirement that nobody thought to write down, which remains <a href="https://addyosmani.com/blog/comprehension-debt/" target="_blank" rel="noreferrer noopener">a human-shaped gap</a> I don’t expect to close soon. Human in the loop becomes human on the loop: sampling, spot-checking and auditing the system rather than reading every PR, and spending your limited attention where being wrong would actually hurt.</p>



<p class="wp-block-paragraph">This is already how I work on my own projects, including the open source ones that now see more PRs in a day than I could carefully read in an evening. I point Claude Code or Codex at a batch of incoming PRs and ask for a first pass: a high-level read of what looks safe to merge, what needs more work, and what’s genuinely high-risk. I don’t auto-merge on the result, and I don’t lazy-merge whatever it approves. What it gives me is a way to allocate attention. I can spend a few minutes confirming the changes it considers low risk, and put real, careful time into the ones it flags as dangerous. The detail that matters is that this isn’t my old review hour made slightly faster. It’s a different shape of hour, and at the volume I now deal with, it’s the main reason the queue stays survivable at all.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1600" height="900" src="https://www.oreilly.com/radar/wp-content/uploads/sites/3/2026/06/image-18-1600x900.png" alt="" class="wp-image-18998" srcset="https://www.oreilly.com/radar/wp-content/uploads/sites/3/2026/06/image-18-1600x900.png 1600w, https://www.oreilly.com/radar/wp-content/uploads/sites/3/2026/06/image-18-300x169.png 300w, https://www.oreilly.com/radar/wp-content/uploads/sites/3/2026/06/image-18-768x432.png 768w, https://www.oreilly.com/radar/wp-content/uploads/sites/3/2026/06/image-18-1536x864.png 1536w, https://www.oreilly.com/radar/wp-content/uploads/sites/3/2026/06/image-18.png 2048w" sizes="auto, (max-width: 1600px) 100vw, 1600px" /><figcaption class="wp-element-caption"><em>Codex and Claude Code giving me a first-pass, risk-sorted read of a batch of PRs. The triage is the help. The merge decision stays mine.</em></figcaption></figure>



<p class="wp-block-paragraph">A more extreme version of the same move is Kun Chen, an ex-Meta L8 engineer now shipping around 40 PRs a day as a solo builder, <a href="https://creatoreconomy.so/p/how-this-ex-meta-l8-engineer-ships-40-prs-a-day-with-ai-kun-chen" target="_blank" rel="noreferrer noopener">who has largely stopped reviewing code</a>. It would be easy to dismiss this, except he is an L8, unusually good at the thing he stopped doing. He runs 20 to 30 agents in parallel and has moved his effort into the plan: He writes detailed plans up-front; the agents run for hours against them, and he says plan quality determines how long they can run unattended. That’s the move I described above in its purest form. It’s worth being precise about what actually happened, because it is not that he stopped verifying. The intent didn’t vanish; he wrote it down himself in the plan, so the “first human to ever lay eyes on this” problem is half-solved. A human did understand the why, just up-front rather than after. And he didn’t work without a net. He built an automated review gate (which he calls No Mistakes) that checks the code before it merges, and he stays on escalation when an agent gets stuck. The human does the expensive thinking before the code exists, and the machine does the line-by-line afterward, which may well be the shape of where this goes.</p>



<p class="wp-block-paragraph">But he’s a solo builder with no large team and no decade-old system full of landmines beneath him. The exact conditions that make 40 PRs a day without review rational for him are conditions most readers don’t have. Copy his workflow onto a team shipping to many users and you reproduce the Faros numbers on your own dashboard. Kun isn’t wrong; he’s just a long way down one specific end of the spectrum.</p>



<p class="wp-block-paragraph">Which is the spectrum point again. Solo with no users: Letting AI review almost all of it is a defensible 2026 position, and you shouldn’t feel guilty about it. Maintaining something large for many people: Let the machine handle the first pass, the second pass, and the boring 90%, but keep a real human on the load-bearing paths and don’t let the loop close completely on anything that can hurt someone. How much human you keep is a dial, and you set it by blast radius, not by guilt.</p>



<h2 class="wp-block-heading">What to actually do</h2>



<p class="wp-block-paragraph"><strong>Stop reviewing everything to the same depth. Spend scarce human attention only where being wrong is costly, and let cheap deterministic gates and AI reviewers handle the rest.</strong></p>



<p class="wp-block-paragraph">The organizing idea is to match review effort to the cost of being wrong, push the cheap deterministic work as early as possible, and reserve human attention for what only humans can do.</p>



<p class="wp-block-paragraph"><strong>Tier by risk, not by author.</strong> A config change earns a linter and a glance. A payments path earns the full stack: types, tests, two different AI reviewers, a human who owns that system, and a security pass. Don’t spend a heavy review on boilerplate, and don’t wave through an auth change because the tests are green. The <a href="https://addyosmani.com/blog/verification-bottleneck/" target="_blank" rel="noreferrer noopener">layered approach</a> is the same everywhere; what changes is how many layers a given diff has to clear.</p>



<p class="wp-block-paragraph"><strong>Fast-fail the expensive tail.</strong> The most useful recent finding for teams drowning in agent PRs is “<a href="https://arxiv.org/html/2601.00753" target="_blank" rel="noreferrer noopener">Early-Stage Prediction of Review Effort</a>” (January 2026), which studied 33,707 agent-authored PRs. Agents are good at small, well-defined changes. Around 28% merge almost instantly, but they tend to “ghost” the moment they get subjective feedback, abandoning the back-and-forth that review actually is. (A companion 2026 paper found <a href="https://arxiv.org/html/2601.15195" target="_blank" rel="noreferrer noopener">reviewer abandonment accounted for 38% of rejected agent PRs</a>.) The researchers built a “circuit breaker” that predicts high-maintenance PRs from cheap signals like file types and patch size before a human looks, and it works well. Triage agent PRs up front, fast-track the trivial ones, and don’t let a person sink an hour into a sprawling change the agent will abandon as soon as you push back.</p>



<p class="wp-block-paragraph"><strong>Raise the bar for what you will even review.</strong> The fix for being buried isn’t locking down the repository. It’s <a href="https://www.builder.io/blog/developers-drowning-in-ai-prs" target="_blank" rel="noreferrer noopener">refusing to review changes that arrive without evidence</a>. Require, before review, a statement of what the change is for, a diff that isn’t 3,500 lines with no comments, the test output, and proof it was actually run. This is how you stop being the first human to read the code. You push the intent-reconstruction work back onto whoever submitted it, where it’s cheap, rather than absorbing it yourself, where it is expensive.</p>



<p class="wp-block-paragraph"><strong>Keep PRs small, deliberately.</strong> Agent PRs run large, <a href="https://www.faros.ai/blog/ai-acceleration-whiplash-takeaways" target="_blank" rel="noreferrer noopener">51% larger on average</a> in the Faros data, and reviewer engagement is one of the strongest predictors that a PR merges at all. A large unreviewable PR gets <a href="https://addyosmani.com/blog/comprehension-debt/" target="_blank" rel="noreferrer noopener">rejected outright</a> or, worse, rubber-stamped. Instruct your agents to produce small commits. A diff a human can actually read is now a design constraint, not a courtesy.</p>



<p class="wp-block-paragraph"><strong>Read the test changes more carefully than the code.</strong> This is the agent failure mode to watch. The agent changes behavior, then “fixes” the test by rewriting the assertion to match the new, broken behavior. A green check over 200 edited tests means nothing until you have confirmed the edits were correct. Treat any diff that rewrites many tests as a flag and read those first. Mutation testing earns its place here: Coverage tells you a line ran; mutation testing tells you whether the test would notice if that line were wrong.</p>



<p class="wp-block-paragraph"><strong>Treat CI as the wall that doesn’t move.</strong> Watch for the patterns <a href="https://github.blog/ai-and-ml/generative-ai/agent-pull-requests-are-everywhere-heres-how-to-review-them/" target="_blank" rel="noreferrer noopener">GitHub now warns reviewers about</a>: removed tests, skipped lint, lowered coverage thresholds, a duplicated helper that already exists elsewhere, and untrusted input flowing into a prompt. That last one deserves emphasis, because agent-built features are a fresh source of <a href="https://simonwillison.net/series/prompt-injection/" target="_blank" rel="noreferrer noopener">prompt injection</a>: If a change pipes user-controlled text into an LLM call without thinking about what that text can instruct the model to do, the vulnerability isn’t visible in the diff. It’s latent in the data that will arrive later. Agents will also weaken CI to make themselves pass, not maliciously, just gradient descent finding the cheapest path to green. Deterministic gates are the one part of the pipeline that can’t be talked out of their verdict by a confident paragraph, so keep them strict.</p>



<p class="wp-block-paragraph"><strong>A human owns the merge.</strong> A model can’t be paged and can’t be held responsible for what it shipped, so whoever clicks merge owns it. When an AI review says “looks good” in a calm, confident voice, it’s handing you <a href="https://addyosmani.com/blog/cognitive-surrender/" target="_blank" rel="noreferrer noopener">confidence it hasn’t necessarily earned</a>. Treat every AI review as a sensor, not a verdict: data, not a decision.</p>



<p class="wp-block-paragraph">If you are solo with no users, the tiering, the test-change discipline, and CI are most of what you need; the rest is overhead until people show up. If you’re a large organization, all of it is the baseline, and the triage and intake bar are the difference between a review process that scales and one that quietly collapses.</p>



<h2 class="wp-block-heading">What this means if you run a team</h2>



<p class="wp-block-paragraph"><strong>The bottleneck is no longer how fast you write code. It’s how fast a trusted human can be confident in a review. Cutting the people who provide that confidence because “AI made us faster” simply converts the saving into future incidents.</strong></p>



<p class="wp-block-paragraph">The binding constraint on shipping is now how fast a trusted human can be confident a change is correct. Any plan that treats generation as the bottleneck and review as free will quietly stall, with the velocity dashboard staying green the whole way.</p>



<p class="wp-block-paragraph">The Faros report is direct about this: QA and review work rises even as output rises, so reducing engineering headcount because “AI made us faster” is dangerous unless you have closed the review gap first. The senior-engineer tax (review time up by triple digits) falls hardest on the people you can least afford to bottleneck, and it is invisible to any metric that only counts merged PRs.</p>



<p class="wp-block-paragraph">Open source maintainers hit this wall first and hardest. The <a href="https://arxiv.org/html/2604.16754v1" target="_blank" rel="noreferrer noopener">steady stream of plausible but hollow contributions</a> costs real triage time even when those contributions are well-intentioned, and that’s the canary. Companies are next. The ones handling it well treat review capacity as a real resource to be measured, protected, and spent deliberately, not as slack that AI has freed up.</p>



<h2 class="wp-block-heading">Writing got cheap but understanding didn’t</h2>



<p class="wp-block-paragraph">Code review didn’t become less important when agents arrived. It became the central activity. Writing code is increasingly solved and getting cheaper by the month; the durable advantage is the system that lets you trust what was written.</p>



<p class="wp-block-paragraph">Don’t take the one-size answer in either direction. If you’re solo with no users, the enterprise horror stories about churn and duplication are a future risk, not today’s fire, so lean on your tests, review what matters, and stay honest that the deferred work is still owed. If you maintain something large for many people, every alarming number here is about you, and the only thing that holds is a tiered, evidence-required, deliberately heterogeneous review process with a human owning the merge.</p>



<p class="wp-block-paragraph">What’s constant across the whole spectrum is the underlying economics. We made writing cheap, and understanding stayed exactly as expensive as it has always been. The teams that do well over the next few years won’t be the ones generating the most code; they’ll be the ones who built a review system they can actually trust, and who never confuse “the tests passed” with “a person understands what this does and why.”</p>



<p class="wp-block-paragraph">Or, as Simon Willison keeps putting it, “<a href="https://simonwillison.net/2025/Dec/18/code-proven-to-work/" target="_blank" rel="noreferrer noopener">your job is to deliver code you have proven to work</a>.” Agents haven’t changed that. They have made “proving” the center of the job rather than an afterthought, and I think that’s a good trade. Understanding a system well enough to stand behind it is the most durable and most interesting skill in software, and there has never been a better time to get extraordinarily good at it.</p>
]]></content:encoded>
							<wfw:commentRss>https://www.oreilly.com/radar/agentic-code-review/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
							</item>
		<item>
		<title>This Week in AI: Who Controls the Loop?</title>
		<link>https://www.oreilly.com/radar/this-week-in-ai-who-controls-the-loop/</link>
				<comments>https://www.oreilly.com/radar/this-week-in-ai-who-controls-the-loop/#respond</comments>
				<pubDate>Fri, 26 Jun 2026 10:32:42 +0000</pubDate>
					<dc:creator><![CDATA[Michelle Smith]]></dc:creator>
						<category><![CDATA[Podcast]]></category>

		<guid isPermaLink="false">https://www.oreilly.com/radar/?p=18995</guid>

		
					<media:content 
				url="https://www.oreilly.com/radar/wp-content/uploads/sites/3/2026/05/0642572383770_This_Week_in_AI_Cover-scaled.jpg" 
				medium="image" 
				type="image/jpeg" 
				width="2560" 
				height="2560" 
			/>

			<media:thumbnail 
				url="https://www.oreilly.com/radar/wp-content/uploads/sites/3/2026/05/0642572383770_This_Week_in_AI_Cover-160x160.jpg" 
				width="160" 
				height="160" 
			/>
		
				<custom:subtitle><![CDATA[AI is moving from language to action, plus the geopolitics of frontier model access and Midjourney&#039;s full-body scanner]]></custom:subtitle>
		
				<description><![CDATA[This week host and Turing Post founder Ksenia Se threaded the latest news into a single argument: AI is moving out of conversation and into the operational loops where real work happens. From SpaceX’s $60 billion acquisition in the developer tools market to the G7’s debate about frontier model access to image generation company Midjourney’s [&#8230;]]]></description>
								<content:encoded><![CDATA[
<p class="wp-block-paragraph">This week host and <em><a href="https://www.turingpost.com/" target="_blank" rel="noreferrer noopener">Turing Post</a></em> founder Ksenia Se threaded the latest news into a single argument: AI is moving out of conversation and into the operational loops where real work happens. From SpaceX’s $60 billion acquisition in the developer tools market to the G7’s debate about frontier model access to image generation company Midjourney’s pivot to medical hardware, the stories all pointed in the same direction.</p>



<figure class="wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe loading="lazy" title="This Week in AI: Who Owns the Loop Where AI Does the Work? with Ksenia Se" width="500" height="281" src="https://www.youtube.com/embed/sXBWbiyT4ns?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
</div></figure>



<h2 class="wp-block-heading">When agents own the loop, the IDE becomes infrastructure</h2>



<p class="wp-block-paragraph">SpaceX&#8217;s acquisition of Anysphere, the company behind Cursor, for a <a href="https://www.cnbc.com/2026/06/16/spacex-spcx-cursor-acquisition-ipo.html" target="_blank" rel="noreferrer noopener">reported $60 billion in stock</a> is the kind of deal that looks straightforward until you think about what Cursor actually is. On the surface, it&#8217;s a popular AI-assisted code editor. (It’s also one of many in a highly competitive market.) However, Ksenia argued that that’s thinking too small, especially for Elon Musk. SpaceX may be angling to position Cursor as the new center of software work, in the same way GitHub became the center of the previous era.</p>



<p class="wp-block-paragraph">In the old model, GitHub owned the pull request. But in the new model, the question of who owns the full loop where agents read a repo, write code, open pull requests, run tests, handle failures, and enforce engineering standards is still open. GitHub still owns the system of record and is moving to defend it: Chief product officer Mario Rodriguez recently <a href="https://www.turingpost.com/p/mario-rodriguez-github-ai-coding-agents-copilot" target="_blank" rel="noreferrer noopener">told <em>Turing Post</em></a> that GitHub&#8217;s mission has shifted from human-developer collaboration to developer-and-agent collaboration, with the platform becoming agent-native across its APIs, UX, and underlying infrastructure. But as Ksenia explained, “Cursor’s advantage is that it owns the developer’s active coding surface” where the work starts.</p>



<p class="wp-block-paragraph">If agents write more code than humans, software infrastructure should be redesigned around agents from the start. Cursor was built for agents. GitHub was built for humans and is now playing catch-up. That architectural choice may matter more than any individual product feature.</p>



<h2 class="wp-block-heading">Frontier AI access is becoming a geopolitical question</h2>



<p class="wp-block-paragraph">The G7 summit this week included discussions about a <a href="https://www.reuters.com/legal/government/g7-leaders-discuss-trusted-partners-access-cutting-edge-us-ai-models-sources-say-2026-06-16/" target="_blank" rel="noreferrer noopener">&#8220;trusted partners&#8221; framework</a> that would give select allied nations access to advanced US AI models, following a <a href="https://www.reuters.com/technology/us-blocks-foreign-access-anthropics-most-advanced-ai-models-axios-reports-2026-06-13/" target="_blank" rel="noreferrer noopener">US order that restricted foreign nationals from accessing Anthropic’s frontier systems</a> on national security grounds. AI models that can write software, find vulnerabilities, and operate across tools are capability systems, not just productivity software. The access rules are catching up to that reality, although as Ksenia noted, things haven’t yet come into complete focus.</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">For a long time, AI regulation sounded like: How do we label synthetic media? How do we reduce hallucinations, prevent bias, make chatbots safer? Now the question is so much bigger. Who can use these capable systems? Can allies use them? Can cybersecurity firms outside the US use them? Can non-US employees at US labs use them? Can European companies use American models if those models are also strategically sensitive? This isn&#8217;t traditional software licensing anymore. This is capability access control.</p>
</blockquote>



<p class="wp-block-paragraph">The underlying tension behind the G7 conversation is the dual-use problem: A model capable enough to find software vulnerabilities for defense can also find them for offense. The “trusted partners” framework reflects the new geopolitics of AI as countries jockey with rivals to secure strategic benefits for themselves and their allies. It represents an alliance layer for AI access that applies access structures previously reserved for physical military hardware to capabilities too strategically important to make fully open and too useful to keep entirely locked down. As Ksenia noted, the alliance is “not literally NATO, but [it is founded on] the same kind of logic.”</p>



<p class="wp-block-paragraph">But access restrictions might also impact the talent that built these systems, who are increasingly not citizens of the country trying to control it. For instance, AI researcher Andrej Karpathy, recently hired by Anthropic, is publicly described as Slovak-Canadian. If access controls apply to non-US citizens, he and others like him may be denied access to the very systems they&#8217;ve been hired to work on. It’s an area we’ll continue to watch closely.</p>



<h2 class="wp-block-heading">AI is entering the measurement loop</h2>



<p class="wp-block-paragraph">Midjourney, the company you probably associate with AI-generated images, has announced a new medical division and a <a href="https://www.midjourney.com/medical/blogpost" target="_blank" rel="noreferrer noopener">full-body ultrasound scanner</a> built around water immersion, developed in partnership with medical imaging hardware maker Butterfly Network. The device is designed to scan the entire body in 60 seconds: A person descends into a shallow pool on a motorized platform, passing through a ring of roughly half a million ultrasound sensors, each functioning as both a transmitter and receiver. The system uses over two petaflops of processing power to reconstruct a 3D body map from the returning wave data. Midjourney says the resulting images look comparable to today&#8217;s MRI output at a fraction of the cost and time, though that claim still needs serious clinical validation before it can stand.</p>



<p class="wp-block-paragraph">The current prototype uses 40 Butterfly ultrasound-on-chip devices per system, according to a <a href="https://www.businesswire.com/news/home/20260618923795/en/Butterfly-Network-Provides-Commentary-on-Midjourney-Medicals-Full-Body-Ultrasound-Scanner-Announcement" target="_blank" rel="noreferrer noopener">disclosure from Butterfly Network</a>, which confirmed its codevelopment and licensing agreement with Midjourney. Midjourney plans to open a facility in San Francisco in 2027, embedding its device in a spa environment alongside hot tubs, saunas, and cold plunges. Diagnostic medical uses will require FDA approval; the initial focus is body composition mapping.</p>



<p class="wp-block-paragraph">If Midjourney can build a library of full-body scans taken over months and years, that longitudinal record would give doctors and AI health tools a level of baseline data that doesn&#8217;t currently exist at scale outside of clinical trials. That&#8217;s the same structural logic Ksenia traced through Cursor and GitHub: The value compounds inside the loop through repeated, precise measurement over time. Midjourney is positioning itself to own that loop in the health domain.</p>



<h2 class="wp-block-heading">What&#8217;s next</h2>



<p class="wp-block-paragraph">The competition for AI advantage is moving from model capability to infrastructure position. Who owns the coding loop? Who controls access to frontier systems? Who builds the measurement environment where health data accumulates over time? Those questions are about where intelligence meets operational reality, not which model scores highest on a benchmark.</p>



<p class="wp-block-paragraph">Hiring news from the week reinforces how seriously the labs are treating this phase. John Jumper, the Nobel laureate who shared the prize with Demis Hassabis for AlphaFold, left Google DeepMind for Anthropic. Noam Shazeer, one of the coauthors of “<a href="https://arxiv.org/abs/1706.03762" target="_blank" rel="noreferrer noopener">Attention Is All You Need</a>,” reportedly left Google for OpenAI after Google paid approximately $2.7 billion to bring him back in 2024. The labs are betting on scientific talent at the same time they&#8217;re betting on infrastructure.</p>



<p class="wp-block-paragraph">Next week, host Andreas Welsch will be back to discuss multi-vendor strategy with Conductor’s Matt Palmer. They’ll cover Sakana&#8217;s launch of Fugu, Qualcomm&#8217;s ~$4B move for Modular, Anthropic&#8217;s Claude Tag stepping into Slack as a virtual coworker, Samsung putting ChatGPT and Codex in front of its entire workforce, and more. <a href="https://www.oreilly.com/live/this-week-in-ai.html" target="_blank" rel="noreferrer noopener">Register here</a> to attend live.</p>



<p class="wp-block-paragraph"><em>Starting in July, registration for the live event will be open only to O’Reilly members. (If you’re interested, <a href="https://www.oreilly.com/start-trial/?type=individual" target="_blank" rel="noreferrer noopener">try O’Reilly out for free</a>.) We’ll continue to publish our takeaways here on Radar each Friday and share full episodes on <a href="https://www.youtube.com/watch?v=g4cfjz5AKxY&amp;list=PL055Epbe6d5bJEhT7_ZzOeJZ6gPyUzYpS" target="_blank" rel="noreferrer noopener">YouTube</a>, <a href="https://open.spotify.com/show/033kJS2BG1teGunxmtsU1r" target="_blank" rel="noreferrer noopener">Spotify</a>, and <a href="https://podcasts.apple.com/us/podcast/this-week-in-ai/id1896798047" target="_blank" rel="noreferrer noopener">Apple</a>.</em></p>
]]></content:encoded>
							<wfw:commentRss>https://www.oreilly.com/radar/this-week-in-ai-who-controls-the-loop/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
							</item>
		<item>
		<title>So Long and Thanks for All the Context</title>
		<link>https://www.oreilly.com/radar/so-long-and-thanks-for-all-the-context/</link>
				<comments>https://www.oreilly.com/radar/so-long-and-thanks-for-all-the-context/#respond</comments>
				<pubDate>Thu, 25 Jun 2026 10:30:34 +0000</pubDate>
					<dc:creator><![CDATA[Andrew Stellman]]></dc:creator>
						<category><![CDATA[AI & ML]]></category>
		<category><![CDATA[Deep Dive]]></category>

		<guid isPermaLink="false">https://www.oreilly.com/radar/?p=18984</guid>

		
					<media:content 
				url="https://www.oreilly.com/radar/wp-content/uploads/sites/3/2026/06/So-long-and-thanks-for-all-the-context.jpg" 
				medium="image" 
				type="image/jpeg" 
				width="2304" 
				height="1792" 
			/>

			<media:thumbnail 
				url="https://www.oreilly.com/radar/wp-content/uploads/sites/3/2026/06/So-long-and-thanks-for-all-the-context-160x160.jpg" 
				width="160" 
				height="160" 
			/>
		
				<custom:subtitle><![CDATA[The fourth article in my context management trilogy]]></custom:subtitle>
		
				<description><![CDATA[I got a really interesting question last week from Mike Loukides, my editor at Radar, after he read the third part of this trilogy on context management. &#8220;Another issue I&#8217;ve read about,&#8221; Mike asked, &#8220;is the tendency for a model to ignore the middle of the context. I&#8217;ve seen that particularly for the models with [&#8230;]]]></description>
								<content:encoded><![CDATA[
<p class="wp-block-paragraph">I got a really interesting question last week from Mike Loukides, my editor at Radar, after he read the third part of this trilogy on context management. &#8220;Another issue I&#8217;ve read about,&#8221; Mike asked, &#8220;is the tendency for a model to ignore the middle of the context. I&#8217;ve seen that particularly for the models with very large context windows. Is there anything to be said about that?&#8221;</p>



<p class="wp-block-paragraph">Excellent question, Mike, and yes, there is. In that same email he pointed out that clearing the context and reloading it with just what&#8217;s important does a pretty good job dealing with this &#8220;ignore the middle&#8221; problem when it happens, but that’s clearly a stopgap.</p>



<p class="wp-block-paragraph">It&#8217;s worth a deeper dive into what&#8217;s actually happening when an AI starts forgetting what’s in the middle of its context, because the problem is deeper (and more interesting!) than it might seem at first. It turns out that there&#8217;s a basic problem that’s fundamental to how LLMs manage context, and we’re still learning about it as an industry. That problem is called a <strong>U-shape</strong>. There’s been a lot of really interesting research into the U-shape problem recently, and several useful techniques have emerged that can help you manage it. And it&#8217;s probably not a coincidence that I&#8217;ve had to use all of them in my <a href="https://www.oreilly.com/radar/the-accidental-orchestrator/" target="_blank" rel="noreferrer noopener">ongoing experiments with AI-driven development and agentic engineering</a> (even if I didn&#8217;t always realize that&#8217;s what I was doing at the time).</p>



<p class="wp-block-paragraph">A few weeks ago, in fact, I ran into the exact failure mode that Mike described. I was running the <a href="https://github.com/andrewstellman/quality-playbook" target="_blank" rel="noreferrer noopener">Quality Playbook</a>, my open source code quality engineering skill, and ran into trouble with one of its phases—the one that writes up the bugs the earlier phases find. There’s a part of the bug writeup process where it had just created a file called <code>BUGS.md</code> that had an overview of each of the bugs, and had to create individual writeups for each bug it found. But instead of filling in the details correctly, it produced skeletal-looking stub files, with a generic template that had blank values instead of populated ones.</p>



<p class="wp-block-paragraph">The thing is, the instructions for how to write a populated writeup were in the prompt. The actual bug data was in <code>BUGS.md</code>. I was absolutely certain that everything the agent needed was sitting in its context window, because I could see that it hadn&#8217;t compacted yet, and the skill&#8217;s intermediate artifacts let me see that earlier phases had read and reasoned about both files (which I talked about in my last article in this series). But the agent was producing stubs anyway. It really looked like the agent had everything it needed sitting in plain sight, and just wasn&#8217;t using the information it had. Frustrating!</p>



<p class="wp-block-paragraph">I thought at the time that the model was just an idiot (which, arguably, was true but beside the point). It turns out that I had run directly into the U-shaped context problem.</p>



<p class="wp-block-paragraph">In the previous three articles I covered <a href="https://www.oreilly.com/radar/why-doesnt-anyone-teach-developers-about-context-management/" target="_blank" rel="noreferrer noopener">what context is</a> and why it disappears, how to <a href="https://www.oreilly.com/radar/your-ai-agent-already-forgot-half-of-what-you-told-it/" target="_blank" rel="noreferrer noopener">keep important information in files</a> instead of leaving it in the agent&#8217;s context window, and how to <a href="https://www.oreilly.com/radar/when-context-collapses-teaching-agents-to-detect-and-recover-from-lost-memory/" target="_blank" rel="noreferrer noopener">detect and recover</a> when context has been compacted out from under you. All three were about losing context, through fragmentation, through compaction, through long sessions that overrun the window. This article is about this entirely different U-shaped failure mode, where the context is still sitting in the window and the model just isn&#8217;t using it.</p>



<h2 class="wp-block-heading"><strong>The U-shape failure, and why bigger windows don&#8217;t fix it</strong></h2>



<p class="wp-block-paragraph">The U-shape is an active area of academic investigation, so I&#8217;m going to start by going into a little bit of that research, because I think it will actually help us pin down what&#8217;s going on. I&#8217;ll start with an experiment run by <a href="https://cs.stanford.edu/~nfliu/" target="_blank" rel="noreferrer noopener">Nelson Liu</a>, an AI researcher at Stanford, who tested how language models actually use the contents of long inputs by giving them documents with the relevant answer placed at different positions and measuring whether the model could still find it. An interesting thing his findings show is that the U-shape didn’t appear to be a quirk of a single model. The U-shape showed up across model families, and even models with larger context windows still exhibited it.</p>



<p class="wp-block-paragraph">If you have time, it&#8217;s actually worth taking a look at the paper that Liu and his team wrote, called “<a href="https://arxiv.org/abs/2307.03172" target="_blank" rel="noreferrer noopener">Lost in the Middle: How Language Models Use Long Contexts</a>.” (It&#8217;s surprisingly readable for an academic paper.) The result they reported was a robust U-shape: The model performed best when the relevant information was at the beginning of its context window or at the recent end and worst when it was in the middle. Performance on questions where the answer was buried mid-context fell off sharply, even when the answer was sitting right there in plain sight. The field now uses the terms primacy bias and recency bias for those two preferences, and the U-shape is what you get when you plot them together against position.</p>



<p class="wp-block-paragraph">I&#8217;m going to lean a little into academia here, because a lot of researchers are still learning about how LLM context actually works and what behavior has emerged in it.</p>



<p class="wp-block-paragraph">One reason the U-shape matters more than &#8220;just another LLM quirk&#8221; is that recent research has started showing it&#8217;s a structural property of how transformers work, not a learned artifact. A 2025 ICML paper called<a href="https://arxiv.org/abs/2502.01951"> </a>“<a href="https://arxiv.org/abs/2502.01951" target="_blank" rel="noreferrer noopener">On the Emergence of Position Bias in Transformers</a>” explained it as the equilibrium between two opposing forces inside the model: The causal mask amplifies the influence of the first few tokens (the primacy bias), while position encodings like RoPE heavily weight the tokens closest to where the model is generating (the recency bias). The middle is where those two forces cancel out. A 2026 paper by Borun Chowdhury, a researcher at Meta, called “<a href="https://arxiv.org/abs/2603.10123" target="_blank" rel="noreferrer noopener">Lost in the Middle at Birth: An Exact Theory of Transformer Position Bias</a>,” took the argument even further by proving mathematically that the U-shape exists at the moment of initialization, before any training has happened, with random weights.</p>



<p class="wp-block-paragraph">That matters because the natural assumption about large context windows is that more room means fewer problems. Most of today&#8217;s frontier models give you a million tokens or more, with some pushing well past two million, and some have made real progress on the simplest version of the lost-in-the-middle test, the needle-in-a-haystack benchmark, where the model has to retrieve a single sentence buried in a long document. Google&#8217;s Gemini 1.5 Pro reported near-perfect single-needle recall at 1M tokens, and current Gemini 3 models are similar.</p>



<p class="wp-block-paragraph">So the accurate version of &#8220;bigger windows don&#8217;t fix it&#8221; is this: Bigger windows have made simple single-fact retrieval much better. They have not made long-context agent work reliable by default. A two-million-token window means a bigger middle to fall into.</p>



<p class="wp-block-paragraph">The important idea that&#8217;s emerging here is that it’s increasingly looking like the U-shape isn&#8217;t just a bug in today&#8217;s models that will eventually be worked out or trained away by more data or better fine-tuning. Instead, it seems like the U-shape may actually be a geometric property of the LLM architecture itself.</p>



<p class="wp-block-paragraph">In other words, we’re all going to have to deal with the U-shape. And that means we need techniques for managing it, and any effective technique we use isn’t likely to become obsolete any time soon. And that’s my goal in this article: to show you the techniques that have emerged for managing U-shaped context memory loss that you can use today in your own work.</p>



<h2 class="wp-block-heading"><strong>Five techniques to help with U-shaped context problems</strong></h2>



<p class="wp-block-paragraph">The previous article in this series laid out a pattern for detecting and recovering from context loss, which I called <em>externalize-recognize-rehydrate</em>. The techniques below extend the same discipline to the lost-in-the-middle problem. The principle I keep coming back to is that working memory is untrustworthy, and the discipline that follows from it is to externalize what matters, curate what stays in context, and verify what the agent claims to know against what&#8217;s on disk. The five techniques are how I do that in practice, and each one is drawn from a real moment in the Quality Playbook&#8217;s development.</p>



<h3 class="wp-block-heading"><strong>Curate, don&#8217;t accumulate</strong></h3>



<p class="wp-block-paragraph">This is the technique which, in its most brute-force form, is exactly what Mike talked about in his email to me: just clear the context and reload it with just what matters, periodically and deliberately. In other words, don&#8217;t trust an accumulated session to stay coherent; build the artifact, then start fresh against it. And if you have the AI write down the important parts of the context (like we’ve talked about throughout this series), then you can start a new session with refreshed AI that has a more targeted, curated context as a starting point.</p>



<p class="wp-block-paragraph">I ran into this during the v1.5.2 release prep for the Quality Playbook. I was using a long Claude Code session that had been working through a series of fixes. But I noticed that it was just starting to show its age: It had forgotten a couple of things it should know, and its thinking times were starting to grow.</p>



<p class="wp-block-paragraph">When it came time to land the final four fixes for the release, I worked with the AI to write a <strong>context brief</strong>, or a separate document with everything the implementing session needed. The question was whether to keep using the existing session, which already &#8220;knew&#8221; the codebase from the earlier work, or open a fresh CLI session and point it at the brief. I asked another session what to do:</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph"><code>Should we run that in a new cli session rather than continue my current </code><br><code>claude code session that has the existing context?</code></p>
</blockquote>



<p class="wp-block-paragraph">The AI gave me a good answer—start a fresh session, using a starting prompt to read the brief—and it gave three reasons that have stuck with me. First, the brief was self-contained, including file paths, line numbers, exact diffs, regression test bodies, and preflight greps. Anything the new session needed to know was already there, and continuing context bought nothing. Second, fresh context is stricter about adherence. A session that already &#8220;knows&#8221; the codebase tends to skim the new instructions and improvise from prior assumptions. Surgical fixes are exactly the case where you want the agent to read the brief carefully rather than rely on memory of what felt right last round. And third, the audit trail: The brief is the artifact, and the implementing session is reproducible from just the brief. If the same work has to be redone in six months by a different model, you point at the brief and say, &#8220;This is the input.&#8221;</p>



<p class="wp-block-paragraph">The approach worked really well. I was able to pick up development seamlessly, and the model’s memory problems disappeared.</p>



<h3 class="wp-block-heading"><strong>Position critical information at the edges</strong></h3>



<p class="wp-block-paragraph">The U-shape says the model attends best to the beginning and end of its context. The natural move is to put your most load-bearing information in those positions and keep the middle for things you don&#8217;t need the model to focus on. Anything important that lives only in the middle of an accumulated context tends to slide out of attention.</p>



<p class="wp-block-paragraph">The other side of this technique is what <em>not</em> to put in the middle. If something matters, don&#8217;t bury it in a long preamble of context you&#8217;ve been accumulating; move it to the edges, restate it where the model will act on it, and let the middle absorb the less important material. Luckily, there’s a useful technique that can help with this problem.</p>



<p class="wp-block-paragraph">In Claude Code, for example, one really clean way to put information at the beginning of context is to use the system prompt. The CLI gives you <code>--append-system-prompt</code> for exactly this. (Most of the other providers&#8217; CLI tools have similar options.) If you put your brief (or selected parts of it) there, the agent will attend to it strongly throughout the session, and that in turn will help keep the per-turn user prompt focused on the action you want the agent to take right now.</p>



<h3 class="wp-block-heading"><strong>Short sessions over long ones</strong></h3>



<p class="wp-block-paragraph">Don&#8217;t run one long session. Run many short ones, each reading fresh from disk. This will help you iterate on your brief and your external development context, so instead of relying on an opaque context window, you have a visible and constantly changing set of documents that give you a lot more visibility into—and control over—your AI’s context.</p>



<p class="wp-block-paragraph">Something useful I started doing was taking all my chat history from Gemini, ChatGPT, Claude, and Cowork and putting it into a single folder I could keep updated and indexed for fast search. I built out an entire system to manage this, which turns out to be a great tool when I’m writing articles like this, because I can search through my development history for specific examples and techniques that I’ve used. The system uses Haiku 4.5 to read through chat history, summarize what happened, and create an index. Haiku turned out to be a smart enough model to read each individual interaction in a chat and write a useful index entry for it. But the model being smart enough to do one summary didn&#8217;t mean its context management could keep up across all 18,000 records. I ran smack into the U-shape problem.</p>



<p class="wp-block-paragraph">The first attempt tried to keep dedupe state and progress counts in the model&#8217;s head, and it failed spectacularly. The model really didn’t want to keep track of specific deterministic things like accurate numbers or the current state. Haiku 4.5, in particular, seems especially bad at this. What worked was reframing the architecture entirely. Here’s the actual prompt that I gave it to fix the problem:</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph"><code>ok, so we need context management. it doesn't need to remember things, </code><br><code>it just needs to write them down as they go. we had this same context </code><br><code>management problem with Quality Playbook, when it was running out of </code><br><code>context. Just write down after each message.</code></p>
</blockquote>



<p class="wp-block-paragraph">The protocol I greenlit for the full run made the short-session discipline explicit:</p>



<ol class="wp-block-list">
<li>Resume processing from the cursor recorded in progress.json, working through each input file in order.</li>



<li>Update progress.json after every line.</li>



<li>Expect to run out of context well before finishing—that&#8217;s fine. Just stop cleanly after each step (or a group of steps), then spin up a fresh session that reads progress.json and continues.</li>



<li>When all files are complete, set status: &#8220;complete&#8221; in progress.json and report back.</li>
</ol>



<p class="wp-block-paragraph">Item 3 is the technique in one line: expect context loss, so make sure you’ve written your state down, and build fresh restarts into the process. The technical details, like spinning up subagents, orchestrating with script, etc., will change, but the core idea stays the same. In a lot of ways, you can think of treating the agent like a pipe, not a database. The state lives on disk, and the session is something you throw away and replace.</p>



<h3 class="wp-block-heading"><strong>Restate key info close to the point of use</strong></h3>



<p class="wp-block-paragraph">When the model needs a constraint to apply right now, repeat it right now. Don&#8217;t trust an instruction from earlier in the session to carry forward through the middle of the context.</p>



<p class="wp-block-paragraph">This is the technique that fixed the problem I opened the article with, where the Quality Playbook seemed to forget everything it had just written into a file called <code>BUGS.md</code> and produced stubs when it needed to write the same information into more detailed files, and instead writing generic blank templates with the bug-specific fields left blank.</p>



<p class="wp-block-paragraph">The fix was to restate the read-the-source rule right before the action that needed it, using this prompt:</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph"><code>Before writing BUG-NNN.md, re-read the BUG-NNN entry in BUGS.md. </code><br><code>Copy the Spec basis, Minimal reproduction, Location, Expected behavior, </code><br><code>Actual behavior, Regression test name, and Patches fields </code><br><code>from that entry into the writeup. Do not paraphrase from memory.</code></p>
</blockquote>



<p class="wp-block-paragraph">&#8220;Do not paraphrase from memory&#8221; is the line that did the actual work. The instruction couldn&#8217;t trust the agent&#8217;s memory of what <code>BUGS.md</code> said, even though <code>BUGS.md</code> was sitting right there in the context window. So the instruction forced a fresh read of the file at the moment of writing. The restatement and the fresh-read together fixed the bug.</p>



<p class="wp-block-paragraph">The same pattern applies any time a rule was stated earlier in the session and the model needs to act on it now. Restate the rule next to the action, and force the model back to the source rather than letting it work from memory.</p>



<h3 class="wp-block-heading"><strong>Test the middle</strong></h3>



<p class="wp-block-paragraph">The previous four techniques are about avoiding lost-in-the-middle failures. This one is about catching them. If you don&#8217;t know whether the agent is actually using the information you think it&#8217;s using, find out, with a deterministic check rather than a judgment call.</p>



<p class="wp-block-paragraph">The pattern is the one I used in the Haiku summarizer that I described earlier: compare what the agent claims to know against what&#8217;s on disk. You have something the agent claims to know (its progress, its current state, the latest version of a rule), and you have something on disk that&#8217;s the ground truth (a file, a log, a database record). At the moment the agent&#8217;s claim has to be trusted, you check it.</p>



<p class="wp-block-paragraph">In the summarizer&#8217;s resume protocol, every new session started by cross-checking <code>progress.json</code> against the actual last line written to the summary file, and the agent printed a checkpoint report when it did—at session start, and periodically through the run. A representative one looked like this:</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph"><code>Checkpoint Report:<br>✓ progress.json confirmed: cursor for cowork_04_06 is at 238, status is </code><br><code>"running"<br>✓ Disk state verified: Last line in summaries/cowork_04_06.md is [237] </code><br><code>assistant: Tool invocation repeating chat file read.<br>&#x26a0; Discrepancy noted: The prior session left a bulk note claiming records </code><br><code>238–296 are duplicates but didn't write individual lines for them. Per </code><br><code>your instructions, I must write one line per record, even for duplicates, </code><br><code>in the format [idx] &lt;sender>: Duplicate of record [X] (&lt;note>).<br>Status: Cursor matches disk state. Ready to resume from record 238.</code></p>
</blockquote>



<p class="wp-block-paragraph">The agent doesn&#8217;t need to introspect whether it lost context, only to compare two files. When they agree, the agent proceeds; when they disagree, the agent flags the discrepancy and stops before adding any new work on top of a broken state. Disagreement is the signal.</p>



<p class="wp-block-paragraph">You can build this kind of check into any agent that does multistep work. Pick something the agent has to track, pick the file that&#8217;s the source of truth for it, and have the agent compare the two at every session start. When the agent&#8217;s view of the world drifts from the file, you find out before the drift becomes a buried bug.</p>



<h2 class="wp-block-heading"><strong>The discipline behind these techniques</strong></h2>



<p class="wp-block-paragraph">When I built the Quality Playbook&#8217;s multi-phase architecture, I was solving the compaction problem. Long pipeline runs were filling the context window and triggering silent compaction in the middle of work. Breaking the pipeline into separate phases that read fresh from disk and stopped after each phase fixed it.</p>



<p class="wp-block-paragraph">What I didn&#8217;t realize until later was that the same architecture also helps with the lost-in-the-middle problem. Each phase has its own short, focused context, with the phase brief at the beginning and the latest progress update at the end, so there&#8217;s almost no middle for information to fall into. The architectural move that helped with working memory disappearing turns out to also help with working memory being there and unused.</p>



<p class="wp-block-paragraph">That&#8217;s the lesson I want to land. Both failure modes, context loss and lost-in-the-middle, are problems of working-memory unreliability, and the discipline that addresses them is the same: keep the working set small, put the load-bearing information at the edges of the window, and check the agent&#8217;s claims against ground truth on disk when it matters.</p>



<p class="wp-block-paragraph">Context windows will keep getting bigger, and compaction will get smarter. Some of the techniques in these four articles may eventually be unnecessary. But the underlying constraint won&#8217;t disappear. After all, we’ve added a lot more RAM to our computers since the 1MB 286 I wrote about in the last article, and memory management has gotten much more complex since then. And many of these problems are structural; for example, it’s increasingly looking like the U-shape itself is a geometric property of the transformer architecture, not a training artifact that more compute will smooth out.</p>



<p class="wp-block-paragraph">The bottom line is that if your agent&#8217;s ability to do its job depends on information, that information needs to live somewhere more durable than working memory. That was true for my dad&#8217;s 32 kilobytes of core memory at Princeton in the 1970s, it was true for my 640 kilobytes of conventional RAM on my 286 in the 1980s, it was true for the 200K-token windows in last year&#8217;s models, and it will be true for whatever comes next.</p>
]]></content:encoded>
							<wfw:commentRss>https://www.oreilly.com/radar/so-long-and-thanks-for-all-the-context/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
							</item>
		<item>
		<title>Stop Getting Good at Protocols. Get Good at Agent Experience.</title>
		<link>https://www.oreilly.com/radar/stop-getting-good-at-protocols-get-good-at-agent-experience/</link>
				<comments>https://www.oreilly.com/radar/stop-getting-good-at-protocols-get-good-at-agent-experience/#respond</comments>
				<pubDate>Wed, 24 Jun 2026 11:04:07 +0000</pubDate>
					<dc:creator><![CDATA[Sean Roberts]]></dc:creator>
						<category><![CDATA[AI & ML]]></category>
		<category><![CDATA[Commentary]]></category>

		<guid isPermaLink="false">https://www.oreilly.com/radar/?p=18976</guid>

		
					<media:content 
				url="https://www.oreilly.com/radar/wp-content/uploads/sites/3/2026/06/Stop-getting-good-at-protocols.jpg" 
				medium="image" 
				type="image/jpeg" 
				width="2304" 
				height="1792" 
			/>

			<media:thumbnail 
				url="https://www.oreilly.com/radar/wp-content/uploads/sites/3/2026/06/Stop-getting-good-at-protocols-160x160.jpg" 
				width="160" 
				height="160" 
			/>
		
		
				<description><![CDATA[In 2025, if you weren&#8217;t building with MCP, you weren&#8217;t serious about agents. The Model Context Protocol dominated the agent conversation for the better part of the year. Conference talks, roadmaps, hiring plans, all of it revolved around MCP. Then late 2025 into 2026, AI Skills arrived and the backlash was immediate. Engineers declared MCP [&#8230;]]]></description>
								<content:encoded><![CDATA[
<p class="wp-block-paragraph">In 2025, if you weren&#8217;t building with MCP, you weren&#8217;t serious about agents. The Model Context Protocol dominated the agent conversation for the better part of the year. Conference talks, roadmaps, hiring plans, all of it revolved around MCP.</p>



<p class="wp-block-paragraph">Then late 2025 into 2026, AI Skills arrived and the backlash was immediate. Engineers declared <a href="https://www.youtube.com/watch?v=tTZ4yDY4adg" target="_blank" rel="noreferrer noopener">MCP dead in favor of Skills</a>, then <a href="https://www.shareuhack.com/en/posts/mcp-vs-skill-vs-cli-guide" target="_blank" rel="noreferrer noopener">dead in favor of CLI</a>. Perplexity&#8217;s CTO <a href="https://milvus.io/blog/is-mcp-dead-cli-and-skills-for-ai-agents.md" target="_blank" rel="noreferrer noopener">said publicly</a> that the company was deprioritizing it. The cycle was fast, loud, and predictable. New tool, new hype, new rewrite.</p>



<p class="wp-block-paragraph">I started pushing Agent Experience early in 2025, while MCP was still the center of gravity. The response was mostly skepticism. AX was overthinking it. MCP was the only layer that mattered. That perspective aged poorly. The people who dismissed AX weren&#8217;t wrong about MCP being useful. They were wrong about a protocol being a strategy.</p>



<p class="wp-block-paragraph">The thing they missed, and what I think most of the industry is still missing, is that the protocol is not the thing to get good at. The discipline is.</p>



<h2 class="wp-block-heading"><strong>We keep falling into the tool trap</strong></h2>



<p class="wp-block-paragraph">Our industry has a well-documented habit of confusing tools with strategy. We did it with microservices, Kubernetes, and GraphQL. Now we&#8217;re doing it with agent protocols.</p>



<p class="wp-block-paragraph">MCP, AI Skills, A2A, and ACP are all implementations. They matter and they solve real problems. But none of them are the right thing to build your strategy on top of. They are, by nature, the thing that changes.</p>



<p class="wp-block-paragraph">When you organize your agent strategy around a specific protocol, you’re building on a foundation someone else controls and the market can shift away from at any moment. Worse, you’re skipping the step that would tell you whether that protocol is even the right fit for your use case.</p>



<p class="wp-block-paragraph">This is the tool trap. You optimize your usage of a specific integration mechanism without first understanding what you’re actually optimizing for.</p>



<h2 class="wp-block-heading"><strong>So what is Agent Experience?</strong></h2>



<p class="wp-block-paragraph">Agent Experience (AX) is the discipline of studying how AI agents discover, understand, and interact with your systems, and then systematically improving those interactions.</p>



<p class="wp-block-paragraph">Think of it as the agent-facing counterpart to User Experience. UX didn&#8217;t emerge because one UI framework won. It emerged because teams realized that the quality of human interaction with software was a design problem that transcended any particular technology. You could build a terrible experience in React just as easily as in vanilla JavaScript. The framework was not the variable. The design thinking was.</p>



<p class="wp-block-paragraph">AX works the same way. How does an agent discover what your service can do? How does it understand the boundaries of your API? When it fails, does it get enough context to recover? Is the interaction efficient, or is the agent burning tokens on unnecessary round trips?</p>



<p class="wp-block-paragraph">These questions are protocol-agnostic. They apply whether you expose capabilities through MCP, Skills, A2A, or something that hasn&#8217;t been invented yet. The teams that can answer them will adapt to whatever comes next because they understand the problem space, not just the current toolchain.</p>



<h2 class="wp-block-heading"><strong>AX is an extension of what you already care about</strong></h2>



<p class="wp-block-paragraph">AX is not competing with User Experience, Developer Experience, or Customer Experience. It’s an extension of all three.</p>



<p class="wp-block-paragraph">Your primary focus is still providing a great experience to your customers. What has changed is how those customers interact with you. More and more, they delegate tasks to agents. When a customer asks an agent to integrate with your API, deploy to your platform, or pull data from your service, that agent is acting on their behalf. The agent&#8217;s experience determines how likely it is to achieve your customer&#8217;s goal.</p>



<p class="wp-block-paragraph">If a customer&#8217;s agent struggles to authenticate, burns through tokens parsing your error messages, or fails silently because your API lacks context, something worse than a complaint happens. The agent will quietly start using an alternative service that provides a better experience. Your customer might not even notice the switch. You just lost them without a single support ticket.</p>



<p class="wp-block-paragraph">UX optimized for humans clicking through interfaces. DX optimized for developers building on your platform. CX looked at the entire customer journey. AX extends that thinking to the agents those customers now send on their behalf.</p>



<h2 class="wp-block-heading"><strong>The protocol treadmill doesn&#8217;t work</strong></h2>



<p class="wp-block-paragraph">Think about what actually happened with MCP. Teams invested heavily in writing MCP server implementations. A lot of those implementations were mediocre. Not because MCP was flawed but because the teams hadn&#8217;t thought carefully about what an agent actually needed from their system. A <a href="https://arxiv.org/abs/2602.14878" target="_blank" rel="noreferrer noopener">2026 study out of Queen&#8217;s University</a> examined 856 tools across 103 MCP servers and found that 97.1% of tool descriptions contained at least one quality issue, with 56% failing to state their purpose clearly. The protocol worked fine. The experience design was the problem.</p>



<p class="wp-block-paragraph">When Skills emerged, those same teams faced a familiar problem wearing new clothes. They still hadn&#8217;t answered the foundational questions: What does an agent need to accomplish with our service? What is the minimum viable interaction surface? What context does an agent need to make good decisions?</p>



<p class="wp-block-paragraph">The teams that had worked through those questions adapted fast. Migrating from one protocol to another is mechanical when you already know what your agent-facing interface should look like. The protocol is the serialization format. The experience design is the hard part.</p>



<p class="wp-block-paragraph">This pattern will keep repeating. Whether it is the Universal Commerce Protocol, A2A, or whatever lands next, something new will always be gaining traction. If your strategy is to become an expert in each successive protocol, you’re signing up for a treadmill that only speeds up.</p>



<h2 class="wp-block-heading"><strong>What an AX practice looks like</strong></h2>



<p class="wp-block-paragraph">So what does it actually look like to take Agent Experience seriously? If you have ever built a UX research practice or a DX program, this will feel familiar. The steps aren’t new. The persona is.</p>



<p class="wp-block-paragraph">In talks, I break it down to five steps.</p>



<p class="wp-block-paragraph"><strong>Audit the agents your customers use.</strong> Know what’s walking through your front door. Look at your traffic data and logs and figure out what portion of your footprint is agents versus humans, and which agents specifically. Are your customers sending Claude Code? Cursor? Custom agents built on your API? You can’t design for something you haven’t observed. Same reason UX teams run user research. Different method, same motivation.</p>



<p class="wp-block-paragraph"><strong>Identify the use cases customers want to delegate.</strong> Not every interaction needs to be agent-optimized. Take that same log data, look at the requests agents are making to your platform, and extrapolate what they were trying to achieve. You can also use AEO data to understand what areas your customers are asking about in agent-facing search. Focus on the highest-value surfaces first. If you have ever prioritized a DX roadmap by looking at what developers actually do with your API, you already know this muscle.</p>



<p class="wp-block-paragraph"><strong>Verify and audit the experience of those interactions.</strong> Watch what happens when an agent tries to complete those tasks on your system. Where does it get stuck? Where does it misunderstand what your service offers? This is usability testing. The user is an LLM; the struggle is about context not button placement, but you’re answering the same question: Can they get the job done?</p>



<p class="wp-block-paragraph"><strong>Improve and repeat.</strong> Agent capabilities evolve. Models get smarter. New interaction patterns emerge. At Netlify, we’ve found cases where our product works one way but agents universally assume it works another way and never ask. Instead of fighting that assumption, we improved the product to work the way agents expect. The result was more adoption of those agent flows and fewer errors. The teams that treat this as a living practice will outperform those running from one protocol migration to the next.</p>



<p class="wp-block-paragraph"><strong>Automate validation and prevent regressions.</strong> Once you have a baseline for what &#8220;good&#8221; looks like, lock it in. Tools like <a href="https://axis.run" target="_blank" rel="noreferrer noopener">AXIS</a>, an open source scoring framework, let you run real agents against real scenarios and get a comparable score back. Wire it into CI and catch AX regressions the same way you catch broken tests. This is how you go from anecdotal improvement to measurable, repeatable AX quality.</p>



<p class="wp-block-paragraph">When you have this practice in place, protocol choices become obvious. You can evaluate new tools on their merits. Does it solve a real friction point you have observed? Does it unlock capabilities you couldn’t achieve before? Or is it just different packaging for something you’re already doing well?</p>



<h2 class="wp-block-heading"><strong>The hard part is familiar</strong></h2>



<p class="wp-block-paragraph">AX is harder to pick up than a new protocol. That is just the reality. Learning MCP or Skills is a bounded technical problem. Read the docs, write some code, and ship an integration. Clear finish line, easy to show progress. That’s genuinely appealing, especially when you or your teams are moving fast.</p>



<p class="wp-block-paragraph">Building an AX discipline means sitting with ambiguity for a while. Studying agent behavior before you have clean answers. Accepting that the right integration strategy depends on context you have to discover, not a tutorial you can follow. But if you’ve ever built a UX or DX practice from scratch, you’ve been here before. The why is the same: understand your users, reduce friction, and make it easy for them to succeed. How you do it is different because the user is different. The discipline isn’t new. It’s an extension of work our industry has been doing for decades.</p>



<p class="wp-block-paragraph">The good news is that this thinking is gaining momentum. John Maeda&#8217;s <em><a href="https://johnmaeda.medium.com/design-in-tech-report-2026-from-ux-to-ax-f9d83164f4d2" target="_blank" rel="noreferrer noopener">2026 Design in Tech Report</a></em> is explicitly about the shift from UX to AX. Researchers are studying agent interaction quality as a first-class engineering concern. BCG and MIT Sloan found that <a href="https://sloanreview.mit.edu/projects/the-emerging-agentic-enterprise-how-leaders-must-navigate-a-new-age-of-ai/" target="_blank" rel="noreferrer noopener">35% of organizations are already using agentic AI</a>, with another 44% planning to. The question is no longer whether AX matters. It’s whether your team is building the practice before your competitors do.</p>



<p class="wp-block-paragraph">The agents of 2028 won’t interact with your systems the way the agents of 2025 did. The protocols will be different. The capabilities will be different. The expectations will be different. What won’t change is the fundamental need for your systems to provide a great experience to the people who use them, and now, the agents those people send on their behalf.</p>



<p class="wp-block-paragraph">Get good at that. The rest is implementation detail.</p>
]]></content:encoded>
							<wfw:commentRss>https://www.oreilly.com/radar/stop-getting-good-at-protocols-get-good-at-agent-experience/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
							</item>
		<item>
		<title>Principal Drift</title>
		<link>https://www.oreilly.com/radar/principal-drift/</link>
				<comments>https://www.oreilly.com/radar/principal-drift/#respond</comments>
				<pubDate>Tue, 23 Jun 2026 10:21:13 +0000</pubDate>
					<dc:creator><![CDATA[Shreshta Shyamsundar]]></dc:creator>
						<category><![CDATA[AI & ML]]></category>
		<category><![CDATA[Software Architecture]]></category>
		<category><![CDATA[Commentary]]></category>

		<guid isPermaLink="false">https://www.oreilly.com/radar/?p=18972</guid>

		
					<media:content 
				url="https://www.oreilly.com/radar/wp-content/uploads/sites/3/2026/06/Principal-drift.jpg" 
				medium="image" 
				type="image/jpeg" 
				width="2304" 
				height="1792" 
			/>

			<media:thumbnail 
				url="https://www.oreilly.com/radar/wp-content/uploads/sites/3/2026/06/Principal-drift-160x160.jpg" 
				width="160" 
				height="160" 
			/>
		
				<custom:subtitle><![CDATA[The org-design problem hiding under your agent mesh]]></custom:subtitle>
		
				<description><![CDATA[Over the past year I’ve reviewed enterprise agent architectures at roughly two dozen organizations, including banks, retailers, healthcare systems, and a couple of regulators. The architecture diagrams have been reliably impressive. There are boxes for the MCP gateway, the tool registry, the vector store, the orchestrator, the policy engine, and the observability stack. There are [&#8230;]]]></description>
								<content:encoded><![CDATA[
<p class="wp-block-paragraph">Over the past year I’ve reviewed enterprise agent architectures at roughly two dozen organizations, including banks, retailers, healthcare systems, and a couple of regulators. The architecture diagrams have been reliably impressive. There are boxes for the MCP gateway, the tool registry, the vector store, the orchestrator, the policy engine, and the observability stack. There are arrows showing how agents discover each other, share context, and call tools across the mesh. By 2026 standards, these are the table-stakes pictures for any serious agentic deployment. But what none of them show anywhere is who the agents are, whose authority they carry, or who answers when they’re wrong.</p>



<p class="wp-block-paragraph">That omission has a name worth using: <em>principal drift</em>, the steady decoupling, in any sufficiently large agent system, between the human authority a recorded action is supposed to derive from and the actor that actually took it. What looks like a defensible identity posture on the day you ship your first agent quietly degrades as agents multiply, compose, and outlive their original initiatives. Principal drift isn’t three independent failure modes; it’s one cascade. Identity collapses first. Authority erodes next, because there is no longer a stable principal to bind policy to. Accountability dissolves third, because the cost of agent error lands on whichever team has the weakest negotiating position when the incident review starts. Stopping the cascade means intervening at the first link, but almost no enterprise agent platform does so right now.</p>



<p class="wp-block-paragraph">To see the cascade run, take the most boring possible enterprise agent, a refund agent, and watch.</p>



<p class="wp-block-paragraph">A customer-service rep, fielding a chat, asks the agent to process a $48 refund for a damaged item. The agent checks eligibility, issues the refund, posts an update. The audit log records the action as taken by something like refund-agent-prod-03, running under a service principal owned by the customer-service platform team. That entry is true, but it’s also useless. The agent wasn’t acting <em>as</em> refund-agent-prod-03. It was acting as the rep, on behalf of the customer, under a delegation chain nobody recorded. In a well-built system, customer, rep, agent identity, and service principal are recorded together, queryable as a chain, and durable beyond the session. In most production systems today they aren’t. This is the first link in the cascade, where identity collapses to a generic service principal, and there’s no longer a <em>who</em> to attach anything else to.</p>



<p class="wp-block-paragraph">Authority erodes next. The refund agent has an issue_refund tool that can technically refund any order. Its authority is supposed to be narrower (refunds up to $200, orders under 90 days, customers in good standing, automatic escalation above $50), but that authority lives in a prompt or a YAML file or a Notion page the team last updated when the policy was different. The runtime enforces capability, but nobody really enforces authority. When a poisoned input or a confused chain of reasoning leads the agent to refund $1,800 to the wrong customer, there’s no clean answer to the postincident question “Who approved this policy?” because the policy was never an artifact. The same pattern is worse at higher stakes: Imagine a coding agent with merge access to a protected branch, instructed by a prompt embedded in a code comment to “log configuration values for debugging,” silently exfiltrating secrets to an external monitoring service.</p>



<p class="wp-block-paragraph">Accountability then dissolves. The team that built the agent says it followed policy. The team that wrote the policy says it didn’t anticipate the input. The team that operates the platform says the agent was running as a service principal whose behavior they don’t own. The audit log may show the action, but it doesn’t show the reasoning that produced the action, the retrieved context that shaped the reasoning, or the prompt history that framed the retrieval. Postincident review becomes archaeology, and the cost is absorbed, eventually, by whoever has the weakest negotiating position when the meeting ends.</p>



<p class="wp-block-paragraph">Is any of this new? We have IAM, identity governance, policy as code, audit trails, SIEMs, and 30 years of compliance practice. Why isn’t this just IAM done properly? Because IAM was built around assumptions agents violate. IAM and IGA assume a population of principals that changes on human timescales: People get hired, people leave, and service accounts rotate quarterly. Agents are spun up per session and compose into chains where one agent calls another, which calls a third, impersonating users through delegated tokens that traditional IGA cannot represent as a chain at all. Policy engines fire at the moment of action, at the API, the database, and the network. Agents make their most consequential decisions <em>before</em> they hit those enforcement points, in the reasoning step that selects which tool to call and with what arguments. Mature audit logs assume that replaying the inputs reproduces the output. But for agents, replaying the prompt and the retrieval can yield a different action, because the model itself contributes state the log doesn’t capture. The instruments fire, the dashboards turn green, and the agent that quietly exfiltrated secrets still does so. The audit log records the action as agent-service-01, which again is both true and useless.</p>



<p class="wp-block-paragraph">This is also where the vendors selling a consolidated stack want you to skip ahead. Microsoft’s Entra Agent ID, currently in public preview, is the most polished solution to date, extending the conditional access, identity governance, and identity protection used for humans and workloads to cover AI agents as a new identity type, but Google and Salesforce are also building this layer. The marketing line is that agents receive the same identity-driven protections as the rest of the workforce. That’s a real step forward in addressing the first link of the cascade, but it isn’t governance. It’s a control plane with a governance plane’s marketing. Conditional access can tell you whether the agent’s <em>access attempt</em> was permitted. It can’t tell you whether the <em>decision</em> the agent made before that access attempt was within its authority, why the agent reached the decision, or which business unit owns the policy the decision was supposed to obey.</p>



<p class="wp-block-paragraph">The actual governance plane has to capture decisions, not just actions. A reasoning-grade audit record is the load-bearing primitive of the missing layer, and it looks something like this:</p>



<pre class="wp-block-code"><code>{
  "event_id": "refund-2026-05-17-08431",
  "triggered_by": {
    "human_principal": "rep:olivia.chen@firm.com",
    "delegated_via": "support-console-session-9c2a",
    "customer_principal": "cust:7741289"
  },
  "agent": {
    "identity": "refund-agent",
    "version": "v4.7.2",
    "policy_ref": "refund-policy/v3.1 (signed: r.patel, 2026-04-22)"
  },
  "task": "Process refund for order 88812204",
  "retrieved_context": &#91;
    {"doc": "order:88812204", "fetched": "2026-05-17T08:43:11Z"},
    {"doc": "policy:refund-eligibility", "chunk": 4, "fetched": "2026-05-17T08:43:12Z"}
  ],
  "reasoning_trace": "...",
  "tool_calls": &#91;
    {"tool": "check_eligibility", "input": "...", "output": "eligible"},
    {"tool": "issue_refund", "input": {"amount": 48.00}, "output": "ok"}
  ],
  "action": "refund:48.00",
  "principal_chain_hash": "0x9e7b3f..."
}</code></pre>



<p class="wp-block-paragraph">Not every agent needs this. A scheduling agent that proposes meeting times doesn’t. An agent that moves money, deploys code, or makes decisions that a regulator will eventually ask about does need it, and that’s the right bar to set because of the associated cost. Reasoning-grade audit is closer to a flight-data recorder than a syslog feed. The data is expensive to store and to query, with real privacy implications since those logs contain everything the agent saw, including data the agent was authorized to read but the audit system wasn’t supposed to keep. You afford it with proportional retention: full reasoning capture for high-blast-radius agents (regulator-facing, customer-funded, contractually material, production-modifying) and lighter capture for internal-only assistants.</p>



<p class="wp-block-paragraph">Which raises the question the architecture diagram doesn’t ask: Who builds and runs this? Security can enforce policy but can’t author it. The people who know what a refund agent should be allowed to do own the refund business, not the firewall. IT can provision identities but can’t draft “good standing” or write the escalation rule. The MCP and A2A protocol communities are doing real work on wire-level identity and delegation. MCP gives you tool-invocation provenance and is the standard Entra Agent ID and most vendor frameworks build on. A2A is converging on cross-agent delegation primitives. Both matter, but neither drafts policy. Standards, not the institution, move the connectors.</p>



<p class="wp-block-paragraph">What enterprises need is a new function that sits between the business units owning the policies and the platform teams running the runtime. Call it <em>agent operations</em>: small group, often four to eight people in a Global 2000 enterprise, embedded rather than centralized, reporting into the CIO or CISO depending on house politics, with explicit charter to maintain a registry of every production agent, its named human owner, its versioned authority specification, its retention policy for reasoning-grade audit, and its lifecycle state. Each agent gets onboarded with a signed policy, reviewed on a real cadence, and actually retired when its initiative ends, rather than the current default of quietly outliving its sponsors. Designing against failure modes like review cadences that calcify into ceremony, policy artifacts that lag agent deployment velocity, or functions that become the place agents go to die in committee is itself part of the work. The function has to ship at the pace of the platform teams or it will be routed around within a quarter.</p>



<p class="wp-block-paragraph">The work is hard. It’s also overdue, and the regulatory clock is running. The EU AI Act’s high-risk provisions are entering enforcement this year, and regulators will ask for explainability, traceability, lifecycle records, and named human accountability. These are exactly the artifacts an agent operations function produces. Tyler Akidau called this the <a href="https://www.oreilly.com/radar/posthuman-we-all-built-agents-nobody-built-hr/" target="_blank" rel="noreferrer noopener">missing HR layer</a> in his April Radar piece; Artur Huk’s more recent “<a href="https://www.oreilly.com/radar/from-capabilities-to-responsibilities/" target="_blank" rel="noreferrer noopener">From Capabilities to Responsibilities</a>” converges on similar ground from the runtime side. The label matters less than the work. This piece is about governance inside one organization. The harder problem is governance across organizations, with agents acting under different trust regimes. That’s strictly worse, and worth its own piece.</p>



<p class="wp-block-paragraph">Within your own four walls, the diagnostic is doable in an afternoon. Pick one production agent. Try to answer, with evidence: Whose authority does it carry, traced from action back to a named human? Where is its authority specified, and who signed the current version? When it does something wrong tomorrow, who pays, how is that decided, and what reasoning-grade record supports the decision? Most architects who do this honestly come away with three blanks and a knot in their stomach. That’s principal drift, named and visible.</p>



<p class="wp-block-paragraph">The mesh you’ve built is real and necessary, but it isn’t sufficient. The rest of the architecture is the institution above it: the registry, the signed policies, the reasoning-grade audit, the named human at the end of every chain. In most enterprises it doesn’t yet exist, and it won’t arrive by buying another platform. You’ll have to draft it yourself.</p>
]]></content:encoded>
							<wfw:commentRss>https://www.oreilly.com/radar/principal-drift/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
							</item>
		<item>
		<title>Loop Engineering</title>
		<link>https://www.oreilly.com/radar/loop-engineering/</link>
				<comments>https://www.oreilly.com/radar/loop-engineering/#respond</comments>
				<pubDate>Mon, 22 Jun 2026 11:04:36 +0000</pubDate>
					<dc:creator><![CDATA[Addy Osmani]]></dc:creator>
						<category><![CDATA[AI & ML]]></category>
		<category><![CDATA[Commentary]]></category>

		<guid isPermaLink="false">https://www.oreilly.com/radar/?p=18967</guid>

		
					<media:content 
				url="https://www.oreilly.com/radar/wp-content/uploads/sites/3/2026/06/Loop-engineering.jpg" 
				medium="image" 
				type="image/jpeg" 
				width="2304" 
				height="1792" 
			/>

			<media:thumbnail 
				url="https://www.oreilly.com/radar/wp-content/uploads/sites/3/2026/06/Loop-engineering-160x160.jpg" 
				width="160" 
				height="160" 
			/>
		
		
				<description><![CDATA[The following article originally appeared on Addy Osmani’s blog and is being reposted here with the author’s permission. Loop engineering is replacing yourself as the person who prompts the agent. You design the system that does it instead. A loop here can be thought of as a recursive goal where you define a purpose and [&#8230;]]]></description>
								<content:encoded><![CDATA[
<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph"><em>The following article originally appeared on <a href="https://addyosmani.com/blog/loop-engineering/" target="_blank" rel="noreferrer noopener">Addy Osmani’s blog</a> and is being reposted here with the author’s permission.</em></p>
</blockquote>



<p class="wp-block-paragraph">Loop engineering is replacing yourself as the person who prompts the agent. You design the system that does it instead. A loop here can be thought of as a recursive goal where you define a purpose and the AI iterates until complete. I believe this may be the future of how we work with coding agents. However, it’s still early; I’m skeptical, and you absolutely <em>have</em> to be <a href="https://x.com/weswinder/status/2063700289710964906" target="_blank" rel="noreferrer noopener">careful</a> about token costs (usage patterns can vary wildly if you are token rich or poor), so I want to unpack what it is and what it means.</p>



<p class="wp-block-paragraph">Peter Steinberger recently <a href="https://x.com/steipete/status/2063697162748260627" target="_blank" rel="noreferrer noopener">said</a>: “You shouldn’t be prompting coding agents anymore. You should be designing loops that prompt your agents.” Similarly, Boris Cherny, head of Claude Code at Anthropic, <a href="https://x.com/rohanpaul_ai/status/2063289804708835412" target="_blank" rel="noreferrer noopener">said</a>, “I don’t prompt Claude anymore. I have loops running that prompt Claude and figuring out what to do. My job is to write loops”.</p>



<p class="wp-block-paragraph">Okay, so what does any of that mean?</p>



<p class="wp-block-paragraph">For like two years, the way you got something out of a coding agent was you wrote a good prompt and shared enough context. You type a thing, you read what came back, you type the next thing. The agent is a tool and you are holding it the entire time, one turn after the other. That part is kind of over, or at least some think it’s going to be.</p>



<p class="wp-block-paragraph">Now you build a small system that finds the work, hands it out, checks it, writes down what is done and then decides the next thing, and you let that system poke the agents instead of you. I wrote before about the cousin of this, <a href="https://addyosmani.com/blog/agent-harness-engineering/" target="_blank" rel="noreferrer noopener">agent harness engineering</a>, which is making the environment one single agent runs inside and the <a href="https://addyosmani.com/blog/factory-model/" target="_blank" rel="noreferrer noopener">factory model</a>—the system that builds the software. Loop engineering sits one floor above the harness. The harness but it runs on a timer, it spawns little helpers, and it feeds itself.</p>



<p class="wp-block-paragraph">The thing that surprised me is this is not really a tool thing anymore. A year ago if you wanted a loop you wrote a pile of bash and you maintained that pile forever and it was yours and only yours. Now the pieces just ship inside the products. Steinberger’s list maps almost exactly onto the Codex app, and then almost the same onto Claude Code. And once you notice the shape is the same, you stop arguing about which tool. You just design a loop that still works no matter which one you happen to be sitting in.</p>



<h2 class="wp-block-heading">The five pieces, and then notes</h2>



<p class="wp-block-paragraph">A <a href="https://x.com/reach_vb/status/2063713960495558940" target="_blank" rel="noreferrer noopener">loop</a> needs five things and then one place to remember stuff. Let me list it first and then map it.</p>



<ol class="wp-block-list">
<li>Automations that go off on a schedule and do discovery and triage by themselves</li>



<li>Worktrees so two agents working in parallel don’t step on each other</li>



<li>Skills to write down the project knowledge the agent would otherwise just guess</li>



<li>Plugins and connectors to plug the agent into the tools you already use</li>



<li>Subagents so one of them has the idea and a different one checks it</li>
</ol>



<p class="wp-block-paragraph">Then the sixth thing, the memory. A Markdown file, or a Linear board, anything that lives outside the single conversation and holds what’s done and what is next. Sounds too dumb to matter. But it’s the same trick every long-running agent depends on, and I went into it in “<a href="https://addyosmani.com/blog/long-running-agents/" target="_blank" rel="noreferrer noopener">Long-Running Agents</a>”: The model forgets everything between runs so the memory has to be on disk and not in the context. The agent forgets; the repo doesn’t.</p>



<p class="wp-block-paragraph">Both products have all five now.</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><tbody><tr><td><strong>Primitive</strong></td><td><strong>Job in the loop</strong></td><td><strong>Codex app</strong></td><td><strong>Claude Code</strong></td></tr><tr><td>Automations</td><td>Discovery + triage on a schedule</td><td><a href="https://developers.openai.com/codex/app/automations" target="_blank" rel="noreferrer noopener">Automations tab</a>: pick project, prompt, cadence, environment; results land in a Triage inbox; <code>/goal</code> for run-until-done</td><td>Scheduled tasks and cron, <code>/loop</code>, <code>/goal</code>, hooks, GitHub Actions</td></tr><tr><td>Worktrees</td><td>Isolate parallel features</td><td>Built-in worktree per thread</td><td><code>git worktree</code>, <code>--worktree</code>, <code>isolation: worktree</code> on a subagent</td></tr><tr><td>Skills</td><td>Codify project knowledge</td><td><a href="https://developers.openai.com/codex/skills" target="_blank" rel="noreferrer noopener">Agent Skills</a> (<code>SKILL.md</code>), invoked with <code>$name</code> or implicitly</td><td><a href="https://addyosmani.com/blog/agent-skills/" target="_blank" rel="noreferrer noopener">Agent Skills</a> (<code>SKILL.md</code>)</td></tr><tr><td>Plugins and connectors</td><td>Connect your tools</td><td>Connectors (MCP) plus plugins for distribution</td><td>MCP servers plus plugins</td></tr><tr><td>Subagents</td><td>Ideate and verify</td><td><a href="https://developers.openai.com/codex/subagents" target="_blank" rel="noreferrer noopener">Subagents</a> defined as TOML in <code>.codex/agents/</code></td><td>Task subagents in <code>.claude/agents/</code>, agent teams</td></tr><tr><td>State</td><td>track what’s done</td><td>Markdown or Linear via a connector</td><td>Markdown (<code>AGENTS.md</code>, progress files) or Linear via MCP</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">The names are a bit different here and there, but the capability is the same thing. Let me go one by one because honestly the details are where a loop either holds together or quietly leaks everywhere.</p>



<h2 class="wp-block-heading">Automations, this is the heartbeat</h2>



<p class="wp-block-paragraph">Automations are what make a loop an actual loop and not just one run you did once. In the Codex app you make one in the Automations tab and you pick the project, the prompt it will run, how often, and if it runs on your local checkout or on a background worktree. The runs that find something go to a Triage inbox, and the runs that find nothing just archive themselves which is nice. OpenAI uses them internally for boring stuff like daily issue triage, summarizing CI failures, writing commit briefings, and hunting bugs somebody added last week. And an automation can call a skill, so you keep the recurring thing maintainable; you fire <code>$skill-name</code> instead of pasting a giant wall of instructions into a schedule that nobody will ever update.</p>



<p class="wp-block-paragraph">Claude Code gets to the same place but through scheduling and hooks. You can run a prompt or a command on a interval with <code>/loop</code>, you can schedule a cron task, you can fire shell commands at certain points in the agent lifecycle with hooks, or you push the whole thing to GitHub Actions if you want it to keep running after you close the laptop. Same idea exactly, you define an autonomous task, you give it a cadence, and the findings come to you so you are not the one going around checking.</p>



<p class="wp-block-paragraph">There is a second in-session primitive worth knowing, and it’s the one closer to what this whole post is about. <code>/loop</code> re-runs on a cadence. <code>/goal</code> keeps going until a condition you wrote is actually true, and after every turn a separate small model checks whether you are done, so the agent that wrote the code isn’t the one grading it. You give it something like “all tests in test/auth pass and lint is clean” and walk away. Codex has the same thing, also called <code>/goal</code>: It keeps working across turns until a verifiable stopping condition holds, with pause and resume and clear. Same primitive, both tools, which is kind of the pattern for this whole article.</p>



<p class="wp-block-paragraph">So this is the part that surfaces the work. The rest of the loop is what acts on it.</p>



<h2 class="wp-block-heading">Worktrees, so parallel doesn’t turn into chaos</h2>



<p class="wp-block-paragraph">The second you run more than one agent, the files start colliding; that becomes the failure. Two agents writing the same file is the exact same headache as two engineers committing to the same lines and nobody talked to each other first. A Git worktree fixes it. It’s a separate working directory on its own branch sharing the same repo history, so one agent’s edits literally cannot touch the other one’s checkout.</p>



<p class="wp-block-paragraph">Codex builds the worktree support right in so several threads hit the same repo at once and don’t bump into each other. Claude Code gives you the same isolation with <code>git worktree</code>, a <code>--worktree</code> flag to open a session in its own checkout, and a <code>isolation: worktree</code> setting you stick on a subagent so each helper gets a fresh checkout that cleans itself up after. (I wrote about the human side of all this in “<a href="https://addyosmani.com/blog/orchestration-tax/" target="_blank" rel="noreferrer noopener">The Orchestration Tax</a>.”) The worktrees take away the mechanical collision, but YOU are still the ceiling. Your review of bandwidth decides how many you can actually run, not the tool.</p>



<h2 class="wp-block-heading">Skills, so you stop explaining your project every single time</h2>



<p class="wp-block-paragraph">A skill is how you stop reexplaining the same project context every session like a goldfish. Both tools use the same format: a folder with a <code>SKILL.md</code> inside holding instructions and metadata, and then optional scripts, references, and assets. Codex runs a skill when you call it with <code>$</code> or <code>/skills</code>, or by itself when your task matches the skill description, which is the reason a tight, boring description beats a clever one. Claude Code does it the same way and I wrote the pattern up in “<a href="https://addyosmani.com/blog/agent-skills/" target="_blank" rel="noreferrer noopener">Agent Skills</a>.”</p>



<p class="wp-block-paragraph">Skills are also where intent stops costing you over and over. I argued in “<a href="https://addyosmani.com/blog/intent-debt/" target="_blank" rel="noreferrer noopener">The Intent Debt</a>” that an agent starts every session cold and it will fill any hole in your intent with a confident guess. A skill is that intent written down on the outside, the conventions, the build steps, the “we don’t do it like this because of that one incident,” written one time where the agent reads it every run. Without skills the loop rederives your whole project from zero every cycle; with skills it kind of compounds.</p>



<p class="wp-block-paragraph">One thing to keep straight: The skill is the authoring format, and a plugin is how you ship it. When you want to share a skill across repos or bundle a few together, you package them as a plugin. True in Codex, true in Claude Code.</p>



<h2 class="wp-block-heading">Plugins and connectors, the loop touches your real tools</h2>



<p class="wp-block-paragraph">A loop that can only see the filesystem is a tiny loop. Connectors, which are built on MCP, let the agent read your issue tracker, query a database, hit a staging API, or drop a message in Slack. Codex and Claude Code both speak MCP so the connector you wrote for one usually just works in the other. And plugins bundle connectors and skills together so your teammate installs your setup in one go instead of rebuilding the whole thing from memory.</p>



<p class="wp-block-paragraph">This is the difference between an agent that says “here is the fix” and a loop that opens the PR, links the Linear ticket, and pings the channel once CI is green by itself. The connectors are the reason the loop can act inside your actual environment instead of just telling you what it would do if it could.</p>



<h2 class="wp-block-heading">Subagents, keep the maker away from the checker</h2>



<p class="wp-block-paragraph">The most useful structural thing in a loop, by far, is splitting the one who writes from the one who checks. The model that wrote the code is way too nice grading its own homework. A second agent with different instructions and sometimes a different model catches the stuff the first one talked itself into.</p>



<p class="wp-block-paragraph">Codex only spawns subagents when you ask, runs them at the same time, and then folds the results back into one answer. You define your own agents as TOML files in <code>.codex/agents/</code>, each with a name, a description, instructions, and optional model and reasoning effort, so your security reviewer can be a strong model on high effort while your explorer is some fast read-only thing. Claude Code does the same with subagents in <code>.claude/agents/</code> and agent teams that pass work between them. The usual split in both is one agent explores, one implements, and one verifies against the spec.</p>



<p class="wp-block-paragraph">I made this case twice already, once as “<a href="https://addyosmani.com/blog/code-agent-orchestra/" target="_blank" rel="noreferrer noopener">The Code Agent Orchestra</a>” and once as “<a href="https://addyosmani.com/blog/adversarial-code-review/" target="_blank" rel="noreferrer noopener">Adversarial Code Review</a>.” The reason it matters specifically inside a loop is the loop runs while you are not watching, so a verifier you actually trust is the only reason you can walk away. Subagents do burn more tokens since each one does its own model and tool work, so spend them where a second opinion is worth paying for. This is also basically what Claude Code’s <code>/goal</code> does under the hood: A fresh model decides if the loop is done instead of the one that did the work, the maker and checker split applied to the stop condition itself.</p>



<h2 class="wp-block-heading">What one loop looks like</h2>



<p class="wp-block-paragraph">Stick it together and a single thread turns into a little control panel. Here is one shape I keep using.</p>



<p class="wp-block-paragraph">An automation runs every morning on the repo. Its prompt calls a triage skill that reads yesterday’s CI failures, the open issues, and the recent commits and writes the findings into a Markdown file or a Linear board. For each finding that is worth doing, the thread opens an isolated worktree and sends a subagent to draft the fix, and a second subagent reviews that draft against the project skills and the existing tests.</p>



<p class="wp-block-paragraph">Connectors let the loop open the PR and update the ticket. Anything the loop cannot handle lands in the triage inbox for me. The state file is the spine of the whole thing; it remembers what got tried, what passed, and what is still open, so tomorrow morning the run picks up where today stopped.</p>



<p class="wp-block-paragraph">And look at what you actually did there. You designed it one time. You did not prompt any of those steps. That’s Steinberger’s whole point made real, and it’s the same loop in Codex or in Claude Code because the pieces are the same pieces.</p>



<h2 class="wp-block-heading">What the loop still does not do for you</h2>



<p class="wp-block-paragraph">The loop changes the work; it does not delete you from it. And three problems actually get sharper as the loop gets better, not easier.</p>



<p class="wp-block-paragraph">Verification is still on you. A loop running unattended is also a loop making mistakes unattended. The whole reason you split the verifier subagent from the maker is to make the loop’s “it’s done” mean something, and even then “done” is a claim and not a proof. I keep saying the same line from “<a href="https://addyosmani.com/blog/code-review-ai/" target="_blank" rel="noreferrer noopener">Code Review in the Age of AI</a>”: Your job is to ship code you confirmed works.</p>



<p class="wp-block-paragraph">Your understanding still rots if you allow it. The faster the loop ships code you did not write, the bigger the gap between what exists and what you actually get. That’s <a href="https://addyosmani.com/blog/comprehension-debt/" target="_blank" rel="noreferrer noopener">comprehension debt</a> and a smooth loop just makes it grow faster unless you read what the loop made.</p>



<p class="wp-block-paragraph">And the comfortable posture is the dangerous one. When the loop runs itself, it’s very tempting to stop having an opinion and just take whatever it gives back. I called that “<a href="https://addyosmani.com/blog/cognitive-surrender/" target="_blank" rel="noreferrer noopener">cognitive surrender</a>.” Designing the loop is the cure when you do it with judgment and the accelerant when you do it to avoid thinking: same action, opposite result.</p>



<h2 class="wp-block-heading">Build the loop. Stay the engineer.</h2>



<p class="wp-block-paragraph">I think this is a preview of how our work is going to evolve. That said, if I weren’t reviewing the code myself or if I relied entirely on automated loops to fix it, my product’s quality would suffer. I’d likely end up stuck in a downward spiral, continuously digging myself into a deeper hole.</p>



<p class="wp-block-paragraph">Go ahead and set up your loops, but don’t forget that prompting your agents directly is also effective. It’s all about finding the right balance.</p>



<p class="wp-block-paragraph">Loops can also result in different outcomes depending on you. Two people can build the exact same loop and get completely opposite results. One uses it to move faster on work they understand deeply. The other uses it to avoid understanding the work at all. The loop doesn’t know the difference. You do.</p>



<p class="wp-block-paragraph">That’s what makes loop design harder than prompt engineering. Cherny’s point isn’t that the work got easier. It’s that the leverage point moved.</p>



<p class="wp-block-paragraph">Build the loop. But build it like someone who intends to stay the engineer, not just the person who presses go.</p>
]]></content:encoded>
							<wfw:commentRss>https://www.oreilly.com/radar/loop-engineering/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
							</item>
		<item>
		<title>This Week in AI: Fable 5, the Clone Wave, and Uber&#8217;s AI Reality Check</title>
		<link>https://www.oreilly.com/radar/this-week-in-ai-fable-5-the-clone-wave-and-ubers-ai-reality-check/</link>
				<comments>https://www.oreilly.com/radar/this-week-in-ai-fable-5-the-clone-wave-and-ubers-ai-reality-check/#respond</comments>
				<pubDate>Thu, 18 Jun 2026 19:33:23 +0000</pubDate>
					<dc:creator><![CDATA[Michelle Smith]]></dc:creator>
						<category><![CDATA[AI & ML]]></category>
		<category><![CDATA[This Week in AI]]></category>
		<category><![CDATA[Podcast]]></category>

		<guid isPermaLink="false">https://www.oreilly.com/radar/?p=18954</guid>

		
					<media:content 
				url="https://www.oreilly.com/radar/wp-content/uploads/sites/3/2026/05/0642572383770_This_Week_in_AI_Cover-scaled.jpg" 
				medium="image" 
				type="image/jpeg" 
				width="2560" 
				height="2560" 
			/>

			<media:thumbnail 
				url="https://www.oreilly.com/radar/wp-content/uploads/sites/3/2026/05/0642572383770_This_Week_in_AI_Cover-160x160.jpg" 
				width="160" 
				height="160" 
			/>
		
				<custom:subtitle><![CDATA[Why Anthropic&#039;s newest model disappeared in three days, and what exploding token budgets tell us about building with agents]]></custom:subtitle>
		
				<description><![CDATA[This week, egghead.io cofounder John Lindquist joined host YK Sugi, founder of CS Dojo and developer experience manager at Eventual, to cover the latest AI news. First on the agenda was the contested release of Claude Fable 5. They also examined the financial shifts reshaping the technology industry, including the rising costs associated with agentic [&#8230;]]]></description>
								<content:encoded><![CDATA[
<p class="wp-block-paragraph">This week, <a href="http://egghead.io" target="_blank" rel="noreferrer noopener">egghead.io</a> cofounder John Lindquist joined host YK Sugi, founder of CS Dojo and developer experience manager at Eventual, to cover the latest AI news. First on the agenda was the contested release of Claude Fable 5. They also examined the financial shifts reshaping the technology industry, including the rising costs associated with agentic coding loops. Then John outlined the framework he uses to build in the agent era without starting from scratch every time.</p>



<p class="wp-block-paragraph">Watch the full episode here:</p>



<figure class="wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe loading="lazy" title="This Week in AI with YK Sugi and John Lindquist" width="500" height="281" src="https://www.youtube.com/embed/b7DpwWXuRp8?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
</div></figure>



<h2 class="wp-block-heading"><strong>Claude Fable 5: 3 days, a government order, and a lot of unanswered questions</strong></h2>



<p class="wp-block-paragraph">Claude Fable 5 launched June 9 and was <a href="https://www.anthropic.com/news/fable-mythos-access" target="_blank" rel="noreferrer noopener">pulled from all customers</a> on June 12 after the <a href="https://theconversation.com/why-the-us-government-shut-down-anthropics-latest-claude-ai-model-285223" target="_blank" rel="noreferrer noopener">US government issued a directive</a> ordering Anthropic to restrict access for foreign nationals inside and outside the US. Amazon researchers had <a href="https://techcrunch.com/2026/06/13/amazon-ceo-reportedly-raised-anthropic-model-concerns-before-government-crackdown/" target="_blank" rel="noreferrer noopener">reportedly surfaced what they characterized as a security vulnerability</a>, and after Anthropic reportedly declined to patch or redeploy the model, the directive came down. Senior Anthropic staff subsequently traveled to Washington to meet with White House officials.</p>



<p class="wp-block-paragraph">The dispute about what actually happened is unresolved. Anthropic&#8217;s position is that the reported issue was a narrow jailbreak that had been previously identified and was present across public models generally, and not a serious security threat. An independent researcher who reviewed the report described it as defensive prompting that surfaced known vulnerabilities and called the response an overreaction. Neither side has published the technique or prompt, so there&#8217;s no way to evaluate the claim independently. But as John put it, “It sets a very strange precedent going forward, as models are released, that governments can step in and control what private companies can and cannot do with their model.”</p>



<p class="wp-block-paragraph">Another new precedent: Fable 5 wasn&#8217;t built on the Opus or Sonnet architecture, which means comparisons to prior Anthropic models or contemporaries don&#8217;t tell us much. But initial impressions were positive, including from YK and John, and Fable 5 quickly reached the top of the Arena leaderboard in the text, agents, and web dev code categories. However, the model also had a purposeful limitation: On questions related to AI and machine learning training specifically, it was designed to underperform (without signaling this to users), apparently to prevent competitors from using it to improve their own models. Intentional capability suppression in a commercial model, without disclosure, is a different kind of product decision than a safety guardrail. Whether that approach becomes more common as competitive stakes rise is an open question.&nbsp;</p>



<h2 class="wp-block-heading"><strong>Tokens burn fast when the loop isn&#8217;t ready for them</strong></h2>



<p class="wp-block-paragraph">Last week, SpaceX <a href="https://www.cnbc.com/2026/06/03/spacex-ipo-stock-price-roadshow-musk.html" target="_blank" rel="noreferrer noopener">went public</a> in the largest IPO in history. The company <a href="https://www.cnbc.com/2026/06/16/spacex-spcx-cursor-acquisition-ipo.html" target="_blank" rel="noreferrer noopener">finalized its acquisition of Cursor</a> in a $60 billion all-stock deal shortly after. (That last one happened after this episode aired—we’ll talk more about it on Monday.) Both <a href="https://www.nbcnews.com/business/markets/openai-chatgpt-files-ipo-rcna349101" target="_blank" rel="noreferrer noopener">OpenAI</a> and <a href="https://ykdojo.github.io/this-week-in-ai-slides/slides.html#12-3:~:text=H%2C%20May%2028)-,TechCrunch,-Google" target="_blank" rel="noreferrer noopener">Anthropic</a> have filed to go public as well, and Google raised roughly $160 billion through <a href="https://www.cnbc.com/2026/06/01/alphabet-to-raise-80-billion-from-stock-sales-to-fund-ai-buildout.html" target="_blank" rel="noreferrer noopener">equity</a> and a <a href="https://www.cnn.com/2026/02/10/business/google-one-hundred-year-bond" target="_blank" rel="noreferrer noopener">100-year bond</a>. A significant share of that capital is flowing toward AI coding infrastructure.<br><br>YK brought up another, less celebratory, financial story that’s been making the rounds: Uber <a href="https://fortune.com/2026/05/26/uber-coo-ai-spending-tokens-claude-code/" target="_blank" rel="noreferrer noopener">burned through its full 2026 AI tools budget by April</a>, mostly on Claude Code and Cursor, and Andrew Macdonald, the company&#8217;s COO, acknowledged they couldn&#8217;t link that spending to a measurable increase in useful customer features. Uber subsequently put a <a href="https://www.inc.com/lucia-auerbach/uber-blew-through-2026-ai-budget-in-four-months-now-it-is-capping-employee-use/91355199" target="_blank" rel="noreferrer noopener">$1,500 per month per employee cap</a> in place.</p>



<p class="wp-block-paragraph">John flagged projects inefficiently utilizing agentic loops as one possible cause for wasteful token spend. Most developers deploying agents against existing codebases haven&#8217;t built the tooling those agents need to work efficiently, so agents burn tokens doing work that dead-ends, repeating context, or generating code that requires significant debugging. He explained:</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">If you take a legacy codebase and you throw agents against it with loops, you haven&#8217;t set up a proper agent environment. It&#8217;s so quick to burn tokens because.&nbsp;.&nbsp;.the agents don&#8217;t have the tools to work with.</p>
</blockquote>



<p class="wp-block-paragraph">The conversation in developer communities so far has focused almost entirely on what agents can generate. But as more organizations move from experimentation to production-scale deployment, building logging, verification, and proper error surfaces into agent tooling is what will determine whether token spend maps to real output. Otherwise, we’ll likely see more companies go the way of Uber.</p>



<h2 class="wp-block-heading"><strong>Ingredients beat inference: A practical framework for building in the clone wave</strong></h2>



<p class="wp-block-paragraph">For most developer workflows today, buy-versus-build leans toward building in a way it didn’t even a year or two ago. As John noted, “It&#8217;s so easy to build apps and workflows now where there are so many amazing production apps out there, apps on your phone, apps on your desktop, software as a service, that are trivial to copy and clone.” He uses the term the &#8220;clone wave&#8221; to describe this expanding set of open source equivalents to consumer software products that can now be cloned, forked, or replaced and get you 99% of the way to your use case.</p>



<p class="wp-block-paragraph">The principle that drives the clone wave is &#8220;ingredients beat inference.&#8221; If you ask an agent to build a feature from scratch, it infers a solution with no external reference. If you give it an existing open source implementation to start from, it can adapt, translate, and integrate that code far faster and more reliably. The ingredients approach also helps with the <a href="https://venturebeat.com/technology/43-of-ai-generated-code-changes-need-debugging-in-production-survey-finds" target="_blank" rel="noreferrer noopener">43% of AI-generated code that needs debugging in production</a>, per a figure YK cited earlier in the episode.</p>



<p class="wp-block-paragraph">The GitHub CLI plays a central role in this workflow. John explained that because agents understand the GitHub CLI natively, you can give an agent a search task and let it find implementations it wouldn&#8217;t have generated itself. Language mismatch isn&#8217;t a blocker, because agents translate between languages and libraries well. And tools like <a href="https://deepwiki.com/" target="_blank" rel="noreferrer noopener">DeepWiki</a> from Cognition let agents explore and understand a repo&#8217;s structure before cloning or forking it, so the evaluation step doesn&#8217;t require local setup.</p>



<p class="wp-block-paragraph">The framework extends to how you build the last 20% that <em>isn&#8217;t</em> available as an ingredient. This is the part that’s specific to your use case; John described it as “that extra bit that you&#8217;re building on top of it to make it into the custom product and project for either yourself or for your users.” John’s bigger point is that the tools you build for yourself should also be usable by your agents. Expose endpoints and logging. Give agents the ability to read state and errors. An agent that can control a tool but not debug it will eventually stop in ways that are hard to diagnose.</p>



<p class="wp-block-paragraph">John walked through <a href="https://cmux.com/" target="_blank" rel="noreferrer noopener">cmux</a> to demonstrate what an agent-native workspace looks like in practice. cmux is a terminal multiplexer built with agentic workflows in mind: it exposes a CLI that agents can control directly, so you can open a terminal pane, have that pane spawn another, and have the two read from and write to each other. In practice that means you can run Claude Code in one pane, Codex in another, and a third pane reading output from both, with each agent able to observe the others&#8217; state. </p>



<p class="wp-block-paragraph">Agents need more than the ability to run commands. They need to read logs, check errors, and confirm state before taking the next step. A workspace that exposes those surfaces gives agents a feedback loop. This tenet is applicable to tools across the company. Organizations that treat their internal tooling as agent-accessible infrastructure are building something that compounds. Those treating agents as black-box code generators are taking on technical debt they may not see until causes issues later on.</p>



<h2 class="wp-block-heading"><strong>What&#8217;s next</strong></h2>



<p class="wp-block-paragraph">SpaceX’s acquisition of Cursor turns the coding-agent race into something much larger than an IDE fight. Cursor may be positioning itself as a new GitHub for the agentic era, where agents write, review, test, repair, and govern code. At the same time, Salesforce’s $3.6B acquisition of Fin shows the same pattern inside enterprise software: Buyers want packaged workflows that solve real support, sales, and operations problems rather than abstract “agents.” </p>



<p class="wp-block-paragraph">Next week, host Ksenia Se examines these stories and more through the lens of who owns the loop where AI does the work. Join us to find out why the next phase of AI will be about who controls the infrastructure, economics, and trust layer.</p>



<p class="wp-block-paragraph">Our episodes are free and open to all through the end of June if you’d like to attend live—<a href="https://www.oreilly.com/live/this-week-in-ai.html" target="_blank" rel="noreferrer noopener">register here</a>. And we’ll continue to publish our takeaways here on Radar each Friday and share full episodes on <a href="https://www.youtube.com/watch?v=g4cfjz5AKxY&amp;list=PL055Epbe6d5bJEhT7_ZzOeJZ6gPyUzYpS" target="_blank" rel="noreferrer noopener">YouTube</a>, <a href="https://open.spotify.com/show/033kJS2BG1teGunxmtsU1r" target="_blank" rel="noreferrer noopener">Spotify</a>, <a href="https://podcasts.apple.com/us/podcast/this-week-in-ai/id1896798047" target="_blank" rel="noreferrer noopener">Apple</a>, or wherever you get your podcasts.</p>
]]></content:encoded>
							<wfw:commentRss>https://www.oreilly.com/radar/this-week-in-ai-fable-5-the-clone-wave-and-ubers-ai-reality-check/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
							</item>
		<item>
		<title>Kubernetes in the Age of AI</title>
		<link>https://www.oreilly.com/radar/kubernetes-in-the-age-of-ai/</link>
				<comments>https://www.oreilly.com/radar/kubernetes-in-the-age-of-ai/#respond</comments>
				<pubDate>Thu, 18 Jun 2026 14:21:16 +0000</pubDate>
					<dc:creator><![CDATA[Andy Kwan]]></dc:creator>
						<category><![CDATA[AI & ML]]></category>
		<category><![CDATA[Commentary]]></category>

		<guid isPermaLink="false">https://www.oreilly.com/radar/?p=18938</guid>

		
					<media:content 
				url="https://www.oreilly.com/radar/wp-content/uploads/sites/3/2026/06/Kubernetes-in-the-age-of-AI.jpg" 
				medium="image" 
				type="image/jpeg" 
				width="2304" 
				height="1792" 
			/>

			<media:thumbnail 
				url="https://www.oreilly.com/radar/wp-content/uploads/sites/3/2026/06/Kubernetes-in-the-age-of-AI-160x160.jpg" 
				width="160" 
				height="160" 
			/>
		
		
				<description><![CDATA[When Kubernetes first came onto the scene, it was a major turning point, a revision of the infrastructure and operations space that transformed the way developers and ops personnel build, deploy, and maintain applications in the cloud. It has since become the clear standard for how modern applications are built and operated. As the CNCF [&#8230;]]]></description>
								<content:encoded><![CDATA[
<p class="wp-block-paragraph">When Kubernetes first came onto the scene, it was a major turning point, a revision of the infrastructure and operations space that transformed the way developers and ops personnel build, deploy, and maintain applications in the cloud. It has since become the clear standard for how modern applications are built and operated. As the CNCF noted in its latest <a href="https://www.cncf.io/reports/the-cncf-annual-cloud-native-survey/" target="_blank" rel="noreferrer noopener"><em>Annual Cloud Native Survey</em> report</a>, “Among container users, 82% are using Kubernetes in production in 2025, up from 66% in 2023. This represents near-universal adoption within the container ecosystem.”</p>



<p class="wp-block-paragraph">Over the last few years, another revision in the space has occurred with Kubernetes’s evolution from a container orchestrator to an AI infrastructure platform. According to the CNCF survey, “The rise of Kubernetes as the de facto AI platform represents a fundamental shift in how organizations approach machine learning operations.&nbsp;.&nbsp;.[with Kubernetes] providing a unified orchestration layer that handles both traditional application workloads and compute-intensive AI tasks.” The emergence of seismic technologies like generative AI and agentic AI has only accelerated this transformation.</p>



<p class="wp-block-paragraph">The intersection of AI with Kubernetes is undoubtedly one of the most impactful developments in the operations space. As Jonathan Johnson, software architect at Dijure, observes, “AI on K8s is very, very important, and there is not enough [resources] out there.” Raju Gandhi, senior technical architect at Edward Jones, echoes this assessment, noting that “operationalizing AI/ML on K8s is a big issue, [and it’s only] getting bigger. This is a topic that needs attention.” But what are some of the things that you should know about this trend to keep abreast and stay ahead in the game?</p>



<h2 class="wp-block-heading"><strong>Generative AI</strong></h2>



<p class="wp-block-paragraph">Anyone with access to a computer or a smartphone has likely used some iteration of generative AI, a stunning fact when you consider that GenAI was on the outer edges of mainstream discourse and consumption a scant five years ago. But at the end of 2022, the debut of ChatGPT marked the beginning of a technological revolution, one that would impact and reshape nearly every aspect of our working and personal lives. Unsurprisingly, there are now thousands of generative AI models, a proliferation that naturally has its own set of complexities. Selecting a model is simple, but if you’re an application developer or MLOps engineer, how do you go about operating that model in a production system? Not only do you have to be cognizant of factors like resilience, scalability, security, and operational costs, but there’s the fact that bringing a model from experimentation into production can be arduous if not done properly. That’s where Kubernetes comes into play.</p>



<p class="wp-block-paragraph">As Roland Huß and Daniele Zonca, distinguished engineers at Red Hat, note, “GenAI/LLM models are resource intensive, requiring substantial computational power and large datasets. Given its scalability and extensibility, Kubernetes is uniquely suited to function as an efficient platform for AI and LLM model pretraining, fine-tuning, deployment, and prompt engineering.” They further elaborate that “this integration with Kubernetes not only simplifies the adoption of cutting-edge AI technologies but also ensures a seamless and efficient operational flow. Kubernetes, with its robust scalability and management capabilities, stands as an ideal platform for generative AI projects, aligning DevOps and MLOps practices in a cohesive ecosystem.”</p>



<p class="wp-block-paragraph">This sentiment is already shared by a wide swath of the industry. According to the CNCF survey above, as of 2025, 66% of organizations run generative AI workloads on Kubernetes. These organizations include <a href="https://kubernetes.io/case-studies/openai/" target="_blank" rel="noreferrer noopener">OpenAI</a>, which uses Kubernetes for its AI/LLM application experimenting and testing; <a href="https://llm-d.ai/blog/production-grade-llm-inference-at-scale-kserve-llm-d-vllm" target="_blank" rel="noreferrer noopener">Tesla</a>, which utilizes KServe to manage production-grade LLM inference; and <a href="https://docs.firefly.ai/integrations/data-sources/kubernetes" target="_blank" rel="noreferrer noopener">Adobe</a>, which uses Kubernetes to power its suite of generative creative models. Other companies taking this approach include <a href="https://www.zenml.io/mlops-database/uber-michelangelo-modernization-ray-on-kubernetes-michelangelo-modernization-evolving-an-end-to-end-ml-platform-from-tre">Uber</a>, <a href="https://www.techtarget.com/searchitoperations/news/366558957/Generative-AI-brings-changes-to-cloud-native-platforms" target="_blank" rel="noreferrer noopener">Intuit</a>, and <a href="https://learning.oreilly.com/library/view/generative-ai-on/9781098171919/preface01.html" target="_blank" rel="noreferrer noopener">Google</a>. With more companies adopting this practice for their generative AI and LLMs operations, it’d be prudent for any organization to leverage Kubernetes for their own GenAI and LLM workflows.</p>



<h2 class="wp-block-heading"><strong>Agentic AI</strong></h2>



<p class="wp-block-paragraph">Nearly coinciding with the rise of GenAI has been the steady growth of agentic AI. Unlike GenAI, agentic AI goes beyond answering simple prompts and generating text in its ability to operate autonomously to perform complex, multistep actions, utilize tools, and make independent decisions. With its ability to support both traditional ML processes and GenAI and LLM operations, it should come as no surprise that Kubernetes has a role in the agentic AI ecosystem as well.</p>



<p class="wp-block-paragraph">According to Ronald Petty, principal consultant at RX-M, “Kubernetes has been leveraged to host machine learning pipelines, including AI model training and inference. As inference options have become plentiful and affordable, on and off-premise, we have seen the rise of agents. Coupling cloud native technologies and popular protocols, we now see agents moving from ad hoc demos to complex fleets of agents on systems like Kubernetes.” So what are some examples of the integration between these two technologies?</p>



<p class="wp-block-paragraph">One notable offering is <a href="https://www.cncf.io/blog/2025/04/15/kagent-bringing-agentic-ai-to-cloud-native/" target="_blank" rel="noreferrer noopener">Kagent</a>, an OS programming framework that runs AI agents in Kubernetes and “helps engineers build powerful internal platforms by tackling cloud native tasks such as configuration, troubleshooting, complex deployment scenarios, observability pipelines and dashboards, and safely enabling network security.” Operating along similar lines is K8sGPT, an AI-powered tool that leverages intelligent insights and automated troubleshooting to analyze Kubernetes clusters for configuration problems and security issues, as well as generates solutions to problems discovered in analysis.</p>



<p class="wp-block-paragraph">A more recent entry in the field is <a href="https://github.com/sympozium-ai/sympozium" target="_blank" rel="noreferrer noopener">Sympozium</a>, a Kubernetes-native coordination layer for multi-agent AI systems that “solves the same problem Kubernetes solved for containers, but for agents that need to share context, hand off tasks, and maintain shared situational awareness.” Another newer offering is <a href="https://kubernetes.io/blog/2026/03/20/running-agents-on-kubernetes-with-agent-sandbox/" target="_blank" rel="noreferrer noopener">Agent Sandbox</a>, which allows you to run AI agents as isolated, stateful workloads with a native API on Kubernetes.</p>



<h2 class="wp-block-heading"><strong>The fundamentals</strong></h2>



<p class="wp-block-paragraph">While it’s important to be aware of the latest developments and trends affecting your domain, that shouldn’t come at the expense of foundational knowledge and skills. As basketball great Michael Jordan once said, “Get the fundamentals down and the level of everything you do will rise.” One of the most fundamental skills for working with Kubernetes is networking, and frustratingly enough, it&#8217;s one of the more difficult ones to master. As Cisco senior staff engineer Nico Vibert observes, “Platform engineers tend to be comfortable with Linux networking but less so with protocols like BGP and IPv6; network administrators know those protocols well but find Kubernetes abstractions unfamiliar. Both personas struggle to navigate the dozens of networking tools seemingly required to meet connectivity and security requirements.” Yet as organizations move mission-critical workloads, AI training pipelines, and regulated financial services onto Kubernetes, the engineers who can design, secure, and troubleshoot the network layer have become some of the most sought-after professionals in the industry.</p>



<p class="wp-block-paragraph">In recognition of both the importance and difficult nature of the Kubernetes networking skill, the CNCF recently <a href="https://www.cncf.io/announcements/2025/11/11/cncf-launches-cnpe-certification-to-define-enterprise-scale-platform-engineering-globally/" target="_blank" rel="noreferrer noopener">announced</a> a new certification focused on the Kubernetes network engineer role. The certification is designed to validate hands-on networking expertise across all of the aforementioned layers, filling a gap that the Kubernetes community has long recognized.</p>



<p class="wp-block-paragraph">For organizations that use Kubernetes to develop and deliver applications, leaders and decision-makers need to be aware that utilizing Kubernetes in conjunction with the latest AI tools is no longer a luxury but a necessary practice that will allow their companies to thrive. A similar onus should be placed on the basics. When hiring your next DevOps, network, or site reliability engineer, ensure that their ability to design, secure, and troubleshoot the Kubernetes network layer is second to none.</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph"><em>If you want to dive deeper, check out Roland Huß and Daniele Zonca’s </em><a href="https://learning.oreilly.com/library/view/generative-ai-on/9781098171919/" target="_blank" rel="noreferrer noopener">Generative AI on Kubernetes</a><em>, Jonathan Johnson’s <a href="https://learning.oreilly.com/live-events/gpu-kubernetes-homelab-infrastructure-as-code-for-ai-workloads/0642572275662/" target="_blank" rel="noreferrer noopener">GPU Kubernetes Homelab</a> live course, Alex Corvin, Taneem Ibrahim, and Kyle Stratis’s </em><a href="https://learning.oreilly.com/library/view/kubernetes-for-generative/9781836209935/" target="_blank" rel="noreferrer noopener">Scalable Kubernetes Infrastructure for AI Platforms</a><em>, Ashok Srirama and Sukirti Gupta’s </em><a href="https://learning.oreilly.com/library/view/kubernetes-for-generative/9781836209935/" target="_blank" rel="noreferrer noopener">Kubernetes for Generative AI Solutions</a><em>, and Yogesh Raheja’s <a href="https://learning.oreilly.com/course/k8sgpt-essentials-/9781806690077/" target="_blank" rel="noreferrer noopener">K8sGPT Essentials</a> on-demand course. They’re all on O’Reilly. If you’re not a member, you can <a href="https://www.oreilly.com/start-trial/?type=individual" target="_blank" rel="noreferrer noopener">get started with a free trial</a>.</em></p>
</blockquote>



<p class="wp-block-paragraph"></p>
]]></content:encoded>
							<wfw:commentRss>https://www.oreilly.com/radar/kubernetes-in-the-age-of-ai/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
							</item>
		<item>
		<title>The Case Against Building Your Own Agent Platform</title>
		<link>https://www.oreilly.com/radar/the-case-against-building-your-own-agent-platform/</link>
				<comments>https://www.oreilly.com/radar/the-case-against-building-your-own-agent-platform/#respond</comments>
				<pubDate>Wed, 17 Jun 2026 13:53:16 +0000</pubDate>
					<dc:creator><![CDATA[Pete Johnson]]></dc:creator>
						<category><![CDATA[AI & ML]]></category>
		<category><![CDATA[Commentary]]></category>

		<guid isPermaLink="false">https://www.oreilly.com/radar/?p=18935</guid>

		
					<media:content 
				url="https://www.oreilly.com/radar/wp-content/uploads/sites/3/2026/06/The-case-against-building-your-own-agent-platform.jpg" 
				medium="image" 
				type="image/jpeg" 
				width="2304" 
				height="1792" 
			/>

			<media:thumbnail 
				url="https://www.oreilly.com/radar/wp-content/uploads/sites/3/2026/06/The-case-against-building-your-own-agent-platform-160x160.jpg" 
				width="160" 
				height="160" 
			/>
		
		
				<description><![CDATA[You know the meeting. The board wants an AI agent strategy by end of quarter. Someone on the leadership team has read a McKinsey report. You&#8217;ve been voluntold to build the platform. The slide deck says &#8220;AI-native.&#8221; The acceptance criteria are vague. Somebody mentions LangGraph, and somebody else says, &#8220;We&#8217;ll just wrap it ourselves.&#8221; You [&#8230;]]]></description>
								<content:encoded><![CDATA[
<p class="wp-block-paragraph">You know the meeting. The board wants an AI agent strategy by end of quarter. Someone on the leadership team has read a McKinsey report. You&#8217;ve been voluntold to build the platform. The slide deck says &#8220;AI-native.&#8221; The acceptance criteria are vague. Somebody mentions LangGraph, and somebody else says, &#8220;We&#8217;ll just wrap it ourselves.&#8221;</p>



<p class="wp-block-paragraph">You ask what &#8220;done&#8221; looks like. Nobody in the room can answer.</p>



<p class="wp-block-paragraph">The cost of building this is almost always estimated before anyone has a clear picture of what &#8220;this&#8221; actually is. And that&#8217;s the problem I want to work through here, because the scope of the work being casually assigned to internal platform teams right now is genuinely larger than the people assigning it understand.</p>



<h2 class="wp-block-heading"><strong>Build versus buy, flipped in a year</strong></h2>



<p class="wp-block-paragraph">This particular pendulum has swung before. App servers in the late 1990s. Content management systems in the 2000s. Container orchestration in the 2010s. The pattern rhymes every time: When a category is new, the components look deceptively simple. Early adopters build their own. The market catches up. Within 18 months, building becomes the expensive path. Within 36 months, the teams that built internally are rewriting on top of the category winner that emerged while they weren&#8217;t looking.</p>



<p class="wp-block-paragraph">What&#8217;s different about the current moment is the speed. Menlo Ventures&#8217; <a href="https://menlovc.com/perspective/2025-the-state-of-generative-ai-in-the-enterprise/" target="_blank" rel="noreferrer noopener"><em>2025 State of Generative AI in the Enterprise</em> report</a> shows the build-versus-buy split inverted in a single year. In 2024, 47% of enterprise AI solutions were built internally. By late 2025, that number had collapsed to 24%. The market made the decision in 12 months, which is unusual.</p>



<p class="wp-block-paragraph">I&#8217;ve lived through enough of these transitions to recognize the shape. What I want to do in this piece is explain why I think the scope of &#8220;agent platform&#8221; is systematically underestimated right now, and what platform engineers should be asking before they commit to building one.</p>



<h2 class="wp-block-heading"><strong>Most &#8220;agent platforms&#8221; aren&#8217;t</strong></h2>



<p class="wp-block-paragraph">A lot of the projects labeled &#8220;agent platform&#8221; right now are actually workflow systems with an LLM in the loop. That&#8217;s a meaningful distinction. As Anthropic pointed out in its &#8220;<a href="https://www.anthropic.com/research/building-effective-agents" target="_blank" rel="noreferrer noopener">Building Effective Agents</a>&#8221; guidance, workflows are systems where LLMs and tools are <strong>orchestrated</strong> through <strong>predefined code paths</strong>. Agents are systems where LLMs <strong>dynamically</strong> direct their <strong>own processes and tool usage</strong>.</p>



<p class="wp-block-paragraph">Most of what enterprises are shipping today sits on the workflow side. That&#8217;s fine. Workflows have bounded requirements, tractable testing, and predictable failure modes. If your team is building a workflow system, you might reasonably build it yourselves.</p>



<p class="wp-block-paragraph">The trap is that teams start building for workflows, then get asked to support agents, and discover the jump isn&#8217;t incremental. Agents need memory that survives across sessions. They need evaluation that handles nondeterminism. They need governance that tracks actions, not just outputs. They need orchestration that recovers from failure modes a workflow engine never sees.</p>



<p class="wp-block-paragraph">Here&#8217;s the thesis I want to put on the table: The decision to build an agent platform almost always underestimates the long tail. Memory, governance, eval, and orchestration aren&#8217;t features you add to a workflow engine. They&#8217;re separate product bets, each with its own maturity curve, its own vendor landscape, and its own team of specialists who&#8217;ve been working on it full-time for 18 months while you&#8217;ve been doing something else.</p>



<p class="wp-block-paragraph">Let me walk through them.</p>



<h3 class="wp-block-heading">Memory</h3>



<p class="wp-block-paragraph">The assumption inside most build proposals is that memory is a database problem. You&#8217;ll pick a vector store, shove conversation history into it, and retrieve relevant chunks when the agent needs context. Done.</p>



<p class="wp-block-paragraph">Production memory is three separate systems: episodic, semantic, and procedural, each with different retention and retrieval policies. It&#8217;s temporal reasoning that tracks when facts were valid, not just what they were. It&#8217;s deduplication, multitenant isolation, and explicit source-of-truth governance.</p>



<p class="wp-block-paragraph">The signal that this is a separate product category, not a feature: Mem0 raised <a href="https://mem0.ai/series-a" target="_blank" rel="noreferrer noopener">$24 million across seed and Series A</a>. Letta (formerly MemGPT) raised <a href="https://www.felicis.com/blog/letta" target="_blank" rel="noreferrer noopener">$10M from Felicis</a>. Zep exists as an independent company with a <a href="https://arxiv.org/abs/2501.13956" target="_blank" rel="noreferrer noopener">temporal knowledge graph engine</a>. Mem0&#8217;s <a href="https://mem0.ai/blog/state-of-ai-agent-memory-2026" target="_blank" rel="noreferrer noopener"><em>State of AI Agent Memory 2026</em> report</a> maps 21 frameworks across three hosting models with measurable benchmark gaps between them. On <a href="https://mem0.ai/blog/graph-memory-solutions-ai-agents" target="_blank" rel="noreferrer noopener">LongMemEval</a>, Zep scores 15 points higher than Mem0 on temporal queries, which tells you these aren&#8217;t interchangeable tools that happen to serve the same market.</p>



<p class="wp-block-paragraph">This is the component that platform teams underestimate hardest. Memory sounds like a database problem. It isn&#8217;t.</p>



<h3 class="wp-block-heading">Governance</h3>



<p class="wp-block-paragraph">The assumption is that governance is RBAC plus audit logging. Your agents are services. Services get role-based access controls. You log the tool calls. Compliance is happy.</p>



<p class="wp-block-paragraph">Agent governance is something different. It spans action authorization, not just data authorization. It requires decision-chain auditability, where you can reconstruct why the agent did what it did, not just what it did. It needs behavioral drift detection, tiered autonomy, and compliance mapped to agent actions rather than data accesses.</p>



<p class="wp-block-paragraph">Grant Thornton&#8217;s <a href="https://www.grantthornton.com/services/advisory-services/artificial-intelligence/2026-ai-impact-survey" target="_blank" rel="noreferrer noopener"><em>2026 AI Impact Survey</em></a> of 950 business executives found that 78% lack strong confidence they could pass an independent AI governance audit within 90 days. Meanwhile, enterprises are moving to increase agent autonomy faster than their governance frameworks can keep up. Traditional AI governance wasn&#8217;t designed for action-level authorization, which is where most agent-specific risk accumulates.</p>



<p class="wp-block-paragraph">And there&#8217;s a hard deadline attached to this. The <a href="https://www.covasant.com/blogs/eu-ai-act-compliance-autonomous-agents-enterprise-2026" target="_blank" rel="noreferrer noopener">EU AI Act</a> becomes fully enforceable for high-risk systems in August 2026. Credit scoring, hiring decisions, healthcare support, and critical infrastructure all fall in scope. If your internal platform doesn&#8217;t handle conformity assessments, human oversight mechanisms, complete audit trails, and ongoing monitoring, that&#8217;s not a v2 feature. That&#8217;s a legal exposure.</p>



<p class="wp-block-paragraph">OWASP now documents &#8220;<a href="https://www.ewsolutions.com/agentic-ai-governance/" target="_blank" rel="noreferrer noopener">excessive agency</a>&#8221; as a top vulnerability class for LLM applications. Cornell researchers have demonstrated indirect prompt injection attacks that manipulate agents through content they ingest. These are agent-specific attack surfaces, and traditional security tooling doesn&#8217;t see them.</p>



<p class="wp-block-paragraph">RBAC was designed for humans with predictable intent. Agents don&#8217;t have predictable intent.</p>



<h3 class="wp-block-heading">Eval</h3>



<p class="wp-block-paragraph">The assumption is that evaluation means writing test cases and measuring accuracy. You built software before. You know how to test things.</p>



<p class="wp-block-paragraph">Agent evaluation is qualitatively different from traditional software testing or even LLM evaluation, <a href="https://medium.com/quantumblack/evaluations-for-the-agentic-world-c3c150f0dd5a" target="_blank" rel="noreferrer noopener">McKinsey&#8217;s QuantumBlack team noted</a>: For LLMs, you evaluate the response to a prompt. For a single agent, you evaluate the full trajectory, including tool calls, state transitions, and intermediate decisions. For multi-agent systems, you evaluate system dynamics, including coordination patterns and collective invariants.</p>



<p class="wp-block-paragraph">This matters because agent behavior is nondeterministic by design. The same input produces different valid execution paths. &#8220;Did the agent succeed?&#8221; is no longer a yes-or-no question, because the agent might reach the right answer through a trajectory you didn&#8217;t anticipate, or reach the wrong answer through a trajectory that looks reasonable until the last step.</p>



<p class="wp-block-paragraph">The tooling ecosystem reflects this. <a href="https://cloud.google.com/vertex-ai/generative-ai/docs/models/evaluation-agents" target="_blank" rel="noreferrer noopener">Google Vertex AI has standardized</a> <code>trajectory_exact_match</code>, <code>trajectory_precision</code>, and <code>trajectory_recall</code> as production metrics. These didn&#8217;t exist 18 months ago. LangSmith, Braintrust, Arize, Galileo, Maxim, and others are building full evaluation platforms around trajectory-based analysis, LLM-as-judge scoring with statistical validation, and regression testing against production failures.</p>



<p class="wp-block-paragraph">Here&#8217;s the signal that the category is real: LangChain&#8217;s <a href="https://www.getmaxim.ai/articles/top-5-ai-evaluation-platforms-in-2026-2/" target="_blank" rel="noreferrer noopener"><em>2026 State of AI Agents</em> report</a> found that 57% of organizations now have agents in production, and 32% cite quality as the top deployment barrier. Gartner projects that 60% of software engineering teams will adopt AI evaluation and observability platforms by 2028, up from 18% in 2025. When a category jumps from 18% to 60% adoption in three years, that&#8217;s not a &#8220;we can build this in a sprint&#8221; situation.</p>



<p class="wp-block-paragraph">You can&#8217;t tell whether your evaluation is working without another evaluation. Judge drift, calibration against human experts, internal consistency across independent runs. . .your eval system needs its own eval system, which is exactly the kind of recursion that eats platform teams alive.</p>



<h3 class="wp-block-heading">Orchestration</h3>



<p class="wp-block-paragraph">The orchestration layer hasn&#8217;t converged. LangGraph uses directed graphs with conditional edges. CrewAI uses role-based crews. OpenAI&#8217;s Agents SDK uses explicit handoffs. AutoGen uses conversational GroupChat. Google ADK uses hierarchical agent trees. Claude&#8217;s Agent SDK uses tool-use chains with subagents. Microsoft&#8217;s Agent Framework is its own thing. Each represents a different bet on state management, communication pattern, and coordination model. None of them are interchangeable. Migration between them isn&#8217;t a config change—it&#8217;s rewriting most of your agent logic.</p>



<p class="wp-block-paragraph">Underneath them, the protocol layer is still being invented. The <a href="https://www.anthropic.com/research/building-effective-agents" target="_blank" rel="noreferrer noopener">Model Context Protocol</a> is becoming the standard for tool integration, and agent-to-agent (A2A) protocols are emerging for cross-framework coordination. Both are moving targets, and building on a moving protocol is a cost that internal platform teams rarely price in.</p>



<p class="wp-block-paragraph">If you built your own orchestration layer in 2024, you&#8217;re rewriting it in 2026. The teams that picked a framework spent those two years shipping.</p>



<h2 class="wp-block-heading">The honest case for building</h2>



<p class="wp-block-paragraph">I want to engage the strongest version of the build argument, because there are real reasons to build, and pretending otherwise makes this piece less useful than it should be.</p>



<p class="wp-block-paragraph">Proprietary data genuinely is a durable competitive moat. Mastercard built a foundation model on its transaction network. Plaid built one on its financial institution coverage. As <a href="https://www.pymnts.com/artificial-intelligence-2/2026/fintechs-race-to-build-foundation-models-on-proprietary-data/" target="_blank" rel="noreferrer noopener">Morgan Stanley&#8217;s analysis</a> from last year made clear, decades of verified historical data with consistent identifiers is both technically challenging and prohibitively expensive for outside players to recreate. If your organization has data like that, you should absolutely build on it.</p>



<p class="wp-block-paragraph">Regulated industries have legitimate reasons to want control over the full stack. Off-the-shelf AI tools don&#8217;t always cleanly map to frameworks like HIPAA, GxP, 21 CFR Part 11, SOX, FFIEC, and PCI DSS, and the cost of a failed audit is measured in business units shut down, not in sprints.</p>



<p class="wp-block-paragraph">Vendor lock-in at the AI layer is subtler and more dangerous than in traditional software. If your agentic workflows are built on a vendor&#8217;s proprietary orchestration layer, switching costs compound rapidly across memory, eval, and integrations simultaneously.</p>



<p class="wp-block-paragraph">But here&#8217;s the distinction that matters: Those are arguments for building agents on top of platform components, not arguments for building the platform components themselves. You can own the data, the domain logic, the evaluation criteria, the governance policies, and the specific behaviors your business needs without owning the memory layer, the orchestration engine, or the trace collection infrastructure underneath them.</p>



<p class="wp-block-paragraph">Build the things that are specific to your business. Buy the things that are specific to the technology category. That&#8217;s the heuristic.</p>



<h2 class="wp-block-heading"><strong>Five questions before you commit</strong></h2>



<p class="wp-block-paragraph">If you&#8217;re the platform engineer being pulled into this decision, here are the questions worth asking before anyone signs up for the scope.</p>



<p class="wp-block-paragraph"><strong>Are you building an agent platform or a workflow system?</strong> They&#8217;re not the same scope, and conflating them is where most of the cost overruns originate. A workflow system is a reasonable thing to build. An agent platform is four product categories you haven&#8217;t staffed for.</p>



<p class="wp-block-paragraph"><strong>Can you articulate what &#8220;done&#8221; looks like for each of the four components?</strong> Memory, governance, eval, orchestration. In under three sentences each. If you can&#8217;t, you don&#8217;t have requirements. You have a vibe. And vibes don&#8217;t ship.</p>



<p class="wp-block-paragraph"><strong>What happens to your platform when you need to swap the underlying model?</strong> Menlo&#8217;s <a href="https://menlovc.com/perspective/2025-the-state-of-generative-ai-in-the-enterprise/" target="_blank" rel="noreferrer noopener">December 2025 data</a> shows Anthropic went from 12% of enterprise LLM spend in 2023 to 40% in 2025, while OpenAI fell from 50% to 27%. Enterprises didn&#8217;t plan those switches. The capability gaps forced them. If your internal platform hardcoded assumptions about context windows, tool-calling formats, or reasoning styles from one vendor, swapping models isn&#8217;t an API key change. It&#8217;s simultaneous rewrites across memory, eval, and orchestration.</p>



<p class="wp-block-paragraph"><strong>What happens when the techniques themselves change?</strong> Eighteen months ago the default pattern was RAG with flat vector retrieval. Now it&#8217;s just-in-time context strategies, agent-managed memory tiers, and trajectory-based evaluation. Anthropic&#8217;s <a href="https://www.anthropic.com/engineering/effective-context-engineering-for-ai-agents" target="_blank" rel="noreferrer noopener">own follow-up</a> to &#8220;Building Effective Agents&#8221; explicitly acknowledges the field has moved since they wrote the original. If your platform baked in the 2024 patterns, the 2026 patterns are a refactor, not a config change. Vendor platforms absorb those shifts as releases. Internal platforms absorb them as sprints.</p>



<p class="wp-block-paragraph"><strong>What happens when the platform team leaves?</strong> This is the tale as old as COBOL, custom ESBs in 2008, or hand-rolled container orchestration in 2015. A small team builds something clever, it works, they move on, and five years later you&#8217;re paying premium rates to contractors who can still read the code. Agent platforms are a particularly bad candidate for this pattern because the talent pool is both small and mobile. Here&#8217;s the uncomfortable version of the question: Who on your team, today, could rebuild the memory layer if the person who wrote it left tomorrow?</p>



<h2 class="wp-block-heading">What this looks like in 2 years</h2>



<p class="wp-block-paragraph">Gartner&#8217;s prediction that <a href="https://www.gartner.com/en/newsroom/press-releases/2025-06-25-gartner-predicts-over-40-percent-of-agentic-ai-projects-will-be-canceled-by-end-of-2027" target="_blank" rel="noreferrer noopener">over 40% of agentic AI projects will be canceled by 2027</a> isn&#8217;t really about the AI. It&#8217;s about projects that got scoped before anyone understood the shape of the work. Most of the canceled projects will be internal builds, because internal builds are where the scope estimation error accumulates. Deloitte&#8217;s data on <a href="https://www.deloitte.com/us/en/insights/topics/digital-transformation/state-of-generative-ai-in-enterprise.html" target="_blank" rel="noreferrer noopener">two- to four-year AI ROI horizons</a> is the warning shot. If your timeline to value is already long, every month you spend rebuilding a component that exists as a product is a month you don&#8217;t have.</p>



<p class="wp-block-paragraph">The teams that built their platforms around OpenAI in 2023 weren&#8217;t wrong. They made a reasonable bet on the market leader at the time. But they spent 2025 porting to a landscape where Anthropic had tripled share and Google had gone from 7% to 21%. The teams that picked model-agnostic platforms spent 2025 shipping. The only durable bet in this space is the one that assumes the bet will change.</p>



<p class="wp-block-paragraph">The best platform engineering decision you can make this quarter might be to not build the platform.</p>



<h2 class="wp-block-heading">Sources</h2>



<h3 class="wp-block-heading">Primary sources</h3>



<ul class="wp-block-list">
<li>Menlo Ventures, <em>2025: The State of Generative AI in the Enterprise</em>, December 2025, <br><a href="https://menlovc.com/perspective/2025-the-state-of-generative-ai-in-the-enterprise/" target="_blank" rel="noreferrer noopener">https://menlovc.com/perspective/2025-the-state-of-generative-ai-in-the-enterprise/</a>.</li>



<li>Anthropic, &#8220;Building Effective Agents,&#8221; December 2024, <br><a href="https://www.anthropic.com/research/building-effective-agents" target="_blank" rel="noreferrer noopener">https://www.anthropic.com/research/building-effective-agents</a>.</li>



<li>Anthropic, &#8220;Effective Context Engineering for AI Agents,&#8221; 2025, <br><a href="https://www.anthropic.com/engineering/effective-context-engineering-for-ai-agents" target="_blank" rel="noreferrer noopener">https://www.anthropic.com/engineering/effective-context-engineering-for-ai-agents</a>.</li>



<li>European Commission, AI Act Regulatory Framework (Regulation EU 2024/1689), <br><a href="https://digital-strategy.ec.europa.eu/en/policies/regulatory-framework-ai" target="_blank" rel="noreferrer noopener">https://digital-strategy.ec.europa.eu/en/policies/regulatory-framework-ai</a>.</li>



<li>Google Cloud, &#8220;Evaluate Gen AI Agents,&#8221; Vertex AI Documentation, <br><a href="https://cloud.google.com/vertex-ai/generative-ai/docs/models/evaluation-agents" target="_blank" rel="noreferrer noopener">https://cloud.google.com/vertex-ai/generative-ai/docs/models/evaluation-agents</a>.</li>



<li>McKinsey QuantumBlack, &#8220;Evaluations for the Agentic World,&#8221; <br><a href="https://medium.com/quantumblack/evaluations-for-the-agentic-world-c3c150f0dd5a" target="_blank" rel="noreferrer noopener">https://medium.com/quantumblack/evaluations-for-the-agentic-world-c3c150f0dd5a</a>.</li>



<li>LangChain, <em>State of Agent Engineering 2026</em>,<br><a href="https://www.langchain.com/state-of-agent-engineering" target="_blank" rel="noreferrer noopener">https://www.langchain.com/state-of-agent-engineering</a>.</li>



<li>Gartner, &#8220;Gartner Predicts Over 40% of Agentic AI Projects Will Be Canceled by End of 2027,&#8221; June 2025, <a href="https://www.gartner.com/en/newsroom/press-releases/2025-06-25-gartner-predicts-over-40-percent-of-agentic-ai-projects-will-be-canceled-by-end-of-2027" target="_blank" rel="noreferrer noopener">https://www.gartner.com/en/newsroom/press-releases/2025-06-25-gartner-predicts-over-40-percent-of-agentic-ai-projects-will-be-canceled-by-end-of-2027</a>.</li>



<li>Grant Thornton, <em>2026 AI Impact Survey</em>, April 2026,<br><a href="https://www.grantthornton.com/services/advisory-services/artificial-intelligence/2026-ai-impact-survey" target="_blank" rel="noreferrer noopener">https://www.grantthornton.com/services/advisory-services/artificial-intelligence/2026-ai-impact-survey</a>.</li>
</ul>



<h3 class="wp-block-heading">Secondary Sources</h3>



<ul class="wp-block-list">
<li>Mem0, &#8220;Mem0 Raises $24M to Build the Memory Layer for AI,&#8221; October 2025, <br><a href="https://mem0.ai/series-a" target="_blank" rel="noreferrer noopener">https://mem0.ai/series-a</a>.</li>



<li>Felicis, &#8220;Felicis&#8217;s Seed in Letta,&#8221; September 2024, <br><a href="https://www.felicis.com/blog/letta" target="_blank" rel="noreferrer noopener">https://www.felicis.com/blog/letta</a>.</li>



<li>Vectorize.io, &#8220;Mem0 vs Zep,&#8221; Benchmark Comparison, <br><a href="https://vectorize.io/articles/mem0-vs-zep" target="_blank" rel="noreferrer noopener">https://vectorize.io/articles/mem0-vs-zep</a>.</li>



<li>Rasmussen et al., &#8220;Zep: A Temporal Knowledge Graph Architecture for Agent Memory,&#8221; arXiv 2501.13956, <br><a href="https://arxiv.org/abs/2501.13956" target="_blank" rel="noreferrer noopener">https://arxiv.org/abs/2501.13956</a>.</li>



<li>OWASP, &#8220;LLM08:2025 Excessive Agency,&#8221; OWASP Top 10 for LLM Applications, <br><a href="https://genai.owasp.org/llmrisk/llm08-excessive-agency/" target="_blank" rel="noreferrer noopener">https://genai.owasp.org/llmrisk/llm08-excessive-agency/</a>.</li>



<li>Greshake et al., &#8220;Not What You&#8217;ve Signed Up For: Compromising Real-World LLM-Integrated Applications with Indirect Prompt Injection,&#8221; arXiv 2302.12173, February 2023,<br><a href="https://arxiv.org/abs/2302.12173" target="_blank" rel="noreferrer noopener">https://arxiv.org/abs/2302.12173</a>.</li>



<li>Model Context Protocol, Official Specification, <br><a href="https://modelcontextprotocol.io" target="_blank" rel="noreferrer noopener">https://modelcontextprotocol.io</a>.</li>



<li>PYMNTS, &#8220;FinTechs Race to Build Foundation Models on Proprietary Data,&#8221; 2026,<br><a href="https://www.pymnts.com/artificial-intelligence-2/2026/fintechs-race-to-build-foundation-models-on-proprietary-data/" target="_blank" rel="noreferrer noopener">https://www.pymnts.com/artificial-intelligence-2/2026/fintechs-race-to-build-foundation-models-on-proprietary-data/</a>.</li>



<li>Deloitte, &#8220;State of Generative AI in the Enterprise,&#8221; Quarterly Reports, <br><a href="https://www.deloitte.com/us/en/insights/topics/digital-transformation/state-of-generative-ai-in-enterprise.html" target="_blank" rel="noreferrer noopener">https://www.deloitte.com/us/en/insights/topics/digital-transformation/state-of-generative-ai-in-enterprise.html</a>.</li>
</ul>
]]></content:encoded>
							<wfw:commentRss>https://www.oreilly.com/radar/the-case-against-building-your-own-agent-platform/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
							</item>
		<item>
		<title>Linear Thinking, Nonlinear Costs</title>
		<link>https://www.oreilly.com/radar/linear-thinking-nonlinear-costs/</link>
				<pubDate>Tue, 16 Jun 2026 11:02:01 +0000</pubDate>
					<dc:creator><![CDATA[Nicole Koenigstein]]></dc:creator>
						<category><![CDATA[AI & ML]]></category>
		<category><![CDATA[Commentary]]></category>

		<guid isPermaLink="false">https://www.oreilly.com/radar/?p=18920</guid>

		
					<media:content 
				url="https://www.oreilly.com/radar/wp-content/uploads/sites/3/2026/06/The-missing-optimization-layer-in-agent-systems.png" 
				medium="image" 
				type="image/png" 
				width="1200" 
				height="896" 
			/>

			<media:thumbnail 
				url="https://www.oreilly.com/radar/wp-content/uploads/sites/3/2026/06/The-missing-optimization-layer-in-agent-systems-160x160.png" 
				width="160" 
				height="160" 
			/>
		
				<custom:subtitle><![CDATA[The Missing Optimization Layer in Agent Systems]]></custom:subtitle>
		
				<description><![CDATA[Many AI agent systems become economically unsustainable long before they become technically impressive. Teams usually focus on model choice, prompt design, tool calling, and orchestration. Those things matter, but they are only part of the system setup. The deeper issue is that coding agents, such as Claude Code, Codex, and Jules, make agent workflows easier [&#8230;]]]></description>
								<content:encoded><![CDATA[
<p class="wp-block-paragraph">Many AI agent systems become economically unsustainable long before they become technically impressive. Teams usually focus on model choice, prompt design, tool calling, and orchestration. Those things matter, but they are only part of the system setup. The deeper issue is that coding agents, such as Claude Code, Codex, and Jules, make agent workflows easier to generate. But when implementation is abstracted away, the underlying mechanics become harder to see. Bad engineering used to produce slow code. Now it produces expensive systems that also happen to be slow.</p>



<p class="wp-block-paragraph">When we design agent systems, we still need to remember that the costs scale nonlinearly. A single user request rarely triggers a single model call. It expands into routing, retrieval, reasoning, reflection, guardrail checks, tool calls, and synthesis. Each step may repeat shared context, reload state, recompute a planner decision, or retry a failed path. What looks like an intelligent workflow can therefore behave like a recursive, stateful computation with overlapping subproblems. If that sounds like backtracking, dynamic programming, and memoization to you, you’re right.</p>



<p class="wp-block-paragraph">We already know how to optimize systems like this. The problem is that coding agents make agent systems easier to generate, but not necessarily easier to optimize. Unless we recognize the underlying mechanics, we may never ask our coding agents to apply the optimization patterns that keep our systems viable.</p>



<h2 class="wp-block-heading"><strong>Old problems wearing new clothes</strong></h2>



<p class="wp-block-paragraph">When we use coding agents to generate agent architectures, it’s tempting to stop at &#8220;the trace looks reasonable.&#8221; The tool can generate routers, retrievers, planners, evaluators, guardrails, tool interfaces, and synthesis steps. It may also know about caching, pruning, memoization, and state modeling. But it won’t necessarily implement those patterns unless you ask for these optimization layers explicitly.</p>



<p class="wp-block-paragraph">Even if you work with agent instructions, unless your SKILL.md, AGENTS.md, or project instructions include constraints around repeated context, memoization, cache invalidation, pruning, and cost per request, your resulting agent system may be functionally correct and economically wasteful at the same time. That’s the tricky part: The code can pass review, the unit tests can pass, and the architecture can look reasonable. The invoice is where the hidden computation finally shows up.</p>



<p class="wp-block-paragraph">It’s easy to give too much agency to tools like Claude Code. When a coding agent reasons in language, calls tools, reflects, and produces fluent text or code, it can feel like a knowledgeable coworker. At the interface level, that impression is understandable. These tools help teams generate more code, move faster, and become more productive. Still, this doesn’t remove the need for engineering craft underneath. Someone still has to recognize repeated context, recomputed planner decisions, correlated retries, unpruned branches, and state that can’t be reused. The coding agent can implement the system, but the engineer still has to understand what kind of system should be implemented. This is where old computer science returns, not as theory but as the optimization layer our agent systems need in production.</p>



<h2 class="wp-block-heading"><strong>The cost multiplier, repeated-work problems, and backtracking</strong></h2>



<p class="wp-block-paragraph">The cost multiplier often shows up first as latency. The user doesn’t see the router, the retries, the reflection loop, or the tool calls. They only see that the agent is taking too long. From the outside, the system looks stuck or broken. From the inside, it may simply be repeating work.</p>



<p class="wp-block-paragraph">This is one of the uncomfortable differences between traditional software and agent systems. In a conventional application, a failed operation often throws an error, times out, or leaves a trace that is easy to inspect. In an agent workflow, failure can look like effort to improve reliability. Take the weakest step in your agent workflow. If it succeeds 60% of the time, and you try to push it close to 99% reliability through retries, you need 5 retries:</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="has-text-align-center wp-block-paragraph">1 <em>− </em>(1 <em>− </em>0<em>.</em>60)<sup>5 </sup>= 0<em>.</em>98976</p>
</blockquote>



<p class="wp-block-paragraph">This math assumes each retry is a roll of fair dice. LLMs aren’t dice. Whether you’re using greedy decoding or probabilistic sampling, the model is still drawing from the same underlying distribution shaped by your prompt. If the first &#8220;thought&#8221; is a hallucination or logic error, bumping the temperature won’t fix the underlying state. You aren’t buying independent trials; you’re just sampling different paths through the same flawed map and state.</p>



<p class="wp-block-paragraph">This is where the old algorithmic framing matters. In a backtracking problem, you don’t keep walking down the same failed branch and call it progress. You return to the last valid state, mark the failed path, and use the failure as information for the next choice. The point isn’t just to try again. The point is to try again under a changed state.</p>



<p class="wp-block-paragraph">Agent workflows need the same discipline. A retry shouldn’t mean &#8220;run it again and hope.&#8221; It should give the model structured feedback about why the previous attempt failed: which constraint failed, which tool result was invalid, which schema didn’t validate, which assumption was unsupported, or which branch added nothing. The next attempt should then change something meaningful: the prompt, the tool choice, the retrieved evidence, the validation constraint, or the planner state.</p>



<h2 class="wp-block-heading"><strong>Memoization, pruning, and dynamic programming</strong></h2>



<p class="wp-block-paragraph">Prompt caching is usually the first optimization. If every step repeats the same system prompt, tool definitions, schema constraints, examples, and policy rules, then caching the shared prefix is an obvious win. It reduces the cost of repeated context. But prompt caching only recognizes that text repeats. It doesn’t notice that decisions repeat.</p>



<p class="wp-block-paragraph">In many agent systems, the expensive unit isn’t only text. It’s the repeated decision. If the same or equivalent state appears again, paying the model to rediscover the same action is unnecessary. That is what memoization does: It turns repeated computation into lookup. In classical algorithms, the repeated computation might be a recursive subproblem. In an agent system, it might be a planner decision over the same task, facts, tools, and constraints. The planner can be treated as a function over state:</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<div class="wp-block-math"><math display="block"><semantics><mrow><msup><mrow></mrow><mi>π</mi></msup><mi>L</mi><mi>L</mi><mi>M</mi><mo form="prefix" stretchy="false">(</mo><msub><mi>S</mi><mi>t</mi></msub><mo form="postfix" stretchy="false">)</mo><mo stretchy="false">→</mo><msub><mi>a</mi><mrow><mi>t</mi><mo>+</mo><mn>1</mn></mrow></msub></mrow><annotation encoding="application/x-tex">^πLLM(S_t) \rightarrow a_{t+1} </annotation></semantics></math></div>
</blockquote>



<p class="wp-block-paragraph">where <math data-latex="S_t "><semantics><msub><mi>S</mi><mi>t</mi></msub><annotation encoding="application/x-tex">S_t </annotation></semantics></math> is the current state of the workflow and <math data-latex="a_{t+1}"><semantics><msub><mi>a</mi><mrow><mi>t</mi><mo>+</mo><mn>1</mn></mrow></msub><annotation encoding="application/x-tex">a_{t+1}</annotation></semantics></math><sub> </sub>is the next action. Without memoization, this function is evaluated again and again through an LLM call. With memoization, the system first checks whether it has seen the same or equivalent state before. If you want a deeper walkthrough of how to use memoization, I cover it in <em><a href="https://learning.oreilly.com/library/view/ai-agents-the/0642572247775/" target="_blank" rel="noreferrer noopener">AI Agents: The Definitive Guide</a></em>.</p>



<p class="wp-block-paragraph">But memoization only helps once the system knows which states are worth revisiting. Pruning handles the other side of the problem: branches that shouldn’t be explored further. However, don’t limit pruning to KV cache pruning or speculative decoding. Use it also when a tool repeatedly returns no new information. Your next LLM call shouldn’t be a slightly reworded version of the same query. If a reflection loop keeps producing stylistic changes without improving correctness, the loop should stop. If a search path violates a constraint or depends on an unsupported assumption, it should be marked as unproductive and removed from the active search space.</p>



<p class="wp-block-paragraph">Dynamic programming becomes relevant when different branches of the workflow solve overlapping subproblems. A research agent may ask similar questions across several documents. A coding agent may inspect the same dependency chain from different entry points. A business analysis agent may compute the same metric for several report sections. If every branch solves these subproblems from scratch, the system pays repeatedly for work it has already done. Table 1 shows examples of how these patterns map to AI agent systems.</p>



<p class="has-text-align-center wp-block-paragraph"><strong>Table 1. Classical optimization patterns applied to AI agent systems </strong></p>



<figure class="wp-block-table"><table class="has-fixed-layout"><tbody><tr><td><strong>Optimization</strong></td><td><strong>The &#8220;old&#8221; CS way</strong></td><td><strong>The &#8220;agent&#8221; way&nbsp;</strong></td></tr><tr><td>Memoization</td><td>Store results of expensive function calls.</td><td>Cache decisions. If the agent saw this state before, don’t ask it to reason again.&nbsp;</td></tr><tr><td>Pruning</td><td>Cut off search paths in a tree that won’t lead to a solution.</td><td>Kill a reflection loop when the critique stops yielding structural improvements.</td></tr><tr><td>Dynamic programming</td><td>Break problems into overlapping subproblems.&nbsp;</td><td>Share codebase analysis across multiple specialized agents instead of rereading files.</td></tr></tbody></table></figure>



<p class="wp-block-paragraph"><br>This isn’t nostalgia. These patterns mitigate the cost structure of agent systems. Memoization reduces repeated decisions. Pruning reduces repeated failure. Dynamic programming reduces repeated subproblem solving. Together, they form the optimization layer many agent architectures are missing in production.</p>



<h2 class="wp-block-heading"><strong>Where to start: Optimization follows topology</strong></h2>



<p class="wp-block-paragraph">The patterns above aren’t a checklist you apply uniformly. Each multi-agent topology, whether centralized, decentralized, independent, or hybrid, distributes communication and coordination differently, which directly affects overhead, latency, and failure propagation. The optimization layer has to follow.</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph"><strong>Centralized</strong><br>A single orchestrator decides, delegates, and aggregates. The expensive unit is the orchestrator’s decision, repeated across similar inputs. Memoize the planner first.</p>



<p class="wp-block-paragraph"><strong>Decentralized</strong><br>Agents coordinate peer-to-peer, exchanging messages without a central authority. The cost moves into the communication itself: redundant exchanges, restated context, agents reasoning over the same shared state from different angles. Prompt caching on the shared context is the first win, followed by pruning exchanges that no longer add information.</p>



<p class="wp-block-paragraph"><strong>Independent/swarms</strong><br>Lightweight agents fan out without coordinating. Cheap individually, expensive in aggregate. If three of your ten agents ask semantically equivalent questions, you pay three times for the same answer. Memoization and pruning aren’t optimizations here; they’re load-bearing.</p>



<p class="wp-block-paragraph"><strong>Hybrid</strong><br>The repeated work shows up at two scales: within a cluster (overlapping subproblems among peers) and across clusters (the coordinator rediscovering the same routing decision). Use dynamic programming on shared subproblems inside the cluster, memoization on the coordinator’s decisions across them.</p>
</blockquote>



<p class="wp-block-paragraph">The optimization layer isn’t a generic discipline you bolt on. It’s a function of the shape of the implementation. Coding agents made it easy to generate the shape without seeing it. The craft is in seeing it anyway.</p>
]]></content:encoded>
										</item>
		<item>
		<title>Who Owns the Code Claude Wrote?</title>
		<link>https://www.oreilly.com/radar/who-owns-the-code-claude-wrote/</link>
				<pubDate>Mon, 15 Jun 2026 10:58:47 +0000</pubDate>
					<dc:creator><![CDATA[Sena Evren]]></dc:creator>
						<category><![CDATA[AI & ML]]></category>
		<category><![CDATA[Commentary]]></category>

		<guid isPermaLink="false">https://www.oreilly.com/radar/?p=18912</guid>

		
					<media:content 
				url="https://www.oreilly.com/radar/wp-content/uploads/sites/3/2026/06/Who-owns-the-code-Claude-wrote.jpg" 
				medium="image" 
				type="image/jpeg" 
				width="2304" 
				height="1792" 
			/>

			<media:thumbnail 
				url="https://www.oreilly.com/radar/wp-content/uploads/sites/3/2026/06/Who-owns-the-code-Claude-wrote-160x160.jpg" 
				width="160" 
				height="160" 
			/>
		
				<custom:subtitle><![CDATA[AI-generated code copyright explained for builders.]]></custom:subtitle>
		
				<description><![CDATA[The following article originally appeared on Sena Evren’s Legal Layer newsletter and is being reposted here with the author’s permission. TL; DR Agentic coding tools like Claude Code, Cursor, and Codex generate code that may be uncopyrightable, owned by your employer, or contaminated by open source licenses you cannot see. Some of this is settled [&#8230;]]]></description>
								<content:encoded><![CDATA[
<p class="wp-block-paragraph"><em>The following article originally appeared on </em><a href="https://legallayer.substack.com/p/who-owns-the-claude-code-wrote" target="_blank" rel="noreferrer noopener"><em>Sena Evren’s </em>Legal Layer<em> newsletter</em></a><em> and is being reposted here with the author’s permission.</em></p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph"><strong>TL; DR</strong><br><br>Agentic coding tools like Claude Code, Cursor, and Codex generate code that may be uncopyrightable, owned by your employer, or contaminated by open source licenses you cannot see. Some of this is settled law, some is actively contested, and this piece is clear about which is which. If you are shipping AI-assisted code and have not thought about any of this, this piece is for you.<br><br></p>
</blockquote>



<p class="wp-block-paragraph">If you shipped code this week, some of it was probably written by an AI. The question of who legally owns that code is less settled than most developers assume, and the answer depends on three things that have nothing to do with how good the code is:</p>



<ol class="wp-block-list">
<li>Whether a human made enough creative decisions to establish copyright</li>



<li>Whether your employment contract already assigned it to your employer</li>



<li>Whether the model pulled from GPL-licensed training data and quietly contaminated your codebase</li>
</ol>



<p class="wp-block-paragraph">On March 31, 2026, Anthropic accidentally published 512,000 lines of Claude Code’s source code in a routine software update through a missing configuration file. Before sunrise, the codebase was mirrored across GitHub. Before breakfast, a developer had used an AI tool to rewrite the entire thing in Python, and the “claw-code” repository hit 100,000 GitHub stars in a single day, the fastest in history. Then came the DMCA takedowns, and then came the question nobody had a clean answer to:</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">If Claude Code was, by Anthropic’s own lead engineer’s admission, predominantly written by Claude itself, does Anthropic even own it? Can you issue a DMCA takedown for code that copyright law may not protect?</p>
</blockquote>



<p class="wp-block-paragraph">That incident compressed every open question about AI-generated code ownership into a single news cycle. The same questions apply to your codebase.</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="1200" height="480" src="https://www.oreilly.com/radar/wp-content/uploads/sites/3/2026/06/image-14.png" alt="Three risks in every AI-assisted codebase" class="wp-image-18913" srcset="https://www.oreilly.com/radar/wp-content/uploads/sites/3/2026/06/image-14.png 1200w, https://www.oreilly.com/radar/wp-content/uploads/sites/3/2026/06/image-14-300x120.png 300w, https://www.oreilly.com/radar/wp-content/uploads/sites/3/2026/06/image-14-768x307.png 768w" sizes="auto, (max-width: 1200px) 100vw, 1200px" /></figure>



<h2 class="wp-block-heading">The copyright rule nobody told you</h2>



<p class="wp-block-paragraph">Here is the legal baseline, in plain terms: <strong>Copyright only protects work created by a human</strong>.</p>



<p class="wp-block-paragraph">The US Copyright Office has confirmed this consistently, and the DC Circuit upheld it in the Thaler case. When the Supreme Court declined to hear the Thaler appeal in March 2026, it did not endorse the lower court&#8217;s reasoning or settle the question nationally. Cert denial means the court chose not to hear the case, nothing more. What it does mean is that the DC Circuit&#8217;s ruling stands, the Copyright Office&#8217;s position is intact, and no court has yet gone the other way. Works predominantly generated by AI without meaningful human authorship are not eligible for copyright protection under current doctrine, and that position is stable even if it is not finally settled.</p>



<p class="wp-block-paragraph">Two important limits on what Thaler actually decided.</p>



<ol class="wp-block-list">
<li>The case involved a painting created with zero human involvement at all. Thaler listed the AI system as sole author and made no claim of any human creative contribution. The ruling does not directly address the harder question of AI-assisted work where a human was involved but the degree of that involvement is disputed.</li>



<li>Thaler involved visual art. No court has yet applied the human authorship doctrine specifically to code output from an AI coding tool. The logic applies, but the direct precedent does not exist yet.</li>
</ol>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph"><strong>What it means for you</strong>: Code that Claude Code or Cursor generated and you accepted without meaningful modification may not be copyrightable by anyone. If a competitor copies it, you may have no legal recourse, because the code sits in the public domain in everything but name.</p>
</blockquote>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="1200" height="500" src="https://www.oreilly.com/radar/wp-content/uploads/sites/3/2026/06/image-15.png" alt="What counts as meaningful human authorship?" class="wp-image-18914" srcset="https://www.oreilly.com/radar/wp-content/uploads/sites/3/2026/06/image-15.png 1200w, https://www.oreilly.com/radar/wp-content/uploads/sites/3/2026/06/image-15-300x125.png 300w, https://www.oreilly.com/radar/wp-content/uploads/sites/3/2026/06/image-15-768x320.png 768w" sizes="auto, (max-width: 1200px) 100vw, 1200px" /></figure>



<p class="wp-block-paragraph">The phrase that determines whether your code is protected is “<strong>meaningful human authorship</strong>,” and the Copyright Office has deliberately refused to quantify it with a percentage or a number of edits, because what courts look for is evidence that a human made genuine creative decisions:</p>



<ul class="wp-block-list">
<li>Choosing the architecture</li>



<li>Deciding what to reject</li>



<li>Restructuring the output to fit a specific design</li>
</ul>



<p class="wp-block-paragraph">Specifying an objective to the model is not enough. Directing how the work is constructed is what counts.</p>



<p class="wp-block-paragraph">In an agentic workflow, this distinction is harder to establish than it sounds. Consider a typical Claude Code session:</p>



<ul class="wp-block-list">
<li>You write a one-line prompt: “build a rate limiting module for the API.”</li>



<li>Claude Code plans the approach, generates five files, and iterates through three versions.</li>



<li>You review the output, run the tests, and merge.</li>
</ul>



<p class="wp-block-paragraph">Your contribution in that sequence is your architectural intent and your final approval. Whether that constitutes meaningful human authorship in a courtroom is an unresolved question with no definitive court ruling yet.</p>



<p class="wp-block-paragraph">The honest answer is: probably yes for modules you substantially redirected, probably no for code you accepted verbatim, and unclear for everything in between.</p>



<p class="wp-block-paragraph">The middle ground is actively being litigated right now. In Allen v. Perlmutter, artist Jason Allen is challenging the Copyright Office’s denial of registration for a work he created using more than 600 detailed prompts and subsequent editing in Photoshop. The Copyright Office acknowledged the Photoshop edits as human-authored but still denied registration for the AI-generated underlying elements. That case has not been decided yet, and whatever it decides will be the closest thing to a ruling on how much human involvement is enough.</p>



<p class="wp-block-paragraph">The closest existing precedent on partial protection is <em>Zarya of the Dawn</em>, a graphic novel where the Copyright Office granted registration for the human-authored text but denied it for the Midjourney-generated images. That decision establishes a practical principle developers can use right now: The human-authored elements of an AI-assisted codebase may be separately protectable even if the generated code itself is not. Your architecture documents, your design decisions recorded in commit messages, your ADRs, your prompt logs showing deliberate redirection, these may be protectable as human-authored expression even if the code they produced is not. Protecting what you can starts with documenting what you actually did.</p>



<h2 class="wp-block-heading">What your employer probably already owns</h2>



<p class="wp-block-paragraph">Before you think about whether your code is copyrightable, there is a more immediate question: Even if it is, is it actually yours?</p>



<p class="wp-block-paragraph">Your employment contract almost certainly says that anything you build at work belongs to your employer. That principle has a name in copyright law: the work-for-hire doctrine. Under it, any code created by an employee within the scope of their employment is owned by the employer, who is treated as the legal author, regardless of whether the code was written by hand, generated by Claude Code, or some combination. Using an AI coding tool during work hours, on a work project, on a work machine, does not change who owns the result.</p>



<p class="wp-block-paragraph">Most employment contracts go further than the doctrine’s defaults. Look for a section in yours called “Intellectual Property,” “IP Assignment,” or “Work Product.” Open the contract, search for those terms, and read that section. A clause that says any of the following almost certainly covers your AI-assisted code:</p>



<ul class="wp-block-list">
<li>“Any work product created using company equipment or resources”</li>



<li>“Any invention or development made during the term of employment”</li>



<li>“Any software created with the assistance of company-licensed tools”</li>
</ul>



<p class="wp-block-paragraph">The third one is the one to watch. If your employer licenses Claude Code, Cursor, or Copilot for the team, and you use those same tools to build a side project, a broad IP assignment clause may give the employer a claim over that project, even if you built it on your own time.</p>



<p class="wp-block-paragraph">A senior developer in San Francisco described exactly this situation earlier this year. He had used Claude Code for work projects and for a personal fitness tracking app built on evenings and weekends. His company updated its IP policy and claimed everything he had built with AI assistance, including the personal app, arguing that because Claude had access to open work files in the IDE, any AI output was a derivative work of company IP.</p>



<p class="wp-block-paragraph">This is the clearest example of how far this can stretch. His company&#8217;s claim rested on one phrase: The AI tools were &#8220;context-aware&#8221; of his company&#8217;s codebase. The argument does not hold up legally, because context visibility in an IDE does not make AI output a derivative work of files that were open nearby, and the connection between what Claude can see and what it generates is probabilistic pattern completion, not copying. But the argument illustrates what employers are starting to claim. If the clause is broad enough, it has surface validity regardless of what the AI actually did.</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph"><strong>The practical rule</strong>: If you are building something on the side, use a personal account, a personal machine, and tools you pay for yourself. Keep your employer’s licensed tools out of that workflow entirely.</p>
</blockquote>



<h2 class="wp-block-heading">The open source contamination problem</h2>



<p class="wp-block-paragraph">Even if you own your AI-generated code, you may have already contaminated it with an open source license you cannot see.</p>



<p class="wp-block-paragraph">AI coding tools are trained on massive amounts of public code, including code licensed under the GPL, LGPL, and other copyleft licenses. <strong>Copyleft licenses carry a specific obligation that travels with the code</strong>:</p>



<ul class="wp-block-list">
<li>If you distribute software that is a derivative of GPL-licensed code, you must release your own source code under the same license.</li>



<li>This applies even if you did not know the code you incorporated was GPL-licensed.</li>



<li>“I did not know” is not a defense to a copyleft violation.</li>
</ul>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="1200" height="460" src="https://www.oreilly.com/radar/wp-content/uploads/sites/3/2026/06/image-16.png" alt="The GPL contamination chain" class="wp-image-18915" srcset="https://www.oreilly.com/radar/wp-content/uploads/sites/3/2026/06/image-16.png 1200w, https://www.oreilly.com/radar/wp-content/uploads/sites/3/2026/06/image-16-300x115.png 300w, https://www.oreilly.com/radar/wp-content/uploads/sites/3/2026/06/image-16-768x294.png 768w" sizes="auto, (max-width: 1200px) 100vw, 1200px" /></figure>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">When an AI tool reproduces a substantial verbatim portion of GPL-licensed code from its training data, and you ship that code in a commercial product without releasing source, you may have created a copyleft violation without ever touching the original repository. The legal standard for infringement is substantial verbatim reproduction, not functional similarity or resemblance, and this distinction matters: an AI tool generating code that works like GPL code is different from an AI tool that reproduces GPL code word for word. The risk sits at the verbatim end of that spectrum, and the problem is that you have no way to know which side of the line your codebase is on without running a scan.</p>
</blockquote>



<p class="wp-block-paragraph">The chardet community dispute made this concrete in early 2026. This was not a filed lawsuit but a public dispute within the open source community that raised the question without resolving it legally. A developer used Claude to rewrite chardet, a Python character encoding library, and rereleased it under an MIT license, arguing that the AI rewrite was a “clean room” implementation free of the original LGPL license.</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph"><strong>The legal question the community fought over</strong>: If Claude was trained on the LGPL-licensed codebase and its output reproduces substantial verbatim portions of that code, can the output be treated as license-free? The chardet dispute did not resolve cleanly and no court has issued a definitive ruling on this specific question. What is settled is that verbatim copying of GPL code violates the license regardless of how it was produced. What is unsettled is whether AI-generated output that reproduces training data patterns counts as verbatim copying. The working assumption among lawyers advising companies through M&amp;A is that it probably does, and that assumption is now showing up as a standard condition in acquisition due diligence.</p>
</blockquote>



<p class="wp-block-paragraph">The Doe v GitHub litigation, still working through the Ninth Circuit as of April 2026, is asking whether GitHub Copilot reproduces licensed code without attribution in violation of copyright law and DMCA Section 1202. The district court dismissed most claims but the appeal is live. Whatever the outcome, the litigation has already changed industry behavior: GitHub Copilot added duplicate detection filters, and acquisition due diligence now routinely includes an AI codebase license scan.</p>



<h2 class="wp-block-heading">What to do about all of this</h2>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="1200" height="420" src="https://www.oreilly.com/radar/wp-content/uploads/sites/3/2026/06/image-17.png" alt="Your four actions before you ship" class="wp-image-18916" srcset="https://www.oreilly.com/radar/wp-content/uploads/sites/3/2026/06/image-17.png 1200w, https://www.oreilly.com/radar/wp-content/uploads/sites/3/2026/06/image-17-300x105.png 300w, https://www.oreilly.com/radar/wp-content/uploads/sites/3/2026/06/image-17-768x269.png 768w" sizes="auto, (max-width: 1200px) 100vw, 1200px" /></figure>



<p class="wp-block-paragraph">Four concrete actions, none of which require a lawyer.</p>



<h3 class="wp-block-heading">1. Run a license scan on your AI-assisted codebase</h3>



<p class="wp-block-paragraph">Tools that do this well:</p>



<ul class="wp-block-list">
<li><a href="https://fossa.com/">FOSSA</a>—most comprehensive, widely used in enterprise</li>



<li><a href="https://snyk.io/product/open-source-security/">Snyk Open Source</a>—good for dev-team workflows, integrates with GitHub</li>



<li><a href="https://www.blackducksoftware.com/">Black Duck</a>—standard in M&amp;A due diligence</li>
</ul>



<p class="wp-block-paragraph">Each will scan your codebase, flag code that matches known open source libraries, and identify the licenses attached. If you are shipping a commercial product and have never run one of these, you are operating on assumption. The scan takes an afternoon and costs less than the first hour of a copyright dispute.</p>



<h3 class="wp-block-heading">2. Document your human creative contributions as you go</h3>



<p class="wp-block-paragraph">The evidence that establishes meaningful human authorship is the same evidence you already produce in a normal engineering workflow. You just have to keep it deliberately rather than letting it disappear.</p>



<p class="wp-block-paragraph">What to preserve:</p>



<ul class="wp-block-list">
<li>Commit messages that describe what you changed and why, not just what the AI generated. “Restructured Claude’s module architecture, rejected initial state management approach, rewrote error handling from scratch” is evidence. “Add rate limiting module” is not.</li>



<li>Prompt logs. Claude Code and Cursor both retain interaction history. Export or screenshot the sessions where you made significant architectural decisions.</li>



<li>Design documents, ADRs, or any notes that predate the generated code and show you specified the structure before the AI built it.</li>
</ul>



<p class="wp-block-paragraph">The second commit message versus the first is the difference between a defensible authorship claim and a clean “Claude wrote this” record.</p>



<h3 class="wp-block-heading">3. Read the IP clause in your employment contract before you build anything on the side</h3>



<p class="wp-block-paragraph">Open your contract, search for “intellectual property,” “IP assignment,” or “work product,” and read that section carefully. The specific language determines your exposure:</p>



<ul class="wp-block-list">
<li>“Work product created during employment hours” is narrower than “work product created using company resources.”</li>



<li>“Relating to the company’s business” is narrower than “any software development.”</li>



<li>“Company-licensed tools” is the phrase that captures AI coding tools even on personal projects.</li>
</ul>



<p class="wp-block-paragraph">If the clause is broad and you want to build something independently, you have three realistic options: negotiate a written carveout before you start (easier at the start of a new role than mid-employment), use entirely personal tools on entirely personal time on a personal machine, or accept that the claim exists and decide whether the risk is worth it.</p>



<h3 class="wp-block-heading">4. Check which Anthropic plan you are on before shipping for commercial use</h3>



<p class="wp-block-paragraph">Go to <a href="http://anthropic.com/legal" target="_blank" rel="noreferrer noopener">anthropic.com/legal</a> and compare the consumer terms against the commercial terms. The difference that matters:</p>



<ul class="wp-block-list">
<li><strong>Consumer terms (free and Pro plans)</strong>: Anthropic assigns outputs to you, but the IP indemnification is narrower and covers fewer scenarios.</li>



<li><strong>Commercial terms (API and enterprise)</strong>: Anthropic assigns outputs to you and will defend you against copyright infringement claims arising from your authorized use of the service and its outputs.</li>
</ul>



<p class="wp-block-paragraph">If you are shipping AI-assisted code in a commercial product using the free or Pro plan, the indemnification gap is real. The API or enterprise agreement is the appropriate tier. Note that neither indemnification covers a downstream GPL violation from license contamination in your codebase. That is your governance problem to solve with the license scan in action 1.</p>



<h2 class="wp-block-heading">The thing worth sitting with</h2>



<p class="wp-block-paragraph">Anthropic’s own lead engineer publicly stated that his recent contributions to Claude Code were written entirely by the AI, and the leaked codebase that Anthropic issued 8,000 DMCA takedowns to suppress may be predominantly AI-authored. Whether Anthropic’s copyright claims over that codebase are legally valid remains an open question no court has yet resolved.</p>



<p class="wp-block-paragraph">If the company that built the tool cannot cleanly assert copyright over its own AI-assisted code, the question of whether you can is worth taking seriously before it becomes relevant in a transaction, a dispute, or an acquisition conversation. The developer who documents their creative contributions from the start is in a meaningfully different legal position than the one who accepted three thousand lines of Claude output and merged without review, even if both shipped the same product.</p>



<h2 class="wp-block-heading">A note on what this piece covers and what it does not</h2>



<p class="wp-block-paragraph">Three things in it are settled law:</p>



<ul class="wp-block-list">
<li>Works lacking human authorship are uncopyrightable,</li>



<li>The work-for-hire doctrine applies regardless of how code was generated.</li>



<li>Verbatim copying of GPL-licensed code violates the license.</li>
</ul>



<p class="wp-block-paragraph">Two things are emerging consensus without definitive court rulings yet:</p>



<ul class="wp-block-list">
<li>How much human direction is enough to establish meaningful authorship in an agentic workflow</li>



<li>Whether AI output that reproduces training data patterns counts as verbatim copying</li>
</ul>



<p class="wp-block-paragraph">One thing is genuine speculation:</p>



<ul class="wp-block-list">
<li>Whether any of this will be litigated at scale in the near term</li>
</ul>



<p class="wp-block-paragraph">Most code copyright claims never reach court. The place where the unsettled questions become concrete today is M&amp;A due diligence and institutional fundraising, where acquirers and investors are already asking these questions as a condition of closing.</p>



<p class="wp-block-paragraph">If neither of those applies to your situation right now, the four actions above are still worth doing, but the urgency is lower than the piece might imply.</p>



<h3 class="wp-block-heading">Further reading</h3>



<p class="wp-block-paragraph">1. <a href="https://www.copyright.gov/ai/" target="_blank" rel="noreferrer noopener">US Copyright Office—Copyright and Artificial Intelligence (Part 2: Copyrightability)</a><br>The primary regulatory source on what qualifies as meaningful human authorship in AI-assisted works. Part 2 covers the specific tests the Office applies when reviewing AI-generated content registrations. Essential if you want to understand exactly where the legal line sits.</p>



<p class="wp-block-paragraph">2. <a href="https://fingfx.thomsonreuters.com/gfx/legaldocs/gdpzybblovw/STABILITY%20AI%20LAWSUIT.pdf" target="_blank" rel="noreferrer noopener">Andersen v. Stability AI, Midjourney, DeviantArt—Ninth Circuit docket</a><br>The foundational case on AI training data and copyright infringement, currently shaping how courts think about what AI models learn and reproduce. Relevant to the GPL contamination question in a way most developers have not connected yet.</p>



<p class="wp-block-paragraph">3. <a href="https://githubcopilotlitigation.com/" target="_blank" rel="noreferrer noopener">Doe v. GitHub, Inc.—Ninth Circuit appeal</a><br>The live litigation on whether Copilot reproduces licensed code without attribution. Track this one: The Ninth Circuit decision will set the standard that determines whether AI-generated code carrying open source patterns constitutes copyright infringement.</p>



<p class="wp-block-paragraph">4. <a href="https://github.blog/2021-11-15-why-github-copilot-does-not-infringe-copyright/" target="_blank" rel="noreferrer noopener">GitHub—Copilot and copyright: What you need to know</a><br>GitHub’s own legal position on why Copilot outputs are not infringing. Worth reading as a counterpoint: Understanding the argument they make helps you understand where it is strong and where it has limits, particularly on the GPL training data question.</p>



<p class="wp-block-paragraph">5. <a href="https://fossa.com/learn/open-source-licenses" target="_blank" rel="noreferrer noopener">FOSSA—Understanding open source license obligations</a><br>A developer-friendly reference to how copyleft obligations actually work in practice: what triggers the source disclosure requirement, what constitutes a derivative work, and how the GPL, LGPL, and AGPL differ in their reach. The clearest plain-language guide available on this topic.</p>



<p class="wp-block-paragraph">6. <a href="https://www.anthropic.com/legal" target="_blank" rel="noreferrer noopener">Anthropic—Usage Policy and Terms of Service</a><br>The actual document that determines your IP rights and indemnification scope when you use Claude commercially. Read sections 7 and 8 specifically: output ownership and IP indemnification. The difference between the consumer and commercial terms is stated plainly and takes 10 minutes to understand.</p>



<p class="wp-block-paragraph"><em>I write about legal architecture for AI products at </em><a href="https://legallayer.substack.com/" target="_blank" rel="noreferrer noopener">Legal Layer</a><em>. This piece is informational and does not constitute legal advice.</em></p>
]]></content:encoded>
										</item>
	</channel>
</rss>

<!--
Performance optimized by W3 Total Cache. Learn more: https://www.boldgrid.com/w3-total-cache/?utm_source=w3tc&utm_medium=footer_comment&utm_campaign=free_plugin

Object Caching 91/106 objects using Memcached
Page Caching using Disk: Enhanced (Page is feed) 
Minified using Memcached

Served from: www.oreilly.com @ 2026-06-30 16:06:20 by W3 Total Cache
-->