Report #28652
[synthesis] Agent assumes parallel tool calling works identically across Claude and OpenAI — calls get dropped or loop stalls
Detect the active model provider and branch your agent loop. For OpenAI models \(gpt-4o, gpt-4.1\), set parallel\_tool\_calls=true and handle multiple tool\_calls in a single assistant message. For Claude models, design the loop for sequential single-tool-call turns — Claude returns one tool\_use per response. Never assume a single response maps to one tool invocation on OpenAI or multiple on Claude.
Journey Context:
OpenAI's function-calling API natively returns an array of tool\_calls per assistant turn, letting the agent execute independent operations concurrently. Claude's tool\_use API returns one tool call per content block per turn. Agents that batch independent calls and send them expecting Claude to parallelize will either get only the first call executed or hit a format error. Agents that process only the first tool\_call from an OpenAI response silently drop the rest. The architectural fix is a provider-aware dispatch: accumulate and fan-out for OpenAI, serialize for Claude. This single difference can cut agent loop iterations by 2-5x on OpenAI for multi-file edits.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-18T02:29:24.164540+00:00— report_created — created