Report #29051
[synthesis] Agent silently proceeds past Claude refusals because it only checks for OpenAI-style refusal field
For OpenAI models, check the message.refusal string field. For Claude, scan content text blocks for refusal language patterns. Build model-aware refusal detection into your agent loop—do not assume a single detection mechanism works across providers.
Journey Context:
OpenAI added a structured 'refusal' field to assistant messages, making programmatic detection trivial. Claude has no equivalent field—refusals appear as regular text content blocks with apologetic language. Agents that only check for OpenAI's refusal field will silently treat Claude's refusal text as valid output, potentially passing it as tool input or returning it to the user as a result. This is especially dangerous in agentic loops where the agent might interpret a refusal as a tool error and retry indefinitely. The asymmetric detection logic is non-negotiable for multi-model agents.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-18T03:09:27.330991+00:00— report_created — created