It’s been too long since I’ve written anything here, so I wanted to get at least something down on paper, even if it isn’t particularly insightful. I need to recalibrate my goals for personal writing to be less aspirational and more about staying faithful to the advice I once gave a new grad.

It’s March 2026, and the last 6 months of AI progress have been really exciting to watch. The models are continuing to improve at an impressive rate. I don’t watch leaderboards carefully, and I don’t know whether the pace actually measures up to the boldest claims from 2024, but in my everyday use and code gen work, the improvement feels palpable. Opus 4.6 is my daily driver, and it isn’t perfect, but it really has leveled up in intellectual rigor and instruction-following.

Somewhere within the last 6 months, it seems like the industry collectively came to some pivotal realization about agents and their orchestration. I can’t be sure there’s widespread consensus on what exactly it is, but in my head, I’ve codified it somewhat clumsily as Claude Code is the last agent you’ll ever need — the idea that coding agents are positioned to win as the end-game agent for everything. Whereas we spent all of 2024 and much of 2025 repeatedly crafting the agentic loop from scratch for each framework and different use case, we already had a perfectly serviceable agent in our hands in the form of Claude Code (or name your favorite coding agent). Code execution is simply the best way to allow a solution to arise to any given problem in the knowledge-work domain, and in late 2025-ish, the models got good enough at software engineering to reap the full advantage of that expressiveness.

(I consider the phrasing above clumsy, because it’s not—nor is it ever—really that simple. Coding agents won’t be the end-game agent for literally everything, and it’s not just pure code all the way down. Tool ergonomics, APIs, etc. are still part of the formula of a good agent.)

It’s hard to tell what’s driving the sea change, but there’s a lot being written about code execution emerging as a solution to token bloat from tool calls. Rather than consuming valuable context with an exhaustive list of tool definitions and tool call results across turns, allow the agent to discover tools and call them with code, thereby culling unneeded tool definitions and verbose intermediate results. What’s interesting is that this is a practical fix to a real-world problem that you face in production, while also feeling like an inevitable step in the erosion of traditional software by intelligence. It’s like The Bitter Lesson but applied to the software/intelligence boundary: check your desire to impose on the architecture what you think you know about the problem, and let the AI agent do the discovering. More and more of Software 1.0 is falling to Software 3.0.