Your agent ignored a failed tool call. Here's how to catch that in CI.
You ship an AI agent. It calls tools, reads results, calls more tools, answers. Most of the time it works. Then a user reports something wrong, you open the trace, and you find it: the charge_card tool returned a 402, and the agent just... kept going and told the customer their order shipped. That's not a hallucination in the "made up a fact" sense. It's a structural defect in the run — an…
You ship an AI agent that calls tools, reads results, and calls more tools before delivering an answer. The agent generally performs well, but when something goes wrong, a user may report issues and you open the trace to discover the problem. In this case, the agent ignored a failed tool call and proceeded as if nothing had happened, sending a customer an incorrect order status.
This isn't a hallucination, which involves making up facts, but rather a structural defect in the run, which can be detected without another language model. That's where tracelint comes in - a linter for agent runs that reads the execution trace and flags structural bugs with exact trace lines as evidence. Tracelint runs after the run on the trace, not on your code, using an LLM judge isn't the best approach for this type of bug, as they have low localization accuracy and cost money per trace.
Instead, tracelint checks the trace for structural defects like tool argument violations, tool errors being reused by later side-effecting calls, hallucinated arguments, and stuck loops. It can run on traces you already collect, such as those from OpenInference, Arize Phoenix, Langfuse, or OTel collector. Tracelint looks at the spans you've already generated and flags any structural defects, with exit codes indicating whether the trace is clean, has a structural defect, or has an input error.
Written by urgent.news from Dev.to's reporting — not their text. Machine-written — may contain errors; check the original before relying on it.