Lesson 02 established that every tool definition you hand the model becomes part of the prompt on every single call — a `name`, `description`, and `input_schema` for each tool, priced and processed whether or not that turn ever uses it. Lesson 07 showed the second cost stacking on top of the first: once a library grows past a few dozen tools, the model has to discriminate among a crowded field of similarly-shaped options, and selection accuracy degrades as the field grows. Neither cost is caused by usage. Both are caused by the size of the set sitting in the `tools` array, whether the request needs three of those tools or thirty.
Most requests to a well-stocked agent only need a handful of tools. A customer-support agent might carry sixty tools across billing, shipping, inventory, and account management, but a single ticket about a delayed shipment touches four of them at most. The other fifty-six are dead weight for that call — schema tokens the model pays for and options the model has to rule out — yet they sit in the same `tools` array as the tools that matter, indistinguishable from the model's point of view until it has read all of them.
Tool search is the structural fix for both costs at once. Instead of asking the model to hold every tool's full schema in view at all times, you give it a small always-loaded core plus a way to search for the rest on demand. The tools it hasn't asked for don't disappear — they exist as `defer_loading: true` entries the model can discover mid-conversation, load only when relevant, and never pay for otherwise.