oh-my-pi README

The project's README from github.com/can1357/oh-my-pi. As one markdown file: README.md.

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.<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 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<<13)).

Watch the capture ↗

04 · Time-traveling stream rules

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.

omp TUI: agent reading src.rs and about to write Box::leak when the request aborts (red Error: Request was aborted), an amber ⚠ Injecting rule: box-leak card injects the rule body Don't reach for Box::leak in production code paths, and the agent then course-corrects by proposing Arc<str> and asking the user to confirm.

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, 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.

omp TUI: /advisor status shows the advisor running on openai-codex/gpt-5.5; after the main agent scopes a catch to ENOENT instead of swallowing every error, an amber 'Advisor 1 note (concern)' card warns the fix no longer matches the user's literal acceptance criterion.

Watch the capture ↗

/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.

omp TUI: /collab view prints 'Collab session started!' with an omp join command, a my.omp.sh browser link, the note 'Anyone with this link can watch the session but cannot prompt the agent', and a large scannable QR code.

Watch the capture ↗

08 · Read a pdf on arxiv, why not?

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.

omp TUI: web_search returns 10 ranked Perplexity sources for inference-time compute scaling, the agent picks an arxiv paper, calls read https://arxiv.org/pdf/2604.10739v1, and summarizes the paper's headline result with real numbers.

Watch the capture ↗

09 · Unapologetically native. Even on Windows.

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 58 command-line utilities (ls, sed, sort, xargs, even jq) ported into the builtins crate and run in-process, zero fork/exec. The same omp binary runs on macOS, Linux, and Windows — no WSL bridge.

10 · Code review with priorities and a verdict

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.

11 · Hashline: edit by content hash

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.

12 · GitHub is just another filesystem

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.

13 · Memory the agent curates

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.

14 · ACP: editor-drivable agent

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.

15 · Inherits what your other tools already wrote

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.

16 · omp commit: atomic splits, validated messages

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.

17 · Read PRs. Walk skills. Pull JSON out of subagents.

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.

18 · Conflict resolution, made easy.

Each merge conflict becomes one URL. The agent writes @theirs, @ours, or @base to conflict://N and the file resolves cleanly. Bulk form: conflict://*.

omp TUI: ✓ Read src/session.ts (⚠ 1 conflict), then ✓ Write conflict://1 · 1 line with content @theirs, then a confirmation 'Resolved.'

Watch the capture ↗

19 · Preview, then accept.

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.

omp TUI: ✓ AST Edit: console.log($X) (proposed) 3 replacements · 1 file, then ✓ Accept: 3 replacements in 1 file (AST Edit), followed by 'Applied 3 replacements in src/auth.ts.'

Watch the capture ↗

20 · Drives a real browser. Or your Slack?

Eval's browser.open(...) returns a tab handle with direct navigation, inspection, interaction, and element helpers; tab.run(...) handles custom JavaScript. It drives Chromium or Electron in an isolated tab runtime. Stealth is on by default, while the browser relay can adopt Chrome tabs you already have open without stealing focus.

21 · Hands on the desktop itself

Eval's computer helpers — computer.window(...), win.screenshot(), win.ax(), el.press(), plus computer.run(fnOrCode, options) for multi-step scripts — control the real host: enumerate windows and displays, capture screenshots, send native input, walk the OS accessibility tree, and use the clipboard. It exposes no browser DOM.

Whatever the task needs, it's already in the box.

Core 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

Runtime

Code intelligence

Coordination

Desktop & web

Memory & skills

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).

Full reference →

Prompt controls

Three standalone, lowercase words opt a turn into specialized agent behavior:

oh-my-pi (can1357/oh-my-pi)

Searching Database…

35.8K ·GitHub
Что это такое?omp (oh-my-pi) — это терминальный агент для программирования, форк Pi от Марио Цечнера с интегрированной IDE, разработанный Stencil Labs: более 60 провайдеров моделей, 31 встроенный инструмент, 14 операций LSP и 28 операций отладчика, около 80 тысяч строк ядра на Rust.
Это утилита для терминала или плагин для редактора?Инструмент для терминала: вы запускаете omp в своей оболочке и работаете через её TUI. Управлять им можно и из редакторов вроде Zed по ACP — тот же агент, который видит буфер, открытый у вас, — но его основной дом — терминал.
Как его установить?Через Homebrew или Bun (рекомендуется) на macOS и Linux, через Nix flake с модулями Home Manager, установщик PowerShell на Windows или зафиксированные версии через mise. Для варианта с Bun нужен bun 1.3.14 или новее.
С какими провайдерами моделей он работает — мне нужен ключ Anthropic?Возьмите ключ того провайдера, который вам больше нравится: omp мультипровайдерный, с более чем 60 вариантами, включая OpenAI и Anthropic, так что вы не привязаны к одному вендору. Сам бинарник автономен и не требует rg, grep или bash в системе.
Есть ли подводные камни при установке?На Alpine или musl сначала выполните apk add libstdc++ libgcc — готовый бинарник линкуется с ними динамически, а стандартная Alpine их не содержит. Кроме того, открытая для всех политика PR действует в тестовом режиме; требование вачи может вернуться.
Он нативно работает на Windows или нужен WSL?Нативно на всех трёх — один и тот же бинарник omp работает на macOS, Linux и Windows без моста WSL. Даже оболочка встроена: brush работает как bash, а ls, sed, sort, xargs и jq портированы для запуска внутри процесса.
Что он умеет такого, чего не умеет большинство агентов для программирования?Он подключает настоящие отладчики (lldb, dlv, debugpy) вместо догадок через print, выполняет LSP-переименования с обновлением barrel-файлов и ре-экспортов, читает PDF с arxiv и PR на GitHub тем же инструментом read, что и локальные файлы, и даже может управлять вашим рабочим столом — окнами, скриншотами, деревом доступности, нативным вводом.
Может ли коллега присоединиться к моей сессии агента, чтобы работать в паре?Да — /collab выносит текущую сессию на релей и выдаёт ссылку и QR-код. Коллега подключается командой omp join из другого терминала или открывает её в браузере; поделитесь доступом на чтение и запись, чтобы управлять вместе, или только на просмотр, чтобы просто наблюдать. Кадры шифруются на стороне клиента, так что релей не видит ваши ключи.
Агент помнит мой код между сессиями?Да. Он записывает факты по ходу работы через retain, сохраняет полезные уроки через learn и достаёт их обратно через recall, сжимая каждую сессию в модель проекта, которая загружается при следующем запуске. По умолчанию память привязана к проекту, а движок выбирает memory.backend: local, Hindsight или Mnemopi.
У меня уже есть файлы правил для Cursor и Cline — их придётся переделывать?Нет. omp читает восемь существующих форматов в их родном виде — Cursor MDC, Cline .clinerules, Codex AGENTS.md, Copilot applyTo и другие, — так что конфиг, который ваша команда написала в прошлом квартале, заработает сегодня, без скриптов миграции и сносок про «поддерживаемое подмножество».
Creator
can1357
Size
690.4 MB
Stars
35.8K
Age
9mo
Commits · 90 Days