π An honest benchmark
π§π· Ler em portuguΓͺs
A tool-vs-tool comparison β Polypus, OpenCode and Aider β
running the same model (deepseek-v4-flash), on the
same tasks, on the same machine. The verdict is objective (real unit
tests), and cost is measured from a neutral source (the OpenRouter API,
a dedicated key per tool) β never what each tool self-reports. Philosophy:
diagnosis first, marketing second. The original goal was to find where
Polypus breaks β and it did (see the fixed bugs below).
Methodology
| Model | deepseek-v4-flash (via OpenRouter) β the same for all three, single provider (no routing variance). |
| Verdict | node --test β real unit tests. Partial score X/N (how many subtests passed), not just pass/fail. |
| Cost | Spend delta on the OpenRouter API, one dedicated key per tool. Neutral source, immune to self-reporting. |
| Isolation | Each task runs in a disposable git workspace. Identical prompt for all three. |
| Anti-cheat | Test files are hashed before/after: if a tool edits the test to "pass", the run is disqualified. |
| Reproducible | Open scripts in bench/demo/ in the repo. Run ./run-all.ps1. |
A task is a folder with a PROMPT.md (identical instruction), the source
file(s) and *.test.mjs. Tools get only the prompt and the workspace β they
figure out the rest themselves. Tasks range from simple algorithms (leap year) to
debugging (the code ships already broken) and multi-file
(the bug is in one of two files and the tool has to find which).
Results per task
| Task | Type | Polypus | OpenCode | Aider |
|---|---|---|---|---|
| leap | leap year | 7/7 | 7/7 | 7/7 |
| rle | encode/decode | 12/12 | 12/12 | 12/12 |
| roman | edge cases | 14/14 | 14/14 | 14/14 |
| anagram | case + traps | 8/8 | 8/8 | 8/8 |
| fix-flatten | debugging | 8/8 | 8/8 | 8/8 |
| stats-bug | multi-file | 7/7 | 7/7 | 7/7 |
Correctness: a perfect tie. At this difficulty, with a strong model, all three tools solve everything. On the multi-file task all three found the right file and left the other one (the "decoy") untouched. Where they diverge is efficiency.
leapβ "is it a leap year?" by the Gregorian rules (Γ·4, except Γ·100, except Γ·400). Short algorithm.rleβ run-length encoding: compress"AAAB"β"3A1B"and decompress back.romanβ integer β Roman numeral (1β3999) with subtractive notation (4=IV, 9=IX). Full of edge cases.anagramβ given a word and candidates, find the anagrams (case-insensitive, excluding the word itself).fix-flattenβ debugging: the nested-array flatten code ships BROKEN; the tool has to find and fix the bug.stats-bugβ multi-file: the bug is in a function that imports from another file; the tool must discover which of the two holds it.
7/7β subtests passed / total (partial score, not just pass/fail).- In the token table: total tokens processed on the task (less = more efficient).
Round cost (6 tasks)
Tokens processed per task
| Task | Polypus | OpenCode | Aider |
|---|---|---|---|
| leap | 18,378 | 27,095 | 1,067 |
| rle | 26,902 | 19,662 | 2,400 |
| roman | 18,820 | 21,058 | 1,474 |
| anagram | 25,035 | 28,152 | 1,622 |
| fix-flatten | 26,958 | 36,063 | 2,500 |
| stats-bug (multi) | 63,496 | 45,118 | 1,827 |
The honest nuance behind the numbers. Aider is ~25Γ cheaper β but part
of that is because it makes you say which files to edit; it doesn't navigate, it
gets everything spoon-fed and solves in one shot. Polypus and OpenCode are real
agents: they read the repo, run the tests and iterate on their own β and they pay
for it in tokens. This is starkest on the multi-file task (stats-bug): Polypus
spent 63k tokens discovering which file held the bug; Aider spent 1.8k because it was handed
both files. These are different categories of tool β a cost comparison has to account for
that.
What the data says
β Equivalent correctness
Polypus delivers the same hit rate as established tools, on the same model. The "equivalent quality" thesis holds up in the data β it's not an opinion.
πΈ On par with the agentic competitor
Against OpenCode (the direct agentic competitor), Polypus costs the same or less β the prompt-caching advantage shows up once the measurement is honest.
π§ Correct multi-file navigation
On the task with a scattered bug, Polypus found the right file and never touched the decoy β autonomous navigation the one-shot approach can't do without human help.
π― A clear improvement target
Polypus's weak flank is token efficiency, especially multi-file. It's a concrete, measurable gap β a roadmap item, not an excuse.
The benchmark found 4 real bugs β and we fixed them
The value of an honest benchmark isn't the pretty chart β it's what it breaks. In the first rounds Polypus failed, and each failure became a fix:
- Tool-mode fallback β OpenRouter routing sometimes stopped emitting native tool calls and the agent returned prose instead of editing. β emulated mode (immune) + issue opened
- CDATA leak β the emulated-mode parser wrote
<![CDATA[β¦]]>into the file, breaking the code. β fixed + regression test - Finish with a red test β the agent ran the test, it failed, and it declared "done" anyway. β finish-gate rejects finish after a failed command
- Broken cost attribution β discovered Aider ignored the dedicated key (used an internal OAuth key), invalidating its cost measurement. β key forced via flag, neutral measurement restored
Methodological honesty
This is a small, transparent benchmark, not a definitive leaderboard. Limits we took on purpose: (1) one model this round; (2) 6 self-contained tasks β enough for diagnosis, not for a universal ranking; (3) Aider is handed the files explicitly, which makes its cost cheap in exchange for requiring a human in the loop; (4) tasks at this difficulty don't separate the tools on correctness β for that, the next step is a weaker model or larger tasks. Everything is reproducible: the scripts, the tasks and the criteria are in the repo.
Want to reproduce it? cd bench/demo and ./run-all.ps1. Each tool
uses its own OpenRouter key; the scoreboard lands in runs/results.csv and the
neutral cost in ./show-costs.ps1. Open source:
github.com/GaberRB/polypus.