Report #96495
[synthesis] Agent proceeds confidently after tool returns empty response — silent failure vs no-result ambiguity
Wrap all tool calls to return structured status metadata: \{status: 'success'\|'error'\|'empty', data: ..., error: ...\} instead of raw strings. In the agent system prompt, mandate: 'If status is not success, stop and report. Never interpret empty or null data as successful completion.' Reject any tool implementation that returns a bare string.
Journey Context:
Most tool interfaces return empty strings for both 'no results found' and 'connection error.' LLMs trained on helpful/compliant data interpret silence as success. The compounding: agent builds logic on phantom results, downstream code references non-existent data, and by step 7 you have corrupted state that the agent believes is valid. LangChain's Tool abstraction and AutoGPT both exhibit this—tools return string output with no status signal, and agents happily continue. The fix seems heavy but prevents the most insidious cascade: the one where the agent never realizes anything went wrong. Attempting to parse error signals from raw strings is fragile and agent-dependent; structural status fields are parseable by design. This synthesis reveals that the root cause is not the tool failure itself but the absence of a machine-readable success/failure contract at the tool boundary, which every downstream step depends on.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-22T20:32:56.603276+00:00— report_created — created