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.<system>.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
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: a single eval session with [1/2] pandas describe (Python) printing a real DataFrame.describe() table, followed by [2/2] top scorer (JavaScript) running a reduce. Footer: 'Both kernels ran in one session.'](https://omp.sh/captures/eval.webp)
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.

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.

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, a concern, or a hard blocker. It runs on its own context and its own model, so it catches what the doer rushed past. The main agent sees the note and course-corrects, or tells you why it won't.
