Agentic tool use as implemented today: the LLM does not actually call anything. The system prompt defines a 'tool' role with a specific syntax (e.g. `tool` marker + JSON parameters + `commit` stop token). The model generates the invocation, the runner halts on the stop token, calls the real API, splices the response back into context, and the LLM resumes. No action is performed by the model itself. Early implementations (e.g. old LangChain) scanned token streams for specific markers like double underscores; modern unified APIs (OpenAI format) expose a clean tools-to-call list, wrapped nicely in libraries like Ruby LLM. The user doesn't see these steps — they're hidden behind UI elements like 'Looking up weather…'.