Oh My Pi
面向终端与编辑器的多模型编码代理,集成代码编辑、LSP、调试和协作工作流。
按维度查看评分与理由
证据显示:README 提到破坏性工具会暂停并请求权限(ACP 部分),但未提供默认权限策略或最小权限原则的详细说明。用户确认机制存在但仅提及,未展示具体实现。数据流透明度:README 描述 collab 会话中帧在客户端密封,中继不看到密钥,但未全面说明所有数据流。敏感数据处理:提及密钥和凭据,但未说明存储和加密细节。依赖安全:有 patchedDependencies 和 overrides,但未提供漏洞扫描或审计证据。外部影响:工具如 computer 和 browser 可影响系统,但未说明默认限制。回滚:提到 hashline 拒绝陈旧补丁,但未提供通用回滚机制。来源归属:明确标注为 Pi 的分叉,但发布者未验证。扣分原因:多数安全机制仅提及而无实现细节,且发布者身份未知。
证据显示:代码库有大量测试(如 agent-loop.test.ts),CI 配置完整,显示对一致性的重视。依赖可用性:使用 bun.lock 和 Cargo.lock 锁定版本,但未提供离线或镜像策略。失败消息:测试覆盖了中止和错误路径,但未提供用户可见的错误消息示例。扣分原因:静态审查无法验证运行时行为,但测试和 CI 存在表明可靠性有基础。
证据显示:README 详细描述了多种使用场景(终端、Zed、浏览器、桌面),并列出 31 个工具和 60+ 提供商,显示广泛的适用性。能力边界:工具列表和设置门控(如 github、security_scan 默认关闭)表明有边界控制。触发精度:magic keywords 有精确匹配规则,slash 命令有明确行为。环境适配:支持 macOS、Linux、Windows,并处理 musl 等特殊情况。扣分原因:未提供详细的配置文档或故障排除指南。
证据显示:README 结构清晰,有安装、工具、提供商等章节。安装说明详细,包括多种方法(curl、brew、bun、PowerShell)。命名稳定:版本号 17.2.12 一致。示例和 FAQ:README 有大量示例和截图,但无 FAQ 部分。已知限制:仅提及 Alpine/musl 问题,未全面列出。许可证:MIT 许可证明确。版本变更日志:有 CHANGELOG.md 链接。维护责任:有 CI 和发布流程,但发布者未验证。扣分原因:缺少 FAQ 和全面的已知限制列表。
证据显示:README 声称性能提升(如 Grok 4 Fast 减少 61% tokens),但无独立验证。输出可用性:工具返回结构化结果(如 subagent 返回 schema 验证对象)。边际价值:与 Pi 相比增加了许多功能(LSP、DAP、浏览器等)。成本效益:提供多种提供商和模型,可能降低成本,但未提供定价信息。扣分原因:性能声明无基准测试证据。
证据显示:README 中的声明(如性能提升)未提供可复现的基准或数据。交叉来源:仅依赖 README 和代码,无第三方验证。事实与推断分离:README 区分了功能描述和性能声明,但性能声明未标注为推断。扣分原因:缺乏可验证的基准和第三方确认。
- 发布者身份未验证,安装脚本(curl | sh)存在供应链风险,建议检查校验和。
- README 中的性能声明(如 token 减少)缺乏可复现的基准,不应作为购买或部署依据。
- 工具如 computer 和 browser 可访问桌面和浏览器,默认权限未明确,需谨慎配置。
- 依赖安全未提供漏洞扫描证据,建议使用前进行安全审计。
这个 Agent 能做什么,适合哪些场景?
Oh My Pi(omp)是一个以终端 TUI 为默认入口的编码代理,同时提供单次提示、Node/TypeScript SDK、stdio RPC 与 ACP 编辑器协议接口。项目由多个 TypeScript 包及 Rust 原生 N-API 组件组成,涵盖代理运行时、模型目录、终端 UI、协作协议、Hashline 补丁和本地 SQLite 记忆。它可调用文件、搜索、shell、持久 Python/JavaScript 单元、LSP、DAP 调试器、浏览器、Web 搜索及子代理等能力,并支持多家模型与 OpenAI 兼容服务。发行方式包括 macOS、Linux、Windows 的安装脚本、Homebrew、Bun 全局安装和 mise。适合希望在本地工作区内集中使用编码、调试、审查和多代理任务编排的开发者。
用户可运行 omp 进入交互式终端界面,或以 omp -p 执行单次提示。代理通过 read 读取文件、目录、SQLite、PDF、Notebook、URL 与内部 :// 路径,通过 search、find 定位内容和文件,并用 write、edit 或 ast_edit 产生改动;其中 edit 使用带内容哈希锚点的 Hashline 补丁,ast_edit 先生成待确认的结构化改写。它可用 bash 执行工作区命令、用 eval 运行可回调代理工具的持久 Python 与 JavaScript 单元、用 lsp 进行诊断和重命名,并以 debug 驱动 DAP 会话。task 可在隔离工作区中并行启动子代理并返回模式校验结果,github、browser、web_search 等功能按设置启用;通过 omp acp,编辑器可经 Agent Client Protocol 提供文件和终端 I/O。
- 使用 macOS、Linux 或 Windows 终端的开发者,需要让代理读取工作区、执行命令并以哈希锚点方式修改代码。
- 需要跨文件重命名、查找引用或处理代码操作的 TypeScript、Rust 或多语言项目维护者,可让代理调用
lsp。 - 正在排查 C、Go 或 Python 运行时问题的工程师,可通过
debug驱动 lldb-dap、dlv 或 debugpy 会话。 - 需要将代码审查、目录扫描或独立调研拆分给并行工作者的团队,可使用
task和隔离工作区。 - 为 Node/TypeScript 宿主、stdio 客户端或支持 ACP 的编辑器嵌入编码代理的工具开发者。
这个 Agent 有哪些优点和局限?
- 将
read、search、Hashlineedit、AST 改写、LSP 和 DAP 调试集中在同一代理工具面中。 - Rust 原生组件在进程内提供搜索、shell、AST、PTY、语法高亮和文件遍历,减少热路径上的外部命令调用。
- 支持 40 多个服务商、OpenAI 兼容端点、角色化模型路由、回退链与轮换凭据。
- 除 TUI 外还提供 Node SDK、stdio RPC 与 ACP,便于嵌入不同开发环境。
task支持隔离工作区、并行子代理和模式校验的返回结果。
- 完整使用依赖 Bun >= 1.3.14,部分本地原生能力还依赖其 Rust/N-API 发行组件。
- 模型服务、Web 搜索、浏览器、协作与 GitHub 等功能会带来网络连接、服务商认证或额外设置需求。
github、图像检查、TTS 与记忆相关工具默认关闭,必须按项目显式启用。- 虽然支持 Windows,但某些隔离后端依赖 APFS、btrfs、zfs、overlayfs、projfs 或 rcopy 等平台机制。
- README 未说明各模型提供商的定价,也未给出所有浏览器、调试适配器和协作中继的运行限制。
如何安装或部署这个 Agent?
macOS/Linux:curl -fsSL https://omp.sh/install | sh。Homebrew:brew install can1357/tap/omp。或推荐使用 Bun:bun install -g @oh-my-pi/pi-coding-agent。Windows PowerShell:irm https://omp.sh/install.ps1 | iex。运行环境要求为 macOS、Linux 或 Windows,以及 Bun >= 1.3.14;使用模型前需在 omp setup 或会话中的 /login 配置相应服务商认证。
如何使用这个 Agent?
在项目目录运行 omp 打开交互式代理,输入任务后由其按可用工具执行。一次性调用可使用 omp -p "list .ts files"。需要编辑器集成时运行 omp acp;需要 stdio NDJSON 接口时运行 omp --mode rpc --no-session。自定义 OpenAI 兼容服务可写入 ~/.omp/agent/models.yml,运行 omp models spark 验证后,在 omp setup 或 /model 中选择模型。
这个 Agent 与同类方案有什么区别?
该项目是 Mario Zechner 的 Pi(pi-mono)分支。README 将其定位为在 Pi 的基础上增加编码导向的会话、子代理、斜杠命令、扩展、原生工具和多服务商工作流。
常见问题
它必须绑定某一家模型服务吗?
它会直接修改工作区吗?
write 可创建或覆盖文件,edit 应用 Hashline 补丁;ast_edit 先返回待确认操作,需由 resolve 接受后才落盘。ACP 模式下,写入和部分 bash 操作由 session/request_permission 控制。能否在没有交互 TUI 的程序中使用?
ModelRegistry、SessionManager 与 createAgentSession;其他宿主可用 omp --mode rpc 的 NDJSON 接口。如何在多代理任务中避免工作区冲突?
task 可将子代理分发到隔离工作区,并让父代理读取其模式校验后的结果;README 声明这一模式旨在避免同级代理间的合并冲突。