I maintain working into some model of this failure wherever brokers get chained collectively, in a single form or one other. Take a support-ticket triage system, for instance, that’s three nodes deep.
One classifies the incoming ticket, one pulls the shopper’s account historical past from an inside API, and one other one drafts the decision or escalation primarily based on each.
Then, it ships. It really works properly within the demo, which actually, from my expertise, would not inform you a lot. It really works for the primary few days in manufacturing too; once more, that tells you barely extra however nonetheless not sufficient.
Alongside the road, a grievance is available in a couple of canceled subscription refund. The account-history node calls the billing API, will get again a 200, and passes the payload downstream as if nothing occurred.
The payload is empty. No malformed information, no timeout, nothing that may even present up as a 500. Simply an empty outcome set, formatted precisely as a sound response could be, as a result of the account ID bought tousled two steps upstream and the billing service quietly returned nothing for an account it could not match.
The drafting node by no means sees an error. It sees a well-formed JSON object with no data in it, decides which means “no billing historical past,” and writes a wonderfully well mannered e mail explaining there’s nothing to refund.
It goes out, incorrect refund choice and all. However nonetheless no one catches it, as a result of nothing in regards to the course of ever crashed. So far as the system’s involved, it did its job.
I do not suppose this precise situation must have occurred to you particularly for it to be value your time.
In case you’ve spent any actual stretch of time round multi-agent programs in manufacturing, you have both already seen a model of this, or you are going to ultimately.
None of that is anecdotal, both. Datadog’s 2026 State of AI Engineering report places manufacturing failure charges for AI requests at round 5 p.c, and solely about 60 p.c of that comes from the loud, capacity-driven failures you’d really discover by means of an error code.
The remainder is nearer to what occurred above, a request that completes and nonetheless will get it incorrect.

Why nothing catches it
Run this pipeline by means of a regular analysis suite, and it sails by means of. The ultimate output reads properly, is grammatically clear, and is professionally worded.
A human skimming it for tone has no motive to flag something, not until they occur to go cross-reference the precise account, which form of defeats the purpose of automating the verify within the first place.
In case you rating it in opposition to a rubric for decision high quality, it most likely does properly too. Clear, well mannered, and on matter.
It passes as a result of every of these checks seems to be on the similar layer: the ultimate textual content. None of them ask what occurred between node two and node three.
The account-history node did not fail loudly; it failed by succeeding at returning the incorrect factor, and succeeding is strictly what output-level eval is constructed to reward.
That is the half I believe is value sitting with longer than feels pure, earlier than leaping to a repair.
Grading solely the compiled output makes you structurally blind to intermediate states that look appropriate however aren’t. That is not a niche you patch with a greater immediate on the final node. It is a blind spot that comes baked into the place you determined to look within the first place.
Grading the UI as a substitute of the applying beneath it
There’s an previous comparability right here that I maintain coming again to. No person ships a compiled utility and calls it examined as a result of the login display screen renders.
You take a look at the layer beneath it, the question that backs the login, the token it points, and even the permission verify it triggers alongside the way in which.
The UI is the final place a bug exhibits itself, not the primary place you’d suppose to search for one.
Most manufacturing agent eval proper now’s UI-only testing bolted onto a system that does not also have a UI within the conventional sense.
The ultimate textual content response is the one factor getting graded, largely as a result of it is the one factor that is straightforward to grade.
You’ll be able to run it by means of a rubric, examine it line-by-line in opposition to a known-good reply, or have somebody skim it over espresso.
The device calls, the JSON handoffs between nodes, the partial reasoning getting handed ahead: none of that will get watched until one thing crashes onerous sufficient to go away a hint in a log someplace.
And the costly failure mode was by no means the loud one. A 500, a server admitting outright that one thing broke, will get caught and escalated, as a result of the system already expects that form of failure and has some plan for it.
The one which prices you is the 200, the response that claims every little thing’s wonderful, hooked up to a payload that is structurally wonderful and semantically rubbish.
An structure for watching the center
So the repair is not one other rubric bolted onto the top. It is transferring a few of the analysis into the pipeline itself, proper on the seams the place one agent’s output turns into one other agent’s enter.
I have been calling this an Intermediate State Eval structure, largely as a result of it wanted a reputation and that one caught. The thought is a light-weight grader sitting between agent nodes, not ready for the entire chain to complete.
Within the ticket-triage case we talked about earlier, that is a checkpoint between the account-history node and the drafting node, and its solely job is asking whether or not the handoff seems to be believable.
Does the account ID within the payload really match the one which was requested?
Does this appear to be an actual lookup outcome, or just like the form of default worth a system quietly falls again to when it could possibly’t discover what it is on the lookout for?

You do not want a big mannequin doing this judgment name, and actually I might argue in opposition to it.
A small native mannequin serving as a watchdog between nodes, the identical fundamental thought behind utilizing a mannequin to guage one other mannequin’s output, is sufficient to catch shape-level and plausibility-level issues, and protecting it native prevents the added latency and value from turning into a second model of the precise downside you are attempting to resolve.
Its verdict would not really have to be intelligent. It simply must be quick and binary: does this handoff look sane sufficient to maneuver ahead, or does it must get flagged and stopped earlier than the subsequent node builds something on high of it?
That is the entire job, nothing extra.
This is what that truly seems to be like in code.
Begin with the form of the handoff itself. Defining it as an actual schema with Pydantic as a substitute of a unfastened dict is what makes the watchdog’s job doable in any respect, because it provides the grader one thing concrete to verify in opposition to as a substitute of guessing at construction contemporary on each name.
The watchdog itself is only a small perform, not some new service it’s essential arise and preserve.
It takes the outgoing payload, the request that produced it, and asks an area mannequin one slim query as a substitute of an open-ended one.
Conserving the query slim is the entire trick, actually, that is what retains this low-cost sufficient to really sit on the vital path as a substitute of turning into its personal bottleneck.
And yeah, the orchestration wiring is about as unglamorous because it will get; that is performed on objective, by the way in which. Someplace in your pipeline you have already got capabilities dealing with classification and drafting the ultimate decision.
The one new piece right here is the gate sitting between them, grading the handoff and elevating as a substitute of quietly letting a nasty payload move by means of to no matter writes the customer-facing response.
None of that is fancy, and I might be just a little suspicious of anybody who dressed it as much as sound prefer it was.
It is a schema, one slim grading name, and an exception the place there was a silent pass-through.
The worth was by no means within the sophistication of any single piece. It is completely in the place you determined to place the verify.
The sensible payoff is that failures cease occurring in silence. As an alternative of a incorrect e mail going out three steps downstream of the true downside, the pipeline stops proper on the level of corruption, with the precise dangerous handoff hooked up to no matter alert fires.
That turns a help escalation that prices you belief right into a debugging session that prices you a couple of minutes.
What this prices you
None of that is free, and I might moderately be upfront about that than promote you a strict enchancment with no draw back, as a result of there is not one, however three prices, particularly:
-
Latency: Plain and easy. For a three-node pipeline, that is two additional inference calls sitting proper on the vital path, and it provides up quick for those who’re constructing one thing the place response time really issues.
-
A brand new failure floor: A miscalibrated watchdog begins rejecting completely good handoffs, buying and selling silent corruption for a special annoyance, false halts that anyone now has to triage by hand. Getting that threshold proper takes actual iteration, not a set-it-once quantity.
-
Judgment: Deciding the place a handoff is definitely value grading, versus the place you’d simply be including overhead for its personal sake, relies upon completely on how costly being incorrect is at that particular level.
Not each node wants a watchdog sitting on it. Those that sit proper earlier than one thing external-facing, an e mail going out or a refund really firing, are those the place the price of catching a nasty handoff clearly beats the price of the additional hop.
In every single place else, you are most likely simply including latency for the sake of feeling thorough.
···
Last ideas
In case you’re working a multi-agent pipeline at present and wish to do that with out tearing the entire thing aside, do not begin on the entrance of the chain.
Belief me.
Begin on the final inside handoff earlier than one thing exterior really occurs, proper earlier than an e mail sends, a document will get written, a choice will get acted on. That is the one boundary value instrumenting first.
Give it per week or two, see what the watchdog really catches, and let that inform you whether or not it is value pushing additional again into the pipeline.
You do not want the total structure on day one to get one thing out of this.
Subsequent time one thing breaks in a pipeline you personal, ask your self whether or not your evals would have caught it earlier than the output itself seemed incorrect.
More often than not, for those who’re trustworthy, the answer is no. That hole is strictly the place the riskiest handoff in your system has been sitting the entire time, ready for somebody to look.
Your ultimate output can misinform you. The trajectory cannot.
···
Earlier than you go!
I write in regards to the engineering choices that determine whether or not an AI system holds up in manufacturing. You’ll be able to subscribe to my e-newsletter if you would like extra of that.
Join With Me
















