The request is just text
That description can still sound like something was added to the model. Nothing was. It is worth seeing the actual shape of the thing, because it is more ordinary than almost anyone expects.
When the model decides to use a tool, here is roughly what it produces:
search_web(query: "population of Lisbon 2024")
That is it. Text. The model generated it exactly as it generates everything else: one token at a time, each token drawn from scores over its vocabulary, the same machine you watched in the last two modules. It had no idea it was doing anything special.
Now the other half, which is where the action lives:
watch the model's output
if it matches the pattern of a tool request:
stop generating
read the tool name and the values
actually run that tool
paste the result back into the context
let the model continue
That is an ordinary program. Nothing learned, nothing mysterious, a handful of instructions somebody typed. You could read it aloud.
Put them side by side and the trick is visible. The model writes a sentence that looks like a command. A plain program takes that sentence seriously. The model never presses anything, never reaches out, never leaves its own text.
There is one honest complication, which is that models are trained to produce these requests in a reliable format, so the pattern matching works. Fine. That is training the model to write in a particular style. It is not giving it hands.
The gap between a model that talks and a model that acts turns out to be a piece of software watching for a pattern. That is all agents are, underneath. Everything ahead in this module is that loop, run repeatedly, with more tools attached.