A coding agent with the IDE wired in. omp.sh
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.
macOS · Linux
curl -fsSL https://omp.sh/install | shAlpine / musl: the prebuilt musl binary links
libstdc++/libgccdynamically, which stock Alpine does not ship. Install them first:apk add libstdc++ libgcc.
Homebrew
brew install can1357/tap/ompBun (recommended)
bun install -g @oh-my-pi/pi-coding-agentWindows (PowerShell)
irm https://omp.sh/install.ps1 | iexPinned versions (mise)
mise use -g github:can1357/oh-my-pimacOS · Linux · Windows · bun ≥ 1.3.14
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.fishEdits 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 rategrep: fastest in the westlsp: everything your IDE knows, the agent knowsprompts: adjusted relentlessly for each model
Originally built on Mario Zechner's wonderful Pi, omp adds everything you're missing.
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.
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.
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.
Your rules sit dormant until the model goes off-script. A regex match aborts the stream mid-token, injects the rule as a system reminder, and retries from the same point. You get course-correction without paying context tax on every turn. Injections survive compaction, so the fix sticks.
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.
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.
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.
/collab puts your live session on a relay and hands back a link — and a QR. A teammate joins from another terminal with omp join, or just opens it in a browser. Share read-write to pair on the same agent, or /collab view for a read-only link anyone can watch but no one can steer. Frames are sealed client-side; the relay never sees your keys.
web_search chains twenty-three ranked providers and hands whatever URLs it finds straight to read. Arxiv PDFs, GitHub pages, Stack Overflow threads come back as structured markdown with anchors intact — the same tool surface you use on local files. Cite, follow, quote, never lose where you came from.
Other agents shell out to rg, grep, find, and bash. On many machines those binaries don't exist, and on the ones where they do, every call costs a fork-exec round-trip. omp links the real implementations into the process. ripgrep, glob, find: in-process. brush is the bash — with sessions that survive across calls, and 46 vendored coreutils (ls, sed, sort, xargs, even jq via jaq) that run as in-process builtins, zero fork/exec. The same omp binary runs on macOS, Linux, and Windows — no WSL bridge.
Get a clear verdict on whether the change ships, with every issue ranked P0 through P3 and scored for confidence. /review spawns dedicated reviewer subagents that sweep branches, single commits, or uncommitted work in parallel. You tackle what blocks release first; nothing important hides in a wall of prose.
Perfect edits, fewer tokens. The model points at anchors instead of retyping the lines it wants to change, so whitespace battles and string-not-found loops just stop happening. Edit a stale file and the anchors diverge — we reject the patch before it corrupts anything. Grok 4 Fast spends 61% fewer output tokens on the same work.
Other harnesses bolt on gh_issue_view, gh_pr_view, gh_search — each with its own parameters the agent has to learn and you have to debug. We skipped that. read already handles paths; PRs are paths. One interface to teach the model, one surface to keep correct.
The agent remembers your codebase between sessions. It writes facts mid-run with retain, captures reusable lessons with learn, pulls them back with recall, and compresses each session into a mental model that loads on the first turn of the next one. Pick the engine with memory.backend — local, Hindsight, or Mnemopi. Project-scoped by default, so what it learns about this repo stays with this repo.
Run omp inside Zed and you get the same agent you drive from the terminal — reading the buffer you're actually looking at, writing through the editor's save path, spawning shells in the editor's terminal. Destructive tools pause for a permission prompt you can answer once and forget. No bridge, no plugin, no second brain to keep in sync.
Every other agent ships an importer and expects you to convert. omp reads the eight formats already on disk in their native shape — Cursor MDC, Cline .clinerules, Codex AGENTS.md, Copilot applyTo, and the rest. No migration script, no YAML-to-TOML port, no "supported subset" footnotes. The config your team wrote last quarter still works tonight.
omp reads the working tree through git_overview, git_file_diff, and git_hunk, then splits unrelated changes into atomic commits ordered by their dependencies. Cycles are rejected before anything is written. Source files score above tests, docs, and configs, so the headline commit is the one that matters. Lock files are excluded from analysis entirely.
Sixteen internal schemes — pr://, issue://, agent://, skill://, ssh://, and the rest — resolve transparently inside every FS-shaped tool the agent already calls. read pr://1428 returns the same shape as read src/foo.ts. grep walks a diff like a directory. agent://<id>/findings.0.path pulls a field out of a subagent's output by path.
Each merge conflict becomes one URL. The agent writes @theirs, @ours, or @base to conflict://N and the file resolves cleanly. Bulk form: conflict://*.
ast_edit returns a (proposed) card with the replacement count. The change is staged. The agent writes a one-line reason to xd://resolve; the TUI turns it into an Accept card and the disk move happens — atomic, all or nothing.
Stealth's on by default, so pages see a normal user instead of a headless bot. The same API drives any Electron app in place — point it at Slack and the agent reads your DMs the way it reads the web. Or skip the sandbox entirely: the browser relay extension lets the agent adopt the Chrome tabs you already have open, without stealing focus.
computer runs persistent JavaScript against the real host: enumerate windows and displays, capture screenshots, send native input, walk the OS accessibility tree, touch the clipboard. Not the browser tool, no DOM — the same desktop you're looking at.
31 tools live in the same namespace as read and bash. Pin the active set with --tools read,edit,bash,…; rarely used discoverable tools stay behind xd:// devices. read xd:// lists them, and write xd://<tool> runs one when tools.xdev is enabled.
Files & search
read— files, dirs, archives, SQLite, PDFs, notebooks, URLs, remotessh://paths, and internal://schemes through one path.write— create or overwrite a file, archive entry, or SQLite row.edit— hashline patches with content-hash anchors and stale-anchor recovery.ast_edit— structural rewrites previewed before apply, via ast-grep.ast_grep— structural code queries over 50+ tree-sitter grammars.grep— regex over files, globs, and internal URLs.glob— glob-based path lookup; reach forgrepwhen you need content matches.
Runtime
bash— workspace shell with 46 in-process coreutils, optional PTY, and background-job dispatch.eval— persistent Python and JavaScript cells with shared prelude and tool re-entry.
Code intelligence
lsp— diagnostics, navigation, symbols, renames, code actions, raw requests.debug— drive a DAP session — breakpoints, stepping, threads, stack, variables.security_scan— plan and run native security reviews; drives Codex Security cloud scans.
Coordination
task— fan out subagents in parallel, optionally workspace-isolated.hub— message live agents, wait on or cancel background jobs, and supervise long-running processes.todo— ordered mutations over the session todo list with phase tracking.ask— structured follow-up questions for interactive runs.
Desktop & web
browser— Puppeteer tabs over headless Chromium, CDP-attached apps, or your own Chrome via the relay.computer— persistent JS against the host desktop: windows, screenshots, native input, AX tree, clipboard.web_search— one query across configured providers, returning answer plus citations.github— GitHub CLI ops — repo, PR, issues, code search, Actions run-watch.generate_image— generate or edit raster images via Gemini, GPT, or xAI Grok image models.inspect_image— vision-model analysis of a local image file.tts— text-to-speech via xAI Grok Voice — five built-in voices, WAV or MP3.
Memory & skills
checkpoint— mark conversation state for a later collapse-and-report.rewind— prune exploratory context, keep a concise report.retain— queue durable facts into the active memory bank.recall— search the memory bank for raw memories.reflect— synthesize an answer over the bank.memory_edit— update, forget, or invalidate stored memories by id.learn— capture a reusable lesson; optionally promote it into a managed skill.manage_skill— create, update, or delete an isolated managed skill.
Setting-gated, off by default: github, security_scan, generate_image, tts, checkpoint, rewind, and the memory tools (retain/recall/reflect/memory_edit, per memory.backend). inspect_image activates automatically when the active model can't see.
Three standalone, lowercase words opt a turn into specialized agent behavior:
ultrathink— request careful multi-step reasoning and the highest supported automatic thinking effort.orchestrate— run substantial independent work through parallel subagents and verify each phase.workflowz— build a deterministic multi-subagent workflow with the activetasktool.
They trigger only in prose, not inside code spans, fenced code blocks, XML/HTML sections, identifiers, or paths. See Magic keywords for exact matching rules and configuration.
Slash commands shift how a whole session runs:
/vibe— enter Vibe mode: act as a director driving persistentfast/goodworker sessions with aread-only toolset./fresh— reset the provider stream state (stale prompt cache, wedged stream) without changing the local transcript. See Session operations.
Ten roles route work by intent. default for normal turns. smol for cheap subagent fan-out. slow for deep reasoning. plan for plan mode. commit for changelogs. Plus vision, designer, task, advisor, and tiny for their namesakes. Override at launch with --smol, --slow, or --plan; cycle through the configured models for the active role with Ctrl+P. Swap the active model mid-session with the /model slash command.
Auth tags below: oauth signs in with your provider account, plan routes through a coding-plan subscription, local runs against a local server with the key optional.
Direct APIs and gateways. Mix providers per role.
Anthrop

![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)







![omp TUI reading pr://can1357/oh-my-pi/1063 and then /diff/1, showing hunk headers, added lines, and a [MODIFIED] (+12 -0) summary.](https://omp.sh/captures/pr.webp)


