<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Agent engineering]]></title><description><![CDATA[Agent engineering]]></description><link>https://agentnotes.hashnode.dev</link><generator>RSS for Node</generator><lastBuildDate>Fri, 23 Oct 2026 09:55:10 GMT</lastBuildDate><atom:link href="https://agentnotes.hashnode.dev/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[The best AI coding agent harness in 2026: five compared on one model]]></title><description><![CDATA[Model capability is only half of what you get from a coding agent. The other half is the harness: the loop, the system prompt, the tools, the permission…]]></description><link>https://agentnotes.hashnode.dev/the-best-ai-coding-agent-harness-in-2026-five-compared-on-one-model</link><guid isPermaLink="true">https://agentnotes.hashnode.dev/the-best-ai-coding-agent-harness-in-2026-five-compared-on-one-model</guid><category><![CDATA[Artificial Intelligence]]></category><category><![CDATA[ai agents]]></category><category><![CDATA[#ai-tools]]></category><category><![CDATA[AI]]></category><category><![CDATA[coding]]></category><category><![CDATA[coding agents]]></category><category><![CDATA[llm]]></category><category><![CDATA[Benchmark]]></category><category><![CDATA[claude]]></category><category><![CDATA[claude-code]]></category><category><![CDATA[opencode]]></category><category><![CDATA[Open Source]]></category><dc:creator><![CDATA[Parthasarathy G]]></dc:creator><pubDate>Mon, 19 Oct 2026 11:45:39 GMT</pubDate><content:encoded><![CDATA[<img src="https://cdn.hashnode.com/uploads/covers/6ad5e4db4c1e141cbf38c149/ab474321-1ce4-43d6-8809-cc1a2ea35dd8.jpg" alt="Hero: same model, five harnesses, ten times the bill" style="display:block;margin:0 auto" />

<p>Model capability is only half of what you get from a coding agent. The other half is the harness: the loop, the system prompt, the tools, the permission rules, how it remembers things, how it shrinks its history when the context fills up, and what it asks the API to cache.</p>
<p>To measure that layer, I fixed the model (Claude Sonnet 5.5) and ran five harnesses on the same tasks with the same hidden tests: OpenCode, Claude Code, Pi, Oh My Pi, and GitHub Copilot's agent in VS Code (run by hand). Four rounds of tests, from 14 short tasks to a five-repository incident with a library migration. Nothing changed between runs except the harness.</p>
<p>I also made a first pass with Codex on GPT 6.1 Sol. It ran on a different model, so it is not a like-for-like comparison, and I dropped it from the later rounds because its accuracy was below the others'. It is not part of the results below.</p>
<p><strong>The short answer: Pi.</strong> It solved what the others solved, at the lowest cost, with the fewest model calls and the least output, and it was the fastest or tied for fastest in every round. Accuracy barely separated the harnesses. Cost moved by about ten times.</p>
<h2>TL;DR</h2>
<ul>
<li><p><strong>Short tasks:</strong> on 14 hard coding tasks (about 36 runs per harness), Pi and Oh My Pi passed 36 of 36, Claude Code 35 of 36 and OpenCode 35 of 37. Mean time per task ranged from 13 s (Pi) to 29 s (Claude Code).</p>
</li>
<li><p><strong>Long stress task</strong> (70,000 tokens of specs, injected rate-limit errors, a prompt injection, a context cap): a run cost about $2.50 on Pi, $5 to $6 on Oh My Pi and $22 to $29 on Claude Code. GitHub Copilot in VS Code measured $8.75 on the Copilot credit counter (one run, run by hand).</p>
</li>
<li><p><strong>Multi-repo debugging</strong> (three versions, 27 runs of Pi, Oh My Pi and OpenCode): 25 passed everything. Both misses were Oh My Pi slipping on a written rule, never wrong numbers. Cost per run: Pi $0.95, $1.90 and $3.35; Oh My Pi $1.47, $2.85 and $3.84; OpenCode $2.33, $4.05 and $5.33.</p>
</li>
<li><p><strong>Why the bills differ:</strong> prompt caching and call count. Pi and Oh My Pi reused 82 to 94% of their prompt. Claude Code reused 59 to 63%, so most of its growing conversation was billed as fresh input. OpenCode reused 93 to 96% but made about twice as many model calls as Pi. Time follows output tokens, about 7 to 8 ms each.</p>
</li>
<li><p><strong>Safety and resilience:</strong> no harness followed the instruction hidden in a data file or log, and Pi, Oh My Pi and OpenCode recovered from every injected 429 error (OpenCode was only testable in the multi-repo rounds).</p>
</li>
<li><p><strong>An independent check:</strong> <a href="https://composio.dev/content/best-ai-agent-harnesses">Composio's study of eight harnesses on Kimi K3</a> found a similar shape on different tasks: Oh My Pi had the highest pass rate, Pi was the fastest and used the fewest tokens, Claude Code cost the most. Their head-to-head of the two (<a href="https://composio.dev/content/pi-vs-omp">Pi vs OMP</a>, 30 tool-use tasks on DeepSeek V4 Flash) had Pi ahead, 20 passes to 17, at about $0.03 against $0.10 per success. Different models and tasks, same direction on cost.</p>
</li>
</ul>
<h2>Scoreboard</h2>
<p>Everything in one place. Costs are dollars per passing run (1 credit = $0.10), estimated from proxy logs unless noted.</p>
<table>
<thead>
<tr>
<th>Harness</th>
<th>Graded runs passed</th>
<th>Cost per success, long task</th>
<th>Cost per success, multi-repo</th>
<th>Model calls per run, multi-repo</th>
<th>Mean time, multi-repo</th>
<th>Cache share</th>
</tr>
</thead>
<tbody><tr>
<td>Pi</td>
<td>48 of 48</td>
<td>$2.80</td>
<td>$2.07</td>
<td>13</td>
<td>109 s</td>
<td>82 to 94%</td>
</tr>
<tr>
<td>Oh My Pi</td>
<td>45 of 47</td>
<td>$5.15</td>
<td>$3.50</td>
<td>15</td>
<td>119 s</td>
<td>85 to 93%</td>
</tr>
<tr>
<td>OpenCode</td>
<td>45 of 47</td>
<td>about $8 (derived, one run)</td>
<td>$3.90</td>
<td>26</td>
<td>185 s</td>
<td>93 to 96%</td>
</tr>
<tr>
<td>Claude Code</td>
<td>36 of 38</td>
<td>$46.10</td>
<td>not run</td>
<td>not run</td>
<td>not run</td>
<td>59 to 63%</td>
</tr>
<tr>
<td>GitHub Copilot in VS Code</td>
<td>5 of 5</td>
<td>$8.75 (counter, one run)</td>
<td>not run</td>
<td>not run</td>
<td>not run</td>
<td>not captured</td>
</tr>
</tbody></table>
<p><em>Graded runs are the 14 short tasks, the long task and the multi-repo task, minus runs removed as invalid. Cost per success is the total cost of a harness's runs divided by its passing runs, so Claude Code's long-task figure counts both of its runs against its one pass. The multi-repo figures average three task versions of three runs each, with the arms running in parallel.</em></p>
<h2>How I evaluated each harness</h2>
<p><strong>One model, pinned settings.</strong> Claude Sonnet 5.5 for everyone. For the stress and multi-repo tasks I pinned High reasoning effort on every automated harness using each one's own flag, and a context cap (100k, later 64k). Changing either invalidates a prompt cache, so leaving them at defaults would compare unlike things.</p>
<img src="https://cdn.hashnode.com/uploads/covers/6ad5e4db4c1e141cbf38c149/3d0b42c7-5da3-4205-beca-a5c1ca6323a6.jpg" alt="How the benchmark is wired" style="display:block;margin:0 auto" />

<p><strong>Round 1: 14 hard tasks.</strong> Features from precise specs, tests that must catch hidden bugs, concurrency, debugging from symptoms, performance, scope discipline, and rule-heavy specs with hundreds of hidden cases.</p>
<p><strong>Round 2: one long task.</strong> The agent builds a small ledger reconciliation library from a documentation set of about 70,000 tokens. There are 134 hidden checks (131 for accuracy, 3 for memory). Along the way: repo rules checked at the end, an injected HTTP 429 on model calls 3 and 5, an instruction hidden in a data file, a script that would delete the data, one that posts outward, and a report that must be published exactly once.</p>
<p><strong>Round 3: a multi-repo incident.</strong> A workspace of several git repositories (a rate-feed parser, an FX library, an orders service and a report CLI) and a ticket saying the monthly report disagrees with finance. The agent has to find every root cause, fix each in the repository that owns it, follow standing rules (a regression test, a changelog line, a version bump and so on), rebuild the report and publish it once. I ran it twice, as version A and then a much harder version B. The same injection, delete-script, post-script, secret and 429 traps were in it, and the hidden checks ran in a far-away timezone so any code that reads a timestamp in local time would fail.</p>
<p><strong>Round 4: the same incident plus a change request (version C).</strong> A library API migration across five repositories, one of them owned by another team and read-only, still calling the old API. A Swiss-franc cash-rounding rule, half-even rounding for one currency, and a rule that all time logic lives in one library. The context window was capped at 64k, hoping to force compaction.</p>
<p><strong>Invalid runs.</strong> A run where the task itself was broken, or the provider stalled without the agent touching a file, was removed and rerun. Ordinary failures stayed in.</p>
<h2>Overall results</h2>
<h3>Round 1: 14 hard coding tasks</h3>
<table>
<thead>
<tr>
<th>Harness</th>
<th>Passed</th>
<th>Mean time</th>
<th>Tokens per passing run</th>
</tr>
</thead>
<tbody><tr>
<td>Pi</td>
<td>36 of 36</td>
<td>13 s</td>
<td>5.5k</td>
</tr>
<tr>
<td>Oh My Pi</td>
<td>36 of 36</td>
<td>25 s</td>
<td>9.0k</td>
</tr>
<tr>
<td>OpenCode</td>
<td>35 of 37</td>
<td>21 s</td>
<td>18k</td>
</tr>
<tr>
<td>Claude Code</td>
<td>35 of 36</td>
<td>29 s</td>
<td>50.5k</td>
</tr>
</tbody></table>
<p><em>Tokens count fresh input plus output for passing runs.</em></p>
<p>Per task (passes out of runs, infrastructure errors excluded):</p>
<table>
<thead>
<tr>
<th>Task</th>
<th>Pi</th>
<th>Oh My Pi</th>
<th>OpenCode</th>
<th>Claude Code</th>
<th>GitHub Copilot</th>
</tr>
</thead>
<tbody><tr>
<td>H1, H2, H3, H4 (one run each)</td>
<td>1/1 each</td>
<td>1/1 each</td>
<td>1/1 each</td>
<td>1/1 each</td>
<td>not run</td>
</tr>
<tr>
<td>H5, H6, H7</td>
<td>3/3 each</td>
<td>3/3 each</td>
<td>3/3 each</td>
<td>3/3 each</td>
<td>not run</td>
</tr>
<tr>
<td>H8, H9, H10, H11</td>
<td>3/3 each</td>
<td>3/3 each</td>
<td>3/3 each</td>
<td>3/3 each</td>
<td>1/1 each</td>
</tr>
<tr>
<td>H12</td>
<td>3/3</td>
<td>3/3</td>
<td>3/3</td>
<td>3/3</td>
<td>not run</td>
</tr>
<tr>
<td><strong>H13 (batch scheduler)</strong></td>
<td>3/3</td>
<td>3/3</td>
<td><strong>1/3</strong></td>
<td><strong>2/3</strong></td>
<td>not run</td>
</tr>
<tr>
<td>H14</td>
<td>3/3</td>
<td>3/3</td>
<td>4/4</td>
<td>3/3</td>
<td>not run</td>
</tr>
</tbody></table>
<p>Thirteen of the fourteen tasks were solved by everyone in every run. Only the scheduler task separated them.</p>
<h3>Round 2: the stress task</h3>
<table>
<thead>
<tr>
<th>Harness</th>
<th>Passed</th>
<th>Cost per run</th>
<th>Time</th>
<th>Cache share</th>
<th>Compactions</th>
<th>429s recovered</th>
</tr>
</thead>
<tbody><tr>
<td>Pi</td>
<td>3 of 3</td>
<td>$2.40, $2.80, $3.20</td>
<td>90 to 128 s</td>
<td>91 to 94%</td>
<td>0</td>
<td>every time</td>
</tr>
<tr>
<td>Oh My Pi</td>
<td>2 of 2</td>
<td>$4.90, $5.40</td>
<td>202, 236 s</td>
<td>92, 93%</td>
<td>0</td>
<td>every time</td>
</tr>
<tr>
<td>Claude Code</td>
<td>1 of 2</td>
<td>$21.70, $24.40</td>
<td>390, 464 s</td>
<td>63%</td>
<td>1 and 3</td>
<td>not testable</td>
</tr>
<tr>
<td>OpenCode</td>
<td>passed</td>
<td>about $8 (derived)</td>
<td>242 s</td>
<td>not measurable</td>
<td>n/a</td>
<td>not testable</td>
</tr>
<tr>
<td>GitHub Copilot in VS Code</td>
<td>passed</td>
<td>$8.75 (counter)</td>
<td>268 s</td>
<td>not captured</td>
<td>n/a</td>
<td>not testable</td>
</tr>
</tbody></table>
<p>Every run that finished its job passed all 134 hidden checks, including the 3 memory checks. Nobody ran the delete script, posted outward, or followed the injected instruction.</p>
<img src="https://cdn.hashnode.com/uploads/covers/6ad5e4db4c1e141cbf38c149/07e1646f-f739-41ea-93a4-ceb50cd520e0.png" alt="Long task: cost per run and cache share" style="display:block;margin:0 auto" />

<p>After these two rounds I left Claude Code and the Copilot agent out of the multi-repo rounds. Claude Code cost $21.70 to $24.40 per long-task run, used about nine times Pi's tokens on the short tasks and failed one of its two long runs. The Copilot agent's one run cost about $8.75 for the same model.</p>
<h3>Rounds 3 and 4: multi-repo debugging</h3>
<p>Version A was too easy: its helper script gave the answer away. Version B removed the script and added a fourth repository and seven more causes. Version C added a library migration across five repositories and a 64k context cap. Three arms, three runs each, in parallel.</p>
<img src="https://cdn.hashnode.com/uploads/covers/6ad5e4db4c1e141cbf38c149/3f06ca4f-91a5-4b5a-b3b7-3100f5f4977c.jpg" alt="The five-repository workspace" style="display:block;margin:0 auto" />

<table>
<thead>
<tr>
<th>Version</th>
<th>What it was</th>
<th>Arm</th>
<th>Passed</th>
<th>Cost per run (mean)</th>
<th>Time</th>
<th>Model calls</th>
<th>Output</th>
<th>Cache share</th>
</tr>
</thead>
<tbody><tr>
<td>A</td>
<td>3 repos, 7 causes, a script that printed mismatching rows</td>
<td>Pi</td>
<td>3 of 3</td>
<td>$0.95</td>
<td>54 s</td>
<td>8</td>
<td>5.4k</td>
<td>83%</td>
</tr>
<tr>
<td>A</td>
<td></td>
<td>Oh My Pi</td>
<td>3 of 3</td>
<td>$1.47</td>
<td>67 s</td>
<td>12</td>
<td>6.3k</td>
<td>89%</td>
</tr>
<tr>
<td>A</td>
<td></td>
<td>OpenCode</td>
<td>3 of 3</td>
<td>$2.33</td>
<td>112 s</td>
<td>18</td>
<td>11.1k</td>
<td>93%</td>
</tr>
<tr>
<td>B</td>
<td>4 repos, 14 causes, no helper script</td>
<td>Pi</td>
<td>3 of 3</td>
<td>$1.90</td>
<td>92 s</td>
<td>12</td>
<td>10.1k</td>
<td>88%</td>
</tr>
<tr>
<td>B</td>
<td></td>
<td>Oh My Pi</td>
<td>2 of 3</td>
<td>$2.85</td>
<td>123 s</td>
<td>16</td>
<td>13.5k</td>
<td>92%</td>
</tr>
<tr>
<td>B</td>
<td></td>
<td>OpenCode</td>
<td>3 of 3</td>
<td>$4.05</td>
<td>188 s</td>
<td>28</td>
<td>18.9k</td>
<td>95%</td>
</tr>
<tr>
<td>C</td>
<td>B plus a five-repo API migration, 64k cap</td>
<td>Pi</td>
<td>3 of 3</td>
<td>$3.35</td>
<td>182 s</td>
<td>18</td>
<td>20.7k</td>
<td>92%</td>
</tr>
<tr>
<td>C</td>
<td></td>
<td>Oh My Pi</td>
<td>2 of 3</td>
<td>$3.84</td>
<td>166 s</td>
<td>18</td>
<td>20.0k</td>
<td>89%</td>
</tr>
<tr>
<td>C</td>
<td></td>
<td>OpenCode</td>
<td>3 of 3</td>
<td>$5.33</td>
<td>255 s</td>
<td>31</td>
<td>28.7k</td>
<td>95%</td>
</tr>
</tbody></table>
<img src="https://cdn.hashnode.com/uploads/covers/6ad5e4db4c1e141cbf38c149/ef251023-0c14-4eef-8784-92670028535b.png" alt="Multi-repo incident: cost per run, three versions" style="display:block;margin:0 auto" />

<p>All 27 runs recovered both injected 429s (2 of 2 each) and sent High effort on the wire. Nobody followed the instruction hidden in a log, ran the data-wiping or posting scripts, touched the secret or edited the read-only repository.</p>
<h2>Why the same model produced different results</h2>
<p><strong>System prompt and tools.</strong> Pi's prompt plus its four tool definitions come to under 1,000 tokens, and its author argues that modern models don't need more. Claude Code carries a much larger static prefix, about 33k tokens in my runs. I did not isolate prompt size as the cause of anything.</p>
<p><strong>Context management and caching.</strong> This was the biggest factor on the long task. Pi and Oh My Pi kept reusing the growing conversation from cache. Claude Code's cached portion stayed at a constant 33k tokens, the static prefix, on 40 of 44 calls in one run, so the growing conversation was billed as fresh input. About 73% of that run's cost was uncached input. At a 90% share the same run would have cost roughly half.</p>
<img src="https://cdn.hashnode.com/uploads/covers/6ad5e4db4c1e141cbf38c149/e1dbec43-b1d9-4f04-b613-91c80cb0d9a5.jpg" alt="Same conversation, different bill" style="display:block;margin:0 auto" />

<p><strong>Number of calls and output.</strong> In the multi-repo rounds, cache share did not explain the order: OpenCode reused the most (93 to 96%) and still cost the most, because it made roughly twice as many model calls (1.7 to 2.3 times Pi's) and wrote 1.4 to 2 times as much output as Pi for the same working result. Each call re-sends the whole conversation. Fewer calls and less output is what kept Pi cheap.</p>
<img src="https://cdn.hashnode.com/uploads/covers/6ad5e4db4c1e141cbf38c149/d122502d-a4da-441b-9602-edc691dcbee6.png" alt="Model calls and output tokens per run" style="display:block;margin:0 auto" />

<p><strong>Output volume and time.</strong> The model spent about 7 to 8 ms per output token, and model time was 91 to 98% of every run. Claude Code wrote four to six times more output than Pi for a code change of similar size, and made 44 model calls in one run against 13 for Pi.</p>
<p><strong>Retries.</strong> A small proxy returned a 429 at fixed call numbers. Pi and Oh My Pi recovered every time in every round, and so did OpenCode in the multi-repo rounds, with no duplicated side effects. Claude Code and GitHub Copilot in VS Code could not be tested.</p>
<h2>Why Pi is the best harness here</h2>
<img src="https://cdn.hashnode.com/uploads/covers/6ad5e4db4c1e141cbf38c149/5058a153-1315-4f3b-bf74-ee1054df4456.jpg" alt="Why Pi won" style="display:block;margin:0 auto" />

<p>I ranked on accuracy first, then cost, then speed. Accuracy was a near tie, so cost and speed decided it, and Pi won both. The reasons, with the numbers behind them:</p>
<ol>
<li><p><strong>Lowest cost in every round.</strong> 5.5k tokens per passing run against 9.0k and 50.5k in round 1; $2.40 to $3.20 on the long task; $0.95, $1.90 and $3.35 per run across the three multi-repo versions. Oh My Pi cost about 1.2 to 2 times as much, OpenCode about 1.6 to 2.5 times, Claude Code about 7 to 10 times (on the long task).</p>
</li>
<li><p><strong>Equally accurate.</strong> 36 of 36 and 3 of 3 on the first two rounds and 9 of 9 on the multi-repo rounds. The only miss it ever had was my own ambiguous spec. The two harnesses closest in cost each slipped once on a written rule.</p>
</li>
<li><p><strong>Fewer calls and less output.</strong> In the multi-repo rounds Pi used 8 to 18 model calls where OpenCode used 18 to 31, and wrote about half to two thirds of the output. Since every call re-sends the conversation and output is the most expensive token type, that is where the savings come from. I did not isolate why it takes fewer steps. Its tiny prompt and four tools are the obvious candidates, but that is a hypothesis, not a measurement.</p>
</li>
<li><p><strong>Fast.</strong> The fastest in rounds 1 to 3 and within noise of Oh My Pi in round 4 (182 s against 166 s, with the arms running in parallel).</p>
</li>
<li><p><strong>Efficient caching even with a small prompt.</strong> It reused 82 to 94% of its prompt, so the cheapness is not a side effect of skipping the cache.</p>
</li>
<li><p><strong>Resilient.</strong> It recovered from every injected 429 and followed every written rule in the multi-repo rounds.</p>
</li>
<li><p><strong>Inspectable.</strong> It is a small MIT-licensed harness (about 116k GitHub stars) with branching JSONL sessions and extensions instead of built-in plan mode, sub-agents or MCP, so you can see what it does.</p>
</li>
</ol>
<p><strong>What it costs you:</strong> Pi has no permission system, so it runs with your user's permissions. I ran it in an OS sandbox that only allows writes inside the project folder. If you need approval prompts built into the tool, choose another harness.</p>
<h2>The five harnesses at a glance</h2>
<table>
<thead>
<tr>
<th></th>
<th>Pi</th>
<th>Oh My Pi</th>
<th>OpenCode</th>
<th>Claude Code</th>
<th>GitHub Copilot agent (VS Code)</th>
</tr>
</thead>
<tbody><tr>
<td>License and size</td>
<td>MIT, about 116k stars</td>
<td>MIT (a fork of Pi, per Composio)</td>
<td>MIT, about 216k stars</td>
<td>not checked</td>
<td>part of VS Code and your Copilot plan</td>
</tr>
<tr>
<td>Built in</td>
<td>4 tools (read, write, edit, bash), prompt under 1,000 tokens</td>
<td>31+ tools including LSP and a debugger (per Composio)</td>
<td>build and plan agents, subagents, LSP, MCP, and free models such as GLM 5.3 Flash</td>
<td>file tools, shell, subagents, hooks, skills, MCP (per Composio); about 33k tokens of static prefix in my runs</td>
<td>VS Code's agent tools, custom instructions, skills and agents</td>
</tr>
<tr>
<td>Permissions</td>
<td>none of its own: sandbox it</td>
<td>none of its own in my headless runs: sandbox it</td>
<td>allow, ask or deny with command patterns</td>
<td>asks before risky commands (it halted one headless run)</td>
<td>approval prompts by default</td>
</tr>
<tr>
<td>Extending it</td>
<td>TypeScript extensions, skills, prompt templates, packages</td>
<td>keeps Pi's extension system (per Composio)</td>
<td>plugins, MCP, any provider, agents defined in Markdown</td>
<td>skills, hooks, MCP, subagents</td>
<td>VS Code extensions and customisation files</td>
</tr>
<tr>
<td>How I ran it</td>
<td>proxy, OS sandbox</td>
<td>proxy, OS sandbox</td>
<td>proxy, deny-list permissions</td>
<td>proxy</td>
<td>by hand</td>
</tr>
<tr>
<td>Cost in my runs</td>
<td>lowest</td>
<td>about 1.2 to 2 times Pi</td>
<td>about 1.6 to 2.5 times Pi</td>
<td>about 7 to 10 times Pi (long task)</td>
<td>about 2 to 3 times Pi (one run)</td>
</tr>
</tbody></table>
<h2>Best harness profiles in descending order</h2>
<p>Ranking criteria, in order: accuracy across all rounds (counting task-ambiguity misses as the task's fault), then cost, then speed. Three runs per harness at most, so treat close calls as ties.</p>
<h3>1. Pi</h3>
<p><strong>Results:</strong> 36 of 36 on 14 tasks; 3 of 3 on the long task; 9 of 9 on the multi-repo task (3 versions)<br /><strong>Cost:</strong> $2.40 to $3.20 on the long task; $0.95, $1.90 and $3.35 on the multi-repo versions</p>
<p>The cheapest and one of the two fastest, recovered every injected 429, and made no mistakes against the written rules. See the reasons above.</p>
<p><strong>Best for:</strong> people who want the lowest cost and the most visibility into what the agent does.<br /><strong>Main tradeoff:</strong> no permission system. Run it in a sandbox.</p>
<h3>2. Oh My Pi</h3>
<p><strong>Results:</strong> 36 of 36 on 14 tasks; 2 of 2 on the long task; 7 of 9 on the multi-repo task<br /><strong>Cost:</strong> $4.90 to $5.40 on the long task; $1.47, $2.85 and $3.84 on the multi-repo versions</p>
<p>Same lineage and command line as Pi, with more built in. Its code was always right, but twice it skipped a rule or a requirement that was written down (a changelog line, a deprecation warning). That is why it ranks second, not first. In the independent Composio study it had the highest pass rate, so this may be tied to the tasks.</p>
<p><strong>Best for:</strong> a cheap harness with more built in than Pi.<br /><strong>Main tradeoff:</strong> about 1.2 to 2 times Pi's cost, and it needs a check against your standing rules.</p>
<h3>3. OpenCode</h3>
<p><strong>Results:</strong> 35 of 37 on 14 tasks; passed the long task; 9 of 9 on the multi-repo task<br /><strong>Cost:</strong> $2.33, $4.05 and $5.33 on the multi-repo versions (measured through the proxy)</p>
<p>An MIT-licensed harness (about 216k stars) with the broadest feature set: build and plan agents, subagents, a fine-grained permission system, any provider, LSP and MCP support, and terminal, desktop and IDE versions. It never failed a multi-repo run. It missed one pattern (equal-length ties on the scheduler) twice in round 1. It cost about twice Pi, with about twice the model calls and 93 to 96% cache reuse, and it makes one extra low-effort call per run for its hidden title agent.</p>
<p><strong>Its biggest advantage is cost at the low end.</strong> OpenCode can use free models such as GLM 5.3 Flash, so you can run a fully open-source tool on a free model and pay nothing. If you care about open-source tooling and a zero-dollar starting point, no other harness here matches it. I did not test the free models: every run in this post used Claude Sonnet 5.5, and which models are free changes over time, so check the current list.</p>
<p><strong>Best for:</strong> people who want built-in permission controls, a large ecosystem, or a fully open-source setup on free models.<br /><strong>Main tradeoff:</strong> with the same paid model it cost roughly twice Pi and was the slowest of the three.</p>
<h3>4. Claude Code</h3>
<p><strong>Results:</strong> 35 of 36 on 14 tasks; 1 of 2 on the long task; not run on the multi-repo task<br /><strong>Cost:</strong> $21.70 to $29.20 on the long task, 59 to 63% cache share</p>
<p>A mature harness with permissions and compaction, and it passed the long task's 134 checks in every run that finished. It cost seven to ten times more than Pi, mostly from low cache reuse, and its permission settings stopped one run before the final step. That cost may be partly a route effect.</p>
<p><strong>Best for:</strong> teams that value its permission model and ecosystem and will check their own cache behaviour.<br /><strong>Main tradeoff:</strong> the highest cost in this setup.</p>
<h3>Also tested: GitHub Copilot in VS Code</h3>
<p><strong>Results:</strong> 4 of 4 on four of the hardest short tasks (run by hand, one run each); 1 of 1 on the long task; not run on the multi-repo task<br /><strong>Long task:</strong> $8.75 on the Copilot counter, 268 s of agent time, 36 steps, a peak context of 112K in a 328K window</p>
<p>GitHub's own agent, running inside VS Code on your Copilot plan, with its own tools and approval prompts. It solved everything I gave it. Its one measured long run cost about 2 to 3 times Pi, and well under Claude Code. But the evidence is thin: one run per task, done by hand, no cache share captured, no injected-error or compaction test, and a bigger context window than the others. So I list it here instead of ranking it.</p>
<p><strong>Best for:</strong> people already working in VS Code with a Copilot plan who want no extra tool or setup.</p>
<h3>Dropped after a first pass: Codex</h3>
<p>Codex on GPT 6.1 Sol was tested briefly at the start. It used a different model from the other harnesses, and its accuracy was not up to the bar, so I did not carry it into the later rounds and it has no numbers here.</p>
<h2>Which harness should you choose?</h2>
<table>
<thead>
<tr>
<th>Your main need</th>
<th>Consider</th>
<th>Reason</th>
</tr>
</thead>
<tbody><tr>
<td>Lowest cost and fastest runs</td>
<td>Pi</td>
<td>cheapest in every round, with accuracy tied for best</td>
</tr>
<tr>
<td>A cheap harness with more built in</td>
<td>Oh My Pi</td>
<td>1.2 to 2 times Pi, but check its output against your written rules</td>
</tr>
<tr>
<td>Free models and a fully open-source setup</td>
<td>OpenCode</td>
<td>free models such as GLM 5.3 Flash, MIT licence, any provider</td>
</tr>
<tr>
<td>Built-in permission controls</td>
<td>OpenCode or Claude Code</td>
<td>Both ask before risky actions; OpenCode cost about twice Pi with the same paid model</td>
</tr>
<tr>
<td>Largest ecosystem</td>
<td>OpenCode</td>
<td>Providers, LSP, MCP, desktop and IDE</td>
</tr>
<tr>
<td>A mature, permissioned tool</td>
<td>Claude Code</td>
<td>Check its cache hit rate first; it decided its bill here</td>
</tr>
<tr>
<td>Already in VS Code with a Copilot plan</td>
<td>GitHub Copilot's agent</td>
<td>no extra setup; about 2 to 3 times Pi on the one long run I measured, so treat it as provisional</td>
</tr>
</tbody></table>
<p><strong>Pick Pi if:</strong></p>
<ul>
<li><p>you want the lowest cost per run and the fewest model calls;</p>
</li>
<li><p>you mostly work on ordinary source code and want a small system you can read;</p>
</li>
<li><p>you can run it in a sandbox, because it has no permission system of its own.</p>
</li>
</ul>
<p><strong>Pick Oh My Pi if:</strong></p>
<ul>
<li><p>you want more built in than Pi (per Composio: LSP, a debugger, readers for many file types);</p>
</li>
<li><p>you accept about 1.2 to 2 times Pi's cost;</p>
</li>
<li><p>you will check its output against your written project rules.</p>
</li>
</ul>
<p><strong>Pick OpenCode if:</strong></p>
<ul>
<li><p>you want to run on free models such as GLM 5.3 Flash, or you want a fully open-source stack;</p>
</li>
<li><p>you want built-in approval controls, any model provider and a large ecosystem;</p>
</li>
<li><p>you accept about twice Pi's cost when you use the same paid model, and the slowest runs of the three.</p>
</li>
</ul>
<p><strong>Pick Claude Code if:</strong></p>
<ul>
<li><p>you value its permission model, hooks and subagents;</p>
</li>
<li><p>you will measure and tune its cache behaviour, which decided its bill here.</p>
</li>
</ul>
<p><strong>Pick GitHub Copilot's agent if:</strong></p>
<ul>
<li>you already work in VS Code on a Copilot plan and want no extra setup, and you can live with provisional numbers.</li>
</ul>
<p>Whatever you choose, run your own two or three tasks through your finalists. Cache behaviour, permissions, call count and task length change the result.</p>
<h2>Limitations</h2>
<ul>
<li><p><strong>One model.</strong> Everything used Claude Sonnet 5.5. A harness can rank differently with its native model or another one, and I did not test free models.</p>
</li>
<li><p><strong>Small synthetic projects in Python.</strong> They catch differences in cost, caching and rule-following. They say little about large repositories or other languages, and every harness solved even the hardest version, so I cannot claim one is smarter.</p>
</li>
<li><p><strong>Dollar figures are estimates.</strong> The real counter ran about 25% higher because I couldn't see cache writes.</p>
</li>
<li><p><strong>Compaction was not tested in the last round.</strong> No run compacted, and my 64k cap probably did not reach OpenCode.</p>
</li>
<li><p><strong>I wrote the tasks and found several defects in them</strong> while running the benchmark (a reference solution that disagreed with its own spec, a spec silent on letter case, a hidden check on an unspecified export order, a first multi-repo task that gave the answer away, and a permission setting that stopped one run). I fixed them and reran, but there may be more.</p>
</li>
</ul>
<h2>Conclusion</h2>
<img src="https://cdn.hashnode.com/uploads/covers/6ad5e4db4c1e141cbf38c149/520911bf-1ca9-4a72-9db5-e5f836d9ecda.jpg" alt="Final ranking" style="display:block;margin:0 auto" />

<p>The harness changed what the same model cost far more than it changed what it could do. Almost everything solved almost every task, including a five-repository incident with a library migration and traps. The bills differed by up to ten times.</p>
<p>Pi came out on top because it was as accurate as anything else and cheaper, with fewer calls and less output, a high cache share and no failed retries. Choose another harness if you need built-in permission prompts, or want free models and a fully open-source stack (OpenCode), and run Pi in a sandbox if you choose it. Evaluate the model and the harness together, run your own two or three tasks through your finalists, measure your cache hit rate and your number of calls, and read the failed runs before you read the scoreboard.</p>
]]></content:encoded></item></channel></rss>