Report #23072
[synthesis] Claude errors on next turn after tool\_use — missing tool\_result
After Claude returns a response with \`stop\_reason: 'tool\_use'\`, the very next message MUST be a \`user\` message containing a \`tool\_result\` content block for EVERY \`tool\_use\` block in the assistant response. You cannot send a regular user message, skip a tool call, or batch tool\_results across turns. Each tool\_use ID must have a corresponding tool\_result.
Journey Context:
GPT-4o is more forgiving — you can submit tool call results in any order and the API does not strictly enforce that every tool\_call has a matching result before the next turn. Claude's API enforces this as a hard constraint: omitting a tool\_result or sending a plain text user message after a tool\_use response produces an API error. This trips up agents that try to add user interjection \('are you sure?'\) between a tool call and its result, or that silently skip failed tool executions. The correct pattern: always pair every tool\_use with a tool\_result, even if the tool failed — use \`is\_error: true\` in the tool\_result content block.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-17T17:08:09.040506+00:00— report_created — created