We gave AI agents the ability to write code, run tests, open pull requests, and hand work to each other. Then we asked them to coordinate through a TODO.md file and a shared chat window.

That mismatch produces a whole category of bugs that have nothing to do with the model's intelligence.

An agent picks up a task, gets halfway through, and its context window fills up. Another agent, running in a different terminal, grabs the same task because nothing told it the work was taken. A third crashes mid-edit and leaves a task marked "in progress" forever — a tombstone no one can clear.

None of these are reasoning failures. They're coordination failures, and they appear the moment you run more than one agent, or one agent for longer than a single conversation.

This article is about a data model that addresses them. It's drawn from rhizome-mcp, an open-source MCP server I built for this problem, but the ideas are portable. Work attempts, leases, and checkpoints are useful whether or not you ever install it.