AI agents can now write code, browse the web, and run for hours without a human watching. Ask one to build a feature, and it might open ten files, call five tools, and make a hundred small decisions before it ever shows you a result. That’s a different animal from a chatbot answering a single question — and it breaks the old playbook for controlling AI behavior.
For a while, “prompt engineering” was the go-to answer. Write a clearer instruction, add a few examples, and the model behaves. That still works for single-turn tasks. But once an agent is operating autonomously across many steps, a clever prompt can’t do much once execution has already started. You need something that governs the agent’s entire environment — what it can access, how it checks its own work, and when it stops.
That something has a name: harness engineering. This guide explains what it is, why it emerged, the concepts and tools that make it work, and how to start building your own agent harness.
1. What Is Harness Engineering?
The term traces back to Mitchell Hashimoto, co-creator of Terraform, who described a habit he built while working with AI coding agents: every time an agent made a mistake, he’d engineer a permanent fix into its environment rather than just re-prompting it. He called this “engineering the harness.” Within weeks, both OpenAI and Anthropic published engineering posts expanding on the concept, and the term stuck.
Harness engineering is the discipline of designing the execution environment around an AI agent — the tools it can call, the information it can retrieve, the rules that constrain it, and the feedback loops that let it catch and correct its own mistakes (Martin Fowler, 2026). Fowler, whose work helped formalize the idea, describes a harness as a system of “guides” that steer an agent before it acts and “sensors” that help it self-correct after it acts. Put simply: the harness is everything around the AI agent except the model itself.
Harness engineering vs. prompt engineering. Prompt engineering optimizes a single exchange — the phrasing, structure, and examples in one instruction. Harness engineering is broader in scope and different in kind: it shapes whether an agent can operate reliably across hundreds of decisions and multiple hours without supervision. A useful analogy: if prompt engineering is telling a driver “turn right,” harness engineering is the road, the guardrails, the traffic signs, and the systems that let many vehicles navigate safely at once.
Why it emerged now. As long as agents handled short, single-turn tasks, prompting was enough. But autonomous, multi-step AI agent development exposed a gap: agents have no memory between sessions, they produce confident-sounding wrong answers, and unrestricted tool access turns small mistakes into real damage. None of that is fixable with a better prompt — it requires engineering the system the agent runs inside.
2. The Problem Harness Engineering Solves
Without a harness, an AI agent tends to work well in a demo and fail unpredictably once it hits production (NxCode, 2026). A few recurring failure patterns explain why:
- Unreliable outputs. Language models rarely say “I don’t know.” They generate plausible-sounding answers that are sometimes simply wrong, and without a verification step, that error propagates silently.
- Tool misuse. An agent with unrestricted shell or database access can delete files, corrupt data, or leak credentials if nothing bounds what it’s allowed to touch.
- Context management. As an agent’s context window fills up, it can start wrapping up tasks prematurely — not because the work is finished, but because it senses the limit approaching.
- Multi-step workflow drift. Left alone, an agent tends to copy whatever patterns already exist in a codebase, including the bad ones, which compounds architectural debt over time.
- Production reliability. Scale multiplies small errors: one agent making an occasional mistake is manageable, but ten agents running in parallel can create cascading failures that are hard to trace back to a cause.
- Debugging AI agents. Without structured logs of what an agent did and why, diagnosing a failure after the fact becomes guesswork.
Anthropic’s engineering team frames the core challenge as helping agents make consistent progress across multiple context windows — something that structured environments, progress-tracking artifacts, and clean state handoffs between sessions are built to solve.
3. Core Concepts of Harness Engineering
Every harness, simple or elaborate, is built from a small set of recurring building blocks.
Tool Orchestration
This is the definition of which tools an agent can call, how it invokes them, and what permissions each one requires — file access, shell commands, APIs, databases. A well-orchestrated tool layer is explicit about boundaries: the agent knows exactly what it can do, what it can’t, and what needs a human’s sign-off first. Example: an agent might have read access to an entire repository but write access only to a designated feature branch.
Guardrails and Safety Constraints
Guardrails are the deterministic rules that keep an agent inside safe territory: permission boundaries, output validation (linters, type checkers, test suites), architectural rules, and rate limits that stop runaway execution. Counterintuitively, tighter constraints tend to produce more reliable agents, not less — OpenAI’s Codex team found their agents performed better once they operated inside strict, linter-enforced architectural boundaries. Example: a custom linter that blocks any commit violating a one-way dependency rule between application layers.
Error Recovery and Feedback Loops
Production agents will fail — the question is whether they recover gracefully. This layer covers retry logic, self-verification before an agent commits its own work, rollback mechanisms, and loop detection for when an agent gets stuck repeating itself. The payoff can be substantial: LangChain reported that adding self-verification and loop detection to a coding agent — without touching the underlying model — lifted its Terminal-Bench 2.0 score from 52.8% to 66.5%. Example: an agent re-runs the test suite after every change and only proceeds once it passes.
Observability
You can’t improve what you can’t see. Observability means logging every tool call, tracking token usage and cost, recording decision points, and surfacing anomalies — the difference between a research prototype and a production system. Example: a dashboard showing how many attempts an agent needed to pass its tests, and where in a workflow it burned the most tokens.
Human-in-the-Loop Checkpoints
Full autonomy is rarely the right default. This concept covers where and how humans get consulted — from an explicit approval gate before a destructive command runs, to periodic review checkpoints on longer tasks. The goal isn’t micromanagement; it’s placing human judgment where a mistake would be most costly. Example: any agent action that touches production infrastructure requires an explicit approval click.
4. Harness Engineering in Practice
The clearest illustration comes from OpenAI’s Codex team, who ran a five-month internal experiment: a three-person team started from an empty repository and, without writing a single line of code themselves, used Codex to produce roughly one million lines of production code and 1,500 merged pull requests (Milvus, 2026).
Their first instinct — one giant AGENTS.md file containing every rule and convention — failed. A bloated instruction file crowded out the actual task, documentation went stale within weeks, and a flat file couldn’t be mechanically checked for accuracy. The fix was to shrink AGENTS.md down to roughly 100 lines that function as a map rather than a rulebook, pointing to a structured docs/ directory of design decisions and specs, with linters verifying that the cross-links stayed valid.
Agents.md itself has since become an open, tool-agnostic standard (Agents.md, 2026): a predictable place — separate from a human-facing README — where a project documents setup commands, testing workflows, and coding conventions for any AI agent to read. It’s now used across tens of thousands of repositories and is supported by tools including OpenAI Codex, GitHub Copilot, Cursor, and Google’s Gemini-based agents, with governance now sitting under the Linux Foundation’s Agentic AI Foundation.
Other implementations show the same pattern from different angles:
- Claude Code enforces its harness through a permission model that defaults to read-only until a user grants explicit approval, reversible file edits via automatic snapshots, and a hooks system for injecting custom scripts — like security scans — at key points in the agent’s lifecycle.
- Cursor uses version-controlled .cursor/rules files that apply persistent, file-pattern-specific instructions without repeated prompting.
- Anthropic’s own research tested a three-agent harness — a Planner, a Generator, and a separate Evaluator — against a single solo agent building a 2D game engine. The solo agent shipped something that technically ran but had broken core logic; the three-agent harness, at roughly 20x the cost, shipped a fully playable game. The separation mattered because agents are systematically bad at grading their own work — even on objective pass/fail tasks, a lone agent will often talk itself into approving flawed output.
Across all of these, harness engineering is really the practice of coordinating several moving pieces at once — prompts, tools, retrieved context, memory, safety constraints, and workflow logic — into one system that behaves predictably over long stretches of autonomous execution.
5. Building Your First Agent Harness
You don’t need a million-line codebase to benefit. A simple harness can follow this loop:
- User Request — the task enters the system, ideally with clear scope and success criteria.
- Planner — the agent breaks the request into an ordered set of steps or sub-tasks.
- Tool Selection — for each step, the agent picks from its available, permission-bounded tools.
- Tool Execution — the chosen tool actually runs (a file edit, an API call, a search).
- Validation — automated checks (tests, linters, an evaluator agent) confirm the output is correct before it’s treated as done.
- Memory Update — relevant state gets persisted so the next step, or the next session, has the right context.
- Final Response — the agent reports back, ideally with enough of a trail that a human can audit what happened.
A practical starting sequence, drawn from common practice across current guides: define the agent’s scope in writing (what it should and shouldn’t do), create a machine-readable config file such as AGENTS.md, set up a minimal write-test-fix feedback loop, add guardrails starting restrictive and loosening over time, log every tool call for observability, and decide upfront which actions require human approval.
6. Tools and Frameworks for Harness Engineering
Several agent frameworks now provide harness building blocks out of the box — state management, tool routing, memory, and checkpointing — so teams don’t have to build them from scratch (LangChain, 2026).
|
Framework |
Primary Use Case |
Strength |
Best Suited For |
|
OpenAI Agents SDK |
Handoff-based single- and multi-agent apps |
Clean, low-boilerplate handoff model; works with 100+ models despite the name |
Teams wanting a fast, opinionated start, especially on OpenAI-native stacks |
|
LangGraph |
Stateful, graph-based multi-step workflows |
Built-in checkpointing, time-travel debugging, mature human-in-the-loop support |
Regulated or complex workflows needing audit trails and durable state |
|
LangChain |
General-purpose LLM application framework |
Broad ecosystem and integrations; pairs naturally with LangGraph and LangSmith |
Teams prototyping across many model providers and data sources |
|
CrewAI |
Role-based multi-agent collaboration |
Fastest path to a working multi-agent prototype; intuitive “job description” mental model |
Teams that want a multi-agent system running in an afternoon |
|
AutoGen (now part of Microsoft Agent Framework) |
Conversational multi-agent debate via GroupChat |
Strong at agents that need to negotiate, debate, or reach consensus; human-in-the-loop pauses |
.NET/Azure teams and research-style multi-agent reasoning tasks |
|
Mastra |
TypeScript-native agent orchestration |
Modern DX for JS/TS teams; native observability tooling |
TypeScript teams who don’t want a Python-first framework |
|
Google ADK |
Hierarchical, multimodal agent systems |
Tight Gemini/Vertex AI integration; cross-framework interoperability via the A2A protocol |
Multimodal agents and GCP-native enterprise deployments |
None of these replace harness engineering — they’re scaffolding for it. The discipline is still about deciding what guardrails, feedback loops, and checkpoints your specific agent needs; the framework just reduces how much of that you build by hand.
7. Career and Skills: What Harness Engineers Do
Harness engineering is emerging as a distinct responsibility, especially at companies building agent-powered products, and it blends traditional software engineering with AI-specific skills.
Day to day, harness engineers typically: design the environments agents operate in, write and maintain configuration files like AGENTS.md, build and tune feedback loops, review agent logs to find recurring failure patterns, define architectural constraints, and decide where human checkpoints belong.
Core technical skills:
- Prompt and context engineering for writing effective agent instructions
- API and tool-interface design so agents can call functions reliably
- Distributed systems knowledge for coordinating parallel agent execution
- Observability and monitoring practices
- Error-handling and recovery patterns
- Security engineering for permission boundaries
Soft skills matter just as much. Harness engineers need to think in systems rather than single instructions, communicate clearly about risk and failure modes to non-technical stakeholders, and stay comfortable with a fast-moving, still-forming set of best practices.
Why the role is growing: OpenAI’s Codex team put it directly — a software team’s primary job is shifting from writing code to designing environments, specifying intent, and building the feedback loops that let agents do reliable work on their own. As more of the actual coding gets delegated to agents, the leverage moves to whoever designs the system the agent runs inside.
Conclusion
Harness engineering isn’t a replacement for prompt engineering — it’s what comes after it. Once an agent is making dozens or hundreds of decisions autonomously, the quality of a single instruction stops being the bottleneck. What matters is the tools it can reach, the guardrails that keep it safe, the feedback loops that catch its mistakes, and the checkpoints where a human still gets the final say.
The core idea is simple to state and hard to master: Harness engineering is about designing reliable AI systems — not just writing better prompts. As models keep improving, parts of today’s harnesses will become unnecessary overhead and get stripped away. But the discipline itself — building the scaffolding that lets autonomous agents earn our trust — is likely to define how software gets built for years to come.
References
Official Documentation
- Agents.md. AGENTS.md: A Simple, Open Format for Guiding Coding Agents. https://agents.md/
Technical Articles
- Martin Fowler (Birgitta Böckeler). Harness Engineering for Coding Agent Users. https://martinfowler.com/articles/harness-engineering.html
- Milvus. Harness Engineering: The Execution Layer AI Agents Actually Need. https://milvus.io/blog/harness-engineering-ai-agents.md
- LangChain. The Best AI Agent Frameworks in 2026. https://www.langchain.com/resources/ai-agent-frameworks
Industry Insights
- NxCode. What Is Harness Engineering? Complete Guide for AI Agent Development (2026). https://www.nxcode.io/resources/news/what-is-harness-engineering-complete-guide-2026
















