Skip to content
Models and how they are called

Model, harness, agent, product

In short

The harness is the code between you and the model that builds the context, offers tools and decides what actually runs; an agent is a model and a harness working in a loop. A workflow follows a code path you wrote, an agent picks its next step at runtime, and if you can write a function you should.

Part 1.2 · 3 of 226 min read

Here’s something you may have noticed. You ask Claude a coding question in Claude.ai and get a decent answer. You ask the same thing in Claude Code and it goes and reads your files, runs the tests, fixes two things and tells you what it changed. Or you pick the same model inside GitHub Copilot and it feels different again.

Same model. So where does the difference live?

In the last article we split the model from the application. The model is the trained LLM, and the application is what someone built around it. “The application” is still a big box, though. Today I want to open it and give the parts names you’ll keep hearing: model, harness, agent, product.

The model you already know. It takes input, returns output, and remembers nothing between calls.

The harness is the word that’s new for most people, and it’s the most useful one. Different companies describe it slightly differently, so let me show you a few.

LangChain puts it most bluntly. In their post The Anatomy of an Agent Harness they write “Agent = Model + Harness”, and “if you’re not the model, you’re the harness”. A harness, for them, is every piece of code, configuration and execution logic that isn’t the model itself.

Microsoft’s Agent Framework docs say an agent harness is “the runtime scaffolding that turns a language model into an agent that can perform work”. It drives the model and tool calls, manages conversation state and context, applies approval policies, and keeps the agent moving through a multistep task.

OpenAI, in a post about Codex, lists what a capable agent needs: a way to understand the task, keep context over time, call tools, show progress, handle failures, ask a human for approval when needed, and return a useful result. “That surrounding execution system is the harness.”

Three companies, the same idea. For me it comes down to this. The harness is the code that sits between you and the model and decides what actually happens. It writes the system prompt you never see. It decides which tools the model is offered. It decides what goes into the context on each call and what gets trimmed. And when the model asks to run a command or edit a file, the harness is what runs it, or refuses to.

That last part matters. The model proposes, the harness decides what executes. A model can’t delete your files. It can only produce text that asks for it. Whether that request becomes an action is a harness decision, which is also why permissions and approvals live there and not in the prompt.

An agent is the model and the harness together, working in a loop. Anthropic’s Building effective agents describes agents as “typically just LLMs using tools based on environmental feedback in a loop”. OpenAI’s Agents SDK says an agent is “a large language model (LLM) configured with instructions, tools, and optional runtime behavior”. The wording differs. The shape is the same. Model, plus instructions and tools, plus something running the loop.

The product is the word I use for the thing you actually sign up for. Claude Code, ChatGPT, GitHub Copilot. It has a harness inside it, but it also has accounts, billing, a UI, settings, plans. This one is my own working word, so don’t expect a formal definition from any vendor. The same harness can turn up in more than one product. Anthropic’s Agent SDK gives you “the same tools, agent loop, and context management that power Claude Code” as a library. Same harness, and you build your own product around it.

A box labelled product contains a box labelled harness. Inside the harness are a loop, the tools it offers, context handling and rules and approvals, all around the model in the centre. Where does the model sit, and what is wrapped around it?

Here is the whole thing in one table.

WordPlainlyExample
Modelthe trained LLM, input in and output outthe Claude models, the GPT models
Harnesseverything around the model that decides what happensClaude Code’s loop, tools and context handling
Agentmodel + harness running in a loop toward a goalClaude Code fixing a failing test
Productwhat you sign up for and pay forClaude Code, ChatGPT, GitHub Copilot

So back to the question. Why does the same model feel different in two products?

Because most of what you experience is the harness. Two products can send the same model a different system prompt, different tools, a different slice of your history, and a different number of chances to try again. LangChain showed this in a Terminal Bench experiment. They kept the model fixed, changed only the prompts, tools and middleware, and moved their coding agent from outside the top 30 to the top 5.

There’s an honest limit here. The model and harness aren’t fully independent. LangChain’s anatomy post points out that useful harness features end up in the training of the next models, so models get tuned to the harness they were trained in. Put a model in a different harness and it can behave better or worse, and you won’t know until you test it.

One more pair of words you’ll hear a lot: workflow and agent.

Anthropic draws the line clearly. Workflows are “systems where LLMs and tools are orchestrated through predefined code paths”. Agents are “systems where LLMs dynamically direct their own processes and tool usage”. You know this difference already. A workflow is a pipeline you wrote. Step one, step two, maybe a branch. The model fills in some of the steps, but your code decides the order. An agent is control flow decided at runtime. The model looks at the result and chooses what to do next.

Which should you use? Microsoft’s Agent Framework overview has a simple rule of thumb. Use an agent when the task is open-ended or conversational and needs autonomous tool use and planning. Use a workflow when the process has well-defined steps and you need explicit control over the order. And then my favourite line in their docs: “If you can write a function to handle the task, do that instead of using an AI agent.”

Anthropic says much the same. Start with the simplest thing that works, and add complexity only when it clearly improves results. Agentic systems often trade latency and cost for better results. If your process is known and repeatable, like classifying a ticket and routing it, a workflow is cheaper, faster and much easier to debug. Reach for an agent when you genuinely can’t predict the steps.

What does all of this mean for you at the end of the day? When someone says “agent”, ask two questions. Which model? And what’s the harness, meaning what loop, what tools, what context, and who decides what runs? Most of the interesting engineering, and most of the risk, is in the second answer. Up to now you’ve been using someone else’s harness. Later in this series you’ll build your own.

If you want to see how I think about the harness and the governance layer on top of it, my post The Two Layers That Decide Whether Your Agent Survives goes deeper.

Next, we’ll follow a single message from the moment you hit Enter to the model and back.

Common questions

What is an agent harness, in simple words?

The harness is the code that sits between you and the model and decides what actually happens. It writes the system prompt, decides which tools the model is offered and what goes into the context on each call, and runs or refuses the actions the model asks for. LangChain puts it as "if you're not the model, you're the harness".

What is the difference between a model, a harness and an agent?

The model is the trained LLM: input in, output out, with no memory between calls. The harness is everything around it that decides what happens, and an agent is the model and the harness together, running in a loop toward a goal. The product, such as Claude Code or ChatGPT, is what you sign up for, with a harness inside it.

LLM model vs harness: why does the same model feel different in two tools?

Because most of what you experience is the harness. Two products can send the same model a different system prompt, different tools, a different slice of your history and a different number of chances to try again. In a LangChain experiment, changing only the prompts, tools and middleware moved a coding agent from outside the top 30 to the top 5 on Terminal Bench.

Go deeper

References