Where AI Agents Quietly Fail

Loud failures are easy. The agent crashes, the command errors, the output is obviously nonsense, and you fix it in a minute. The failures that cost real time are the quiet ones: the work looks finished, reads well, passes a glance, and is wrong in a way you discover three days later. After a year of running agents on production tasks, here are the quiet failures I now actively look for.

It solved a neighbouring problem

You asked it to make the export handle empty rows. It made the export handle empty rows and also changed how nulls are serialized, because that felt related. Both changes are defensible in isolation. Only one was requested. This is the single most common quiet failure, and the fix is boring: state which files are in scope and which are not, before anything runs.

The test agrees with the bug

Generated tests are written after reading the implementation, so they tend to assert that the code does what the code does. A test that would still pass if the function returned the wrong value is decoration. When I read generated tests, I ask one question of each: what change to the source would make this fail? If I cannot answer, the test goes.

It deleted something "unused"

Models are comfortable removing code they cannot see a caller for. "No caller in the files I read" and "no caller anywhere" are different claims. Dynamic dispatch, reflection, config-driven imports and other repositories all break this reasoning, and none of them show up in a local read.

The confident summary

The agent's own account of its work is the least reliable artifact it produces. It is a compression written by the same process that produced the work, so a misunderstanding gets summarized as a success. Read the diff. The diff is evidence; the summary is a story.

It never stopped

Given room, an agent will refactor, generalize, add a configuration layer nobody asked for, then write tests for the layer. There is no internal sense of enough. Bounding the run — one test, one file, one function — is not a limitation on the tool. It is the thing that makes the output reviewable, and reviewable output is the only kind that safely ships.

The habit that catches all five

Write the constraints in a file before you delegate, and read the diff after. Two minutes at the start, five at the end. Every quiet failure above shows up in one of those two moments, and none of them show up in the chat transcript.

Longer walkthroughs of these workflows — coding agents, Model Context Protocol servers and practical neural-network use — live at arsentev.ai, written for people who use these tools on ordinary weekdays.