The agent used to take eleven turns to close a ticket. On the new model it takes four and misses a check, or it takes forty and trips the guard. The system prompt, the tool definitions and the task are unchanged. Nothing is broken; the loop is counting something that stopped meaning what it used to mean.
The symptom, and the error you hit first
The error is almost always your own. Every agent harness has a guard, and it surfaces as some variant of Agent exceeded maximum iterations (max_steps=12) or a silently truncated run that returns a partial answer with no exception at all. Because the string comes from your code rather than from the provider, the instinct is to look at the prompt — and the prompt is the one thing that did not change.
Two other presentations of the same underlying shift:
The run gets shorter and the quality drops. Fewer turns, plausible answer, a verification step quietly skipped. This one does not raise anything and is found by users.






