Agent Harness vs. Agent Runtime: The Boundary That Ends the Naming War
Mixing Harness and Runtime responsibilities is the root cause of production agent failures — Runtime crashes that lose Harness approval records, or memory migrations that orphan sandbox state. A clean boundary between the two layers turns "which agent to use" into a configuration choice rather than an architectural rewrite.
The AI agent community is split over whether the engineering layer around a model is a Harness or a Runtime. Harness inherits from automotive wiring and test fixtures — it constrains, connects, and protects without generating behavior itself. Runtime inherits from JVMs and containers — it makes code actually execute. The distinction is not academic: mixing cognitive state with execution state is the root cause of the most common production incidents, where a Runtime crash loses Harness-layer approval records and the agent either harasses users or executes unsafe actions after restart.
A three-question test cuts through any framework: does changing this module alter the agent's personality? Is its output content or a process? Does deleting it make the agent dumber or just unable to run? QwenPaw's `harnesses/` sub-package passes this test cleanly — it orchestrates lifecycle, normalizes envelopes, projects capabilities, and gates security for third-party runtimes without ever touching process management. The article maps seven dimensions of difference, three deployment patterns, and five boundary rules, then closes with a runnable Python example where `AgentRuntime` contains zero prompt text and `AgentHarness` borrows suspension from Runtime without relocating the semantic responsibility.
The naming war is not a knowledge gap but a packaging problem — modern frameworks like LangGraph ship both layers in one install, forcing developers to describe two things with one word.
The word Harness spread faster than Runtime in blog titles because it carries more "engineering craftsmanship" connotation, creating a semantic gravity that pulls all outer-layer engineering under its umbrella.
The most dangerous production failure pattern is asymmetric: Runtime crashes lose Harness approval records, but Harness memory migrations orphan Runtime sandbox state. Both failures look like "the agent forgot something" but have opposite root causes.
QwenPaw's `harnesses/` sub-package is misnamed by its own docstring as "runtime integrations" — it actually performs pure Harness duties (lifecycle orchestration, envelope normalization, capability projection, security approval) on top of third-party Runtimes, proving the terminology confusion exists even inside well-engineered projects.
The Loop layer is widely unrecognized as a distinct third category; stuffing it into Harness makes it untestable, stuffing it into Runtime entangles the scheduler in business semantics.