The Scariest AI Agent Failure Is the One That Looks Like Success
Everyone designs for the crash. Almost nobody designs for the lie.
After running multi-agent pipelines in production for a while, I've come to sort failures into three kinds. Only one of them announces itself. The other two get quietly folded into your results, and you find out later, if you find out at all.
The loud failure
A child agent times out. Or errors. Or returns text when you asked for JSON. This is the failure everyone already knows how to handle, because it's just distributed systems hygiene: validate the output, catch the exception, retry once, and if it still fails, route the item to a review queue instead of letting one bad item sink the whole batch.
Treat every child agent like an external API, and you've basically got this one covered. The output is a string until proven otherwise. Parse it, check the required fields exist, and never assume.
The quiet failure
This is the one that changed how I build.
The child returns on time. The JSON parses. Every field is present and the right type. And the answer is wrong, because the model reasoned badly somewhere in the middle. Nothing in your pipeline can tell, because structurally the output is perfect.
Two defences have actually worked for me.
First, don't trust self-reported confidence. I used to have my agents return a confidence field, and I used to believe it. A model's own confidence estimate is just more model output, subject to the same bad reasoning that produced the wrong answer.
Second, use disagreement as the signal instead. For items that matter, run the evaluation twice, with slightly varied prompts or just at nonzero temperature. If the two runs agree, fine. If they disagree significantly, the item is genuinely ambiguous or the model is genuinely unreliable on it, and either way it goes to a human. Consistency between independent runs is a real signal in a way that self-reported confidence is not.
Recommended by LinkedIn
The propagated failure
The third kind is a compound failure, and it's the most dangerous because it wears the other two as camouflage.
Say fifty children out of a thousand fail loudly. You catch them, flag them, all correct. Then your summary agent receives the nine hundred fifty successful results and writes its report. Nobody told it about the fifty. So it reports on nine hundred fifty items as if they were the full thousand, and it does so fluently and confidently.
If the fifty failures were random, maybe fine. But failures are rarely random. Maybe the longest conversation times out. Maybe one category of input breaks parsing. Your missing fifty are systematically different from your successful nine hundred fifty, and your summary now has a blind spot exactly where the problems are.
The fix costs one sentence. Every downstream agent gets the denominator: processed this many, succeeded this many, failed this many, and here's the pattern in the failures if there is one. Let the summarizer reason about the gap instead of hiding it.
The audit habit
One more practice, for pipelines that run in a language or domain you can't personally check. Sample a small percentage of outputs regularly and have a separate agent explain, in plain language you understand, why each score or decision was given, with translated or quoted evidence. It's cheap, and it's the difference between operating a system you trust and operating a black box that hasn't burned you yet.
Design for the crash, sure. But spend your real effort on the lie. The crash costs you an item. The lie costs you your trust in the whole pipeline, right at the moment you've stopped checking.
That wraps the series. I've put everything from these five articles, plus animated diagrams for each concept, into a free visual guide. Link in the post that brought you here, or check my profile.
Originally published on LinkedIn.