127 lines
11 KiB
Markdown
127 lines
11 KiB
Markdown
# OMP 与 Pi(pi agent)对比调研
|
||
|
||
- 日期:2026-10-17
|
||
- 范围:公开仓库与官方文档调研(非 WorkBuddy 实现观察,不涉及 REA 渠道)
|
||
- 结论先行:**两者是同一血统的两条路线**——`pi agent`(Pi)是 Mario Zechner 的极简可扩展 agent 工具链/上游项目;`omp`(oh-my-pi)是它的 fork,由 Stencil Labs 改造成"电池全包"的终端编码 agent。YCode 当前内核用的 omp.exe 就是这个 fork。
|
||
|
||
---
|
||
|
||
## 1. 身份与亲缘关系
|
||
|
||
| 项 | omp | pi(pi agent) |
|
||
|---|---|---|
|
||
| 全称 | oh-my-pi | Pi(pi-mono 项目,CLI 名 `pi`) |
|
||
| 官网 | omp.sh | pi.dev |
|
||
| 仓库 | github.com/can1357/oh-my-pi | github.com/earendil-works/pi(原 badlogic/pi-mono) |
|
||
| 作者/维护 | Can Bölük(can1357)· Stencil Labs | Mario Zechner(badlogic,libGDX 作者)· Earendil Works |
|
||
| npm 包 | `@oh-my-pi/pi-coding-agent` | `@earendil-works/pi-coding-agent` |
|
||
| 当前版本 | **18.11.2**(2026-10-16 提交) | **1.3.0**(2026-10-15 发布,全仓 lockstep 版本) |
|
||
| 本机在用 | `C:\Users\Administrator\AppData\Local\Ygent\omp.exe`,**18.6.3**(YCode 现内核) | 未安装 |
|
||
|
||
**命名澄清(容易混淆的点)**:omp 是 fork,所以它的包名、Rust crate 名都保留 "pi" 前缀(`@oh-my-pi/pi-coding-agent`、`pi-shell`、`pi-natives`、`pi-tui` 等)。"pi agent" 指上游 Pi 本身,不是 omp 内部某个组件。
|
||
|
||
---
|
||
|
||
## 2. 一句话差异(定位)
|
||
|
||
- **Pi**:*"a minimal, extensible agent harness that you can make your own"*——刻意做小,自带 4 个工具、约 300 词 system prompt;子代理、计划模式等"重功能"故意不做,靠 TypeScript 扩展/技能/包让使用者自己加。它是**平台**:`pi-ai`、`pi-agent-core`、`pi-coding-agent`、`pi-tui` 每层可独立引入(OpenClaw 就是直接 import SDK 而非跑子进程)。
|
||
- **omp**:*"The Pi you love, with batteries included"*——把 Pi 故意留白的部分**全部内置**:31 个工具、LSP/DAP、子代理、计划模式、审批、记忆、协作、浏览器/桌面控制,外加约 8 万行 Rust 原生核心。它是**产品**:装上直接干活,而不是给你一堆积木。
|
||
|
||
---
|
||
|
||
## 3. 对比总表
|
||
|
||
| 维度 | omp(oh-my-pi) | pi(pi agent) |
|
||
|---|---|---|
|
||
| 定位 | 电池全包的终端编码 agent(fork 产品化) | 极简可扩展 harness / 分层工具链(上游) |
|
||
| 技术栈 | TypeScript + ~80k 行 Rust 原生核心(N-API,随二进制内嵌 shell/ripgrep/glob/tokenizer);单个 Bun 打包二进制 | 纯 TypeScript(Node ≥ 22.19);工具进程外调用 |
|
||
| 内置工具 | **31 个**:read/write/edit/ast_edit/grep/glob/bash/eval/lsp/debug/task/browser/computer/web_search/memory 等;14 个 LSP 操作、28 个 DAP 操作 | **4 个**:read / write / edit / bash(另有 find/grep/ls 工厂可显式启用) |
|
||
| System prompt | 大而全(自带能力全覆盖) | 极简(约 300 词) |
|
||
| 子代理 | 一等公民:`task` 分发到隔离 worktree,类型化结果,Agent Hub | **无**(官方建议自己用扩展/tmux 实现) |
|
||
| 计划模式 | 内置 `/plan` | **无**(官方建议把计划写成文件) |
|
||
| MCP | 内置(`/docs/mcp`,含 `mcp://` 读取方案) | 1.x 起已内置:`mcp.json`、`pi mcp add/list`、exposure 四档(codemode/deferred/direct/hidden)、OAuth;**"无 MCP"的说法已过时** |
|
||
| 权限/审批 | 内置 approvals 体系 + `ask` 结构化提问 + ACP `session/request_permission` 门控 | **无内置权限系统**(默认 YOLO,按进程权限运行);官方建议容器化(Gondolin/Docker/OpenShell) |
|
||
| 会话 | JSONL 树(resume/branch/fork/compact/steer/share),`~/.omp/agent` | JSONL 树(entry 带 id/parentId,`/tree` 导航),`~/.pi/agent` |
|
||
| 上下文压缩 | 自动/手动压缩 + snapcompact(上下文渲染成像素字体 PNG,无需模型调用) | 自动/手动 compaction(`/compact`),历史保留在 JSONL |
|
||
| 嵌入方式 | TUI / one-shot / **SDK** / **RPC** / **rpc-ui** / **ACP**(编辑器如 Zed) | TUI / print / JSON 事件流 / **RPC** / **SDK** |
|
||
| RPC 协议 | NDJSON over stdio;启动先发 `ready`(带 protocolVersion 协商);`--mode rpc-ui` 增加 UI 扩展事件 | NDJSON over stdio;命令/response/事件/extension_ui 四类记录;等待 `agent_settled` 判定回合彻底结束 |
|
||
| 模型接入 | 60+ providers、9 种角色(default/smol/slow/plan/commit/vision/task/advisor/tiny)、fallback 链、凭据轮换 | 20~30+ providers,统一 API(pi-ai),支持订阅 OAuth(Claude Pro/Max、ChatGPT、Copilot 等)与跨供应商中途切换 |
|
||
| 平台 | macOS/Linux/Windows 原生单二进制(明确强调 Windows 不用 WSL) | macOS/Linux/Windows(Node 安装器 + npm/Nix) |
|
||
| 许可证 | MIT | MIT(pi-mono 时代)→ MIT(现行) |
|
||
| 治理/节奏 | 社区 fork,激进迭代(31k+ commits,版本号 18.x) | 上游主项目,lockstep 发版(v1.3.0),组织化治理(含安全供应链加固) |
|
||
|
||
---
|
||
|
||
## 4. 分维度详解
|
||
|
||
### 4.1 血统:fork 关系是理解一切差异的钥匙
|
||
|
||
omp README 自述:*"omp is a fork of pi-mono by Mario Zechner, extended with a batteries-included coding workflow."* 因此:
|
||
|
||
- 两者**设计语言同源**:会话为 JSONL 树(id/parentId)、`--no-session` 临时模式、`prompt` RPC 命令、`message_update`/`assistantMessageEvent`/`text_delta` 事件、NDJSON over stdio 等都一脉相承。YCode 的 `src/main/omp.ts` 注释描述的协议形态与 pi 官方 RPC 文档几乎同构。
|
||
- 分化点在于 **"要不要替使用者做决定"**:Pi 把子代理、计划模式、权限弹窗、todo 等统统砍掉("features confuse models"是它的原话逻辑);omp 则逐项内置,还加了 Pi 没有的原生核心、审批、协作等。
|
||
|
||
### 4.2 内核实现:性能路线分道扬镳
|
||
|
||
- **Pi**:纯 TS,工具逻辑跑进程外命令(bash 调用系统 shell / rg 等),安装即 npm 包,跨平台一致性依赖环境。
|
||
- **omp**:把 bash(brush-shell)、coreutils、ripgrep、glob walker、tree-sitter AST、PTY、图像解码、BPE 计数等全部编进 Rust N-API 单二进制,"no fork/exec on the hot path";官方宣称 hashline 内容哈希编辑让 Grok 4 Fast 在同一任务上少花 61% 输出 token、MiniMax 通过率翻倍。代价是仓库体量和与上游的偏离度大。
|
||
|
||
### 4.3 功能面:一个做减法,一个做加法
|
||
|
||
- **Pi 的减法**(官方明示):无子代理、无计划模式、无内置权限系统、无内置 todo。补充方式:扩展(TS 模块,可注册工具/拦截 tool_call)、技能(Markdown+README)、prompt 模板、npm/git 分发包。
|
||
- **omp 的加法**(21 项扩展,摘关键):持久 Python/Bun `eval` 并回调自身工具、写文件即过 LSP、驱动真实调试器、流规则(TTSR)、子代理+worktree、第二模型 advisor、`/collab` 加密共享、`/review` P0–P3 代码审查、hashline 编辑、GitHub 即文件系统(`pr://`、`issue://`)、自维护记忆(retain/learn/recall)、继承 Cursor/Cline/Codex/Copilot 既有配置、浏览器与桌面控制。
|
||
|
||
### 4.4 嵌入与协议:对 YCode 最相关的一节
|
||
|
||
- 两者都提供 **stdio NDJSON RPC** 作为宿主嵌入方式,命令都用可选 `id` 关联响应;turn 结束判定都涉及 `agent_end`(omp 另有 `isTerminal` 语义、pi 有 `agent_settled` 全静默语义)。
|
||
- **差异点(需实测确认)**:
|
||
- omp 启动后先写 `ready` 帧(含 `protocolVersion: 1`、`supportedProtocolVersions: [1,2]`、`maxFrameBytes: 1048576`);pi 文档未描述 ready 握手帧。
|
||
- omp 有 `--mode rpc-ui`(UI 能力标记 + 扩展 UI 桥),Ygent/YCode 侧历史上用过;pi 的对应物是 RPC Extension UI 记录族。
|
||
- omp 拒收 `@file` 命令行参数(同 pi),文件引用走 prompt。
|
||
- **嵌入 SDK**:omp 暴露 `ModelRegistry`/`SessionManager`/`createAgentSession`;pi 有官方 TypeScript SDK + `RpcClient`。两者都支持"进程外 RPC"和"进程内 SDK"两档集成。
|
||
- **编辑器协议**:omp 提供 ACP(Zed 等);pi 侧公开文档未见 ACP 一等支持(以 RPC/SDK 为主)。
|
||
|
||
### 4.5 版本与维护
|
||
|
||
- omp:fork 后自主版本线(18.x),节奏极快(README 数据 31,158 commits、910 tags);本机 18.6.3 落后上游约 5 个 minor(18.11.2)。
|
||
- pi:上游按 lockstep 发全包 1.3.0;供应链加固(精确锁版本、min-release-age、安装锁、CI 审计)明显更工程化,说明其定位偏"被依赖的平台"。
|
||
|
||
---
|
||
|
||
## 5. 对 YCode 的含义(不预设结论)
|
||
|
||
1. **现内核归属与版本**:YCode 用的 `omp.exe 18.6.3` 是 omp(oh-my-pi),不是 Pi 上游。记录内核版本时可直接标注 "omp (oh-my-pi) 18.6.3",避免与上游 Pi 混淆。
|
||
2. **协议同源 ≠ 能力等价**:omp 适配层(`src/main/omp.ts` + `agent/omp-turn.ts`)与 pi 的 RPC 形态高度相似,若未来评估"内核可替换性/双内核",pi 是迁移成本最低的候选;但按 `AGENTS.md`,等价性必须按工作包逐项验证,不能由协议相似直接推论。
|
||
3. **功能对齐视角**:WorkBuddy 侧的能力面(计划、子代理、技能、MCP、审批/问答、压缩续写)与 omp 的"全内置"路线匹配度更高;换成上游 Pi 则这些都需要宿主自建(扩展/Docker 化权限等),反而是额外工作量。
|
||
4. **版本差**:本机 18.6.3 与上游 18.11.2 的差异清单未做;升级属内核变更,需要单独验证回合语义/事件兼容性。
|
||
|
||
---
|
||
|
||
## 6. 未验证项(需另行取证)
|
||
|
||
- [ ] 本机 omp 18.6.3 与上游 18.11.2 的具体差异(未逐项 diff changelog)。
|
||
- [ ] pi 1.3.0 的 RPC 与 omp 18.x 的 RPC 逐帧差异(ready 帧、版本协商、事件命名、终态语义)未做真实对照实验。
|
||
- [ ] omp 对 pi 扩展生态的兼容程度(fork 后 diverge 深度)未核查。
|
||
- [ ] 两者"子代理/计划/审批"具体行为对 YCode 复刻 WorkBuddy 语义的等价性未评估。
|
||
- [ ] 星标数等社区指标:omp ~3.6 万(GitHub 2026-10-16 抓取);pi 侧第三方报道约 5.5 万,未以 GitHub 页面直证,仅作量级参考。
|
||
|
||
---
|
||
|
||
## 7. 来源
|
||
|
||
| 来源 | URL | 采集日期 |
|
||
|---|---|---|
|
||
| omp 官网首页 | https://omp.sh | 2026-10-17 |
|
||
| omp CLI 参考 | https://omp.sh/docs/cli | 2026-10-17 |
|
||
| omp RPC 模式 | https://omp.sh/docs/rpc | 2026-10-17 |
|
||
| omp 文档总览 | https://omp.sh/docs | 2026-10-17 |
|
||
| omp GitHub(fork 说明、21 项特性、Rust 核心、v18.11.2) | https://github.com/can1357/oh-my-pi | 2026-10-17 |
|
||
| Pi 仓库 README(极简定位、跳过项、权限模型、包列表) | https://github.com/badlogic/pi-mono(重定向至 earendil-works/pi) | 2026-10-17 |
|
||
| Pi RPC 模式 | https://pi.dev/docs/latest/rpc | 2026-10-17 |
|
||
| Pi MCP 支持 | https://pi.dev/docs/latest/mcp | 2026-10-17 |
|
||
| npm:pi-coding-agent 1.3.0 | https://registry.npmjs.org/@earendil-works/pi-coding-agent/latest | 2026-10-17 |
|
||
| npm:oh-my-pi 18.11.2 | https://registry.npmjs.org/@oh-my-pi/pi-coding-agent/latest | 2026-10-17 |
|
||
| 第三方 Pi 深度拆解(4 工具、循环语义) | needhelp.icu / yeyulingfeng.com / 0bserver07.github.io/chimera | 2026-10-17 |
|
||
|
||
> 注:社区指标与第三方文章仅作背景参考;凡引用均以官方仓库/文档为准,未验证项已列于第 6 节。
|