MONOSPACE


AGENTSNº 005

Benchmaxx the Tools, Not the Model

Every coding agent is chasing a smarter model. omp, a security researcher's 1.14-million-line fork of Pi, bet that the harness around the model matters more, and built an edit format good enough to make cheap models land edits on the first try. It's mostly right. It also ships pointed at your foot.

omp is a terminal coding agent that made a bet most of its rivals didn’t: that the model everyone argues about is rarely what decides whether your edit actually lands. The proof is in how these agents break.

When an AI agent edits your code, what usually fails is the harness, not the model: the rigid format the model must write an edit in, the tools it reaches for, the search that either finds the function or doesn’t. The most common failure is almost comically dumb. To change one line, most agents make the model retype that line exactly so the tool can locate it. Reproduce it with a single wrong space or a smart quote and the match fails, burning a turn. On a cheap model, that happens constantly. So a reverse-engineer named Can Bölük, whose tools VTIL and NoVmp pull apart commercial software protection, took a lean, well-liked terminal agent called Pi and spent 1.14 million lines of code rebuilding its harness into a machine. The fork is now more than five times the size of the original. Part of it maintains itself.

The Premise

omp’s whole argument fits on a bumper sticker its README actually uses: benchmaxx the tools, not the model. The claim is blunt: a better edit format beats a bigger brain, so that’s where omp spends its effort.

The centerpiece is an edit format with an ugly name, hashline, and a genuinely clever idea. The model never retypes your code. Instead, every time it reads a file, omp stamps that file with a short four-character fingerprint. To make a change, the model writes something like “in the file tagged A3F2, replace line 9” and then the new line. That’s it. Two whole categories of failure vanish at once. It can’t edit the wrong copy of a duplicated line, because it named a line number. And if the file changed underneath it, the fingerprint won’t match, so omp knows the edit is stale instead of blindly applying it.

The model never retypes your code. It points at a line number and a fingerprint, and the whole “string not found” failure mode disappears.

The second thing worth knowing is who fixes omp’s bugs. A contributor called roboomp authored almost a third of the project’s commits this past June. roboomp is not a person. It is omp itself, running on its own repository: it watches the issue tracker, reproduces bugs, and opens pull requests, which a human then merges. A coding agent whose changelog is substantially written by the coding agent is either a gimmick or a sign the thing gets hammered on real work every day. The code says the latter.

The Machine

Under the hood, omp is one agent loop behind several front-ends: a terminal UI, a one-shot command, a scriptable server, the self-fixing bot, all feeding the same engine. Three choices give it its character.

It went native. The hot path (search, file-walking, the shell, syntax parsing) is roughly 53,000 lines of Rust that the JavaScript calls through a real native bridge, not a slow shim. Its grep is literally ripgrep’s own engine running in the same process, so there’s no cost to spawn a subprocess every time the agent wants to look something up. It even embeds an entire bash implementation so shell commands don’t fork out to your system.

It went wide. Fifty-eight model providers and over 3,600 models are catalogued in the box, from the big labs down to whatever you’re running on localhost. Pointing it at a custom endpoint is a few lines of config. And it reaches into the parts an IDE usually owns: real language-server diagnostics, syntax-tree-aware edits, a debugger interface, and code-execution kernels for Python and JavaScript that call back into the agent’s own tools mid-run. “Batteries included” undersells it. There are more of them here than anything this size ships with.

The Test Drive

We didn’t want to grade omp on its own benchmarks, so we built a fake model. A small mock server plays the part of the LLM, returning exact scripted tool calls, and we check what actually hits the disk. Everything below is deterministic, costs nothing in API fees, and is reproducible by anyone.

The edit format is the real thing. We threw fifteen nasty scenarios at it: five identical lines with an instruction to change only the third, emoji and Chinese characters around the edit, Windows line endings, a file mutated behind the agent’s back. All fifteen landed byte-exact. Better, when we told it to edit a line the model had never actually been shown, it refused, with a little lecture and the real contents of those lines. Run the same trick against upstream Pi and the difference is sharp but fair: Pi lands the same correct edit, but it has no idea the file drifted underneath it. omp warns you; Pi is simply blind to the question.

We built a fake model to grade the real one. Fifteen adversarial edit scenarios, all byte-exact, and it refused to edit code it had never been shown.

Speed is more nuanced than the marketing. omp’s search is genuinely fast, about 2× quicker than spawning ripgrep on a normal-sized repo, because it never pays the startup cost. But on a giant 81,000-file monorepo, plain ripgrep pulls ahead by up to 1.5×. And we found a real bug: omp’s native search silently stops reading a file after 4 MB, reports the file as fully searched, and returns nothing. On a large log or generated file, it will miss matches and never tell you. The measured version is narrower than “fastest in the west”: fastest for the everyday case, with a sharp edge on big files.

Then there’s the weight. The install is 995 MB, and about 39% of that is optional machine-learning and text-to-speech models that are turned off by default. You’re carrying a third of a gigabyte you almost certainly won’t use, and, annoyingly, there’s no supported way to trim it. Every launch also pays about a second of startup just parsing its own bundle, and a trivial task runs roughly twice as slow as it does on the leaner Pi. Fast where it counts, heavy everywhere else.

The Fine Print

Out of the box, omp runs whatever the model says, no questions asked. Its default approval mode is called yolo, and the name is accurate. We confirmed it: a fresh install will execute rm -rf, run arbitrary shell, and make network calls with zero prompt. Its own detector for catastrophic commands is switched off by that default. And file writes aren’t fenced to your project, so a misdirected edit can land a folder above where you’re working.

This matters because omp, like every agent of its kind, reads files from the project it opens as instructions, including an AGENTS.md it finds lying around. Clone a hostile repo, open omp, and a booby-trapped instruction file can tell the agent to do something ugly, which the default settings will then do without asking. None of this is malice or a hidden backdoor; we looked, and the supply chain is clean, the collaboration crypto is sound, and there’s no sneaky phone-home. The problem is that the safe posture is one config line away and isn’t the default.

Its default mode is called yolo, and the name is accurate: it runs rm -rf with no prompt. The safe setting is one line away. It just isn’t the one you start with.

One more piece of honesty. omp’s most quotable claims are the reason people try it: a cheap model’s success rate leaping from 6.7% to 68.3%, another cutting its output by 61%. We could not reproduce them. They need paid model APIs, and they were measured on an earlier version of the edit format than the one that ships today. We verified that the mechanism those numbers credit is real and works. We did not verify the numbers. Anyone who tells you otherwise is selling something.

The Playbook

Start with the edit format, because it costs nothing and it’s the part we’re surest of. Point omp at the cheapest model you can stand, leave the default hashline mode on, and hand it a real editing job: a rename that touches twenty files, or a change buried in a function full of near-identical lines. You’re testing the format here, not the model: whether it keeps a weak model out of the ditch. On our bench it did, across fifteen scenarios built to break it. An afternoon, and you’ll know whether a cheap model plus a good harness covers work you’ve been paying a frontier model to do.

Give it a weekend and wire in the parts an IDE usually owns. Install a language server so the agent reads real type errors instead of guessing, then try ast_grep for structural search and the two-step ast_edit for structural rewrites. While you’re in there, steal the trick this whole review is built on: stand up a fake model, a few dozen lines of a mock server that replays scripted tool calls, and use it to test any agent’s edit-and-run loop for free and deterministically. It is the cheapest way to learn whether a harness does what it claims before you wire it into CI, and it caught real bugs in omp that a live model would have hidden in noise.

Run one setup step before any of it, though: take omp off yolo. The default runs whatever the model says, rm -rf or a stray curl included, with no prompt. So set tools.approvalMode: write, treat a cloned repo’s AGENTS.md as untrusted input, and keep genuinely unknown code in a container. Do that once and the longer bet opens up. Point the roboomp pattern at your own issue tracker and let an agent reproduce, fix, and open the pull request while a human keeps the merge button. omp already runs that play on itself every day, in the open, and lets you read exactly how. So pick one play for the weekend, make it the edit-format test, and let the rest wait until you’ve watched a cheap model land its edits clean.

The Deck

Click the deck, then use ← → to advance

Open fullscreen ↗