Dumb question: Can someone help me understand whag it means to have a “harness” for agents (and why you need one)?
I’ve done some reading on the topic and am just not getting it.
The harness is the tool you use to communicate with the model.
It can be as basic as a simple conversation tool (like ChatGPT back in the day), or more advanced like GitHub Copilot, Claude Code, etc.
Advanced harnesses will give precise instructions to the model to tell him what tooling / skills / MCPs / etc are available, and will orchestrate all the actions around the model (like starting subagents, calling external tools, etc).
The harness is the software that runs the model, and, in the case of agents, implements the agentic loop, and provides capabilities external to the model (either directly or by interfacing with other systems.)
You need a harness for ANY use of a model because otherwise you just have a bunch of numbers that are the weights and no actual software that does anything with them, and you can’t have agents without a harness that provides the capabilities that define agents.
So, you have these models that you put things into (like text), and get things out of.
For many models, you can include a "tool definition" in that text input. Remember this definition is just JSON :)
Let's say you send a tool definition to the model, plus a text question.
The model responds with a request for you to call the tool. It's also JSON.
What shall you, the human, do with it? :) That's what the harness is for: In this case, it interprets that JSON request and returns a JSON response that the model can understand.
In general, a harness is anything that manipulates the model input and output for your benefit: It may recall memories and place them into your context automatically, handle tool requests, prune long conversations, injecting parts of old conversations, and so on.