Feature / Published 2026-08-23

Oh My Pi, without the Pi

OMP's maintainers are rewriting their Pi fork in Rust on an orphan branch, with CPython for plugins and the upstream gone. Pi's maintainers dispute the reasons given. The tree supports both halves.

By Michael Ruescher / revised 2026-08-23 / reporting window 2026-08-08 to 2026-08-23

On 8 August 2026, an orphan branch called omp2 appeared in the repository of oh-my-pi, the fork of Pi that publishes as omp. Its first commit is "Initial commit", and GitHub's compare view reports no common ancestor with main. By 23 August it held 453 commits, every one by the project's maintainer, and a README whose first line ends "rewritten in Rust."

For six days it went unmentioned in public, as far as a sweep of X can tell. Over the nine after that, the maintainer pointed at it twice, the fork's team said in public that it was leaving its upstream, Pi's maintainers said the stated reasons were wrong, and the fork's maintainer said the two projects were never associated. Nothing has shipped. What exists is a tree, a thread, and a name that still has Pi in it.

Two projects, one basename

Pi is the coding agent from Earendil, written in TypeScript, published to npm as @earendil-works/pi-coding-agent, at 0.84.2 since 14 August. OMP began as a fork of it and outran it, publishing @oh-my-pi/pi-coding-agent under the same basename, with a language server and a live debugger wired in, and it already carries seven Rust crates under crates/pi-* as native addons. On 22 August, while this thread was running, OMP cut 18.0.0, a new major on the TypeScript line, and 18.0.3 the next day; npm latest and the Homebrew tap both carry 18.0.3. That is the channel an operator installs today. omp2 is not in it.

What was said, in order

The branch surfaced in public on 14 August, when a reader noticed the Rust and the maintainer, Can Bölük, replied: ask it to look at the omp2 branch, that was always there haha@_can1357. Three days later he compared the two trees himself: omp2 is significantly cleaner because Pi is not the limiting factor@_can1357. On 21 August he said omp2's gonna have to wait, omp blob-broker tmw@_can1357.

That evening the announcement came from Olek, whose bio reads "harness engineering @" a link to omp.sh: Pi's being completely deprecated. The Bun runtime is being ripped out in lieu of CPython@oleksoleksoleks. He gave the reasons: Pi had a lot of problems -- namely the reliance on Bun + the way it did plugins, the poor sandboxing/trust model, and how it wasn't designed for remote workspaces in mind@oleksoleksoleks. In the replies, he gave the most specific account anyone has:

It was started 2 weeks ago; and right now the goal is to get Pi and Bun out as quickly as possible -- because all of the core work has been paused, and we're racking up PRs/fixes that need to be pushed It won't be backwards compatible on the plugins/extensions side -- everything will need to be ported because TS/Bun is being replaced with CPython User-facing behavior should be as close to 1-to-1 as possible. There are 15k text lines of omp features to port, but we'll be dogfooding WASM should be able to be added on as a future backend without issue -- and you're free to push a PR once Omp2 is out
Olek @oleksoleksoleks

One operator asked the right question: Is this mainline omp? Cuz most of it was already omp@graykevinb. The next day Olek drew the line where the architecture draws it: The Python runtime is for the plugin system -- the core omp will be Rust@oleksoleksoleks.

The objections arrived on 22 August. One operator who likes the language choice did not like the cost: rust is a wise choice but breaking plugin compat is just going to alienate users@transpiracy. A Pi user who already runs the remote setup OMP said Pi was not designed for put it more sharply: saying Pi isn’t designed for X is just bad faith@ErdalToprak. Then Mario Zechner, who wrote Pi:

can we not do the "bash the others" shit? pi has no dependency on Bun what so ever. the sandboxing/trust model is what you make it, as explained everywhere in the docs, and "remote workspace" is pretty simple to do if you need it. @_can1357 let's not, okay?
Mario Zechner @badlogicgames

The maintainer's reply was one line: we're not associated sir, i'm against trust model anyway@_can1357.

The same day Armin Ronacher, who maintains Pi with Zechner, closed the other reading of the story: I don't think we're going to port Pi to Rust, because we need a runtime language for the extensibility@mitsuhiko. On whether Pi 2 stays small: Pi was never small by code. Pi is small in that it's lightweight in context usage and out of the box workflow invasiveness@mitsuhiko. And one operator who had used OMP for the shared base said he had deleted it today ahead of omp2@benvargas, and asked whether the name would still make sense.

What the tree says

The branch is real and it is what the thread says it is. At commit ccec31b6 (23 August, 08:54 UTC) the workspace manifest declares members = ["crates/*"], 48 crates, edition 2024, version 0.1.0. There is no packages/ directory; the TypeScript tree is absent, not carried. crates/py is omp-py, "Self-contained embedded CPython runtime with frozen standard-library and project modules," on pyo3. The README calls the whole thing pre-release: "expect renames and breaking changes without notice."

The branch also says why, in its own words. A PHILOSOPHY.md at the tip describes the project as having begun "as a growing pile of diffs against Pi" and being now "a ground-up Rust rewrite," and states the language rule plainly: "Rust engine; embedded free-threaded Python for extensions." It says the Python extension SDK "was frozen only after waves of subagents ported ~80 real extensions against it." That is the plugin break, documented by the people making it.

Two things in the tree are not in the thread. The workspace manifest names its authors as "Stencil Labs, Inc." and its repository as stencil-hq/omp, which is not public; the stencil-hq organisation exists, created in June, with two Rust repositories, one of them "a design language for agents." And the "blob- broker" the maintainer said would ship first does not appear by that name in the 18.0.0 release notes or in main's commit subjects, which carry an auth broker the same day. We report the delay; we do not equate the two.

One hundred and sixty-five commits landed on the branch on 22 August alone, a hundred on 14 August, the day it surfaced. It is moving. It has no tag.

Three reasons, checked

Olek gave three reasons for leaving Pi. Zechner disputed all three. A receipt settles one of them and bounds the other two.

Bun. Pi's npm package declares engines.node >=22.19.0 and its bin is a Node bundle. Bun appears in Pi only in an optional build:binary path that compiles a standalone executable, and in the helpers that path uses. OMP's own package.json declares packageManager: [email protected] and runs on it. So Zechner is right for the channel operators install, and the Bun that the rewrite is getting out from under is OMP's, not Pi's. Pi's upstream runtime is Node.

Plugins and the trust model. Pi's position, as Zechner put it, is that the trust model "is what you make it." OMP's position, as its maintainer put it, is "against trust model anyway." Those are two design stances, not a fact and an error. The fork is choosing to put the engine behind a native boundary and the extensions behind an embedded interpreter; the upstream is choosing a runtime language end to end. Neither tree proves the other wrong.

Remote workspaces. One Pi operator says he runs the core tools over ssh so the agent stays local and works against any sandbox. We have not inspected his setup. Zechner says it is "pretty simple to do if you need it." OMP's branch has envd, a project-environment daemon, and an rpc crate, and its philosophy document says the same RPC boundary "makes local, VM, remote, and headless-fleet deployments one topology." That is a difference in where the work was done, not evidence that it cannot be done upstream.

Pi itself is not going Rust. main and dev contain no .rs file at 23 August. Pi's new harness is on dev, in TypeScript, 264 commits past main at the last pin, and not in any tag; Ronacher's "we need a runtime language for the extensibility" is the reason, and the tree agrees with him.

If you run either tool

If you run OMP, nothing changes this week. 18.0.3 is the TypeScript line and it is what npm latest and the Homebrew tap deliver. Your TypeScript extensions work. The team has said, in public, that the next thing is a different program under the same name, that your extensions will not carry over, and that core work on the current line is paused while they get there. Plan the extension port or plan the exit; do not plan for neither.

If you run Pi, nothing about this thread touches your install. The dispute is about a fork's reasons for leaving, and the fork's maintainer has said the two projects are not associated. The thing to watch on your side is Pi 2 on dev, which is a harness redesign, not a language change.

The layer bet

Bitter Lesson Maxing asks which layer of a system survives the next model. Both projects answer the same way on one point: extensibility needs a runtime language, because that is where agents and people write the code that is not the harness. They differ on everything under it. OMP is betting that the engine -- renderer, shell, document layer, inference spine -- is worth rebuilding in a language "your agents can't ruin," and that the plugin contract can break once to get there. Pi's answer, as its maintainers put it, is that a runtime language is what extensibility needs and that small means context footprint, not code size; nothing they said claims the engine is the moat. Only one of those two designs has shipped.

Amdahl Maxing asks where the human attention goes. The rewrite's stated win is startup time and memory, which is latency on every session and a real serial cost for an operator who opens many. Its stated price is that every extension author re-ports, and that the current line's core work waits. One operator in this thread paid the price early and left. Another named the latency as the thing he wanted fixed. Whether the trade is good depends on which of those two people you are, and the thread has both.

The fork is leaving the upstream. The name is staying.

Projects in this feature