Notes on .NET, XAF, and building things

Twenty years of XPO, application frameworks, and lately a lot of applied AI. 285 articles and counting.

Browse by topic

All topics →

Latest articles

View all →
Jun 20, 20264 min read

What Is OpenAI Codex Sites? Prompt-to-Hosted-App, With a Catch

OpenAI's Codex picked up a feature called Sites: describe an app in plain language and Codex builds it, runs it, deploys it, and hands you back a live hosted URL — no deploy pipeline of your own. It's a genuinely interesting glimpse of where agents are heading. It also ships with some walls worth knowing about before you get excited. Here's the honest rundown.

Jun 20, 20264 min read

LM Studio 0.4.16: Your Local Models Just Went Mobile

LM Studio is the app I reach for whenever I want to run a model on my own hardware, and the 0.4.16 release adds the thing I didn't know I wanted: a mobile app called Locally that lets me drive my big desktop models from my phone over LM Link. Here's what's new, and why this is a bigger deal than a point release sounds.

Jun 20, 20268 min read

Static Analyzers: How They Work and Why You Actually Need Them

A static analyzer reads your code without running it and tells you what's wrong — the bug you didn't see, the await you forgot, the disposable you leaked. After twenty years of .NET I treat them as non-negotiable. Here's what they actually are, how they work under the hood (with a peek at Roslyn), and why every serious project should have them turned on and turned up.

Jun 20, 20265 min read

What Is ACP? The Agent Client Protocol — LSP, but for AI Coding Agents

If you've watched the AI coding space lately, you've heard about MCP. Its quieter cousin is ACP — the Agent Client Protocol — and it solves a different problem: not how an agent talks to its tools, but how your editor talks to the agent. The one-line version: if MCP is USB-C for AI tools, ACP is LSP for AI agents. Here's what it is and why I think it matters.

Jun 19, 20265 min read

What Is dotnetup? The .NET Version Manager We've Been Missing

If you've ever fought with which .NET SDK is on a machine — the one Visual Studio dragged in, the one winget installed, the one the install script dropped, the one your global.json actually wants — then dotnetup is for you. It's the official .NET SDK and runtime version manager, finally: rustup/nvm, but for .NET. Here's what it is and why I'm excited about it.

More topics

All topics →
Jun 19, 20266 min read

Chat, Agent, Harness: The Three Layers of Building with AI

Three words get thrown around as if they were the same thing — chat, agent, harness — and they are not. They're three different layers, and once you see the boundaries between them, a lot of the AI-for-developers landscape suddenly makes sense. Here's how I think about the distinction, with small code sketches for each layer.

Jun 19, 20267 min read

Microsoft Execution Containers (MXC): Build 2026's Answer to the Shared-Kernel Problem

A couple of days ago I wrote that namespaces are the operating-system feature AI agents were waiting for — and that the one real catch is the shared kernel. Turns out Microsoft spent Build 2026 answering exactly that. Microsoft Execution Containers (MXC) swap the shared kernel for hypervisor-enforced boundaries while keeping container-class speed: under 5% CPU overhead, 40–60 MB per container, dozens of agents on one workstation. Here's what it is and why I, a Windows person, am genuinely excited about it.

Jun 19, 20267 min read

Namespaces: The Operating System Feature AI Agents Were Waiting For

Linux namespaces have been quietly sitting in the kernel since around 2008, powering every container you've ever run. I never thought much about them until I started running AI agents — and then it clicked. Namespaces are arguably a better fit for agents than they ever were for ordinary apps, because an agent is the one workload that is both cheap to spawn by the hundred and fundamentally untrustworthy.

Jun 18, 20267 min read

One Command to Generate, Test, Rank, and Merge an Agent Fan-Out

Over the last three posts I built the pieces of a best-of-N agent pipeline one at a time: git worktrees for isolation, a fan-out script to generate N attempts in parallel, and a judging stage to find the winner. This is the capstone — one ~50-line orchestrate.sh that chains all of it into a single command. You give it a count, an agent command, and a test command; it fans out, eliminates the runs that fail the tests, ranks the survivors, shows you the winning diff, and merges it only if you say yes. I built it, ran it end to end, and pasted the real output — including the one rough edge worth knowing about.

Jun 18, 20268 min read

Judging the Winner: Tests and LLM-as-Judge as the Referee

The fan-out script from the last post hands you N finished attempts at the same task and then stops — it deliberately leaves the hardest question to you: which one is actually best? This post is about turning that judgment into a real pipeline. A two-stage referee: tests as the objective first cut that eliminates anything broken, then a quality judge — your eyes for small diffs, an LLM-as-judge when there are too many to read — to pick among the survivors. I built the test stage, ran it, and pasted the real output, then laid out the judging recipe and the ways it quietly lies to you.