Connecting an LLM API Doesn't Make an AI Agent
Many developers mistake a basic LLM integration for an agent and then hit a wall when the system can't touch their codebase. Recognizing the Harness as a distinct architectural layer clarifies what needs to be built next — tool execution, environment access, and a feedback loop — before an assistant can actually perform work.
A program that pipes user input to an LLM API and prints the response is a chatbot, not an agent. It can reason about a bug fix but cannot open `login.ts`, edit code, or run a test suite. The gap is between knowing what to do and being able to do it.
A real AI agent adds a Harness — a control system that receives tool-call requests from the model and executes them against the filesystem, shell, or editor. The model decides the next action; the Harness performs it. This turns a question-answer loop into an observe-act-check cycle.
Building the minimal chat pipeline first is still the right foundation. Tools, agent loops, memory, and planning modes all grow from that single user-input-to-model-output link.
The distinction between a chatbot and an agent is not about intelligence but about whether the system can affect its environment. A model that perfectly diagnoses a bug is still just a chatbot if it cannot touch the code.
Calling the control layer a Harness rather than a framework or runtime emphasizes its role as a constraint and execution boundary, not just a tool library. This framing makes it clearer why agent behavior needs to be managed, not just enabled.