can1357/oh-my-pi

GitHub: can1357/oh-my-pi

一个集成 IDE 功能的终端 AI 编码代理,解决代码编辑、调试和自动化任务中的效率问题。

Stars: 10874 | Forks: 918

omp

**一个集成 IDE 的编码代理。** **omp.sh**

npm version Changelog CI License TypeScript Rust Bun Discord

Fork of Pi by @mariozechner

最强大的开箱即用智能体界面。经过真实世界使用场景的持续调优——开箱即用,完全开源。 **40+** 提供商 · **32** 内置工具 · **13** LSP 操作 · **27** DAP 操作 · **~27k** 行 Rust 核心代码。 ## 安装说明 **macOS · Linux** ``` curl -fsSL https://omp.sh/install | sh ``` **Bun (推荐)** ``` bun install -g @oh-my-pi/pi-coding-agent ``` **Windows (PowerShell)** ``` irm https://omp.sh/install.ps1 | iex ``` **固定版本 (mise)** ``` mise use -g github:can1357/oh-my-pi ``` macOS · Linux · Windows · bun ≥ 1.3.14 ## 所有工具,_经 benchmark 验证_。 首次编辑即可落地。文件阅读进行摘要而非转储内容。搜索瞬间返回结果。选择任意模型——omp 都能搞定。 | 模型 | 指标 | 说明 | | ------------------ | ------------ | ----------------------------------------------------------------- | | Grok Code Fast 1 | 6.7% → 68.3% | 当编辑格式不再拖累模型时,性能立即提升十倍。 | | Gemini 3 Flash | +5 pp | 在 str_replace 上——超越了 Google 自身对该格式的最佳尝试。 | | Grok 4 Fast | −61% 标记数 | 一旦错误差异的重试循环消失,输出标记数骤降。 | | MiniMax | 2.1× | 通过率翻倍以上。相同的权重,相同的提示。 | - `read`:摘要片段 · 理想默认值 · 选择器命中率 - `search`:速度最快 - `lsp`:IDE 知道的一切,代理也知道 - `prompts`:为每个模型不断调整 [阅读完整文章 ↗](https://blog.can.ac/2026/02/12/the-harness-problem/) ## 你喜爱的 Pi,_现在配备全套工具_。 最初基于 [Mario Zechner](https://github.com/mariozechner) 出色的 [Pi](https://github.com/badlogic/pi-mono) 构建,omp 添加了你所需要的一切。 ### 01 · 通过工具调用执行代码 大多数框架只给代理一个 Python 沙箱就算完事。我们的系统运行持久化 Python 和 Bun 工作线程,并且任一内核都可以通过回环桥调用代理自身的工具——read、search、task。代理可以从 Python 内部用 tool.read 加载 CSV 文件,用 JavaScript 绘制图表,并且无需离开当前执行环境。 ![omp TUI: 单个 eval 会话,包含 `[1/2] pandas describe`(Python)打印真实的 DataFrame.describe() 表格,随后是 `[2/2] top scorer`(JavaScript)运行 reduce 操作。页脚显示:“两个内核在同一会话中运行。”](https://omp.sh/captures/eval.webp) ### 02 · LSP 集成到每次写入操作 请求重命名,就会得到重命名。调用通过 workspace/willRenameFiles,因此重新导出、barrel 文件和别名导入会在文件移动前更新。IDE 知道的一切,代理也知道。 ![omp TUI: `LSP references` 对符号 `formatBytes` 返回五个命中结果,分布在三个文件中,随后 `LSP rename` 应用更改,编辑了 format.ts/report.ts/cli.ts 文件,最后 `Search formatBytes 0 matches` 确认。最后一行:“重命名完成。跨三个文件进行了五次编辑……”。](https://omp.sh/claps/lsp.webp) ### 03 · 驱动真实的调试器 C 二进制程序段错误:代理连接 lldb,单步执行到错误指针,读取栈帧。Go 服务挂起:它连接 dlv 并遍历 goroutine。Python 进程卡住:debugpy,暂停,检查,评估。大多数代理还在撒 print 语句。 ![omp TUI: 针对本地二进制文件 /tmp/omp-native/demo 的实时 lldb-dap 会话。Adapter=lldb-dap,Status=stopped,Frame=xorshift32,指令指针 0x10000055C,Location demo.c:6:10。Debug scopes 和 Debug variables 卡片显示局部变量 (x = 57351),代理确认了计算过程:x 从 7 变为 57351 (= 7 ^ (7<<13))。](https://omp.sh/clips/dap-poster.webp) _[观看录屏 ↗](https://omp.sh/clips/dap.mp4)_ ### 04 · 时间回溯流规则 你的规则处于休眠状态,直到模型偏离脚本。正则匹配会在流式输出中途中止,注入规则作为系统提醒,并从同一点重试。你可以在不支付每轮上下文税的情况下进行路线修正。注入在压缩后仍然有效,因此修正会持续生效。 ![omp TUI: 代理正在读取 src.rs 并准备写入 Box::leak,此时请求中止(红色错误信息:`Error: Request was aborted`),一个琥珀色的 `⚠ Injecting rule: box-leak` 卡片注入了规则正文 `Don't reach for Box::leak in production code paths`,代理随后通过建议 `Arc` 并请用户确认来进行路线修正。](https://omp.sh/clips/ttsr-poster.webp) _[观看录屏 ↗](https://omp.sh/clips/ttsr.mp4)_ ### 05 · 一流的子代理 将任务拆分给多个 worker 并获取类型化的结果。task 分散到隔离的工作树中,每个 worker 运行自己的工具表面,最终产出是父代理直接读取的经过模式验证的对象。无需解析散文,兄弟间无合并冲突,无孤立编辑。 ![omp TUI 显示 `task` 派生了两个子代理 `ComponentsExports` 和 `RoutesExports`,约束块要求对等体之间进行 IRC 直接消息传递,每个子代理的状态卡片包含成本和持续时间,最后是 Findings 部分,列出了两个导出,并附带了一个诚实的“关于单边握手的 IRC 协调说明”。](https://omp.sh/clips/irc-poster.webp) _[观看录屏 ↗](https://omp.sh/clips/irc.mp4)_ ### 06 · 阅读 arxiv 上的 PDF,有何不可? web_search 链接十四个排名提供商,并将找到的任何 URL 直接传递给 read。Arxiv PDF、GitHub 页面、Stack Overflow 帖子会作为带有完整锚点的结构化 markdown 返回——与你用于本地文件的工具表面相同。引用、跟踪、引用,永不丢失来源。 ![omp TUI: web_search 返回 10 个关于推理时计算缩放的 Perplexity 排名来源,代理选择了一篇 arxiv 论文,调用 read https://arxiv.org/pdf/2604.10739v1,并用真实数据总结了论文的主要结果。](https://omp.sh/clips/web-poster.webp) _[观看录屏 ↗](https://omp.sh/clips/web.mp4)_ ### 07 · 毫不妥协的原生体验。即使在 Windows 上。 其他代理通过 shell 调用 rg、grep、find 和 bash。在许多机器上这些二进制文件不存在,即使存在,每次调用也需要一次 fork-exec 往返。omp 将真实的实现链接到进程中。ripgrep、glob、find:进程内执行。brush 就是 bash,其会话可在调用间保持存活。同一个 omp 二进制文件可在 macOS、Linux 和 Windows 上运行——无需 WSL 桥接。 ### 08 · 带优先级和裁决的代码审查 获得关于变更是否可发布的明确裁决,每个问题按 P0 到 P3 排序,并评估置信度。/review 启动专用的审查员子代理,并行扫描分支、单个提交或未提交的工作。你首先处理阻碍发布的问题;重要的问题不会隐藏在散文墙中。 ### 09 · Hashline:通过内容哈希编辑 完美编辑,更少标记。模型指向锚点而不是重新键入想要更改的行,因此空格对齐和找不到字符串的循环就不会再发生。编辑过时的文件时锚点会发散——我们在它破坏任何内容之前拒绝补丁。Grok 4 Fast 在相同工作上输出标记减少 61%。 ### 10 · GitHub 只是另一个文件系统 其他框架添加了 gh_issue_view、gh_pr_view、gh_search——每个都有自己的参数,需要代理学习,你需要调试。我们跳过了这个。read 已经处理路径;PR 就是路径。一个接口用于教导模型,一个表面用于保持正确。 ### 11 · Hindsight:代理策划的记忆 代理在会话之间记住你的代码库。它在运行中用 retain 写入事实,用 recall 取回,并将每个会话压缩为一个心智模型,在下一个会话的第一轮加载。默认按项目作用域,因此它对这个仓库的了解会保留在这个仓库。 ### 12 · ACP:编辑器驱动的代理 在 Zed 内运行 omp,你得到的就是从终端驱动的那个代理——读取你实际查看的缓冲区,通过编辑器的保存路径写入,在编辑器的终端中启动 shell。破坏性工具会暂停等待权限提示,你可以一次性回答后忘记。无需桥接、插件或第二个需要同步的大脑。 ### 13 · 继承你的其他工具已编写的内容 每个其他代理都提供导入器,并期望你进行转换。omp 以原生形式读取磁盘上已有的八种格式——Cursor MDC、Cline .clinerules、Codex AGENTS.md、Copilot applyTo 等等。无需迁移脚本,无需 YAML 到 TOML 的移植,没有“支持的子集”的脚注。你团队上个季度编写的配置今晚仍然有效。 ### 14 · omp commit:原子拆分,验证的消息 omp 通过 git-overview、git-file-diff 和 git-hunk 读取工作树,然后将不相关的更改拆分为按依赖关系排序的原子提交。在写入任何内容之前会检测并拒绝循环。源文件得分高于测试、文档和配置,因此主要提交是最重要的。Lock 文件完全排除在分析之外。 ### 15 · 阅读 PR。_遍历 skills。_ 从子代理提取 JSON。 十个内部方案——`pr://`、`issue://`、`agent://`、`skill://`、`rule://` 等——在代理已调用的每个类文件系统工具内透明解析。`read pr://1428` 返回的形状与 `read src/foo.ts` 相同。`search` 像遍历目录一样遍历 diff。`agent:///findings.0.path` 通过路径从子代理的输出中提取字段。 ![omp TUI 读取 pr://can1357/oh-my-pi/1063,然后是 /diff/1,显示 hunk 标题、添加的行以及一个 [MODIFIED] (+12 -0) 的摘要。](https://omp.sh/captures/pr.webp) ### 16 · 轻松解决冲突。 每个合并冲突变成一个 URL。代理向 `conflict://N` 写入 `@theirs`、`@ours` 或 `@base`,文件即得到解决。批量形式:`conflict://*`。 ![omp TUI: ✓ Read src/session.ts (⚠ 1 conflict),然后 ✓ Write conflict://1 · 1 line with content @theirs,最后确认 'Resolved.'。](https://omp.sh/clips/conflict-poster.webp) _[观看录屏 ↗](https://omp.sh/clips/conflict.mp4)_ ### 17 · 预览,然后接受。 `ast_edit` 返回一个带有替换计数的 _(提议)_ 卡片。更改已暂存。代理调用 `resolve` 并附上原因;TUI 将其变成一个 **Accept** 卡片,磁盘移动随之发生——原子操作,要么全部完成,要么全部不执行。 ![omp TUI: ✓ AST Edit: console.log($X) (proposed) 3 replacements · 1 file,然后 ✓ Accept: 3 replacements in 1 file (AST Edit),接着是 'Applied 3 replacements in src/auth.ts.'。](https://omp.sh/clips/codemod-poster.webp) _[观看录屏 ↗](https://omp.sh/clips/codemod.mp4)_ ### 18 · 驱动 _真实浏览器_。_或者你的 Slack?_ 默认开启隐身模式,因此页面看到的是正常用户,而不是无头机器人。相同的 API 可以原地驱动任何 Electron 应用——将其指向 Slack,代理就可以像读取网页一样读取你的直接消息。 ![omp TUI 针对 DuckDuckGo 驱动浏览器工具](https://omp.sh/captures/browser.webp) ## 无论任务需要什么,_它都已在工具箱中_。 32 个工具与 `read` 和 `bash` 位于同一命名空间。用 `--tools read,edit,bash,…` 固定活动集,其余工具保持隐藏但被索引——当 `tools.discoveryMode` 设定时,`search_tool_bm25` 可在会话中将其召回。 **文件与搜索** - `read` — 通过一个路径访问文件、目录、存档、SQLite、PDF、笔记本、URL 和内部 `://` 方案。 - `write` — 创建或覆盖文件、存档条目或 SQLite 行。 - `edit` — 使用内容哈希锚点和过时锚点恢复的哈希行补丁。 - `ast_edit` — 通过 ast-grep 进行结构化重写,预览后再应用。 - `ast_grep` — 基于 50+ tree-sitter 语法的结构化代码查询。 - `search` — 在文件、glob 和内部 URL 上进行正则搜索。 - `find` — 基于 glob 的路径查找;需要内容匹配时请使用 `search`。 **运行时** - `bash` — 工作区 shell,支持可选 PTY 或后台作业调度。 - `eval` — 持久化 Python 和 JavaScript 单元格,具有共享 prelude 和工具重入功能。 - `recipe` — 从检测到的任务运行器调用目标——bun、just、make、cargo。 - `ssh` — 对配置的主机执行单个远程命令。 **代码智能** - `lsp` — 诊断、导航、符号、重命名、代码操作、原始请求。 - `debug` — 驱动 DAP 会话——断点、单步执行、线程、堆栈、变量。 **协调** - `task` — 并行分派子代理,可选择工作区隔离。 - `irc` — 此进程中活跃代理之间的简短散文。 - `todo_write` — 对会话待办事项列表进行带阶段跟踪的有序修改。 - `job` — 等待或取消后台作业。 - `ask` — 用于交互式运行的结构化后续问题。 **外部工具** - `browser` — 通过 Puppeteer 控制无头 Chromium 或 CDP 连接应用的标签页。 - `web_search` — 跨配置提供商的单次查询,返回答案及引文。 - `github` — GitHub CLI 操作——仓库、PR、Issues、代码搜索、Actions 运行监视。 - `generate_image` — 通过 Gemini 图像模型生成或编辑光栅图像。 - `inspect_image` — 对本地图像文件进行视觉模型分析。 - `render_mermaid` — 将 Mermaid 源码转换为终端友好的 ASCII 或 PNG。 **记忆与状态** - `checkpoint` — 标记对话状态以便稍后折叠和报告。 - `rewind` — 修剪探索性上下文,保留简洁报告。 - `retain` — 将持久事实排队到活动的 Hindsight 库中。 - `recall` — 在 Hindsight 库中搜索原始记忆。 - `reflect` — 要求 Hindsight 综合 Hindsight 库中的答案。 **杂项** - `calc` — 确定性算术——无需模型参与。 - `resolve` — 应用或丢弃排队的预览操作。 - `search_tool_bm25` — 对隐藏工具索引进行 BM25 搜索;在会话中激活顶部匹配项。 设置门控,默认关闭:`github`、`calc`、`inspect_image`、`render_mermaid`、`checkpoint`、`rewind`、`search_tool_bm25`、`retain`、`recall`、`reflect`。一次性启用它们,按项目配置作用域。 [完整参考文档 →](https://omp.sh/docs/tools) ## 四十多个提供商,数百个模型,_一个 /model 命令即可切换_。 角色根据意图路由工作。`default` 用于普通轮次。`smol` 用于廉价子代理分派。`slow` 用于深度推理。`plan` 用于规划模式。`commit` 用于变更日志。启动时使用 `--smol`、`--slow` 或 `--plan` 覆盖;使用 `Ctrl+P` 在活动角色的已配置模型间循环。使用 `/model` 斜杠命令在会话中切换活动模型。 下方认证标签:`oauth` 使用您的提供商账户登录,`plan` 通过编码计划订阅路由,`local` 运行在本地服务器上,密钥可选。 ### 前沿 API 直接 API 和网关。可按角色混合使用提供商。 Anthropic `oauth` · OpenAI · OpenAI Codex `oauth` · Google Gemini · Google Antigravity `oauth` · xAI · Mistral · Groq · Cerebras · Fireworks · Together · Hugging Face · NVIDIA · OpenRouter · Synthetic · Vercel AI Gateway · Cloudflare AI Gateway · Wafer Serverless · Perplexity `oauth` ### 编码计划 订阅路由。`/login` 关联会话。 Cursor `oauth` · GitHub Copilot `oauth` · GitLab Duo · Kimi Code `plan` · Moonshot · MiniMax Coding Plan `plan` · MiniMax Coding Plan CN `plan` · Alibaba Coding Plan `plan` · Qwen Portal · Z.AI / GLM Coding Plan `plan` · Xiaomi MiMo · Qianfan · NanoGPT · Venice · Kilo · ZenMux · Wafer Pass `plan` · OpenCode Go · OpenCode Zen ### 自行运行 兼容 OpenAI 的 `/v1/models`。本地实例无需密钥。 Ollama `local` · Ollama Cloud · LM Studio `local` · llama.cpp `local` · vLLM `local` · LiteLLM ### 让路由实用的四个旋钮 - **自定义提供商** — 在 `~/.omp/agent/models.yml` 中声明任何支持 `openai-completions`、`openai-responses`、`openai-codex-responses`、`azure-openai-responses`、`anthropic-messages`、`google-generative-ai` 或 `google-vertex` 的提供商。 - **回退链** — 在 `retry.fallbackChains` 下设置每个角色的链。当主提供商返回 429 或达到配额限制时,下一个条目接管剩余的轮次——冷却后恢复。 - **路径作用域角色** — 在 `modelRoles` 下嵌套 `paths:`,为某个仓库固定更重的 `default` 模型而不影响全局配置。最接近的路径生效。 - **轮换凭据** — 为每个提供商堆叠 API 密钥,运行时按会话亲和性和每凭据退避进行轮换。当一个密钥可能在午餐前烧光配额时很有用。 完整的提供商和路由参考请见 [omp.sh/docs/providers](https://omp.sh/docs/providers)。 ## 十四个后端。_一个代理已知的工具_。 `web_search` 是内置的,不是外挂的。`auto` 遍历十四提供商链;如果你已付费,可以按名称固定一个。在每个命中结果背后,站点感知提取将 GitHub、注册表、arXiv、Stack Overflow 和文档转换为结构化 markdown——锚点和链接目标得以保留。 ### 搜索提供商 十四个后端。固定一个,或让 `auto` 按顺序遍历链。 | 提供商 | 认证 | | ------------ | ---------------------- | | `auto` | 链式 | | `exa` | `EXA_API_KEY` (或 mcp) | | `brave` | `BRAVE_API_KEY` | | `jina` | `JINA_API_KEY` | | `kimi` | `MOONSHOT_API_KEY` | | `zai` | `ZAI_API_KEY` | | `anthropic` | oauth | | `perplexity` | `PERPLEXITY_API_KEY` | | `gemini` | oauth | | `codex` | oauth | | `tavily` | `TAVILY_API_KEY` | | `parallel` | `PARALLEL_API_KEY` | | `kagi` | `KAGI_API_KEY` | | `synthetic` | `SYNTHETIC_API_KEY` | | `searxng` | 自托管 | ### 专用处理器 代理获取结构化内容,而非剥离的 HTML。 - **代码托管平台** — github, gitlab - **包注册表** — npm, PyPI, crates.io, Hex, Hackage, NuGet, Maven, RubyGems, Packagist, pub.dev, Go packages - **研究来源** — arxiv, semantic scholar - **论坛** — stack overflow, reddit, hn - **文档** — mdn, readthedocs, docs.rs 页面转换为保留链接结构的 markdown。代理可以引用、跟踪和引用而不丢失锚点。 ### 安全数据库 漏洞查询使用供应商数据回答,而非博客摘要。 - **NVD** — 国家漏洞数据库 - **OSV** — 开源漏洞源 - **CISA KEV** — 已知被利用的漏洞 [`web_search` 参考文档 ↗](https://omp.sh/docs/tools#web_search) ## 大约 **~27,000** 行 Rust,执行其他框架通过 shell 外包的工作。 三个 crate,一个平台标记的 N-API 插件。搜索、shell、AST、高亮、PTY、图像解码、BPE 计数——全部在 libuv 线程池中进程内执行。热路径上无 fork/exec。 - Crate:`pi-natives`、`pi-shell`、`pi-ast` - 平台:`linux-x64`、`linux-arm64`、`darwin-x64`、`darwin-arm64`、`win32-x64` 下表是每个模块的分解,故意省略了胶水代码和测试。 | 模块 | 功能描述 | 依赖项 | ~代码行数 | | ---------- | ------------------------------------------------------------------------ | ------------------------------------ | --------: | | shell | 嵌入式 bash · 持久化会话 · 超时/中止 · 自定义内建命令 | brush-shell (vendored) | 3,700 | | grep | 正则搜索 · 并行/顺序 · glob 与类型过滤器 · 模糊查找 | grep-regex · grep-searcher | 1,900 | | keys | Kitty 键盘协议,带回退到 xterm · PHF 完美哈希查找 | phf | 1,490 | | text | ANSI 感知宽度 · 截断 · 列切片 · SGR 保留换行 | unicode-width · segmentation | 1,450 | | summarize | 使用省略控制的 tree-sitter 结构化源码摘要 | tree-sitter · ast-grep-core | 1,040 | | ast | ast-grep 模式匹配和结构化重写 | ast-grep-core | 1,000 | | fs_cache | 由 read、grep、lsp 共享的、以 mtime 为键的文件缓存 | in-tree | 840 | | highlight | 语法高亮 · 11 个语义类别 · 30+ 别名 | syntect | 470 | | pty | 用于 sudo 和 ssh 交互式提示的原生 PTY 分配 | portable-pty | 455 | | glob | 使用 glob 发现 · 类型过滤器 · mtime 排序 · 遵守 gitignore | ignore · globset | 410 | | workspace | 工作区遍历器,一次扫描中同时包含 gitignore 和 AGENTS.md 发现 | ignore · git2 | 385 | | appearance | 模式 2031 + 通过 CoreFoundation FFI 的原生 macOS 深色/浅色模式 | core-foundation | 270 | | power | 用于防止空闲/系统/显示休眠的 macOS 电源断言 API | IOKit FFI | 270 | | task | libuv 线程池上的阻塞工作 · 取消 · 超时 · 性能分析 | tokio · napi | 260 | | fd | 用于替代 find-tool 的文件系统遍历器 | ignore | 250 | | iso | 工作区隔离垫片 · apfs · btrfs · zfs · reflink · overlayfs · projfs · rcopy | pi-iso (PAL) | 245 | | prof | 具有折叠堆栈和 SVG 火焰图输出的循环缓冲区分析器 | inferno | 240 | | ps | 跨平台进程树终止和后代列表 | libc · libproc · CreateToolhelp32Snapshot | 195 | | image | 解码/编码 PNG · JPEG · WebP · GIF · 使用 5 种滤镜调整大小 | image | 190 | | clipboard | 从系统剪贴板复制文本和读取图像 · 无需 xclip/pbcopy | arboard | 80 | | tokens | O200k / Cl100k BPE 标记计数 · 两个表均已内嵌 | tiktoken-rs | 65 | | html | HTML 转 Markdown,支持可选内容清理 | html-to-markdown-rs | 50 | ## 四个入口点:_交互式_、_单次_、RPC 和 ACP。 同一个引擎,四个包装器。`omp` 运行 TUI。`omp -p` 回答单个提示并退出。Node SDK 将会话嵌入到你的进程中。`omp --mode rpc` 和 `omp acp` 通过 stdio 将控制权交给另一个程序。 ### 交互式 — 当有疑问时,代理会询问 TUI 是默认界面。工具调用渲染为卡片,编辑在落地前预览,歧义通过 `ask` 工具路由——一个代理可以在轮次中调用的结构化选项选择器。键盘处理其余部分。 相同的提示卡片通过 ACP 浮现,因此编辑器无需编写选择器即可获得它。 ![omp TUI: ask 工具渲染了一个带有三个选项的选项选择器,第一个带有“(Recommended)”徽章,页脚显示“up/down navigate · enter select · esc cancel”。](https://omp.sh/captures/ask.webp) ### SDK — 嵌入到 Node 中 `@oh-my-pi/pi-coding-agent` Node 和 TypeScript 宿主可直接拉入引擎。该包暴露 `ModelRegistry`、`SessionManager`、`createAgentSession` 和 `discoverAuthStorage`;会话发出你订阅的类型化事件。 ``` import { ModelRegistry, SessionManager, createAgentSession, discoverAuthStorage } from "@oh-my-pi/pi-coding-agent"; const auth = await discoverAuthStorage(); const models = new ModelRegistry(auth); await models.refresh(); const { session } = await createAgentSession({ sessionManager: SessionManager.inMemory(), authStorage: auth, modelRegistry: models, }); await session.prompt("list .ts files"); ``` ### RPC — 通过 stdio 驱动 `omp --mode rpc` 用于非 Node 嵌入器,或当你需要进程隔离时。NDJSON 命令输入,响应和事件帧输出。`--mode rpc-ui` 添加工具卡片、选择器和对话框作为 `extension_ui_request` 帧,宿主必须应答。 ``` $ omp --mode rpc --no-session > {"id":"r1","type":"prompt","message":"list .ts files"} < {"id":"r1","type":"response", ...} > {"id":"r2","type":"set_model","provider":"anthropic","modelId":"sonnet-4.5"} > {"id":"r3","type":"abort"} ``` ### ACP — 与编辑器对话 `omp acp` 基于 JSON-RPC 的 [Agent Client Protocol](https://github.com/zed-industries/agent-client-protocol)。当编辑器声明能力时,工具 I/O 通过它路由,写入操作受 `session/request_permission` 门控。 | omp 工具 | ACP 路由 | ----------------------------------- | | `bash` | `terminal/create + terminal/output` | | `read` | `fs/read_text_file` | | `write` | `fs/write_text_file` | | `edit, ast_edit, write, bash` | `session/request_permission` | 完整参考文档:[omp.sh/docs/sdk](https://omp.sh/docs/sdk)。 ## 一个值得保留的框架是你_不会_超越的框架。 在 **[omp.sh](https://omp.sh)** 获取。 omp 是 [Pi](https://github.com/badlogic/pi-mono) 的 fork,作者 [Mario Zechner](https://github.com/mariozechner),重写为编码优先的界面:会话、子代理、斜杠命令、扩展——全部是 TypeScript,全部 MIT,全部在 [GitHub](https://github.com/can1357/oh-my-pi) 上。通过配置塑造它,从外部挂钩它,或在需要时阅读源代码。 ### 基元 扩展是一个 TypeScript 模块。相同的工具 API,相同的斜杠命令注册表,相同的热键表,相同的内置 TUI 基元。没有保留项。 ### 发现 首次运行时,omp 继承磁盘上已有的内容:来自 `.claude`、`.cursor`、`.windsurf`、`.gemini`、`.codex`、`.cline`、`.github/copilot` 和 `.vscode` 的规则、技能和 MCP 服务器。无需迁移脚本。 ### 可扩展性 让 omp 编写你缺少的部分,然后 `/reload-plugins`。将其保留在本地,在 `marketplace` 中发布,或发布到 npm。 ## 设计理念 omp 是 [pi-mono](https://github.com/badlogic/pi-mono) 的 fork,作者 [Mario Zechner](https://github.com/mariozechner),扩展了包含电池的编码工作流。 关键理念: - 为真实的编码工作保持交互式终端优先的用户体验 - 包含实用的内置功能(工具、会话、分支、子代理、可扩展性) - 使高级行为可配置而非隐藏 ## 开发 ### 调试命令 `/debug` 打开用于调试、报告和性能分析的工具。 有关架构和贡献指南,请参见 [packages/coding-agent/DEVELOPMENT.md](packages/coding-agent/DEVELOPMENT.md)。 ## Monorepo 包 | 包名 | 描述 | | ---------------------------------------------------------- | -------------------------------------------------------------------- | | **[@oh-my-pi/pi-ai](packages/ai)** | 支持流式传输和模型/提供商集成的多提供商 LLM 客户端 | | **[@oh-my-pi/pi-agent-core](packages/agent)** | 带有工具调用和状态管理的代理运行时 | | **[@oh-my-pi/pi-coding-agent](packages/coding-agent)** | 交互式编码代理 CLI 和 SDK | | **[@oh-my-pi/pi-tui](packages/tui)** | 具有差异渲染功能的终端 UI 库 | | **[@oh-my-pi/pi-natives](packages/natives)** | 用于 grep、shell、image、text、语法高亮等的 N-API 绑定 | | **[@oh-my-pi/omp-stats](packages/stats)** | 用于 AI 使用统计的本地可观察性仪表板 | | **[@oh-my-pi/pi-utils](packages/utils)** | 共享实用程序(日志、流、目录/环境/进程辅助函数) | | **[@oh-my-pi/swarm-extension](packages/swarm-extension)** | Swarm 编排扩展包 | ### "Rust crate 包". But to follow the instruction, since "Crate" is a technical term, keep it in English. | Crate | 描述 | | ----------------------------------------------------------- | -------------------------------------------------------------------- | | **[pi-natives](crates/pi-natives)** | 核心 Rust 原生插件(N-API `cdylib`),被 `@oh-my-pi/pi-natives` 使用;聚合以下 crate | | **[pi-shell](crates/pi-shell)** | 从 `pi-natives` 中拆分出的嵌入式 shell / PTY / 进程管理(包装了 `brush-*`) | | **[pi-ast](crates/pi-ast)** | 基于 tree-sitter 的代码摘要器和 AST 工具(支持 50+ 语言语法) | | **[pi-iso](crates/pi-iso)** | 任务隔离后端解析器:APFS 克隆、btrfs/zfs reflinks、overlayfs、projfs、rcopy | | **[brush-core-vendored](crates/brush-core-vendored)** | 用于嵌入式 bash 执行的 [brush-shell](https://github.com/reubeno/brush) 的 vendor fork | | **[brush-builtins-vendored](crates/brush-builtins-vendored)** | Vendor 的 bash 内建命令(cd、echo、test、printf、read、export 等) | ## 许可证 MIT。参见 [LICENSE](LICENSE)。 © 2025 Mario Zechner © 2025-2026 Can Bölük _为保持打开的终端而生_ - [omp.sh](https://omp.sh) - [GitHub](https://github.com/can1357/oh-my-pi) - [Changelog](https://github.com/can1357/oh-my-pi/blob/main/packages/coding-agent/CHANGELOG.md) - [npm](https://www.npmjs.com/package/@oh-my-pi/pi-coding-agent) - [Discord](https://discord.gg/4NMW9cdXZa) - [MIT](https://github.com/can1357/oh-my-pi/blob/main/LICENSE)
标签:AI编程代理, Bun运行时, DNS解析, npm包, Python支持, Rust, SOC Prime, TypeScript, 代理系统, 代码助手, 代码编辑, 可视化界面, 哈希锚定编辑, 子代理, 安全插件, 实时调优, 工具优化, 开发工具, 开发效率, 开源项目, 数据管道, 浏览器集成, 终端工具, 编程辅助, 网络可观测性, 网络流量审计, 自动化攻击, 语言服务器协议, 软件工程