Routines no longer stop because they reached a configured number of model steps. A complex run that legitimately needs many tool calls, retries, and synthesis passes can now finish its work.
What replaces the cap is a distinction between productive and stalled runs. Every run has an inactivity timeout that resets each time the run records real progress — a model step, a tool call, a tool result. A run waiting on a slow third-party API keeps its budget as long as work keeps landing; a run that goes quiet is stopped and marked as idle, distinctly from one that hit the absolute deadline.
The absolute deadline and your plan's usage guardrails still bound every run, and cancellation works as before. On the hosted scheduler, a single run is also bounded by the platform's execution window, so the effective deadline is the smaller of the two. Existing routines keep running without changes — their stored step limits are simply no longer enforced, and run traces now show why a run stopped and when it last made progress.