Today you turn a plain LLM into an agent: something that reads a goal, decides which tool to use, uses it, and reacts to the result. You’ll leave saying: “My agent decided which tool to use — and used it.”
Begin →Send a prompt to Claude/GPT from Python and get structured text back.
Wrap the model in a reason → act → observe loop that can call a tool.
Add a calculator and a search tool; watch the agent pick the right one.

A chatbot answers once. An agent runs a loop: it reasons about what to do, takes an action (calls a tool), observes what came back, and decides whether it’s done. This pattern is called ReAct (Reason + Act). Step through a real run: “What is the population of Tokyo times 2?”

An agent’s first job every loop is routing: given the goal, which tool (if any) helps? Read each request and pick what a well-built agent should call.
What actually makes an LLM into an “agent”?
Your agent gets asked “what’s 91423 × 20?” and answers instantly from the model with no tool call. Why is that a red flag?
An agent is a plain LLM given the power to act, observe the result, and try again. You built that loop today.
You built a ReAct agent that read a question, picked the right tool, and used it in real Python.