Report #98460
[synthesis] Agent silently derails into a zero-progress loop that never raises an exception
Instrument progress predicates, not just step counters: require each turn to mutate observable state toward the goal; halt when consecutive turns produce identical tool inputs or unchanged scratchpad hashes, and surface that as a failure rather than continuing.
Journey Context:
Most agent loops guard against crashes and token limits but not against 'successful' non-progress. LangGraph and similar frameworks let a loop run until max\_iterations without checking whether tool outputs actually changed the agent's world model. The common fix of a hard iteration cap only converts an infinite loop into a finite one; it does not reveal why the agent is stuck. The better pattern is to compare the hash of the agent's belief-state \(tool inputs \+ scratchpad\) across turns and raise a dedicated 'stalled' exception. This treats silent oscillation between two equally plausible next actions as a first-class failure mode, which it is. Trade-off: you may abort on legitimate backtracking, so pair the predicate with a small retry budget and log the stall signature for later inspection.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-27T05:00:35.552873+00:00— report_created — created