Models and Agents and Tools, oh my!

The title of this blog stems from the phrase "Lions and tigers and bears, oh my!"; a phrase that originates from the 1939 movie The Wizard of Oz.  The underlying meaning is an expression of anxiety for escalating, unknown, or overwhelming fears; or in a lesser sense, having to face daunting tasks and challenges.  In the movie, Dorthy, the Scarecrow, and the Tin Man chant it as a nervous mantra as they walk through a dark forest potentially holding dangerous creatures.  This title seems an appropriate AI [nervous] mantra...  the ambiguity, overloading, and misuse of terms, is staggering.... 

We are in and AI industry, where the architects are too far removed from their ignorance; a place where overloaded and reused terms do not detract from their meaning in the context of experience, but leave no breadcrumbs for those of us learning.  As I study AI architecture for the rewrite of this BlogEngine.net app (with AI support), I keep bumping into the same wall that we hit every day at the keyboard: nobody has handed us a map of what an App, an Agent, a Tool, and a Model actually are, or where the responsibility of one ends and the next begins.  

I stopped treating "the AI" as one black box and started recognizing it as a pipeline of distinct, collaborating parts.  Once you can see the seams, you know exactly where your prompt is going, why it's being reasoned about (or not), and where your tokens are actually being spent.  That's the map this article hopes to gives you.

The Chassis and the Engine

Before the pipeline, one distinction has to be nailed down because it trips up almost everyone: the App is not the Model.  Think of it like a car.  Microsoft Copilot and Anthropic's Claude interface are the chassis—they dictate the dashboard, the context window, the security guardrails, and how the assistant touches your files or enterprise data.  The Large Language Model (LLM) underneath is the engine—the part actually doing the thinking

Historically that pairing was fixed: Copilot ran OpenAI's GPT engines, Claude ran Anthropic's own.  That is no longer true.  Modern orchestration platforms are multi-model, meaning an administrator can plug a Claude engine [model] into the Copilot chassis, or route a request through a completely different model depending on policy.  The app you're typing into and the brain answering you are two separate, swappable things—so "Copilot" and "the model" are not synonyms, even though we say them like they are.  At 10k feet this means that selecting a Claude engine [model] into a Copilot app does not give you Claude capabilities; only the ability to use Claude's (Anthropic) engine.

Inferencing (Copilot) Versus Reasoning (Claude, ChatGPT, etc.)

For developers, the cleanest way to think about Copilot and Claude is not as competing myths, but as tools tuned for different kinds of work.  Copilot tends to shine when you want something fast, embedded, and close to the work you are already doing—write the code, finish the small edit, summarize the file, move to the next step.  Claude tends to shine when you want the assistant to slow down and think with you—analyze tradeoffs, untangle requirements, reason across a long context, or help you work through a design before you act.  Both can infer and both can reason; the practical difference is that Copilot is usually optimized for speed and integration, while Claude is usually optimized for deeper, more deliberate analysis.  Knowing that difference helps you choose the right tool before you spend tokens trying to make one behave like the other.

The Pipeline: App → Agent → Tool → Model

Once you separate the chassis from the engine, the rest of the ambiguity falls into four (plus three supporting) roles.  Here is the workflow, end to end:

User → App (UI) → Agent → Tool → Model → Agent → App (UI) → User

  • App (UI) — the product shell you actually use.  This is the concrete surface in front of you: GitHub Copilot in Visual Studio Code, ChatGPT in the browser or desktop app, Claude on the web or desktop, Microsoft 365 Copilot in Word or Excel, or a company-specific internal assistant.  The App handles sign-in, permissions, prompt assembly, conversation state, citations, loading indicators, and how the answer is rendered back to you.  It does not do the thinking itself; it packages your request, sends it into the Agent/Model stack, and turns the result into a usable human experience.
  • Agent — the decision layer.  The Agent is the part that interprets your intent and decides what needs to happen next.  It sits between your messy human request and the precise mechanics of execution.  If you say, "fix the failing test," the Agent figures out which file, which tool, which parameters, and what sequence of steps are required.  It can ask for clarification, choose the right tool, map your words into structured instructions, and decide whether to retry, reformulate, or stop.  In other words, the Agent does not usually create the answer itself; it orchestrates the work that gets the answer created.
  • Tool — the thing that actually does the work.  A Tool is a deterministic capability the Agent can call when it needs a real action performed.  Think of a search API, a file system operation, a database query, a build step, or a web request.  For example, if the Agent needs to check whether a package exists, it might call a search tool; if it needs to validate code, it might call a compiler or test runner; if it needs current weather, it might call a weather API.  The Tool does not reason about intent.  It receives a structured request, executes it, and returns raw results.  The Agent then interprets those results and decides what to do next.
  • Model — the brain behind the response.  Changing the Model does not change the App; it changes the brain the App is asking to think.  The interface, buttons, login, context window, and workflow can stay exactly the same while the underlying model changes from one provider or version to another.  That is why Copilot, ChatGPT, Claude, or a custom enterprise assistant can look identical on the surface while behaving very differently underneath.  The App is the body; the Model is the brain.  What the brain looks like, the Model is not literally a chain of if statements, but that is a useful beginner analogy because it learns patterns that behave like conditional responses.  Under the hood, it is trained on enormous amounts of text and code to predict the next token in a sequence.  During training, it learns relationships between words, ideas, syntax, and structure.  At runtime, it turns your prompt into internal numerical representations, compares them through many learned layers, and produces a probability distribution over the next token.  It does this again and again, one token at a time, until the response is complete.  So while it can feel like "if this, then that," what it really has is a very large learned pattern system that has been shaped by training rather than handwritten rules.

The following supporting roles complete the picture, they're exactly where a lot of where confusion comes fromIn addition, I touch on the important role of the cross-cutting concern of security:

  • Retrieval turns the Agent's conceptual need into a search query, ranks the results, and injects the most relevant chunks into the prompt so the Model has fresh, proprietary knowledge it wasn't trained on.
  • Memory is what actually gives you the illusion of a Model "remembering" anything—a short-term session buffer plus long-term archival, scored for relevance and pruned when stale.  The Model consumes memory chunks; it doesn't own them.
  • Security sits across all of it—access control, guardrails, PII protection, and audit logging—quietly enforcing policy at every hop.   SECURITY ISSUE The Mother of All AI Supply Chains: Critical, Systemic Vulnerability at the Core of Anthropic's MCP.  

Excerpt from the above link follows:
"Massive Scale: The vulnerability ripples through a supply chain with 150M+ downloads, 7,000+ publicly accessible servers — and up to 200,000 vulnerable instances in total."

Not every request needs the full pipeline, either.  If your input is already structured—filling out a form with a clean "Origin," "Destination," and a Search button—the App can talk directly to the Tool and skip the Agent entirely.  The Agent only earns its keep when the request is ambiguous, multi-step, or needs error recovery.  Recognizing which situation you're in is itself a way to save tokens: don't pay for cognitive overhead you don't need.

Why This Matters When Your Tokens Are Metered

Here's where the map turns into practical advice.  Under a per-use token structure, every one of those hops—App to Agent, Agent to Tool, Tool back to Agent, Agent to Model—can consume budget, especially when the Agent has to retry or reformulate because the Model stumbled.  That retry loop is the single biggest silent drain I've seen: the Agent gets a broken result, feeds it back to the Model, gets another imperfect result, and repeats.  Each pass looks like "the AI trying to help," but it's really the Agent layer churning without ever stepping back to look at the whole problem.

None of this is a character flaw in the developer watching it happen.  It's a visibility problem.  If you don't know that the retry loop is happening at the Agent layer, you can't recognize when to stop it.  A few habits that come directly out of understanding this pipeline:

  • Stop the loop early. Stop the "I can fix it" cycle; if a correction attempt produces a second broken result, that's the Agent/Model pair failing to reason through the actual structure—not a problem one more nudge will fix.  Start a fresh session instead of paying for a third and fourth attempt in the same thread.  
  • Do the Agent's planning for it.  Since the Agent is only as good as the intent it can extract, be explicit: name the dependency to mock, the framework to use, and the edge case to cover, rather than a high-level goal it has to infer and plan around.
  • Match the task to the pipeline it needs.  Some tasks are simple and structured, so they can go straight from App to Tool without much reasoning.  For example, if you ask the assistant to rename a file, convert a date, or run a search, the App can send that request directly to the Tool and get an immediate result.  Other tasks are ambiguous and need planning, so they require the full App → Agent → Tool → Model pipeline.  For example, "write unit tests for this class" or "fix the failing build" usually requires the Agent to inspect the situation, choose the right tool, interpret the results, and possibly retry or refine the plan.  In short: simple tasks should stay simple; complex tasks need the full cognitive pipeline.  How does the developer do this?  The developer does it by judging the task before asking the assistant to work.  If the task is simple and already structured, use the fastest path: ask for the action directly and let the App go to the Tool.  If the task is unclear, multi-step, or likely to fail without planning, give the Assistant enough context so the Agent can reason through it.  In practice, this means being explicit about the goal, the inputs, the expected output, and any constraints.  The more clearly you describe the work, the easier it is to avoid unnecessary token churn and keep the request on the right pipeline.
  • Remember the Model is stateless.  If a conversation feels like it's "forgetting," that's a Memory/Agent context-assembly issue, not a reason to keep re-explaining the same thing to the Model in increasingly frustrated tones.  Prevent forgetting by externalizing the context; Do not rely on the chat to remember your work from session to session.  Treat each AI session as disposable and keep a short living handoff note outside the conversation: what you are building, what has already been decided, what is blocked, what files or links matter, and what the next step is.  Before ending a session, ask the AI to summarize that context in a reusable form that you can paste into the next session.  That way, when you delete the thread, you are not losing memory—you are carrying it forward deliberately, while also clearing out the non-essential chatter that is consuming valuable context window space.

My hope is that seeing the App, the Agent, the Tool, and the Model as four distinct collaborators—each with its own job, and Retrieval, Memory, and Security supporting them—gives you back the vocabulary that got lost in the overloading.  You don't need to be an AI architect to understand it; you just need to know how to follow the breadcrumbs. 

Recommended reading - blog Ai Requires More Discipline From Us

The following Responsibility-Driven Design (RDD) XMind map helped me flush out the contents of this blog.  I used Rebecca Wirfs book Object Design guidance to create the map.

Comments are closed