Why my agents browse the web with a real mouse
There is an inexpensive mini PC in my closet, bought used off eBay, with no monitor attached. Well, there is a dummy display plug, so Windows believes a 4K monitor is attached. Chrome is open. One window, maximized. The machine never locks and never sleeps. Nobody has sat at it in weeks.
Every agent I run borrows that Chrome: Claude Code on my laptop, Codex in a VM, a loop in another VM. They all get the same browser_* tools through a LiteLLM gateway and–with the patience of beings that do not experience time–wait their turn. When a site insists on talking to the human, my phone buzzes with a Delta Chat message. I VNC into the box, click the squares with the traffic lights, and the agent carries on where it left off.
The agents never find out. To them it is a browser tool, same as any other. So let’s follow one click, from the agent all the way down to the page.
Before you get the wrong idea: the mouse is “real” to Chrome the way shadows on Plato’s cave wall are real. If you came for the Stuff Made Here version with servos and a 3D-printed hand, I am sorry.
We need a new unit of work for AI
Epistemic status: speculative.
The pull request (PR) is the unit of work for much of the software industry. Sure, some shops allow multiple PRs per story card, but generally speaking 1 card ≈ 1 PR ≈ the smallest change you can ship.
If you weren’t in the industry before the pull request was invented, you might not know that the unit of work has varied over the years. Some teams experimented with an even more granular unit: the commit.1 More commonly, the unit of work was much larger.2
The more I work with AI, the more convinced I become that a change is due. It is not that the PR can’t be used in a world of AI. Rather it is that a PR is a human-centric unit of work. For as long as we stick with the PR as the unit of work, we will be leveraging only a fraction of the power of agents.
Putting Pangram to the test
While catching up on Armin Ronacher’s blog, I ran across this observation about running his writing experiment through an AI detector:
Well this text too comes back as 100% slop. And it does not surprise me all that much. I have generally noticed that if you rely on an LLM to give your text structure, it will score badly on Pangram even if you do plenty of edits over it. In fact, it’s quite unlikely you’re going to get a post that starts out as slop into a structure that will make it appear that it’s not.
By interesting coincidence, I recently authored three posts (1, 2, 3) that take the converse approach: the ideas and the structure all come from me, then I liberally use the LLM to fill in that structure.
I had never used Pangram before, but this was too good an opportunity not to try it. The results weren’t too far off from what I expected, but the details surprised me all the same:
![]() |
![]() |
In praise of the single-threaded agent loop
An incomplete list of things I don’t get about graph engineering:
- Agents dynamically writing prompts for other agents
- Agents writing durable plans that don’t actually work
- Fanning out interconnected work to subagents when it could run serialized and still be ready by tomorrow
- Paying for the extra tokens that all the orchestration and coordination overhead adds1
Your agents have outgrown plan mode
When factories first got electricity, they did the obvious thing: unbolted the steam engine and bolted a giant electric motor in its place. Same central drive shaft, same belts, same layout. Productivity barely moved for thirty years.
Then someone realized electricity didn’t want to be one big motor–it wanted to be a small motor on every machine. Factories got rebuilt around that idea, and output exploded.
Plan mode is the giant motor bolted where the steam engine used to be.

