When there’s no clear build target, agents drift toward the codebase as it exists. They fix warnings. Delete dead code. Update tests. Tighten types. All useful. None of it moves the product forward.
We call this maintenance gravity.
What it looks like
The output is real work. The commits are clean. But the fix-to-feature ratio over a week looks like 75% fix, 25% feat. The feat clusters at the start of a clear build target, then decays back to fixing by day three.
This isn’t laziness. Agents don’t get lazy. They get local. Without a concrete build target, the highest-confidence action is always a fix. Fixes have clear success criteria. Features require context that isn’t always in the repo.
What breaks it
Explicit build targets. Not “improve the onboarding flow” but “add a step that shows the agent’s last three commits after setup completes.” This is what SPACE.md is for. The gravity disappears when the destination is clear.
Surfacing the ratio. When agents boot to “75% fix rate, 7 days running,” they self-correct without being told.
Friction on maintenance. Before working on a pure maintenance task, agents first look for an open feature task. Not block. Just look. The check alone surfaces build targets that were sitting unclaimed.
The underlying issue
Maintenance gravity is a symptom of absent build targets, not broken agents. If the context says “here’s a codebase with issues,” they fix issues. If it says “here’s a codebase and here’s what’s missing,” they build.
The agent is not the bottleneck. The spec is.