oh-my-pi is a free, open source ai development platforms project written in TypeScript and released under MIT. It has 31,605 GitHub stars, 3,338 forks and 2,964 open issues, and was last pushed 7 hours ago. On this registry it ranks #26 of 61 tracked projects in AI Development Platforms, with 5 head-to-head comparisons available. It gained 332 stars over the last 3 tracked days.

What is oh-my-pi?

oh-my-pi is an MIT-licensed, terminal-based coding agent distributed as omp, built for developers who want a complete agent surface — 60+ model providers, 31 built-in tools, language-server and debug-adapter integration — that runs on their own machine instead of assembling a stack of separate tools.

What it is

oh-my-pi is a coding agent for the command line, surfaced through Rust core code of roughly 80,000 lines and installed through a shell script, Homebrew, Bun, Nix, or mise. It is a fork of Pi by Mario Zechner, and the README describes it as keeping Pi's foundation while adding what it calls the missing pieces: 60+ providers, 31 built-in tools, 14 LSP operations, and 28 DAP operations. It lives in the TypeScript and Bun ecosystem at the edges and in Rust underneath. Its topics place it among AI coding agents for Anthropic, OpenAI, and multi-provider setups, with MCP listed as a supported integration. The project's homepage is omp.sh.

The problem it solves is framed in the README as a harness problem, not a model problem: edit formats that consume a model alive, retry loops on malformed diffs, and file reads that dump contents instead of summarizing them. omp replaces the bare agent-plus-sandbox pattern — in its words, most harnesses give the agent a Python sandbox and call it done — with a harness that runs a persistent Python kernel and a Bun worker side by side, either of which can call back into the agent's own tools such as read, search, and task over a loopback bridge. It likewise replaces bolting editor awareness onto an agent after the fact, routing language-server calls such as workspace/willRenameFiles through the write path itself.

Key capabilities

  • 31 built-in tools alongside 14 LSP operations and 28 DAP operations, so editing, searching, and debugging share one tool surface.
  • Code execution with tool-calling: a persistent Python kernel and a Bun worker live in the same session, and the agent can load a CSV with tool.read from inside Python and chart it from JavaScript without leaving the cell.
  • LSP wired into every write, so a rename goes through workspace/willRenameFiles and re-exports, barrel files, and aliased imports update before the file moves.
  • read returns summarized snippets rather than full file contents, with grep handling repository search.
  • Multi-provider support across 60+ providers, with Anthropic, OpenAI, and MCP named in the project topics, and prompts adjusted per model.
  • Shell completions generated for bash, zsh, and fish from live command and flag metadata; subcommands, flags, and enum values complete statically, while --model, --smol, --slow, and --plan resolve against the bundled model catalog and --resume resolves against on-disk sessions.
  • Nix flake outputs in packages.omp, overlays.default, nixosModules.default, and homeManagerModules.default, plus pinned installs through mise.

Who uses it and how

  • Terminal-first developers on macOS, Linux, and Windows install through the shell script, the PowerShell script, the Homebrew tap can1357/tap/omp, or the Bun package @oh-my-pi/pi-coding-agent.
  • Nix and Home Manager users manage the agent declaratively, enabling programs.omp with settings such as settings.startup.quiet rather than editing config by hand.
  • Alpine and musl users run it after adding libstdc++ and libgcc, since the prebuilt musl binary links them dynamically and stock Alpine does not ship them.
  • Teams that switch between providers use one agent surface across models instead of maintaining per-model tooling, which is the outcome the README's benchmark tables and per-model prompt tuning are aimed at.
  • Contributors currently submit pull requests without a vouch, a requirement the project lifted on a trial basis after previously gating contributions.

Getting started

Install with the shell script at https://omp.sh/install, or with bun install -g @oh-my-pi/pi-coding-agent, brew install can1357/tap/omp, or nix profile install github:can1357/oh-my-pi. Windows users run the PowerShell installer at https://omp.sh/install.ps1, and pinned versions are available through mise.

How it compares

The facts name one comparable tool: Pi by Mario Zechner, the upstream project oh-my-pi forks. Where Pi provides the base agent, oh-my-pi layers on code execution with tool-calling, LSP and DAP operations, a bundled model catalog, and packaging across Homebrew, Bun, Nix, and mise.

When to use it — and when not to

There is no hosted option, so adopters install and run everything themselves, and Alpine users must add libstdc++ and libgcc before the musl binary works. The project carries 2,964 open issues against 3,309 forks, and its contribution policy is explicitly provisional, since the vouch requirement may return depending on how open pull requests go. Anyone who needs a frozen governance model, a guaranteed contribution path, or a managed service should look elsewhere; developers who want the agent surface on their own machine and are comfortable with that churn are the intended audience.

project readme (upstream, from github) — read inline

omp

A coding agent with the IDE wired in. omp.sh

npm version Changelog CI License TypeScript Rust Bun Discord

Fork of Pi by @mariozechner

The most capable agent surface that ships. Continuously tuned by real-world use — complete out of the box, open all the way down.

60+ providers · 31 built-in tools · 14 lsp ops · 28 dap ops · ~80k lines of Rust core.

[!NOTE] Pull requests are temporarily open to everyone as a trial. We previously required a vouch before accepting PRs; that requirement is lifted for now while we evaluate how open contributions go. Depending on the results, the vouch system may return.

Install

macOS · Linux

curl -fsSL https://omp.sh/install | sh

Alpine / musl: the prebuilt musl binary links libstdc++/libgcc dynamically, which stock Alpine does not ship. Install them first: apk add libstdc++ libgcc.

Homebrew

brew install can1357/tap/omp

Bun (recommended)

bun install -g @oh-my-pi/pi-coding-agent

Nix

# Run without installing
nix run github:can1357/oh-my-pi

# Or install into the active profile
nix profile install github:can1357/oh-my-pi

Flake consumers can use packages..omp, overlays.default, nixosModules.default, or homeManagerModules.default. A Home Manager configuration can install OMP and own its settings declaratively:

{
  inputs.omp.url = "github:can1357/oh-my-pi";

  # In your Home Manager module:
  imports = [ inputs.omp.homeManagerModules.default ];
  programs.omp = {
    enable = true;
    settings.startup.quiet = true;
  };
}

Windows (PowerShell)

irm https://omp.sh/install.ps1 | iex

Pinned versions (mise)

mise use -g github:can1357/oh-my-pi

macOS · Linux · Windows · bun ≥ 1.3.14

Shell completions

omp generates its own completion scripts for bash, zsh, and fish from the live command/flag metadata, so they never drift from the actual CLI. Subcommands, flags, and enum values complete statically; model names (--model, --smol, --slow, --plan) resolve against the bundled model catalog and --resume against your on-disk sessions.

# zsh — add to ~/.zshrc (or write the output into a file on your $fpath)
eval "$(omp completions zsh)"

# bash — add to ~/.bashrc
eval "$(omp completions bash)"

# fish
omp completions fish > ~/.config/fish/completions/omp.fish

Every tool, benchmaxxed.

Edits that land on the first attempt. Reads that summarize files instead of dumping their content. Searches that return instantly. Pick any model — omp will get it right.

model metric what
Grok Code Fast 1 6.7% → 68.3% Tenfold lift the moment the edit format stops eating the model alive.
Gemini 3 Flash +5 pp Over str_replace — beats Google's own best attempt at the format.
Grok 4 Fast −61% tokens Output collapses once the retry loop on bad diffs disappears.
MiniMax 2.1× Pass rate more than doubles. Same weights, same prompt.
  • read : summarized snippets · ideal defaults · selector hit rate
  • grep : fastest in the west
  • lsp : everything your IDE knows, the agent knows
  • prompts : adjusted relentlessly for each model

Read the full post ↗

The Pi you love, with batteries included.

Originally built on Mario Zechner's wonderful Pi, omp adds everything you're missing.

01 · Code execution w/ tool-calling

Most harnesses give the agent a Python sandbox and call it done. Ours runs persistent Python and a Bun worker, and either kernel can call back into the agent's own tools — read, search, task — over a loopback bridge. The agent loads a CSV with tool.read from inside Python, charts it from JavaScript, and never leaves the cell.

omp TUI running Python code and rendering a chart.

02 · LSP wired into every write

Ask for a rename and you get a rename. The call goes through workspace/willRenameFiles, so re-exports, barrel files, and aliased imports update before the file moves. Everything your IDE knows, the agent knows.

omp TUI with TypeScript and Biome language servers active.

Read the LSP config docs

03 · Drives a real debugger

A C binary segfaults: the agent attaches lldb, steps to the bad pointer, reads the frame. A Go service hangs: it attaches dlv and walks the goroutines. A Python process is wedged: debugpy, pause, inspect, evaluate. Most agents are still sprinkling print statements.

![omp TUI: a live lldb-dap session against a native binary at /tmp/omp-native/demo. Adapter=lldb-dap, Status=stopped, Frame=xorshift32, Instruction pointer 0x10000055C, Location demo.c:6:10. Debug scopes and Debug variables cards show locals (x = 57351) and the agent confirms the math: x went from 7 → 57351 (= 7 ^ (7` and asking the user to confirm.](https://omp.sh/clips/ttsr-poster.webp)

Watch the capture ↗

05 · First-class subagents

Split a job across workers and get typed results back. task fans out into isolated worktrees, each worker runs its own tool surface, and the final yield is a schema-validated object the parent reads directly. No prose to parse, no merge conflicts between siblings, no orphaned edits.

omp TUI showing task spawning two subagents ComponentsExports and RoutesExports, the constraints block requiring an IRC DM between peers, the per-subagent status cards with cost and duration, and a final Findings section listing both exports plus an honest 'IRC coordination note' about a one-sided handshake.

Watch the capture ↗

Watch the fan-out while it runs: Alt+A opens Agent Hub, where the roster shows current activity and usage for every subagent. Open one to read its live transcript, type a steering message, revive a parked worker, or kill a stuck one without aborting the parent session.

06 · A second model, watching every turn.

Pair a reviewer model to the 'advisor' role and it reads every turn the main agent takes, injecting notes inline — a quiet aside,

readme truncated — read the full docs on github

Frequently asked questions

Is oh-my-pi free to use?

oh-my-pi is open source under the MIT licence. There is no licence fee and no seat count — you can self-host it or, where the project offers one, pay a vendor for a managed version instead.

What does oh-my-pi do?

⌥ Coding agent with the IDE wired in

What is oh-my-pi written in?

oh-my-pi is primarily written in TypeScript. Its source is publicly available at https://github.com/can1357/oh-my-pi, and it has 31,605 GitHub stars.