Explicit finish tool or no-tool-call stop
RolesAgent Systems EngineeringDeveloper Experience and Education
The question
Two engineers disagree about how the loop should end. One wants an explicit finish tool that the model must call. The other wants the loop to end as soon as an assistant turn has no tool call in it. Which do you pick, and what does each choice get wrong?
Answer it first, aloud or on paper. Then open the answer.
The answer
Show short answer
Both are stop conditions, and a production loop needs both plus a budget. The no-tool-call stop is simple and matches how models behave, but it ends the run on any turn where the model answers in prose, including a turn where it only meant to think aloud. An explicit finish gives a clear signal with a payload, but a model that never calls it runs until the budget. Pick the no-tool-call stop as the default, keep finish as a tool that carries the final answer, and make the budget the last guard.
Show full answer
What each one gets right
| Stop | Strength | Weakness |
|---|---|---|
Explicit finish tool | The end is a structured call with the answer as its payload, so the caller never guesses which text is the answer | A model that forgets to call it, or that is told not to, never stops on its own |
| No tool call in the turn | Needs no extra tool, and matches a model that answers when it is done | A turn of prose in the middle of a task ends the run early with an incomplete answer |
Early termination is the real risk
The lesson asks which choice is safer against early-termination bugs. The no-tool-call stop ends the run on the first prose turn. A model that writes a plan before it acts, or that comments on an observation without a next call, stops the loop too soon. An explicit finish cannot end early by accident, because ending needs a deliberate call.
Why you need the budget anyway
Neither stop helps when the model loops. A finish tool is never called by a model that keeps retrying. A no-tool-call stop never fires when every turn has a call. The turn budget is the stop that does not depend on what the model emits. In the harness contract the budget yields to the caller, and the caller decides whether to resume.
A practical shape
- Register
finishas a tool whose argument is the final answer. - Treat a turn with no tool call as a stop with reason
no_tool_call, and return the prose as a draft answer, not a final one. - Cap turns per task class, and yield at the cap.
- Record which stop fired in the result, so that the caller and the eval can tell them apart.
Follow-ups
L2WorkingA model returns prose and a tool call in the same turn. Which stop applies?
Show expected answer
none, because the turn has a tool call, so the loop dispatches it and continues.
L3SeniorWhy does the result need the name of the stop that fired?
Show expected answer
an eval that counts a no-tool-call stop as success rewards early termination, so the reason must be visible to the scorer.
L3SeniorReasoning now travels on a separate channel. Does that change the no-tool-call stop?
Show expected answer
yes, a turn with reasoning content and no visible text or tool call must not count as an answer, so the check must read the visible output.
L4StaffHow would you measure early termination across a task set?
Show expected answer
compare the stop reason with a gate that checks acceptance commands, and count the runs that stopped with no tool call while the acceptance commands never ran.
Wrong answers
Show the wrong answers that interviewers hear
“Use only the finish tool, because it is explicit.”
A model that never calls it runs to the budget on every task that it cannot finish.
“Use only the no-tool-call stop, because the model knows when it is done.”
A model that pauses to think in prose ends the run with half the work done.
“The budget is enough on its own.”
The budget is the guard for a loop that never converges, and a run that waits for it wastes every turn after the real end.
Taught in
The agent loop lesson lists both stops and asks which is safer, and the harness loop contract turns the budget into a yield.