What a harness is, drawn
Model, harness, interface, tools, MCP and agent: six words people mix up, sorted with one kitchen. Theo's explainer, drawn.
Meer Habib
Senior Mobile Engineer · Chittagong
"Harness" is the word everyone in AI uses and almost nobody defines. Theo got tired of explaining it and wrote a whole article on it. It's the clearest one I've read. This is that article retold, sketched the way he sketches, with one kitchen carried all the way through so every word has a place.
The cast
Six words, one kitchen. Keep this picture in mind; everything below is just a closer look at one card.
People use interfaces
You never write code to open a file or send an email. You click a button, press a shortcut or type a command, and the code behind it runs. You see the interface, not the code. Chrome, the Claude app and a terminal are all interfaces.
Models use harnesses
A language model can do one thing: write text. It can't click anything. So we agree on a text format that means "run this", and the model learns to write it. But a line like <read_file name="README.md"> is still just text. Typed into nothing, it does nothing.
Something has to read the reply, notice that format, run the right code and hand the answer back. That something is the harness. It's five pieces:
That's it. A list of tools, a way to call them in text, a parser, the tools themselves, and a way back. Run it in a loop and the model can work for hours. I go deeper on the loop in how agentic systems work.
Claude Code is two things
When you type claude in a terminal, or open the Code tab in the desktop app, you're looking at an interface. Neither of those is the harness. Underneath, both run on the Claude Agent SDK. Codex works the same way: the app talks to the Codex App Server, which ships inside the CLI.
The confusion is fair, because both products bake their harness into the app. But the harness is a separate part, and other apps reuse it.
Who owns the tools
No kitchen has every tool a chef will ever want, and a good harness knows that. It ships with the important ones (reading and editing files, a shell, search) and lets you bring the rest: a TypeScript checker, computer control, your own.
How much comes in the box varies a lot. Claude Code and Codex include plenty. Pi includes very little on purpose.
The part that clears things up: neither you nor the model can see the tools directly. The harness shows them to the model as descriptions and to you as buttons and logs. If the harness doesn't expose a tool, as far as everyone is concerned, it doesn't exist.
Tools and MCP
MCP, the Model Context Protocol, is a standard way for a harness to reach things outside itself. The difference with a tool is where the code lives. A tool runs code here, like a Chrome extension you install. An MCP server runs code somewhere else, like a website: nothing to install, you just need the URL.
The most common reason to use MCP is data. Want the model to read your email or your analytics? That data lives on someone else's server, so an MCP server is the natural plug. I compare MCP with plain CLIs in MCP and CLIs.
In the kitchen, an MCP server is a cookbook. It describes how to make something, but it isn't the pans or the stove. Hand a cookbook to a kitchen and nothing about how the kitchen works changes. The chef can use it or ignore it.
The restaurant
Theo's own app, T3 Code, shows why this matters. It lets you run Claude Code's harness or Codex's harness side by side, and it adds things neither does alone, like a Claude thread starting a subagent in Codex.
It could have rebuilt those features as a plugin for every harness out there. Instead, the code stays in T3 Code, and each harness gets a small MCP server it can call. One cookbook, offered to every kitchen.
So T3 Code isn't a harness. Without one, it does nothing.
So what's an agent?
A model on its own only writes text. A harness on its own is a kitchen nobody is cooking in. Put them together and you get an agent.
That's also why there are so many "agents". Most of them are the same few models in differently stocked kitchens: other tools, other instructions, other MCP servers.
My own tools sit in the cookbook slot. Cutscene and Shelf are MCP servers: Claude Code or Codex stays the kitchen, and my tool adds the recipes for motion design and App Store screenshots. Which kitchen you cook in is your choice.
Check yourself
| Thing | What it is |
|---|---|
| Claude, GPT | Model: the chef |
| Claude Agent SDK, Codex App Server, Pi | Harness: the kitchen |
read_file, bash, edit_file | Tools: the pots and knives |
| A GitHub, Gmail or Cutscene server | MCP server: a cookbook |
claude in a terminal, the ChatGPT app | Interface: the dining room |
| Claude Code, Codex | An interface and a harness, sold together |
| T3 Code | A restaurant that brings in other kitchens |
| Model + harness | An agent |
The short version
- A model writes text. A harness turns that text into actions and feeds the results back.
- Apps like Claude Code are an interface on top of a harness. The harness is the hidden part.
- Tools run code here. MCP servers run code somewhere else and are reached by URL.
- Agent = model + harness. Change the harness and you've built a different agent.
All credit for the framing and the kitchen goes to Theo; the drawings, the cast and any mistakes are mine. If he explains something, it's usually worth reading the original, so here it is.
Next: how agentic systems actually work, the loop inside the kitchen.
Building something like this?
Booking new projects for Q4. Replies within 24h.