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.