A coding agent cannot act on the sentence "the login endpoint works correctly." It can act on pytest tests/test_login.py::test_rejects_expired_token returning 0. The difference matters because the agent's loop is mechanical: it forms a plan, edits files, and then needs an external signal that says continue or stop. If the signal is a human sentence, the agent either asks you (a round trip) or decides for itself that the work "looks done" and stops.
Anthropic's guidance on agentic coding is explicit that the agent needs something it can run: tests, a build, or an artifact to compare against, because without a verification step the model closes the loop on appearance rather than behavior (Anthropic prompting best practices). The same principle drives the formalization of acceptance testing: work at higher autonomy levels only happens when the requirement, not the code, is the oracle for expected results, and tests are generated from the ticket before implementation begins (the maturity matrix). If tests are written by watching the implementation, they pass by construction and verify nothing.
There is a second reason. Agent instructions decay. Long-running agents lose fidelity on earlier instructions as the context fills, which is one of the problems that context compaction and event-driven reminders exist to counter (the OpenDev paper). A check that lives in a file and returns an exit code does not decay. Prose buried in a long prompt does.



