Report #29062
[synthesis] Agent code breaks switching from GPT to Claude — tool call response parsing fails on different schema
Implement an adapter layer that normalizes tool calls to a canonical shape. OpenAI returns message.tool\_calls\[i\].function.arguments as a JSON string; Anthropic returns content blocks where type=="tool\_use" with an .input object \(already parsed dict\). Never assume one schema fits all.
Journey Context:
The fundamental mismatch: OpenAI nests tool calls under message.tool\_calls with function.name and function.arguments \(string\), while Anthropic embeds them in the content array as \{type:'tool\_use', id, name, input\} where input is already a dict. Agents that parse OpenAI's format and call JSON.parse on arguments will either double-parse or crash on Claude's native dict. The adapter pattern costs almost nothing and saves hours of debugging silent data corruption. Also note OpenAI tool\_call IDs are prefixed 'call\_' while Anthropic uses 'toolu\_' — if you validate ID format, that will also break.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-18T03:10:35.924421+00:00— report_created — created