If you've used Claude Code, you've probably experienced something like this.
You ask it:
"Refactor our authentication service to use JWT refresh tokens."
A few moments later it has:
- Searched your repository
- Read multiple files
- Updated your implementation
- Run the test suite
- Fixed a failing test
- Asked permission before executing another command
It feels like the AI understands your entire project.
But here's the interesting part:
The language model doesn't know how to do any of those things.
It doesn't know how to read files.
It doesn't know how to execute terminal commands.
It doesn't know how to run tests.
It only reasons about what should happen next.
The software around it makes everything else possible.
That software is called the harness.
Think of an AI agent like a human
Imagine a human brain without a body.
It can think.
It can reason.
It can make plans.
But it can't interact with the world.
Now give it eyes to observe, hands to act, memory to remember, and muscles to execute.
The brain hasn't changed.
Its ability to interact with the world has.
AI coding agents work the same way.
The language model is the brain.
The harness is the body.
It gives the model access to tools, memory, context and the ability to perform actions.
Without a harness, an LLM is just a reasoning engine.
With a harness, it becomes an AI coding agent.
What is the harness?
The harness is the software layer surrounding the language model.
Its job is simple:
Connect the model to your development environment.
A typical coding harness provides:
Context
- Read files
- Search the codebase
- Retrieve documentation
- Select relevant context
Actions
- Edit files
- Execute terminal commands
- Run tests
- Build projects
State
- Track task progress
- Remember previous steps
- Manage conversation history
Safety
- Ask for approval
- Restrict dangerous actions
- Sandbox execution
Orchestration
- Decide which tool to use
- Handle failures
- Retry when necessary
- Decide when the task is complete
Notice something important.
None of these capabilities come from the language model itself.
The model provides the reasoning.
The harness provides the execution.
The agent loop
The biggest difference between ChatGPT and an AI coding agent isn't tool access.
It's the execution loop.
A coding agent repeatedly:
- Think
- Use a tool
- Observe the result
- Think again
For example:
- Search the repository
- Read a file
- Notice another dependency
- Read that file
- Edit both files
- Run the tests
- See a failure
- Fix the failure
- Run the tests again
This loop can happen dozens of times before you receive the final response.
Without a harness, the model only performs a single reasoning step.
With a harness, it can iteratively work towards a solution.
Why software engineers should care
Understanding the harness changes the questions you ask.
Instead of focusing only on prompts, you start thinking like a systems engineer.
Questions such as:
- How is context gathered?
- What tools should the agent have?
- When should it ask for approval?
- How should failures be handled?
- How does it know the task is complete?
These are the questions that determine whether an AI coding agent feels like a chatbot or like a teammate.
As frontier models become increasingly similar, the harness becomes the real differentiator. So, two products can use the same language model and still provide completely different developer experiences because one retrieves better context, executes tools more effectively, and orchestrates the entire workflow more intelligently.
References
Anthropic – Claude Code Documentation
https://docs.anthropic.com/en/docs/claude-codeAnthropic – Building Effective AI Agents
https://www.anthropic.com/engineering/building-effective-agentsAddy Osmani – Articles on AI-assisted software engineering
https://addyosmani.com/blog/

Top comments (0)