The same question answered with one model call and with a loop of two calls, showing that only the prompt changes.
The only new idea is a loop
A language model does one thing: read text, write text. It cannot search, click, or check. But the program around it — the harness — can agree to read one shape of text as a command, run it, and paste the result back.
the whole prompt sent to the model
0model calls for one user request
0lines of text added to the prompt
0weights changed
That is the whole trick. Nothing inside the model became able to act. The search_query(…) it wrote is just text — text that something else agreed to obey.