System + tool schemas
prepended to context
Model emits
text or tool_call JSON
Parser checks
valid schema?
Executor runs tool
real side effect
Result appended
as a new message
Every tool the model can use is described to it as a schema: a name, a natural-language description, and a typed argument list (usually JSON Schema). This schema is injected into the context on every turn, so the model is effectively choosing from a menu it re-reads each time — which is also why schema quality directly drives call accuracy.