fix(agent): keep model focused after failed tool calls - #64
Open
syf2211 wants to merge 1 commit into
Open
Conversation
Add a system-prompt guardrail and inject a per-round focus hint when built-in or MCP tools fail, covering TUI, headless, and ACP loops. Fixes KlaatAI#18
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 a tool call fails, the agent can pivot to unrelated tasks instead of retrying or asking for clarification. This PR adds a static system-prompt guardrail and injects a per-round focus hint after failed tool results.
Motivation
Fixes #18 — reported scenario: after
browser_navigate404, the model ignored the user's correction and started reading unrelated local files via MCP filesystem tools.Changes
isToolFailure()helper detecting built-inError:results, MCP errors, and non-zerorun_commandexits (excludes doom-loopRefused:guidance)TOOL_FAILURE_FOCUS_HINTinjected into API messages after any failed tool roundrepl.ts), headless agent, and ACP agent loopsTests
bun test src/agent/tool-failure-focus.test.ts— 7 passbun test— 452 passbun run typecheck— passbun run build— passNotes
This is a prompt-level guardrail, not a hard tool-category block. It follows the same injection pattern as the existing doom-loop recovery guidance. No server-side routing changes required.