complete_task — the terminal tool: apply the final payload write and finish, in ONE turn.
Without it, implicit control flow finishes in two turns — payload_change_request, then a
plain-text reply — where the envelope finishes in one (taskComplete + payloadChangeRequest).
That costs an iteration on every run, and on the last permitted iteration there is no second
turn at all. Agent frameworks that need a structured result end on a designated tool for the
same reason (OpenAI Agents SDK StopAtTools, SWE-agent's submit). Plain text still ends the
turn, for agents whose answer is prose.
complete_task— the terminal tool: apply the final payload write and finish, in ONE turn.Without it, implicit control flow finishes in two turns —
payload_change_request, then a plain-text reply — where the envelope finishes in one (taskComplete+payloadChangeRequest). That costs an iteration on every run, and on the last permitted iteration there is no second turn at all. Agent frameworks that need a structured result end on a designated tool for the same reason (OpenAI Agents SDKStopAtTools, SWE-agent'ssubmit). Plain text still ends the turn, for agents whose answer is prose.