feat: failure caps to prevent runaway replan loops#9
Open
Savolent wants to merge 1 commit intovcarl:mainfrom
Open
feat: failure caps to prevent runaway replan loops#9Savolent wants to merge 1 commit intovcarl:mainfrom
Savolent wants to merge 1 commit intovcarl:mainfrom
Conversation
When a subagent step fails, the state machine now tracks consecutive failures. After 5+ consecutive failures, replanning is blocked for an increasing number of ticks (failures × 4, max 60 ticks). This prevents stuck agents from burning tokens replanning the same failing approach every tick. The failure counter resets on any successful step or lifecycle reset. Applied in both the state-change handler and tick handler. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
When subagent steps fail repeatedly, the state machine now blocks replanning with exponential backoff to prevent burning tokens on the same failing approach.
Changes
state-machine.ts: AddconsecutiveFailuresRefandreplanBlockedUntilTickReffailures × 4ticks (max 60)Motivation
Without this, a stuck agent replans every tick, generating a new plan that hits the same wall, burning API tokens on a loop that never resolves. The failure cap gives the agent a cooldown period, and the escalating backoff prevents rapid cycling.
Test plan
npx nx run @roci/core:buildpasses (verified)🤖 Generated with Claude Code