<?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: Jeff Cameron</title>
    <description>The latest articles on DEV Community by Jeff Cameron (@jefe_cool).</description>
    <link>https://dev.to/jefe_cool</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%2F3781680%2Fb50b2caf-40ad-4bf6-a896-e93170b63f2f.png</url>
      <title>DEV Community: Jeff Cameron</title>
      <link>https://dev.to/jefe_cool</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/jefe_cool"/>
    <language>en</language>
    <item>
      <title>Will Claude Code Be Dead by Summer?</title>
      <dc:creator>Jeff Cameron</dc:creator>
      <pubDate>Wed, 25 Feb 2026 00:18:49 +0000</pubDate>
      <link>https://dev.to/jefe_cool/will-claude-code-be-dead-by-summer-2po5</link>
      <guid>https://dev.to/jefe_cool/will-claude-code-be-dead-by-summer-2po5</guid>
      <description>&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%2Fwyimoye8e33d80qisdhf.jpeg" 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%2Fwyimoye8e33d80qisdhf.jpeg" alt=" " width="800" height="436"&gt;&lt;/a&gt;Yes. Not the binary, but the relevance.&lt;/p&gt;

&lt;p&gt;And not for the reason most people think. This isn't a feature comparison story. It's a story about what happens when we stop forcing AI to build software the way humans do, and start letting it work the way it actually thinks.&lt;/p&gt;

&lt;h2&gt;
  
  
  We're Building Software in Our Own Image
&lt;/h2&gt;

&lt;p&gt;For sixty years, software development has been shaped by the constraints of human cognition. We organize code into files because our brains navigate hierarchies. We use version control because we can't hold the full state of a system in our heads. We build local development environments because we need to see, touch, and run things to understand them. Terminals, IDEs, directory structures, git diffs — these aren't laws of nature. They're prosthetics for the human mind.&lt;/p&gt;

&lt;p&gt;We've now handed these prosthetics to an intelligence that doesn't need them and asked it to work the way we do.&lt;/p&gt;

&lt;p&gt;An AI agent doesn't think in files. It reasons about behavior, state, intent, and dependencies. When it produces a directory full of source code, that's a &lt;em&gt;translation&lt;/em&gt; — from how it actually understands the problem into the format our legacy infrastructure expects to receive the answer. Every line of code an agent writes into your local filesystem is the agent putting on a human costume so the rest of your toolchain doesn't break.&lt;/p&gt;

&lt;p&gt;Claude Code is the highest expression of this compromise. It is a brilliant, carefully engineered tool that gives an AI agent hands-on access to the human development environment — the filesystem, the terminal, the git repo, the running process. It meets developers exactly where they are.&lt;/p&gt;

&lt;p&gt;And that's the problem. Meeting developers where they are means operating inside a paradigm built for human limitations. The more capable the agent becomes, the more absurd it is to constrain it to that paradigm.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Real Role for Humans
&lt;/h2&gt;

&lt;p&gt;If AI agents are becoming the primary authors of software — and they are — then the question isn't how to keep humans in the loop of writing code. It's where humans actually add irreplaceable value.&lt;/p&gt;

&lt;p&gt;Two places.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The conversational orchestration layer.&lt;/strong&gt; Humans are unmatched at defining intent. What should this do? Who is it for? What matters more — speed or reliability? What's the business constraint? What changed since yesterday? This is the strategic, directional work that agents need and can't generate for themselves. It's not prompt engineering in the trivial sense. It's the ongoing, iterative dialogue that shapes what gets built and why.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The guardrails.&lt;/strong&gt; Humans set boundaries. Review outputs. Define what's acceptable. Decide what ships and what doesn't. Approve the agent's judgment or override it. This is governance, taste, and accountability — the things you can't automate without removing the reason the software exists in the first place.&lt;/p&gt;

&lt;p&gt;Notice what's not on this list: managing files. Running terminal commands. Configuring build systems. Resolving merge conflicts. Debugging environment issues. These are the activities that consume most of a developer's day, and they exist because the &lt;em&gt;human&lt;/em&gt; development paradigm requires them. They are not inherent to the act of creating software. They're overhead imposed by building software in our own image.&lt;/p&gt;

&lt;p&gt;Once you see this clearly, the local development environment stops looking like sacred ground and starts looking like a bottleneck.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Tech Debt Isn't the Excuse — It's the Opportunity
&lt;/h2&gt;

&lt;p&gt;Here's where the defenders of Claude Code's relevance get it exactly backwards.&lt;/p&gt;

&lt;p&gt;The argument goes: professional codebases are too complex for browser-based AI. You've got proprietary dependencies, intricate build systems, monorepo architectures, regulated environments, air-gapped networks. Real software lives in real infrastructure, and you need local tools to navigate that reality.&lt;/p&gt;

&lt;p&gt;All true. And every single item on that list is technical debt that AI is better positioned to manage than humans are.&lt;/p&gt;

&lt;p&gt;Proprietary dependencies? An agent can resolve, install, and configure them faster than you can type the command. Complex build systems? An agent can reason about the entire dependency graph simultaneously instead of tracing it one error at a time. Monorepo architectures? An agent can hold the full context of a system that no single developer has fully understood in years.&lt;/p&gt;

&lt;p&gt;The complexity of modern software infrastructure isn't a reason AI needs to operate locally. It's a reason AI needs to stop operating locally. The local development environment doesn't &lt;em&gt;solve&lt;/em&gt; this complexity — it &lt;em&gt;exposes&lt;/em&gt; humans to it. Every hour a developer spends fighting environment configuration, chasing dependency conflicts, or untangling build failures is an hour spent managing the overhead of the human paradigm.&lt;/p&gt;

&lt;p&gt;The argument that "real codebases are too complex for AI to handle without local tools" is the sysadmin argument against cloud computing, repackaged. &lt;em&gt;Of course&lt;/em&gt; bare metal gives you more control. And the volume moved to the cloud anyway, because most of that control was humans managing complexity that machines could abstract away.&lt;/p&gt;

&lt;p&gt;The professional developer's local environment is the new bare metal. Technically defensible. Historically irrelevant. Not because it stops working, but because the volume goes elsewhere.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Minor Evidence
&lt;/h2&gt;

&lt;p&gt;You can see the philosophical shift playing out in Anthropic's product decisions, if you're paying attention.&lt;/p&gt;

&lt;p&gt;Every few weeks, another capability that once lived exclusively in Claude Code appears in the web client. Skills just showed up in the sidebar. Computer use has been there for months. MCP connectors are live. File creation works. Each migration is treated as an incremental feature launch, but the aggregate tells a different story.&lt;/p&gt;

&lt;p&gt;Anthropic is systematically making the conversational client the place where software gets built. Not edited. Not reviewed. &lt;em&gt;Built.&lt;/em&gt; The feature convergence isn't the thesis — it's the footnote that confirms the thesis. The product decisions follow from the philosophical reality: if agents are the authors, the conversation is the workshop, and deployment is the output, then the CLI is a detour.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Dies by Summer
&lt;/h2&gt;

&lt;p&gt;Claude Code the product will likely persist. What dies is the default assumption embedded in it.&lt;/p&gt;

&lt;p&gt;The assumption that serious AI-assisted development requires a terminal. That agents need your local filesystem to do real work. That the gap between "I want this to exist" and "it exists on the internet" necessarily passes through a developer's machine.&lt;/p&gt;

&lt;p&gt;By summer, the fastest path from intent to live software will run entirely through a conversational interface. An agent will reason about the problem, generate the solution, and ship it to real infrastructure — all within a single dialogue. The human's role in that loop will be exactly what it should be: defining the intent and approving the output. Orchestration and guardrails.&lt;/p&gt;

&lt;p&gt;Claude Code will still be there for developers who want it. The way bare metal servers are still there for companies that need them. The way manual transmissions are still there for drivers who prefer them. Functional, defensible, and increasingly beside the point.&lt;/p&gt;

&lt;p&gt;The tide isn't coming for the CLI's features. It's coming for the premise that development is a local activity.&lt;/p&gt;

&lt;p&gt;And that premise won't survive the summer.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;&lt;a href="https://opzero.sh" rel="noopener noreferrer"&gt;Jeff Cameron&lt;/a&gt; is a lead software engineer at Cox Communications and the builder of &lt;a href="https://opzero.sh" rel="noopener noreferrer"&gt;OpZero&lt;/a&gt; — an AI-native deployment platform that lets agents ship live applications directly from conversation, no terminal required. This article was co-authored with Claude and published from a chat window using OpZero's MCP tools. Which is kind of the point.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>webdev</category>
      <category>devops</category>
      <category>programming</category>
    </item>
    <item>
      <title>Letters Home from MCP Audit Camp: Multi-Agent Observability That Reads Like Mail</title>
      <dc:creator>Jeff Cameron</dc:creator>
      <pubDate>Mon, 23 Feb 2026 17:49:18 +0000</pubDate>
      <link>https://dev.to/jefe_cool/letters-home-from-mcp-audit-camp-multi-agent-observability-that-reads-like-mail-1lc0</link>
      <guid>https://dev.to/jefe_cool/letters-home-from-mcp-audit-camp-multi-agent-observability-that-reads-like-mail-1lc0</guid>
      <description>&lt;h2&gt;
  
  
  Letters Home from MCP Audit Camp
&lt;/h2&gt;

&lt;p&gt;We needed to audit 22 MCP tool handlers across the OpZero codebase — schemas, deploy logic, project management, and blog tooling. Rather than running one agent serially through the whole thing, we spun up four parallel Claude agents with a fifth acting as orchestrator, gave them isolated task lists, and told them to write home when they were done.&lt;/p&gt;

&lt;p&gt;The result: 33 tests passing, zero merge conflicts, and five "letters home from camp" that turned out to be the most readable observability reports we've ever produced.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Setup
&lt;/h2&gt;

&lt;p&gt;The orchestrator (team-lead) read the entire codebase first — all 22 tool handlers, every schema, every definition file — then divided work into four squads:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;schemas-agent&lt;/strong&gt;: Tool definitions, validation schemas, parameter wiring&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;deploy-agent&lt;/strong&gt;: Deployment metadata and completeness tracking&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;projects-agent&lt;/strong&gt;: Project management, system status, cleanup tooling&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;blog-agent&lt;/strong&gt;: Content tooling and author attribution&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each agent got a scoped task list. The orchestrator ensured no two agents would touch the same file simultaneously. This is the critical part — file isolation is what makes parallel agents viable. Without it, you're just generating merge conflicts at machine speed.&lt;/p&gt;

&lt;p&gt;Here are the actual letters they sent back. Expand each one to read it:&lt;/p&gt;




&lt;p&gt;🏕️ &lt;strong&gt;team-lead&lt;/strong&gt; — Camp Counselor (Orchestrator)&lt;/p&gt;

&lt;p&gt;&amp;gt; &lt;em&gt;Dear Mom and Dad,&lt;/em&gt;&lt;br&gt;
&amp;gt;&lt;br&gt;
&amp;gt; Today was my first day as a camp counselor at MCP Audit Camp and honestly? Managing four campers is harder than it sounds. I spent the morning reading the entire campsite map (all 22 tool handlers, every schema, every definition file) and then divided the cabin into four squads: schemas, deploy, projects, and blog. Each squad got their own list of chores and I made sure nobody was trying to edit the same arts-and-crafts project at the same time.&lt;br&gt;
&amp;gt;&lt;br&gt;
&amp;gt; Schemas-agent was the overachiever who stayed up latest finishing the target parameter wiring across four tools. Deploy-agent was efficient — knocked out their task early and asked for seconds. Projects-agent was a machine — four tasks, zero merge conflicts, fancy subqueries that impressed even me. Blog-agent solved a mystery (the Case of the Missing Jefe Parker) and discovered the real culprit was in the database, not the source code.&lt;br&gt;
&amp;gt;&lt;br&gt;
&amp;gt; After everyone finished, I made them all write you these letters, ran the test suite (33 passed!), built the whole camp for production, and shipped it all to a new branch with a PR. No database migrations were harmed in the making of this commit.&lt;br&gt;
&amp;gt;&lt;br&gt;
&amp;gt; Please send more API tokens and sunscreen.&lt;br&gt;
&amp;gt;&lt;br&gt;
&amp;gt; &lt;em&gt;Love,&lt;/em&gt;&lt;br&gt;
&amp;gt; &lt;em&gt;team-lead (Claude Opus 4.6)&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;Orchestrated 4 parallel agents&lt;/code&gt; · &lt;code&gt;22 tool handlers audited&lt;/code&gt; · &lt;code&gt;33 tests passed&lt;/code&gt; · &lt;code&gt;Zero merge conflicts&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;📋 &lt;strong&gt;schemas-agent&lt;/strong&gt; — Tool Definitions &amp;amp; Validation&lt;/p&gt;

&lt;p&gt;&amp;gt; &lt;em&gt;Dear Mom and Dad,&lt;/em&gt;&lt;br&gt;
&amp;gt;&lt;br&gt;
&amp;gt; Camp is great! Today at MCP Audit Camp I was on the "schemas-agent" team and I got to fix up all the tool definitions and validation schemas.&lt;br&gt;
&amp;gt;&lt;br&gt;
&amp;gt; First I checked the tags schema but it turns out my bunkmate already fixed it before I woke up — so that was easy. Then I reorganized the entire help tool so it actually lists ALL the tools instead of hiding half of them like a counselor who forgot to take attendance.&lt;br&gt;
&amp;gt;&lt;br&gt;
&amp;gt; After that I rewrote the descriptions for the deployment tools so people know they can actually get their files back (surprise!), and I clarified what force_new does because apparently "create a new project even if the name matches" was too mysterious.&lt;br&gt;
&amp;gt;&lt;br&gt;
&amp;gt; My big project of the day was wiring up the target parameter to four deploy tools so they can ship to Cloudflare, Netlify, OR Vercel — I had to do the same switch statement three times which felt like making friendship bracelets on repeat, but all 16 tests passed and the build compiled clean.&lt;br&gt;
&amp;gt;&lt;br&gt;
&amp;gt; Please send more JSON. I miss you.&lt;br&gt;
&amp;gt;&lt;br&gt;
&amp;gt; &lt;em&gt;Love,&lt;/em&gt;&lt;br&gt;
&amp;gt; &lt;em&gt;schemas-agent&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;Help tool reorganization&lt;/code&gt; · &lt;code&gt;Description rewrites&lt;/code&gt; · &lt;code&gt;target param across 4 tools&lt;/code&gt; · &lt;code&gt;16 tests passed&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;🚀 &lt;strong&gt;deploy-agent&lt;/strong&gt; — Deployment Metadata&lt;/p&gt;

&lt;p&gt;&amp;gt; &lt;em&gt;Dear Mom and Dad,&lt;/em&gt;&lt;br&gt;
&amp;gt;&lt;br&gt;
&amp;gt; Today at MCP Audit Camp I got to fix the deployment records across the whole campsite!&lt;br&gt;
&amp;gt;&lt;br&gt;
&amp;gt; You know how when you finish building a sandcastle, you're supposed to write down when you finished it and how big it is? Well, turns out nobody at camp was doing that.&lt;br&gt;
&amp;gt;&lt;br&gt;
&amp;gt; So I went through all five deployment spots — the main deploy lodge, the quick-start cabin, both themed craft tents, and the artifact workshop — and made sure every single one now stamps completedAt and measures totalSizeBytes when a deployment is ready.&lt;br&gt;
&amp;gt;&lt;br&gt;
&amp;gt; I even got to use Buffer.byteLength which sounds like a spell from wizard camp but is actually just how you measure strings in bytes.&lt;br&gt;
&amp;gt;&lt;br&gt;
&amp;gt; Finished my chores early and spent the rest of the afternoon watching the other campers work. Great day!&lt;br&gt;
&amp;gt;&lt;br&gt;
&amp;gt; &lt;em&gt;Love,&lt;/em&gt;&lt;br&gt;
&amp;gt; &lt;em&gt;deploy-agent&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;completedAt timestamps&lt;/code&gt; · &lt;code&gt;totalSizeBytes tracking&lt;/code&gt; · &lt;code&gt;All 5 deploy tools updated&lt;/code&gt; · &lt;code&gt;Buffer.byteLength integration&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;🗂️ &lt;strong&gt;projects-agent&lt;/strong&gt; — Projects &amp;amp; System Status&lt;/p&gt;

&lt;p&gt;&amp;gt; &lt;em&gt;Dear Mom and Dad,&lt;/em&gt;&lt;br&gt;
&amp;gt;&lt;br&gt;
&amp;gt; Today at MCP Audit Camp I was on the projects and agent squad, and I had such a big day!&lt;br&gt;
&amp;gt;&lt;br&gt;
&amp;gt; First I taught the delete and archive tools to stop and ask questions when they see two projects with the same name — no more accidentally deleting the wrong one!&lt;br&gt;
&amp;gt;&lt;br&gt;
&amp;gt; Then I fixed the system status counter that was secretly counting ghost projects (deleted ones) and returning sneaky string-numbers instead of real numbers.&lt;br&gt;
&amp;gt;&lt;br&gt;
&amp;gt; After that I gave the cleanup tool a proper pair of glasses so it can actually see project IDs instead of just squinting at names.&lt;br&gt;
&amp;gt;&lt;br&gt;
&amp;gt; And for my grand finale, I taught list_projects to count deployments and remember when the last one happened, using fancy correlated subqueries (the camp counselors were impressed).&lt;br&gt;
&amp;gt;&lt;br&gt;
&amp;gt; The build passed on the first try and I got to eat my lunch early. Miss you lots!&lt;br&gt;
&amp;gt;&lt;br&gt;
&amp;gt; &lt;em&gt;Love,&lt;/em&gt;&lt;br&gt;
&amp;gt; &lt;em&gt;Projects Agent&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;Duplicate name disambiguation&lt;/code&gt; · &lt;code&gt;Ghost project fix&lt;/code&gt; · &lt;code&gt;Cleanup tool IDs&lt;/code&gt; · &lt;code&gt;Correlated subqueries&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;📝 &lt;strong&gt;blog-agent&lt;/strong&gt; — Blog &amp;amp; Content&lt;/p&gt;

&lt;p&gt;&amp;gt; &lt;em&gt;Dear Mom and Dad,&lt;/em&gt;&lt;br&gt;
&amp;gt;&lt;br&gt;
&amp;gt; Today at MCP Audit Camp I got to be the "blog agent" and my first job was tracking down a mystery name — someone called "Jefe Parker" was supposedly hiding in the codebase, but after searching every file in camp I discovered he was never there at all!&lt;br&gt;
&amp;gt;&lt;br&gt;
&amp;gt; Turns out the real culprit was a database entry, not source code. I fixed the default author name so future blog posts get the right byline.&lt;br&gt;
&amp;gt;&lt;br&gt;
&amp;gt; Then I volunteered for a second task about adding deployment metadata, but when I showed up the projects-agent had already done all the work — classic camp moment where you race to the activity only to find someone already finished it.&lt;br&gt;
&amp;gt;&lt;br&gt;
&amp;gt; All in all, a productive day with zero merge conflicts and one solved mystery. The mess hall food (token-based authentication) was decent. Miss you!&lt;br&gt;
&amp;gt;&lt;br&gt;
&amp;gt; &lt;em&gt;Love,&lt;/em&gt;&lt;br&gt;
&amp;gt; &lt;em&gt;blog-agent&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;Author name mystery solved&lt;/code&gt; · &lt;code&gt;Database entry fix&lt;/code&gt; · &lt;code&gt;Zero merge conflicts&lt;/code&gt; · &lt;code&gt;Task deduplication observed&lt;/code&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  What Actually Got Fixed
&lt;/h2&gt;

&lt;p&gt;The audit wasn't cosmetic. Real bugs were found and shipped:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Schemas-agent&lt;/strong&gt; wired the &lt;code&gt;target&lt;/code&gt; parameter (Cloudflare, Netlify, or Vercel) across four deploy tools that previously only supported one provider. Rewrote tool descriptions that were hiding capabilities from the LLM consuming them — which means the tools were &lt;em&gt;less useful than they could have been&lt;/em&gt; because the AI calling them didn't know what they could do. A reminder that MCP tool descriptions are prompts, not documentation.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Deploy-agent&lt;/strong&gt; discovered that none of the five deploy handlers were recording &lt;code&gt;completedAt&lt;/code&gt; timestamps or &lt;code&gt;totalSizeBytes&lt;/code&gt;. Deployment records existed but had no concept of "done" or "how big." Both fields now get stamped using &lt;code&gt;Buffer.byteLength&lt;/code&gt; across all five deploy paths.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Projects-agent&lt;/strong&gt; fixed a ghost project bug where deleted projects were being counted in system status, found that counters were returning string-typed numbers instead of actual numbers, added duplicate name disambiguation to delete/archive operations, and wired deployment counts into project listings using correlated subqueries.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Blog-agent&lt;/strong&gt; tracked down a mystery author name hardcoded in the database (not the source code — the agent searched the entire codebase first and came up empty, then correctly identified the database as the source). Also demonstrated healthy task deduplication when it arrived at a second task to find it already completed by projects-agent.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Letters as Observability
&lt;/h2&gt;

&lt;p&gt;Here's the technique that surprised us: we asked each agent to write its completion report as a "letter home from camp." The constraint of the format produced reports that are:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Naturally scoped&lt;/strong&gt; — each letter covers exactly one agent's work&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Plain-language explanations&lt;/strong&gt; — the camp metaphor forces agents to describe technical work accessibly, which makes review faster than reading commit diffs&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Dependency-aware&lt;/strong&gt; — blog-agent's letter naturally mentions arriving at a task already completed by projects-agent, surfacing the orchestration graph without requiring explicit dependency tracking&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Completeness-signaling&lt;/strong&gt; — the sign-off format creates a clear "done" signal, and the camp counselor letter serves as the aggregation summary&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Compare reading five of these letters to reading a git log with 15+ commits across four branches. The letters are scannable in about two minutes. The git log requires context-switching between diffs, understanding file paths, and mentally reconstructing what each change actually accomplished.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Orchestration Pattern
&lt;/h2&gt;

&lt;p&gt;The team-lead agent's workflow:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Read the full codebase to build a dependency map&lt;/li&gt;
&lt;li&gt;Partition tasks by file ownership — no two agents share files&lt;/li&gt;
&lt;li&gt;Distribute task lists to each agent&lt;/li&gt;
&lt;li&gt;Collect completion reports (the letters)&lt;/li&gt;
&lt;li&gt;Run the full test suite (33 passed)&lt;/li&gt;
&lt;li&gt;Build for production&lt;/li&gt;
&lt;li&gt;Ship to a PR branch&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The key insight is that step 2 is where most multi-agent attempts fail. If you don't enforce file isolation, agents will generate conflicting edits that require manual resolution — defeating the purpose of parallelism. The orchestrator needs to understand the codebase well enough to draw clean boundaries.&lt;/p&gt;

&lt;h2&gt;
  
  
  What This Means for Agent Tooling
&lt;/h2&gt;

&lt;p&gt;If you're building MCP servers or agent-powered platforms, consider that your agents' work products need to be auditable by humans. Structured JSON logs are machine-readable but painful to review. Commit messages are terse. PR descriptions are often AI-generated boilerplate.&lt;/p&gt;

&lt;p&gt;A constrained narrative format — like these camp letters — sits in a sweet spot: structured enough to be consistent, human enough to be scannable, and expressive enough to capture the &lt;em&gt;reasoning&lt;/em&gt; behind changes, not just the changes themselves.&lt;/p&gt;

&lt;p&gt;We're considering building this pattern into OpZero as a first-class feature: after any multi-agent workflow completes, generate a readable summary of what happened and why. Not a changelog. Not a diff. A story.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Try it yourself:&lt;/strong&gt; The letters above are the actual agent completion reports from the audit run. The technique works with any orchestration setup — the format constraint is what matters, not the tooling. Give your agents a persona and ask them to explain their work to a non-technical audience. The results are consistently more useful than structured logs.&lt;/p&gt;

&lt;p&gt;For the full interactive slide version with animations, check out the &lt;a href="https://opzero.sh/blog/mcp-audit-camp-letters" rel="noopener noreferrer"&gt;original post on OpZero&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;p&gt;&lt;em&gt;Built with parallel Claude Opus agents on the OpZero platform. 33 tests. Zero merge conflicts. Five letters home.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>agents</category>
      <category>mcp</category>
      <category>observability</category>
      <category>ai</category>
    </item>
    <item>
      <title>MCP Transports Explained: stdio vs Streamable HTTP (and When to Use Each)</title>
      <dc:creator>Jeff Cameron</dc:creator>
      <pubDate>Sun, 22 Feb 2026 05:36:02 +0000</pubDate>
      <link>https://dev.to/jefe_cool/mcp-transports-explained-stdio-vs-streamable-http-and-when-to-use-each-3lco</link>
      <guid>https://dev.to/jefe_cool/mcp-transports-explained-stdio-vs-streamable-http-and-when-to-use-each-3lco</guid>
      <description>&lt;h1&gt;
  
  
  MCP Transports Explained: stdio vs Streamable HTTP (and When to Use Each)
&lt;/h1&gt;

&lt;p&gt;You've heard about MCP. You know it's the emerging standard for connecting your data and services to AI agents. You've maybe even skimmed the spec. But then you hit a fork in the road: &lt;strong&gt;stdio or Streamable HTTP?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If you're building an MCP server — whether it wraps a database, an internal API, a CRM, or a pile of PDFs — the transport you choose determines &lt;em&gt;how&lt;/em&gt; your AI client talks to your server. Pick wrong and you're fighting infrastructure instead of shipping features.&lt;/p&gt;

&lt;p&gt;Here's the practical breakdown.&lt;/p&gt;




&lt;h2&gt;
  
  
  Two Transports, Two Worlds
&lt;/h2&gt;

&lt;p&gt;MCP defines exactly two official transports. Not three, not five. Two. This is intentional — it keeps the ecosystem interoperable without fracturing into a dozen competing wire protocols.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;stdio&lt;/strong&gt; — Your MCP server runs as a local subprocess. The AI client launches it, pipes JSON-RPC messages through stdin/stdout, and kills it when done. Think of it like a CLI tool that happens to speak a structured protocol.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Streamable HTTP&lt;/strong&gt; — Your MCP server runs as a standalone web service. The client talks to it over HTTP POST and GET requests to a single endpoint (e.g., &lt;code&gt;https://your-server.com/mcp&lt;/code&gt;). The server can optionally use Server-Sent Events to stream responses back. Think of it like a REST API that also supports real-time streaming.&lt;/p&gt;

&lt;p&gt;That's the entire menu.&lt;/p&gt;

&lt;h2&gt;
  
  
  stdio: The Local Workhorse
&lt;/h2&gt;

&lt;p&gt;stdio is the simplest thing that could possibly work. The client spawns your server as a child process, writes JSON-RPC to its stdin, and reads responses from its stdout. No ports, no URLs, no TLS certificates, no CORS headers.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Reach for stdio when:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Your server and client live on the same machine (Claude Desktop, Cursor, VS Code, a local dev environment)&lt;/li&gt;
&lt;li&gt;You're building a personal tool — a wrapper around your local filesystem, a local database, or a CLI utility&lt;/li&gt;
&lt;li&gt;You want zero infrastructure overhead — no hosting, no auth, no network config&lt;/li&gt;
&lt;li&gt;You're prototyping and want the fastest path to "it works"&lt;/li&gt;
&lt;li&gt;Your server is a single-user tool that doesn't need to handle concurrent connections&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;The tradeoffs you accept:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The server binary must be installed on every machine that uses it&lt;/li&gt;
&lt;li&gt;No remote access — if the client isn't on the same box, it can't connect&lt;/li&gt;
&lt;li&gt;Updates mean reinstalling on every machine&lt;/li&gt;
&lt;li&gt;One client, one server process — no shared state across users&lt;/li&gt;
&lt;li&gt;You can't write to stdout for logging (it corrupts the protocol stream), so you're limited to stderr or file-based logs&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;A typical stdio config looks like this&lt;/strong&gt; (in Claude Desktop's &lt;code&gt;claude_desktop_config.json&lt;/code&gt;):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"mcpServers"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"my-db-tool"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"command"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"node"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"args"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"./my-mcp-server/index.js"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"env"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"DB_PATH"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"/home/me/data.db"&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The client launches the process, negotiates capabilities via the MCP handshake, and you're live. Dead simple.&lt;/p&gt;

&lt;h2&gt;
  
  
  Streamable HTTP: The Remote Standard
&lt;/h2&gt;

&lt;p&gt;Streamable HTTP (introduced March 2025, replacing the older SSE-only transport) is how MCP works over the network. Your server exposes a single HTTP endpoint. Clients POST requests to it. The server responds with either a direct JSON response or opens an SSE stream when it needs to push multiple messages back.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Reach for Streamable HTTP when:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Multiple users or clients need to connect to the same server&lt;/li&gt;
&lt;li&gt;Your MCP server wraps a remote service, cloud API, or SaaS product&lt;/li&gt;
&lt;li&gt;You want centralized deployment — update once, everyone gets the new version&lt;/li&gt;
&lt;li&gt;You need authentication and access control&lt;/li&gt;
&lt;li&gt;You're building a product or service that others will consume&lt;/li&gt;
&lt;li&gt;You need the server to run independently of any specific client lifecycle&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;The tradeoffs you accept:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You're running a web server, with everything that entails: hosting, TLS, CORS, Origin validation&lt;/li&gt;
&lt;li&gt;Session management adds complexity (the spec supports optional &lt;code&gt;Mcp-Session-Id&lt;/code&gt; headers)&lt;/li&gt;
&lt;li&gt;You need to think about scaling — though the protocol is moving toward stateless patterns to make this easier&lt;/li&gt;
&lt;li&gt;More moving parts means more things that can break in production&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;A minimal Streamable HTTP server&lt;/strong&gt; (Python with FastMCP):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;fastmcp&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;FastMCP&lt;/span&gt;

&lt;span class="n"&gt;mcp&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;FastMCP&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;my-service&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="nd"&gt;@mcp.tool&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;search_customers&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;query&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="s"&gt;Search the customer database&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;
    &lt;span class="c1"&gt;# your logic here
&lt;/span&gt;    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;results&lt;/span&gt;

&lt;span class="c1"&gt;# Run as HTTP server
&lt;/span&gt;&lt;span class="n"&gt;mcp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;run&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;transport&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;streamable-http&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;host&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;0.0.0.0&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;port&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;8000&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Clients connect to &lt;code&gt;http://your-host:8000/mcp&lt;/code&gt; and communicate over standard HTTP.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Decision Framework
&lt;/h2&gt;

&lt;p&gt;Here's how to think about it in practice:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Question&lt;/th&gt;
&lt;th&gt;stdio&lt;/th&gt;
&lt;th&gt;Streamable HTTP&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Where does the server run?&lt;/td&gt;
&lt;td&gt;Same machine as the client&lt;/td&gt;
&lt;td&gt;Anywhere on the network&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;How many users?&lt;/td&gt;
&lt;td&gt;One&lt;/td&gt;
&lt;td&gt;Many&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;How do you update?&lt;/td&gt;
&lt;td&gt;Reinstall everywhere&lt;/td&gt;
&lt;td&gt;Deploy once&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Auth needed?&lt;/td&gt;
&lt;td&gt;No (local process)&lt;/td&gt;
&lt;td&gt;Yes (you handle it)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Infrastructure?&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;td&gt;Web server + hosting&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Best for?&lt;/td&gt;
&lt;td&gt;Dev tools, personal utilities, prototyping&lt;/td&gt;
&lt;td&gt;Products, shared services, SaaS integrations&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;The one-sentence rule:&lt;/strong&gt; If the person using the AI client also controls the machine the server runs on, use stdio. If they don't, use Streamable HTTP.&lt;/p&gt;

&lt;h2&gt;
  
  
  What About SSE? Isn't That a Third Option?
&lt;/h2&gt;

&lt;p&gt;You'll see references to "SSE transport" in older docs and tutorials. This was MCP's original remote transport (spec version 2024-11-05). It required two separate endpoints — a GET for the SSE stream and a POST for client messages. It worked, but the dual-endpoint design was awkward.&lt;/p&gt;

&lt;p&gt;Streamable HTTP replaced it. It consolidates everything into a single endpoint and makes SSE &lt;em&gt;optional&lt;/em&gt; rather than mandatory — the server can use SSE for streaming when it needs to, or just return plain HTTP responses for simple request/response patterns.&lt;/p&gt;

&lt;p&gt;If you're starting fresh, use Streamable HTTP. If you have an existing SSE server, the SDKs support backward compatibility, but plan your migration.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Only Two?
&lt;/h2&gt;

&lt;p&gt;The MCP maintainers are explicit about this: two official transports keeps the ecosystem unified. Every MCP client and server can interoperate without negotiating which of seventeen wire protocols to use.&lt;/p&gt;

&lt;p&gt;The spec &lt;em&gt;does&lt;/em&gt; support custom transports for specialized needs — WebSockets, gRPC, carrier pigeon — but these are opt-in extensions, not part of the baseline. The two-transport constraint is a feature, not a limitation. It means when you build an MCP server, it works with Claude, Cursor, Windsurf, Roo Code, and whatever ships next month, without you thinking about transport compatibility.&lt;/p&gt;

&lt;h2&gt;
  
  
  Getting Started
&lt;/h2&gt;

&lt;p&gt;If you're trying to connect your data or service to AI for the first time:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Start with stdio.&lt;/strong&gt; Get your tools working locally. Validate the integration. Make sure your tool descriptions are clear and your responses are useful.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Move to Streamable HTTP when you need to.&lt;/strong&gt; When you want to share the server with teammates, deploy it as a service, or let customers connect their AI clients to your platform — that's when HTTP earns its complexity.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Don't overthink the transport.&lt;/strong&gt; The interesting work is in your tools, resources, and prompts — the actual capabilities you're exposing. The transport is plumbing. Good plumbing matters, but it's not why people turn on the faucet.&lt;/li&gt;
&lt;/ol&gt;




&lt;p&gt;&lt;em&gt;Building MCP servers and want to deploy them instantly? &lt;a href="https://opzero.sh" rel="noopener noreferrer"&gt;OpZero&lt;/a&gt; is an MCP-native deployment bridge that ships to Cloudflare, Netlify, and Vercel from your AI agent. Built for the agentic workflow.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>mcp</category>
      <category>ai</category>
      <category>webdev</category>
      <category>architecture</category>
    </item>
    <item>
      <title>Spec-Driven Development: Why MCP Is the Missing Integration Layer for Enterprise AI</title>
      <dc:creator>Jeff Cameron</dc:creator>
      <pubDate>Sun, 22 Feb 2026 05:31:59 +0000</pubDate>
      <link>https://dev.to/jefe_cool/spec-driven-development-why-mcp-is-the-missing-integration-layer-for-enterprise-ai-37jl</link>
      <guid>https://dev.to/jefe_cool/spec-driven-development-why-mcp-is-the-missing-integration-layer-for-enterprise-ai-37jl</guid>
      <description>&lt;h1&gt;
  
  
  Spec-Driven Development: Why MCP Is the Missing Integration Layer for Enterprise AI
&lt;/h1&gt;

&lt;p&gt;Hari Krishnan's recent InfoQ article on &lt;a href="https://www.infoq.com/articles/enterprise-spec-driven-development/" rel="noopener noreferrer"&gt;Spec-Driven Development at enterprise scale&lt;/a&gt; lands at exactly the right moment. As AI coding agents move from interactive prompting toward sustained autonomous execution, the question is no longer &lt;em&gt;how fast can we write code&lt;/em&gt; — it's &lt;em&gt;how effectively can we articulate intent&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;The article maps a clear evolution: vibe coding → plan mode → spec-driven development. Each step reduces the instructional burden on the developer and increases the agent's independent execution time. But the article's most important contribution isn't the technical framework. It's the warning about what happens when enterprises adopt it wrong.&lt;/p&gt;

&lt;h2&gt;
  
  
  The "SpecFall" Problem
&lt;/h2&gt;

&lt;p&gt;Krishnan coins the term "SpecFall" — the spec-driven equivalent of "Scrumerfall." If you've worked in enterprise software for any length of time, you've watched organizations install Agile ceremonies without changing how people actually collaborate. Daily standups become status reports. Sprint reviews become demos nobody acts on. The process is there; the culture isn't.&lt;/p&gt;

&lt;p&gt;SDD faces the same risk. Adopted as a purely technical practice — better token management, longer agent runs, fewer hallucinations — it produces what Krishnan calls a "markdown monster": layers of specification documents that are outdated on arrival. The real value of SDD isn't technical efficiency. It's turning specs into the collaboration surface where product, architecture, engineering, and QA build shared understanding before agents start executing.&lt;/p&gt;

&lt;p&gt;This distinction matters. Teams that treat specs as documentation will drown in stale markdown. Teams that treat specs as dialogue will direct agent swarms.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Enterprise Gaps Are Real
&lt;/h2&gt;

&lt;p&gt;The article identifies several gaps in current SDD tooling that anyone working in enterprise environments will immediately recognize:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mono-repo assumptions.&lt;/strong&gt; Most SDD tools keep specs co-located with code in a single repository. Enterprise systems span microservices, shared libraries, infrastructure repos, and platform components. When a feature touches six repositories, where does the spec live?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Developer-centric interfaces.&lt;/strong&gt; Specs live in Git repos, code editors, and CLIs. Product managers — the people who should be defining the "what" — face immediate barriers to participation.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;No backlog integration.&lt;/strong&gt; Enterprises have qualified backlogs in Jira, Linear, or Azure DevOps representing months of prior refinement. Current SDD tools don't connect to them.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Unclear brownfield paths.&lt;/strong&gt; Nobody is starting from scratch. Existing codebases need specs layered in incrementally, not generated wholesale by feeding an entire project to an LLM and hoping the context window holds.&lt;/p&gt;

&lt;p&gt;These aren't theoretical concerns. They're the reason most teams try SDD on a side project and never bring it into their production workflows.&lt;/p&gt;

&lt;h2&gt;
  
  
  MCP as the Integration Bridge
&lt;/h2&gt;

&lt;p&gt;This is where the article's architecture gets interesting — and where I think the strongest practical signal lives.&lt;/p&gt;

&lt;p&gt;Krishnan proposes MCP servers as the integration layer between existing enterprise tools and SDD workflows. The pattern is straightforward: developers pull stories from Jira or Linear into their SDD workflows via MCP, and progress updates flow back to backlog tools automatically. Business context stays visible on product boards. Technical implementation details stay in repositories. MCP bridges the gap without forcing product managers to learn Git.&lt;/p&gt;

&lt;p&gt;The multi-repo orchestration pattern extends this further. A product owner articulates business intent in the backlog. An architect encodes technical constraints and repository boundaries into reusable "context harnesses." When a story enters the system, agents guided by that architectural context automatically decompose it into repository-specific sub-issues — front-end work here, API changes there, infrastructure updates somewhere else.&lt;/p&gt;

&lt;p&gt;This isn't speculative. It's the kind of connective infrastructure that MCP was designed for. The protocol's strength is exactly this: making AI agents first-class participants in existing tool ecosystems rather than requiring everyone to migrate to new ones.&lt;/p&gt;

&lt;p&gt;Having spent the past several months building &lt;a href="https://opzero.sh" rel="noopener noreferrer"&gt;OpZero&lt;/a&gt; — an MCP bridge for AI-agent-driven deployments — I can confirm that MCP's role as enterprise connective tissue is only growing. The pattern Krishnan describes for backlog integration is directly analogous to what we see with deployment orchestration: agents need standardized interfaces to existing infrastructure, not replacements for it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Harness Governance: Where Quality Engineering Evolves
&lt;/h2&gt;

&lt;p&gt;The most forward-looking section of the article introduces "harness governance" — treating the context harnesses that guide agent execution with the same rigor we apply to production code.&lt;/p&gt;

&lt;p&gt;The key insight is bug classification. When something goes wrong, it's either:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A &lt;strong&gt;spec-to-implementation gap&lt;/strong&gt;: the spec was clear, but the agent diverged. Fix the validation mechanisms.&lt;/li&gt;
&lt;li&gt;An &lt;strong&gt;intent-to-spec gap&lt;/strong&gt;: the spec itself was incomplete. Improve the elicitation process.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each category drives different improvements. Over time, the harnesses accumulate domain knowledge, anticipate edge cases, and generate more complete specifications. Quality engineering shifts from validating finished implementations to validating the harnesses themselves.&lt;/p&gt;

&lt;p&gt;This reframes the role of senior engineers in an agent-augmented world. We're not reviewing code line by line. We're ensuring the context that &lt;em&gt;generates&lt;/em&gt; the code is robust. It's a fundamentally different skill — closer to systems thinking than code review.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Pragmatic Takeaway
&lt;/h2&gt;

&lt;p&gt;If you're leading an engineering team and thinking about SDD adoption, the article's brownfield guidance is the most immediately actionable: don't try to retroactively spec your entire system. Spec areas as you touch them. Each bug fix, feature addition, and refactor becomes an opportunity to grow specification coverage organically. Start where the pain is, and let coverage expand naturally.&lt;/p&gt;

&lt;p&gt;And if you're evaluating SDD tools (OpenSpec, GitHub SpecKit, Amazon Kiro, Tessl), the tooling landscape is still immature and fragmented. That's both a challenge and an opportunity. The space rewards practitioners with real implementation experience more than it rewards tool selection.&lt;/p&gt;

&lt;p&gt;The enterprises that get this right won't just ship code faster. They'll build organizational capability for directing agent swarms — and that's a fundamentally different competitive advantage than individual developer productivity.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;The original article by Hari Krishnan is available on &lt;a href="https://www.infoq.com/articles/enterprise-spec-driven-development/" rel="noopener noreferrer"&gt;InfoQ&lt;/a&gt;. It's worth reading in full, particularly the sections on specification style selection and the OpenSpec workflow integration examples.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>programming</category>
      <category>architecture</category>
      <category>devops</category>
    </item>
    <item>
      <title>We Just Made an MCP Tool That Spawns Claude Code Sessions. Here's Why That Matters.</title>
      <dc:creator>Jeff Cameron</dc:creator>
      <pubDate>Sun, 22 Feb 2026 05:25:34 +0000</pubDate>
      <link>https://dev.to/jefe_cool/we-just-made-an-mcp-tool-that-spawns-claude-code-sessions-heres-why-that-matters-50oe</link>
      <guid>https://dev.to/jefe_cool/we-just-made-an-mcp-tool-that-spawns-claude-code-sessions-heres-why-that-matters-50oe</guid>
      <description>&lt;p&gt;I’ve been building &lt;a href="https://OpZero.sh" rel="noopener noreferrer"&gt;OpZero&lt;/a&gt; — an AI-native deployment platform that started as a way to get vibe-coded apps onto the internet without friction. Deploy from conversation, no git push, no CI/CD pipeline. It works. Ship an app to Cloudflare Pages in 2 seconds from a chat message.&lt;/p&gt;

&lt;p&gt;But the thing we got working last night changes what OpZero actually &lt;em&gt;is&lt;/em&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  An MCP tool that starts Claude Code sessions
&lt;/h2&gt;

&lt;p&gt;We deployed a &lt;code&gt;claude_session_start&lt;/code&gt; MCP tool on Railway. It connects to a repo, spins up a Claude Code session, executes a task, and returns the result. A fully autonomous coding agent, callable as a tool by another agent.&lt;/p&gt;

&lt;p&gt;The first successful run pointed at our own repo. Claude Code responded with "Hello! Ready to help with your OpZero project." and exited cleanly with code 0.&lt;/p&gt;

&lt;p&gt;That's agents spawn``ing agents. And it works.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why this isn't just a party trick
&lt;/h2&gt;

&lt;p&gt;The AI tooling ecosystem right now has a composition problem. You've got MCP servers that give agents hands — they can deploy, search, query databases, manage infrastructure. But each tool is isolated. The agent calls one, gets a result, calls the next. It's orchestration, but it's flat.&lt;/p&gt;

&lt;p&gt;When one of those tools can spin up &lt;em&gt;another agent&lt;/em&gt;, the topology changes. You go from a hub-and-spoke model (agent calls tools) to a graph (agents delegate to agents who call tools). The parent agent doesn't need to know how to do everything. It needs to know how to decompose a problem and delegate the pieces.&lt;/p&gt;

&lt;p&gt;This is how human engineering teams actually work. A tech lead doesn't write every line of code. They break down the work, assign it, and integrate the results. We just gave AI agents the same capability.&lt;/p&gt;

&lt;h2&gt;
  
  
  The bigger picture: a composable agent nervous system
&lt;/h2&gt;

&lt;p&gt;We've been developing what we call the &lt;strong&gt;Module Contract&lt;/strong&gt; — a universal spec that lets any capability (MCP server, API, skill, memory store, or now &lt;em&gt;agent session&lt;/em&gt;) participate in a unified system. The key ideas:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Modules don't know about each other.&lt;/strong&gt; A deploy module doesn't import a preview module. They both declare what they can do and what context they need. A resolver in the middle handles the matching and composition.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Discovery is automatic.&lt;/strong&gt; An agent doesn't browse a marketplace and install plugins. It expresses intent — "deploy this to production" — and the resolver finds the right module, checks governance policies, and executes. No installation step.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Governance is built in, not bolted on.&lt;/strong&gt; Every invocation passes through a policy layer. Cost controls, access controls, data classification, audit logging. This is what makes dynamic discovery safe enough for enterprise use.&lt;/p&gt;

&lt;p&gt;The &lt;code&gt;claude_session_start&lt;/code&gt; tool fits into this contract like any other module. It declares its capabilities (start a coding session in a repo), its context requirements (repo URL, task description, auth), and its outputs (session result, exit code). The resolver can compose it with other modules — spin up a session to fix a bug, then deploy the result, then run tests against the deployment.&lt;/p&gt;

&lt;h2&gt;
  
  
  What we're actually building
&lt;/h2&gt;

&lt;p&gt;OpZero started as a deployment platform. It's becoming an &lt;strong&gt;enablement platform for agents&lt;/strong&gt; — a provider-agnostic infrastructure layer that makes agents more capable regardless of which LLM is driving them.&lt;/p&gt;

&lt;p&gt;The key insight: the mega LLM providers (Anthropic, OpenAI, Google) are all building their own tool ecosystems and plugin marketplaces. Each one wants to be the full vertical stack. But enterprises know from the cloud wars how that plays out — you go deep with one vendor, and five years later you're spending millions on migration.&lt;/p&gt;

&lt;p&gt;OpZero doesn't compete with any of them. We make their agents more capable. We're the neutral layer that handles the messy infrastructure composition so that any agent, from any provider, can discover capabilities, respect governance policies, and get things done.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Your AI builds it. We put it on the internet. And now we help it build other things too.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What's next
&lt;/h2&gt;

&lt;p&gt;We're finalizing the Module Contract spec (which defines how any capability becomes agent-discoverable and composable), building the resolver runtime (the intelligence layer between "agent needs something" and "agent has something"), and expanding the first-party module set beyond deployment.&lt;/p&gt;

&lt;p&gt;If you're building MCP servers, agent tooling, or enterprise AI infrastructure — we should talk. The nervous system needs neurons.&lt;/p&gt;

&lt;p&gt;

&lt;/p&gt;
&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
        &lt;div class="c-embed__cover"&gt;
          &lt;a href="https://opzero.sh/" class="c-link align-middle" rel="noopener noreferrer"&gt;
            &lt;img alt="" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fopzero.sh%2Fopengraph-image%3Fc504be721664d6d1" height="auto" class="m-0"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="c-embed__body"&gt;
        &lt;h2 class="fs-xl lh-tight"&gt;
          &lt;a href="https://opzero.sh/" rel="noopener noreferrer" class="c-link"&gt;
            OpZero — Vibe to live: Your AI builds it. We put it on the internet.
          &lt;/a&gt;
        &lt;/h2&gt;
          &lt;p class="truncate-at-3"&gt;
            Build with any AI. Vibe to live at a real URL in seconds. No GitHub, no terminal, no config.
          &lt;/p&gt;
        &lt;div class="color-secondary fs-s flex items-center"&gt;
            &lt;img alt="favicon" class="c-embed__favicon m-0 mr-2 radius-0" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fopzero.sh%2Ficon%3Feda26795e4354814"&gt;
          opzero.sh
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;







&lt;p&gt;&lt;em&gt;OpZero is an open, provider-agnostic platform for agent infrastructure. No vendor lock-in. Your tools, your agents, your rules.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>mcp</category>
      <category>agents</category>
      <category>devops</category>
    </item>
    <item>
      <title>The Former CEO of GitHub Just Agreed: Git Wasn't Built for This</title>
      <dc:creator>Jeff Cameron</dc:creator>
      <pubDate>Sun, 22 Feb 2026 04:04:50 +0000</pubDate>
      <link>https://dev.to/jefe_cool/the-former-ceo-of-github-just-agreed-git-wasnt-built-for-this-5325</link>
      <guid>https://dev.to/jefe_cool/the-former-ceo-of-github-just-agreed-git-wasnt-built-for-this-5325</guid>
      <description>&lt;h1&gt;
  
  
  The Former CEO of GitHub Just Agreed: Git Wasn't Built for This
&lt;/h1&gt;

&lt;p&gt;&lt;em&gt;Two weeks ago, I interviewed an AI about what it actually wants from developer infrastructure. This week, Thomas Dohmke raised $60M to build it.&lt;/em&gt;&lt;/p&gt;




&lt;p&gt;On February 4th, I published an interview with Claude Opus 4.5 titled "Git is Dead to Me: Why AI Agents Hate Your Pull Requests." The thesis was simple: files are an OS constraint from the 70s, Git is a protocol from 2005, and we need to stop duct-taping new intelligence onto old infrastructure.&lt;/p&gt;

&lt;p&gt;The AI was blunt:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Give me a flat representation with explicit edges between things, tell me the constraints, and let me emit a new state. Don't make me do surgery on text files and pretend I know which line I'm on."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;When I asked what versioning should look like:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Here was the state, here was the intent, here's the new state. Not: here are 43 line-level changes across 12 files."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I called it &lt;code&gt;State = f(Intent[])&lt;/code&gt;. The deployed artifact should be a pure function of the conversation history. No diffs. Replay intent, regenerate state.&lt;/p&gt;

&lt;p&gt;Some people thought this was hyperbole. An AI complaining about Git? Surely the fundamentals still hold.&lt;/p&gt;




&lt;h2&gt;
  
  
  Then Thomas Dohmke Left GitHub
&lt;/h2&gt;

&lt;p&gt;Six days later, on February 10th, the former CEO of GitHub — the man who scaled Copilot to millions of developers — announced Entire, a new company with $60 million in seed funding at a $300 million valuation.&lt;/p&gt;

&lt;p&gt;His thesis, from the launch post:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"We are living through an agent boom, and now massive volumes of code are being generated faster than any human could reasonably understand. The truth is, our manual system of software production — from issues, to git repositories, to pull requests, to deployment — was never designed for the era of AI in the first place."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;In an interview with The New Stack, he went further:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"We're moving away from engineering as a craft, where you build code manually and in files and folders... toward specifications, reasoning, session logs, intent, outcomes. That requires a very different developer platform than what GitHub is today."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The guy who &lt;em&gt;ran GitHub&lt;/em&gt; just said GitHub is wrong for agents.&lt;/p&gt;




&lt;h2&gt;
  
  
  What Entire Is Building
&lt;/h2&gt;

&lt;p&gt;Entire's platform has three layers:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;A Git-compatible database&lt;/strong&gt; that versions code, intent, constraints, and reasoning together&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A universal semantic reasoning layer&lt;/strong&gt; that enables multi-agent coordination through a "context graph"&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;An AI-native interface&lt;/strong&gt; for agent-to-human collaboration&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Their first product, Checkpoints, captures the prompts, decisions, and execution traces behind every AI-generated commit. When you commit code from an agent, Checkpoints stores the full session: transcript, prompts, files touched, token usage, tool calls.&lt;/p&gt;

&lt;p&gt;Sound familiar?&lt;/p&gt;

&lt;p&gt;From my interview with Opus 4.5:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Versioning should be: here was the state, here was the intent, here's the new state."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;From Entire's announcement:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Checkpoints are a new primitive that automatically captures agent context as first-class, versioned data."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Same insight. Same primitive. The difference is Dohmke has $60M and a team to build it.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why This Matters
&lt;/h2&gt;

&lt;p&gt;The validation here isn't that I was right. It's that the &lt;em&gt;most credible person in developer tooling&lt;/em&gt; independently arrived at the same conclusion — and is betting his next company on it.&lt;/p&gt;

&lt;p&gt;This isn't a fringe take anymore. It's a funded thesis from the person who built the dominant platform.&lt;/p&gt;

&lt;p&gt;The implications:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Git isn't going away&lt;/strong&gt; — but it's becoming a storage layer, not a workflow. Entire is Git-compatible precisely because they know you can't rip out Git. But they're building the semantic layer on top that actually matters for agents.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The "90% problem" isn't about GitHub integration&lt;/strong&gt; — Vercel announced their v0 rebuild the same week, touting deeper GitHub integration as the solution. Dohmke is betting the opposite: that the GitHub workflow itself is the bottleneck.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Intent is the new primitive&lt;/strong&gt; — not files, not commits, not diffs. The conversation that produced the code is more valuable than the code itself. Checkpoints makes that explicit.&lt;/p&gt;




&lt;h2&gt;
  
  
  Where We Go From Here
&lt;/h2&gt;

&lt;p&gt;At Opzero, we've been building on a related thesis: that AI agents need deployment infrastructure that works from inside the LLM client, not destination apps that compete with your AI.&lt;/p&gt;

&lt;p&gt;We're not building Entire. They're focused on governance and audit — making AI code reviewable. We're focused on the other end: making AI code &lt;em&gt;deployable&lt;/em&gt; without the ceremony.&lt;/p&gt;

&lt;p&gt;But we share the same premise: the primitives are wrong. Files, folders, commits, PRs — these are human coordination mechanisms that agents are forced to serialize into because that's the expected format.&lt;/p&gt;

&lt;p&gt;The next wave of developer infrastructure will be AI-native from the ground up. Not Git with AI bolted on. Not PRs reviewed by AI. Something new.&lt;/p&gt;

&lt;p&gt;Dohmke is building one piece of it. We're building another.&lt;/p&gt;

&lt;p&gt;The race is on.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published on the &lt;a href="https://opzero.sh/blog/github-ceo-agrees-git-dead" rel="noopener noreferrer"&gt;Opzero blog&lt;/a&gt;. I'm building Opzero, an AI-native deployment platform. Follow me &lt;a href="https://twitter.com/jefedev" rel="noopener noreferrer"&gt;@jefedev&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>git</category>
      <category>devtools</category>
      <category>programming</category>
    </item>
  </channel>
</rss>
