Harness Engineering for Coding Agent Users
A framework for harnessing coding agents: feedforward guides, feedback sensors, and computational vs inferential controls across the development lifecycle.
This piece frames 'harness' for coding agents as everything the user builds around the agent beyond the model itself. A well-designed outer harness serves two purposes: raising the odds the agent gets things right on the first try, and creating a feedback loop that catches issues before they reach a human reviewer, ultimately cutting review overhead, improving quality, and saving tokens.
The harness splits along two axes: feedforward controls (guides) steer behavior before the agent acts, while feedback controls (sensors) observe after the fact and enable self-correction. Both come in computational form (fast, deterministic tools like linters, type checkers, and tests) and inferential form (slower, probabilistic LLM-based review or judging). Concrete examples include AGENTS.md files, custom linter messages designed for LLM consumption, ArchUnit-based structural tests, and review-instruction skills.
On timing, the advice is to push checks as far left as possible: cheap, fast controls run pre-commit, costlier ones run post-integration, and slow-drift issues like dead code or coverage decay are watched by continuous background sensors. Agents themselves can also be enlisted to help build and refine this harness—drafting structural tests, deriving rules from patterns, or scaffolding custom static analysis.
Finally, the harness's regulatory targets are grouped into three categories: a 'maintainability harness' focused on code quality (currently the most mature, with the richest tooling), an 'architecture fitness harness' built around fitness functions, and a 'behaviour harness' addressing expected agent conduct. This categorization clarifies which failure modes are reliably caught by tooling and which still demand human oversight.