Everything around the model that turns it into a working system: the loop that calls it, the tools it may invoke, the state it is handed each turn, the stopping conditions, and the checks that run before its output is accepted. The model supplies reasoning; the harness decides what that reasoning is allowed to do. Two products built on the same model can behave nothing alike, and the harness is usually why.
The harness is where most of the engineering actually lives, and where most agent failures actually originate. A vague tool schema, an error that returns as success, a history that grows without bound, a validator whose result nothing branches on — none of these are model problems, and none of them get better by changing model.
The common misconception is that a stronger model compensates for a weak harness. It does the opposite: a more capable model takes more initiative, so weak constraints produce larger mistakes faster. Constraints written only into the prompt are requests. Constraints written into the harness are guarantees.