How small can an honest agent harness be?
toza is a minimal coding agent — one file, six tools, no guards. It exists to be the control group for azot, an ~8k-line defensive harness, and it is measured against its own thesis, not just azot's.
The bet
azot's own ablation put an eight-thousand-line Go harness level with a hundred-line bash scaffold on the same 34 tasks. toza takes the opposite bet and states it plainly:
The number
Aider Polyglot (python subset, 34 tasks) through Harbor, thinking off, code frozen and the score predicted before the run. Same model and server the azot arms were measured on (Qwen3.5-9B on llama.cpp, single slot):
| harness | lines | pass@1 |
|---|---|---|
mini-swe-agent (bash), thinking on | ~100 | 8/34 |
| toza (one Python file, zero guards), thinking off | ~600 | 8/34 |
| azot (Go, governor, sandbox, six guards), thinking on | ~8000 | 7/34 |
| azot, thinking off — two of three runs | ~8000 | 5 / 3 |
Where the argument does not reach
The token thesis is a real principle and a bad weapon against azot specifically — and toza's job is to say so:
| harness prompt cost | tokens the model sees / turn |
|---|---|
| azot — schema compiled into a grammar server-side | 554 |
toza — pays for native tool_calls JSON schema | 593 |
azot's server turns response_format into a grammar, so its model never sees a
tool schema as tokens at all; each azot tool carries a hand-written JSON example instead. toza
pays all 524 schema tokens. Measured, azot is the cheaper of the two per turn.
The differences that actually matter are elsewhere — a hand-rolled protocol under a grammar
versus native tool calls, six guards versus none, and the corrective observations azot injects
mid-loop when a guard fires — a cost that only shows up per finished task and has not been
measured yet.
What it deliberately does not have
No governor. No sandbox. No model profiles. No grammar-constrained decoding. No corrective observations, no repeat detection, no write-grounding check. If the model loops forever, it loops forever and that goes in the transcript — because whether it does is the experiment. Isolation is a property of the environment, not of this file: run it in a container when it matters.
If you build harnesses for small models
- Count the tokens, not the lines. The model's cost is the prompt it sees each turn; a rich local UI is free to it.
- A grammar can be cheaper than "minimal" JSON. Compiling the schema server-side removed it from the prompt entirely — the smaller-looking harness was not the cheaper one.
- Keep a baseline you can lose to. Every guard is worth what it buys over doing nothing; toza is the "doing nothing" you measure against.
toza.py plus
the bench adapter. Counterpart write-up:
azot — what a harness can and cannot do.
· pedjaurosevic