⌥ Coding agent with the IDE wired in. Built by Stencil Labs.
累计 0 次下载请求 · 近 30 天 0 次
查看开发者<p align="center"> <img src="https://github.com/can1357/oh-my-pi/blob/main/assets/hero.png?raw=true" alt="omp"> </p> <p align="center"> <strong>A coding agent with the IDE wired in.</strong> <strong><a href="https://omp.sh">omp.sh</a></strong> </p> <p align="center"> <a href="https://www.npmjs.com/package/@oh-my-pi/pi-coding-agent"><img src="https://img.shields.io/npm/v/@oh-my-pi/pi-coding-agent?style=flat&colorA=222222&colorB=CB3837" alt="npm version"></a> <a href="https://github.com/can1357/oh-my-pi/blob/main/packages/coding-agent/CHANGELOG.md"><img src="https://img.shields.io/badge/changelog-keep-E05735?style=flat&colorA=222222" alt="Changelog"></a> <a href="https://github.com/can1357/oh-my-pi/actions"><img src="https://img.shields.io/github/actions/workflow/status/can1357/oh-my-pi/ci.yml?style=flat&colorA=222222&colorB=3FB950" alt="CI"></a> <a href="https://github.com/can1357/oh-my-pi/blob/main/LICENSE"><img src="https://img.shields.io/github/license/can1357/oh-my-pi?style=flat&colorA=222222&colorB=58A6FF" alt="License"></a> <a href="https://www.typescriptlang.org"><img src="https://img.shields.io/badge/TypeScript-3178C6?style=flat&colorA=222222&logo=typescript&logoColor=white" alt="TypeScript"></a> <a href="https://www.rust-lang.org"><img src="https://img.shields.io/badge/Rust-DEA584?style=flat&colorA=222222&logo=rust&logoColor=white" alt="Rust"></a> <a href="https://bun.sh"><img src="https://img.shields.io/badge/runtime-Bun-f472b6?style=flat&colorA=222222" alt="Bun"></a> <a href="https://discord.gg/4NMW9cdXZa"><img src="https://img.shields.io/badge/Discord-5865F2?style=flat&colorA=222222&logo=discord&logoColor=white" alt="Discord"></a> </p> <p align="center"> Built by <a href="https://stencil.so">Stencil Labs</a> · Fork of <a href="https://github.com/badlogic/pi-mono">Pi</a> by <a href="https://github.com/mariozechner">@mariozechner</a> </p> 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** ```sh 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** ```sh brew install can1357/tap/omp ``` **Bun (recommended)** ```sh bun install -g @oh-my-pi/pi-coding-agent ``` **Nix** ```sh # 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: ```nix { 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)** ```powershell irm https://omp.sh/install.ps1 | iex ``` **Pinned versions (mise)** ```sh 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. ```sh # 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 ↗](https://blog.can.ac/2026/02/12/the-harness-problem/) ## The Pi _you love_, with **batteries included**. Originally built on [Mario Zechner](https://github.com/mariozechner)'s wonderful [Pi](https://github.com/badlogic/pi-mono), 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.  ### 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.  _[Read the LSP config docs](docs/lsp-config.md)_ ### 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 capture ↗](https://omp.sh/clips/dap.mp4)_ ### 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.  _[Watch the capture ↗](https://omp.sh/clips/ttsr.mp4)_ ### 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.  _[Watch the capture ↗](https://omp.sh/clips/irc.mp4)_ Watch the fan-out while it runs: `Alt+A` opens [Agent Hub](docs/agent-hub.md), 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.  _[Watch the capture ↗](https://omp.sh/clips/advisor.mp4)_ ### 07 · Hand someone the link, they're in. /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.  _[Watch the capture ↗](https://omp.sh/clips/collab.mp4)_ ### 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.  _[Watch the capture ↗](https://omp.sh/clips/web.mp4)_ ### 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. Want to steer the review yourself? `/annotate code-review` opens the diff so you can pin notes to lines before the reviewers run. `/annotate` also takes the latest reply, a session message, a file, or quoted text and pastes your notes into the prompt. See [`/annotate`](docs/slash-command-internals.md#12-bundled-command-note-annotate). ### 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://*`.  _[Watch the capture ↗](https://omp.sh/clips/conflict.mp4)_ ### 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.  _[Watch the capture ↗](https://omp.sh/clips/codemod.mp4)_ ### 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** - `read` — files, dirs, archives, SQLite, PDFs, notebooks, URLs, remote `ssh://` 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 for `grep` when 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. - `wait` — block until the next background result, peer message, or steering interrupt; message peers and control jobs via `agent://` and `proc://`. - `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. - `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 (`re
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 | sh
Alpine / 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/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
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
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 rategrep : fastest in the westlsp : everything your IDE knows, the agent knowsprompts : adjusted relentlessly for each modelOriginally 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.
[图片:omp TUI running Python code and rendering a chart.]
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(在新窗口打开)
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)).]
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.]
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 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.
[图片: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.]
/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.]
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.]
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.
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.
Want to steer the review yourself? /annotate code-review opens the diff so you can pin notes to lines before the reviewers run. /annotate also takes the latest reply, a session message, a file, or quoted text and pastes your notes into the prompt. See /annotate(在新窗口打开).
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://*.
[图片:omp TUI: ✓ Read src/session.ts (⚠ 1 conflict), then ✓ Write conflict://1 · 1 line with content @theirs, then a confirmation 'Resolved.']
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.']
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.
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.
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
read — files, dirs, archives, SQLite, PDFs, notebooks, URLs, remote ssh:// 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 for grep when 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.wait — block until the next background result, peer message, or steering interrupt; message peers and control jobs via agent:// and proc://.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.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 (`re
Agent.withdrawUndeliveredQueuedMessages() replaces withdrawLiveSteering() and returns { steering, followUp }: it also takes back queued input already dequeued for the next model call, which the aborted run then neither records nor reports in agent_end (#14179(在新窗口打开) by @andrebrait(在新窗口打开))Agent.setOnModelCallSystemPrompt, called with the exact system prompt each model call is built from (#14338(在新窗口打开) by @will-bogusz(在新窗口打开))SessionInitEntry.systemPrompt holds the system prompt blocks as sent; session files written earlier keep one joined string (#14338(在新窗口打开) by @will-bogusz(在新窗口打开))imageTokens() formula with its OpenAI Responses wire rule; values are unchanged (#14286(在新窗口打开) by @will-bogusz(在新窗口打开)).Invalid signature in thinking block (or silently dropping the summarized thinking) on models with preserved thinking (#14251(在新窗口打开) by @will-bogusz(在新窗口打开))compat.statefulResponses to enable or disable stored Responses chaining (previous_response_id with store: true) for one endpoint without the official-only request fields that compat.officialEndpoint implies (#13686(在新窗口打开) by @alphastorm(在新窗口打开)).AuthStorage.health.check() accepts excludeProviders to skip credentials of providers the caller does not serve (#14234(在新窗口打开) by @will-bogusz(在新窗口打开))recordAffinity: false to credential resolution options, selecting as the session would without pinning the choice to that session (#14512(在新窗口打开) by @will-bogusz(在新窗口打开))unsupported_native_inflight_message) now classify as retryable from their error text alone, matching the provider's own classification, and AIError.isCodexSteerRejection() identifies them so the agent retry can stay on the same model (#14242(在新窗口打开) by @alphastorm(在新窗口打开))detail: "original" images to endpoints whose supportsImageDetailOriginal is off (#13687(在新窗口打开) by @alphastorm(在新窗口打开)).onPayload hook, so payload capture now sees each Devin chat request and a returned replacement is what gets sent (#14506(在新窗口打开) by @will-bogusz(在新窗口打开))storeResponses: true, set PI_MUSE_STORE_RESPONSES=1, or set a process-wide default with configureProviderStoreResponses (#14293(在新窗口打开) and #14534(在新窗口打开) by @abilliontokens(在新窗口打开)).[DONE] sentinel arrived (#14481(在新窗口打开)).statefulResponses compat field for OpenAI Responses models, kept through OpenRouter's Responses dispatch (#13686(在新窗口打开) by @alphastorm(在新窗口打开)).image-tokenization axis, which declares how GPT-5.2+, Claude and Gemini 3 lines bill input images on every host, with wire-API fallback rules for other models, plus imageTokens() to price one image (#14286(在新窗口打开) by @will-bogusz(在新窗口打开)).azure/openai-codex providers pointed at a non-Azure/non-Codex baseUrl, OpenRouter) to default supportsImageDetailOriginal to false, so snapcompact frames and computer screenshots go out as detail: "auto" instead of failing on servers that reject original; set compat.supportsImageDetailOriginal: true to opt a host in (#13687(在新窗口打开) by @alphastorm(在新窗口打开)).store-responses), so a turn whose connection drops can be recovered instead of re-run. Storage is opt-in via the omp setting providers.muse-code.storeResponses or PI_MUSE_STORE_RESPONSES=1 (#14293(在新窗口打开) and #14534(在新窗口打开) by @abilliontokens(在新窗口打开)).404 Requested entity was not found. After a successful model refresh and on subsequent restarts, only models in the account's own Antigravity model list are offered (#14328(在新窗口打开)).createAgentSession now throws Could not restore model <provider/id> when a resumed session's saved models cannot be restored, and AgentSession.switchSession throws it, keeping the current session, when it opens such a session; both still fall back with a warning when hasUI is set and retry.modelFallback is on, and hosts that cannot show that warning can opt out with allowSessionModelFallback: false (#13689(在新窗口打开) by @alphastorm(在新窗口打开))./switch autocomplete so model and role suggestions use the same relevance ordering as the model picker, including support for @role aliases.skill:// searches blocking other filesystem operations and delaying subagent artifact publication.pi.exec() reporting exit code 0 when a process was terminated by a timeout or signal; terminated processes now report code -1./collab guests being unable to respond to setting-change approval and tool-issue report consent prompts./btw answers in Tern being clipped with no way to scroll: /btw now answers in the scrollable BTW history sheet (#14331(在新窗口打开) by @H4vC(在新窗口打开))/btw answers longer than 4 KiB being cut off with […truncated] once they finished (#14331(在新窗口打开) by @H4vC(在新窗口打开))/btw reopens it); x cancels the answer (#14331(在新窗口打开) by @H4vC(在新窗口打开))## headings, and the arrow/page keys scroll the answer (#14331(在新窗口打开) by @H4vC(在新窗口打开))f to follow up jumps to the bottom of the conversation (#14331(在新窗口打开) by @H4vC(在新窗口打开))Full Changelog: https://github.com/can1357/oh-my-pi/compare/v18.6.0...v18.6.1(在新窗口打开)
<|DSML|…> tool-call text that could not be parsed into a real call, and no tool call was made, the broken markup is now removed from the message before it is saved to history. The agent then tells the model the tool call failed, shows it the correct format, and asks it again, at most twice in a row. Previously the markup stayed in history, and the agent stopped as if the model had finished (#14202(在新窗口打开) by @H4vC(在新窗口打开)).<|DSML|tool_calls> and <|DSML|invoke> tags missing), its closing tags are now kept in the streamed text instead of being dropped. This lets the agent remove exactly the broken call while keeping any text after it (#14202(在新窗口打开) by @H4vC(在新窗口打开)).omp models refresh. When the update check failed, omp reported an outdated Antigravity client version (2.8.0), so the server left the newer models out of the list. The fallback version is now 2.19.1.models.yml, and gateways that weren't on the old list of supported hosts. Before, a complete <|DSML|tool_calls> envelope from these hosts showed up as plain text and the tool never ran (#14202(在新窗口打开) by @H4vC(在新窗口打开))./models Roles view shows which saved model preset is in effect, and Ctrl+←/→ (or p/P on the role rows, for macOS where Ctrl+←/→ switches Spaces) switches to the next or previous one, in Tern and text mode (#14210(在新窗口打开) by @H4vC(在新窗口打开))/models now puts the cursor on the model list, so ↑/↓ choose a model and Enter assigns it right away instead of moving through the sidebar and dropping the role selection; ← still reaches the providers (#14210(在新窗口打开) by @H4vC(在新窗口打开))EPIPE: broken pipe unhandled rejection crashing the session when a debug adapter, eval kernel, IDA worker, or RPC server exits mid-write (seen on Windows) (#14196(在新窗口打开) by @andrebrait(在新窗口打开))[1;3A into the editor when the console host relays them one byte at a time (#14216(在新窗口打开) by @H4vC(在新窗口打开)).Full Changelog: https://github.com/can1357/oh-my-pi/compare/v18.5.1...v18.6.0(在新窗口打开)
社区评论
登录后即可分享使用体验,首条评论会先经过审核。前往登录