Assume every tool call can fail
A tool call is a real operation happening in the real world: a network request, a database query, a call to a third-party API. All of those can fail, and not just in obvious ways. An API can time out, return a 500 error, return valid-looking data that's actually wrong, or return an empty result when something was expected. A well-built agent treats every tool call as something that might not succeed, rather than assuming the happy path is the only path.
The most common failure mode in production agents isn't a crash, it's silent bad behavior: a tool call fails, the failure isn't handled, and the model is left reasoning as if it got a valid answer, or it hallucinates a plausible-sounding result to fill the gap because nothing told it otherwise. That's a much harder bug to catch than an obvious crash, because the agent keeps running and just produces a confidently wrong answer.
