# Harness Engineering 101: The LLM is the brain, the harness is the body

> Source: <https://github.com/IsuruMaduranga/harness-engineering-101>
> Published: 2026-10-19 12:07:41+00:00

*The LLM is the brain. The harness is the body.*

*Version 1.0 — September 2026.*

A blog series about building AI agents from first principles, published as a book.

**📖 Read it online: [https://isuruwijesiri.com/harness-engineering-101/](https://isuruwijesiri.com/harness-engineering-101/)**

An LLM API is stateless. Every turn, you send the entire conversation as a JSON
array and get text back. A *harness* is the program that builds, maintains, and
protects that array. Everything the field calls "agents" is a set of patches to
that one loop, and each patch exists because something concrete broke. This
series develops that one idea across 16 chapters, growing a ~300-line toy agent
in plain Python as it goes.

The patterns here are developed in full in
[One Code](https://github.com/IsuruMaduranga/one-code), an open-source coding
agent built on [pi](https://github.com/earendil-works/pi).

The rendered book reads best online at the link above. If you'd rather read
the source here on GitHub, follow the chapters in order below. The full
introduction is on the [book's landing page](https://github.com/IsuruMaduranga/harness-engineering-101/blob/main/src/README.md).

Every chapter has the same shape: the failure, the minimal patch, what the patch costs.

| # | Chapter | The failure it patches | 
|---|---|---|
| 1 | [It's Just a JSON Array](https://github.com/IsuruMaduranga/harness-engineering-101/blob/main/src/01-its-just-a-json-array.md) | "How do I even talk to this thing?" | 
| 2 | [The Brain: A Next-Token Black Box](https://github.com/IsuruMaduranga/harness-engineering-101/blob/main/src/02-the-brain.md) | "Why does it behave like that?" | 
| 3 | [Tools: JSON Mapped to Functions](https://github.com/IsuruMaduranga/harness-engineering-101/blob/main/src/03-tools.md) | The brain can't touch the world | 
| 4 | [The Agent Loop](https://github.com/IsuruMaduranga/harness-engineering-101/blob/main/src/04-the-agent-loop.md) | One tool call isn't enough | 
| 5 | [Caching: Why Order Is Load-Bearing](https://github.com/IsuruMaduranga/harness-engineering-101/blob/main/src/05-caching.md) | Resending the array gets expensive | 

| # | Chapter | The failure it patches | 
|---|---|---|
| 6 | [Context Is a Budget, Not a Bag](https://github.com/IsuruMaduranga/harness-engineering-101/blob/main/src/06-context-is-a-budget.md) | The window fills up | 
| 7 | [Subagents: Fork the Context](https://github.com/IsuruMaduranga/harness-engineering-101/blob/main/src/07-subagents.md) | One array can't hold all the work | 
| 8 | [Steering the Running Loop](https://github.com/IsuruMaduranga/harness-engineering-101/blob/main/src/08-steering.md) | The brain drifts mid-task | 
| 9 | [Background Work and Time](https://github.com/IsuruMaduranga/harness-engineering-101/blob/main/src/09-background-work-and-time.md) | The loop is synchronous; the world isn't | 

| # | Chapter | The failure it patches | 
|---|---|---|
| 10 | [Every Framework Is a Wrapper Around Chapter 1](https://github.com/IsuruMaduranga/harness-engineering-101/blob/main/src/10-frameworks-are-wrappers.md) | Abstraction anxiety | 
| 11 | [Extending the Body: MCP, Skills, Deferred Loading, Hooks](https://github.com/IsuruMaduranga/harness-engineering-101/blob/main/src/11-extending-the-body.md) | Capabilities don't fit in the array | 
| 12 | [Debugging the Array](https://github.com/IsuruMaduranga/harness-engineering-101/blob/main/src/12-debugging-the-array.md) | You can't fix the prompt you can't see | 

| # | Chapter | The failure it patches | 
|---|---|---|
| 13 | [Reflexes and Guardrails](https://github.com/IsuruMaduranga/harness-engineering-101/blob/main/src/13-reflexes-and-guardrails.md) | The loop will do something dumb | 
| 14 | [Case Study: Coding Agents](https://github.com/IsuruMaduranga/harness-engineering-101/blob/main/src/14-coding-agents.md) | How specialized does the body need to be? | 
| 15 | [RAG Was a Harness Pattern All Along](https://github.com/IsuruMaduranga/harness-engineering-101/blob/main/src/15-rag.md) | A thousand names for one idea | 

- [Build Your Own](https://github.com/IsuruMaduranga/harness-engineering-101/blob/main/src/16-epilogue-build-your-own.md) — the complete toy harness, annotated

Standalone pieces. Read them when you need them.

- [A. One Harness, Many Brains](https://github.com/IsuruMaduranga/harness-engineering-101/blob/main/src/appendix-a-one-harness-many-brains.md) — model routing, prompt tiers, cost engineering
- [B. Worktrees and Isolation](https://github.com/IsuruMaduranga/harness-engineering-101/blob/main/src/appendix-b-worktrees-and-isolation.md) — giving parallel agents separate copies of the world
- [C. Modes and Plan Mode](https://github.com/IsuruMaduranga/harness-engineering-101/blob/main/src/appendix-c-modes-and-plan-mode.md) — harness-enforced operating states (coding-specific)
- [D. Retries, Rate Limits, and Streaming](https://github.com/IsuruMaduranga/harness-engineering-101/blob/main/src/appendix-d-retries-rate-limits-streaming.md) — the unglamorous plumbing, plus how streaming works on the wire

| Path | What it holds | 
|---|---|
| `src/*.md` | The chapters and appendices (the book source) | 
| `src/SUMMARY.md` | The book's table of contents | 
| `src/harness/` | The runnable toy harness — one file per stage | 
| `src/diagrams/` | Diagram generators and their generated PNGs | 
| `book.toml` | mdBook configuration | 
| `scripts/sync-to-blog.sh` | Builds the book and mounts it into the blog for serving | 

```
cargo install mdbook mdbook-mermaid   # or: brew install mdbook (+ mdbook-mermaid binary)
mdbook serve --open                    # live-reloading preview at http://localhost:3000
mdbook build                           # static site into ./book
```

`mdbook-mermaid` renders the inline mermaid diagrams; without it those blocks
show as raw code.

```
cd src/diagrams && python3 gen_all.py   # Python 3.10+, matplotlib
```

This repository is dual-licensed:

- **The prose** — every chapter and appendix (the`.md` files under`src/` ) —
is licensed under[Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International
(CC BY-NC-ND 4.0)](https://creativecommons.org/licenses/by-nc-nd/4.0/) . You
may share it with credit, but not use it commercially or publish modified
versions. Full text in[`LICENSE`](https://github.com/IsuruMaduranga/harness-engineering-101/blob/main/LICENSE) .
- **The code** — the`.py` files under`src/harness/` and`src/diagrams/` , and
code snippets reproduced from them in the chapters — is licensed under the[MIT License](https://github.com/IsuruMaduranga/harness-engineering-101/blob/main/LICENSE-CODE) . Use it freely, with attribution.

© 2026 Isuru Wijesiri.
