Opinion

Stop Calling It a Harness

The word has swallowed the whole stack. Here is how I pull it back apart: five layers, each with one job, and why the layer everyone now calls a harness is really a workflow.

13 July 2026

“Harness” is doing far too much work at the moment. In the agentic-coding world it has quietly become the word for everything: the loop, the tools, the prompts, the memory, the orchestration, the whole lot. When one word means all of that, it stops meaning anything useful. And I think it is actively making the field harder to reason about.

This follows on from Spaghettification and Fight the Framework, where I kept bumping into the same problem: it is hard to talk about where an agent goes wrong when the vocabulary is mush. So here is how I break it down. Five layers, bottom to top. Model, harness, agent, context, workflow. Each one is a distinct thing with a distinct job, and most of the confusion I see comes from collapsing them into one. Have a poke at the stack above. Then let me walk up it.

Layer 01

Model

The model is the LLM. Just the weights. That is genuinely all it is. Tokens in, tokens out. It has no memory, no tools, no loop, and no idea what a file is. On its own it cannot do a single agentic thing. It is the engine, and an engine sitting on a bench does not go anywhere.

Everything else in the stack exists to take this one capable-but-inert thing and make it do useful work in the world.

Layer 02

Harness

The harness is the basic agentic loop. Nothing more. It manages the conversation, the running back-and-forth of the model's outputs and the tool-call results coming back, and it handles the control flow that turns a one-shot model into something that can take a step, see what happened, and take another. That loop is the whole job.

It is task-agnostic and repo-agnostic. It does not know or care whether you are fixing a bug or writing a limerick. It is the rig that drives the model, and that is the entire scope of it.

It is worth knowing where the word came from, because the origin tells you what it should mean. It was borrowed from the test harness in software engineering, a term that has been in common use since at least the 1990s, and more directly from the evaluation harness. EleutherAI's lm-evaluation-harness, created in 2020 and first released in 2021, was one of the most visible early uses of the word in LLM work. Both ancestors mean the same thing: the apparatus that drives the thing being tested. Never the material you feed into it.

The literal metaphor

A harness is the straps and the rig. It is never the cargo. So when people stretch the word to cover the whole system, including the work it operates on, they are using it backwards.

Layer 03

Agent

An agent is a model connected to a harness, plus the bits that turn a generic loop into a specific agent. That is the system prompt and the tool definitions. Same model, same harness, different prompt and different tools, and you have a completely different agent. A code reviewer and a support bot can be the same model and the same loop underneath. What makes them different is this layer.

Memory lives here too, but as a mechanism, not as content. Reading and writing memory is just another tool call. The agent has the ability to store and recall. What it actually stores is not part of the agent. That belongs to the next layer up.

Layer 04

Context

Context is the task-specific world. The repo, the tests, the build, the actual content of the memory the agent writes to. The project knowledge, the known failure modes, the architecture. This is the source of everything meaningful the model works on. Point the same agent at a different repo and it is doing different work, not because anything about the agent changed, but because the context did.

Now, “context” is at least as abused as “harness”, and the two abuses are related. People say the harness manages “context”. It does not. The harness manages the conversation, the running transcript of outputs and tool results. People call that “context” only because it is the stuff that physically lands in the window. But the meaningful material, the thing that actually decides whether the work is any good, comes from the task world. So that is the real context.

It helps to keep three words apart, because they get used interchangeably and they really should not be:

Conversation
The session transcript. A harness concern.
Context
The task-relevant material. This layer. When someone says “give the model more context”, this is what they mean: feed it the relevant material from the task world.
Context window
The mechanical bit. A token budget. That is all it is.

Three different things, sitting at three different levels of the stack, with one poor overloaded word doing the job of all three.

Layer 05 · The interesting one

Workflow

The workflow is the layer that orchestrates. One or more agents, across one or more contexts, arranged into a process. Multi-step work, verification discipline, one agent checking another, fanning out and pulling back in, the whole coordination problem. This is where the genuinely interesting engineering is happening right now. It is also the hard part, because it is the layer that is actually about your problem rather than about the model.

And here is the thing. This is the layer people now point at and call a harness. When someone says “we built a harness for this”, nine times out of ten they mean they built a workflow. They orchestrated agents across contexts to get a job done. That is a workflow. Calling it a harness takes a word that already had a smaller, precise meaning and stretches it over the most important layer in the stack.

I did wonder whether I could shuffle the names to make everyone happy. Call my harness layer the “loop”, and then free up “harness” to mean the workflow. I do not think it holds. “Loop” is a worse fit for that bottom layer than “harness” is, because the loop is only one part of what the rig does. And “loop” has its own problem: it is now getting thrown around as its own kind of thing, an agent left running to grind away at a task on its own. But that is not a separate layer either. That is just a workflow with nobody driving it. An autonomous workflow is still a workflow.

The whole point

Most of the time, when someone says harness, they mean workflow. Try the toggle under the stack at the top. That squashed-together band is the word doing five jobs at once.

So what

Name the Layer

I am not being pedantic for the sake of it. Well, maybe a little. But mostly this matters because you cannot reason about a system whose parts you cannot name. If “harness” means the loop and the agent and the context and the orchestration all at once, then “improve the harness” is not an instruction, it is a shrug. Which layer?

Because they fail in completely different ways and they get fixed in completely different ways. The harness rarely needs touching. The agent is prompts and tools. The context is where most of the real gains quietly hide. The workflow is where the hard design lives. One word for all four hides exactly the distinction you need to make to get anywhere.

Five layers. Model, harness, agent, context, workflow. The harness is the rig, never the cargo. The interesting layer is the workflow. And most of the time, when someone says harness, they mean workflow. So call it what it is.