In February, Maisem Ali made a rule for himself: no more writing code by hand. Six months later, the exe.dev engineer has written up what that looked like in practice, and his biggest lesson isn’t about typing. “Shipping got easy. Deciding what to ship got important.”
Ali had leaned on Copilot, Cursor’s tab completion and then Claude Code, which let him describe a change once and have the agent edit many files. He says the models “got really good, almost all at once” early this year, when GPT-5.3 and Opus 4.6 could handle larger changes with much less steering. The rule followed. If an agent got stuck, he wasn’t allowed to finish the job himself; he had to figure out what the agent was missing and fix that.
From one agent to twenty VMs
With agents doing the typing, Ali started running several at once, and they promptly collided: same files, same Git state, fights over ports, leftover processes. Worktrees solved only the Git part, AGENTS.md rules ate context, and containers were leaky and still tied to his laptop. Since exe.dev makes Linux VMs that boot in seconds, he gave each task its own disposable machine, had Claude write and iterate on the setup script, and built a tool called botd to provision boxes, drive the agents and keep every conversation, with mobile as a first-class interface. At peak he ran about 20 VMs.
Inside each VM, agents ran without approval prompts, since a trashed environment cost nothing. The real risk was external access. Agents got read-only access to most systems and write access only to test environments, and credentials stayed out of the VMs: requests went through a proxy that added the secret, so the agent never saw it.
Review is the bottleneck
Agents could run tests and CI, start the app and send screenshots, but they were still grading their own work. Being able to open the running environment and use the feature himself mattered, and having other agents review the code “worked surprisingly well,” occasionally catching real bugs. He still had to understand every change before merging. And even when everything checked out, the harder question remained whether the feature should exist at all, since unshipping is much harder than shipping.
Ali’s definition of an agent is refreshingly plain: “a model in a loop with tools.” His advice follows from it. Give an agent what you’d give a developer, and then put the real controls on what it can reach.


WebProNews is an iEntry Publication