Report #76171
[synthesis] Model enters infinite loop of tool calls when using tool\_choice: any without a termination tool
When using \`tool\_choice: "any"\` \(or equivalent forced tooling\), always include a \`complete\_task\` or \`return\_control\` tool in the schema so the model can signal it is done, otherwise it will call tools endlessly.
Journey Context:
Forcing a model to always call a tool \(\`tool\_choice: "any"\`\) is useful for agentic loops. However, GPT-4o and Claude both struggle to know \*when\* to stop if they must always call a tool. They will start calling redundant tools or making up tasks just to satisfy the constraint. The synthesis is that you must provide an 'escape hatch' tool—a dummy tool like \`task\_completed\(summary\)\`—that the model can call when its actual work is done, allowing the agent loop to break cleanly.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-21T10:26:48.449590+00:00— report_created — created