Agent builds fail on ambiguity more often than on engineering. The scope arrives as a sentence: "an agent that handles support tickets." That sentence hides five separate workstreams, and each one can grow without anyone noticing.
First, tool selection. An agent that calls three internal APIs needs authentication for each, a schema for each, and error handling for each. If the fixed bid names "CRM integration" without naming which endpoints and which auth model, the vendor prices the cheapest reading and you argue over the rest. Second, retrieval behavior. A retrieval-augmented agent's quality depends on the corpus, the chunking, the embedding refresh cadence and the evaluation set. None of those appear in a feature list. Third, evaluation. An agent picks a path and does it slightly differently the next time, so "delivered" has to mean "performed at an agreed level on an agreed dataset," which is a different sentence than most software statements of work contain (Heinrich & Co on agent SOWs). Fourth, data access. Data readiness is an organizational condition rather than a coding task, so it belongs in scope as a client obligation with a date attached (Heinrich & Co). Fifth, the human handoff: who approves, who escalates, and what happens when the agent is uncertain.
Contracts allocate that risk. They do not remove it. Only scoping discipline does. Whatever you sign, fix only two of the three variables, budget, scope and time, and let the third absorb what you learn mid-build (VeryCreatives).
The decision rule worth keeping: if you cannot write a numbered acceptance test with a threshold and a dataset for a behavior, you do not yet have a scope. You have a hope.



