Your AI agent re-sends every tool's JSON schema on every single turn. A surprising chunk of that — often ~20% — is non-semantic cruft: tokens that carry zero tool-selection signal, billed on every request.
I found this measuring the per-turn token cost of 13 real agents (full study). Here's where the waste hides, and the one-liner to remove it.
Where the cruft comes from
When you generate tool schemas from code, the converter quietly adds fields the model doesn't need:
Pydantic adds a "title" to every field via model_json_schema().







