
description: “Oh My Pi(omp)是 Pi 编码智能体的重型 fork,专攻 harness 层 —— Hashline 哈希锚点编辑让 Grok Code Fast 1 编辑成功率从 6.7% 飙到 68.3%,LSP 完整接入让重命名同步更新 barrel/re-export,真调试器让 lldb/dlv/debugpy 接管段错误与死锁。本文 35 分钟讲透 19 npm + 8 Rust crate 双 monorepo 架构 + 8 大创新亮点 + 35 分钟 5 步实战。”
Oh My Pi 调研:28K stars 的 Pi 重型 fork 凭什么让 Grok 编辑成功率从 6.7% 飙到 68.3%
一句话价值 :Oh My Pi(缩写
omp)是 Pi 编码智能体的 重型 fork,不靠堆功能取胜,而是把模型与真实开发环境之间的 harness 层 做到 IDE 级 —— Hashline 哈希锚点编辑、LSP 重命名同步、真调试器接入、子智能体 worktree 隔离,让 60+ LLM Provider 的代码产出从 ” 看起来聪明 ” 变成 ” 真正能落地 ”。上一期 P22 Pi 调研 讲了源头 Pi 的 ” 克制哲学 ”。这一期讲 Pi 被 fork 后被重型化的过程 —— 同一个作者 Mario Zechner(badlogic)居然亲自下场贡献 1,343 次提交,父子同台。
一、破题:当 Claude Code / Codex / Cursor 都内卷 ” 哪个模型更强 ”,oh-my-pi 把战场拉到 harness 层
2026 年的 AI 编程助手赛道已经分成了两条路:
- 模型内卷派:Claude Code、Codex CLI、Cursor —— 把模型锁死在自家最强旗舰上,赌的是 ” 模型越强越好用 ”。
- 工程内卷派 :Oh My Pi、Pi、Aider —— 模型哪家都行,关键是 让模型真的能改代码、能跑测试、能调 bug。
oh-my-pi 的开发者 Can Bölük 把后者的核心问题命名为 “Harness Problem” —— 模型明明知道要改哪一行代码,却因为 补丁格式不稳定、字符串匹配失败、上下文浪费、工具返回啰嗦,表现得像不会写代码。模型与工作区之间的所有环节(工具 schema、错误处理、状态管理、编辑锚定)才是大量失败的真正根源。
为了验证这个判断,oh-my-pi 在 4 个主流模型上跑了一组对比测试:
| 模型 | 指标 | 改动 |
|---|---|---|
| Grok Code Fast 1 | 编辑成功率 | 6.7% → 68.3%(≈10 倍) |
| Gemini 3 Flash | 编辑成功率 | +5pp(超过 Google 自家 str_replace) |
| Grok 4 Fast | 输出 token | −61%(retry 循环消失) |
| MiniMax 2.1 | Pass rate | 2.1×(同 weights / 同 prompt) |
核心信号:换 harness 不换模型,效果就翻 10 倍。这就是 oh-my-pi 8 个月内从 0 冲到 28,657 ⭐(Fork 数 2,862)的根本原因。
二、核心定位:和 Pi 到底什么关系?
| 维度 | Pi(earendil-works) | Oh My Pi(omp) |
|---|---|---|
| 主仓 | earendil-works/pi |
can1357/oh-my-pi |
| ⭐ 实时(2026-08-31) | 98,728 | 28,657 |
| 哲学 | self-extensible —— agent 改自己 | IDE wired in —— harness 重型化 |
| 仓库数 | 5 个 npm package(极简 monorepo) | 19 npm + 8 Rust crate(重型双 monorepo) |
| 上游作者 | Mario Zechner 主导 | Can Bölük fork,badlogic 亲自下场贡献 1,343 commits |
| 调试支持 | 简单日志 | lldb / dlv / debugpy 真接入 |
| LSP 操作 | 基础 | 13 个 + workspace 级重命名 |
| 上下文压缩 | 默认 | Bitmap-frame snapcompact + SQuAD eval suite |
| 适配范围 | 极客个人 | 金融 / 政企 / 医疗重型工程团队 |
一句话:Pi 是 ” 克制到极致的脚手架 ”,Oh My Pi 是 ” 重型但全装好的工程化产品 ”。前者适合打造自己的 AI 编程栈,后者直接当企业级 IDE 替代品用。
三、3 大场景:oh-my-pi 在真实工程里解决什么问题?
场景 1:Hashline 编辑 —— 模型终于不会 ” 复述错代码 ”
传统 Agent 编辑方式是让模型找一段旧文本再替换成新文本。这个方式脆弱 —— 模型必须把缩进、换行、特殊字符全部复述准确;遇到多匹配项或文件已被其他工具改过,几乎必然失败。
oh-my-pi 的 Hashline 给 每一行代码加短哈希锚点,让模型通过锚点表达 ” 我要改这里 ”,而不是靠复述旧内容来证明自己找对了位置。
实测结果:Grok Code Fast 1 的编辑成功率从 6.7% 飙升到 68.3%。这不是模型升级,是 harness 升级。
场景 2:LSP wired into every write —— 重命名一个函数,整个工程级联更新
IDE 最值钱的能力不是高亮和补全,是它知道 代码之间的符号关系。一个函数在哪定义、在哪被引用、移动文件时哪些 import 要改、哪些 re-export 会受影响 —— 这些信息藏在 LSP 里。
oh-my-pi 把 LSP 深度集成到智能体。重命名一个函数时,系统自动走 workspace/willRenameFiles,同步更新所有引用、barrel 文件、别名导入,支持代码诊断、代码导航、格式化等操作。终端里的 AI 真正拥有 IDE 级别的代码理解和重构能力。
对比传统 Agent:传统只能改一两个文件,改完需要人工 grep 全工程去修遗漏的 import —— 修不完就 build 失败。
场景 3:Drives a real debugger —— 不再是 ” 打日志猜错 ”
许多 Agent 遇到 C 段错误、Go 服务卡死、Python 进程挂起时,只能让模型跑测试、看报错、加日志、再猜下一步。人类开发者遇到这类问题,通常直接打开调试器。
oh-my-pi 的思路是 Agent 也要能打开调试器:
- C 段错误:接入
lldb,step 到坏指针,读 frame - Go 服务卡死:接入
dlv,walk goroutines - Python 进程挂起:接入
debugpy,pause / inspect / evaluate
这让模型不再只是 ” 读日志猜错 ”,而能 看到程序运行时的关键状态。
四、技术选型:oh-my-pi vs Pi vs Claude Code vs Codex vs Aider
| 维度 | Oh My Pi | Pi | Claude Code | Codex CLI | Aider |
|---|---|---|---|---|---|
| License | MIT ✅ | MIT | 闭源 | 闭源 | Apache-2.0 |
| Stars(实时) | 28,657 | 98,728 | N/A | N/A | ~38K |
| 主语言 | TypeScript + Rust | TypeScript | TypeScript(黑盒) | TypeScript(黑盒) | Python |
| 模型锁定 | 60+ Provider 全支持 | 15+ Provider | Anthropic 锁定 | OpenAI 锁定 | 多 Provider |
| 编辑格式 | Hashline(哈希锚点) | 字符串匹配 | 内部 | 内部 | 字符串匹配 |
| LSP 集成 | 13 操作 + workspace 级 | 基础 | 部分 | 部分 | 无 |
| 调试接入 | lldb / dlv / debugpy | 无 | 无 | 无 | 无 |
| 子智能体 | isolated worktree | 基础 | 否 | 否 | 否 |
| 流式规则 | TTSR 正则触发 | 无 | 无 | 无 | 无 |
| 安装 | 一行脚本 / brew / bun / nix / mise | npm 全局 | npm / brew | npm / brew | pip |
| 学习曲线 | 中(Rust core 80k 行) | 低(极简) | 低 | 低 | 中 |
核心判断:
- 要模型中立 + 工程化重型:选 Oh My Pi
- 要极简自己造轮子:选 Pi
- 要厂商旗舰闭箱即用:选 Claude Code / Codex
- Python 数据科学 + Git 工作流:选 Aider
五、3 大组件深度拆解
5.1 双 monorepo 架构:19 npm + 8 Rust crate
oh-my-pi 跟 Pi 一样是 monorepo,但规模完全不在一个量级。Pi 只有 5 个 npm 包;oh-my-pi 有 19 个 npm package + 8 个 Rust crate,形成 TypeScript 主进程 + Rust 原生加速的 双 monorepo 架构。
核心 npm packages(按职责分类):
| Package | 职责 |
|---|---|
@oh-my-pi/pi-ai |
统一 60+ LLM provider 客户端 + 流式 |
@oh-my-pi/pi-catalog |
模型目录:bundled model database + provider descriptors |
@oh-my-pi/pi-agent-core |
Agent runtime(tool calling + state management) |
@oh-my-pi/pi-coding-agent |
交互式 CLI + SDK |
@oh-my-pi/pi-tui |
差分渲染终端 UI |
@oh-my-pi/pi-natives |
N-API 绑定(grep / shell / image / syntax highlight) |
@oh-my-pi/omp-stats |
本地可观测性 dashboard(用量统计) |
@oh-my-pi/hashline |
Hashline 行锚点补丁语言(核心创新) |
@oh-my-pi/pi-mnemopi |
本地 SQLite 记忆引擎(Agent 长期记忆) |
@oh-my-pi/snapcompact |
Bitmap-frame 上下文压缩 + SQuAD eval suite |
@oh-my-pi/swarm-extension |
Swarm 编排扩展 |
@oh-my-pi/pi-metaharness |
统一 benchmark runner + Harbor run storage + REST/SSE API |
@oh-my-pi/browser-relay |
Chrome 扩展驱动现有浏览器 tab |
@oh-my-pi/typescript-edit-benchmark |
基于 TS 源变异的编辑基准测试 |
| … | 共 19 个 |
Rust crates(N-API 原生加速):
| Crate | 职责 |
|---|---|
pi-natives |
核心 N-API cdylib(聚合下方 crates) |
pi-shell |
嵌入式 shell / PTY / 进程管理(基于 brush-*) |
pi-ast |
tree-sitter 代码摘要 + AST(50+ 语言) |
pi-iso |
Task 隔离 backend(APFS / btrfs / zfs reflinks / overlayfs / projfs) |
pi-voice |
音频捕获 / Opus codec / WebRTC 流 |
pi-walker |
并行 ignore-aware filesystem walker |
brush-core |
Vendored fork of brush-shell(嵌入式 bash 执行) |
pi-builtins |
67 个 bash builtins |
关键判断:TypeScript 主进程保证开发速度,Rust native 处理 CPU 密集 + 系统调用密集(grep / shell / AST),架构上 Pi 的 ” 克制的 monorepo” → oh-my-pi 的 ” 重型 monorepo + Rust 双栈 ” 是质的飞越。
5.2 badlogic 亲自下场:父子同台
看贡献者榜会看到一个反常识的事实:Pi 作者 Mario Zechner(GitHub: badlogic)以 1,343 次提交位列 oh-my-pi 贡献者第二(仅次于 fork 作者 Can Bölük 的 11,172 次)。
| 贡献者 | 提交数 | 角色 |
|---|---|---|
| can1357 | 11,172 | 主作者 / Can Bölük |
| roboomp | 3,336 | 社区核心贡献者 |
| badlogic | 1,343 | Pi 原创作者 Mario Zechner |
| Mathews-Tom | 372 | 社区 |
| metaphorics | 312 | 社区 |
这种 ” 被 fork 后原作者反而来帮忙改进 ” 在开源圈极罕见。意味着:
- 接口兼容 得到原作者背书 —— Pi 的所有插件 / Skill / MCP Server 几乎都能直接迁移到 omp
- 核心架构决策 原作者认可 —— 比如 pi-mono 的 monorepo 结构 + Rust native 加速的延续
- 项目稳定性 有 Pi 生态的延续性,不会出现 ”fork 后两年废弃 ” 的风险
5.3 8 大创新亮点(harness 层深度优化)
| 创新 | 解决什么 |
|---|---|
| ① Hashline 编辑 | 字符串匹配脆弱 → 哈希锚点稳定(成功率 6.7% → 68.3%) |
| ② LSP wired into every write | rename 只改一两个文件 → workspace 级联改 barrel/re-export |
| ③ Drives a real debugger | 加日志猜错 → lldb/dlv/debugpy 直接看 frame |
| ④ Time-traveling stream rules (TTSR) | 规则全程占用 context → 正则触发才注入 |
| ⑤ First-class subagents | subagent 共享 worktree 互相污染 → 隔离 worktree + schema-validated return |
| ⑥ Web search chain | 单一搜索源不够 → 14 ranked providers + arXiv PDF / GitHub / SO 结构化 markdown |
| ⑦ Unapologently native | shell out 到 rg/grep/find fork-exec → 内嵌进程内 ripgrep/brush |
| ⑧ Code review with priorities | review 只给一段评论 → P0-P3 priority + verdict + 可执行任务 |
每个创新背后都是一个 真实的工程痛点 。这不是 ” 功能堆砌 ”,而是“ 把每个环节的失败率压到最低 ” 的工程哲学。
六、35 分钟 5 步实战:从零跑通 oh-my-pi
第 1 步:5 分钟安装
oh-my-pi 提供 5 种安装方式覆盖所有平台:
# macOS / Linux (推荐)
curl -fsSL https://omp.sh/install | sh
# Homebrew
brew install can1357/tap/omp
# Bun 全局 (推荐给 TS 开发者)
bun install -g @oh-my-pi/pi-coding-agent
# Windows PowerShell
irm https://omp.sh/install.ps1 | iex
# Nix (声明式)
nix profile install github:can1357/oh-my-pi
# pinned versions (mise)
mise use -g github:can1357/oh-my-pi
注意 Alpine/musl 系统 需要先装 libstdc++/libgcc:
apk add libstdc++ libgcc
第 2 步:5 分钟配 API Key
omp config path # 查看生效的 agent 目录(含 config.yml)omp -p 'hello' # 首次运行会引导你设置 provider + API Key
支持的 60+ provider 中 最常用的 5 个:
| Provider | 适配场景 |
|---|---|
| Anthropic | Claude Sonnet / Opus(默认推荐) |
| OpenAI | GPT-5 / GPT-4o |
| Gemini 3 Flash | |
| Bedrock | AWS 企业内网 |
| Ollama | 完全本地(无 API Key) |
第 3 步:10 分钟写第一个 agent
创建一个 my-agent.ts:
import {createAgentSession, SessionManager} from '@oh-my-pi/pi-coding-agent';
const {session} = await createAgentSession({sessionManager: SessionManager.inMemory(),
authStorage: /* your auth storage */,
modelRegistry: /* your model registry */,
});
session.subscribe((event) => {
if (event.type === 'message_update' &&
event.assistantMessageEvent.type === 'text_delta') {process.stdout.write(event.assistantMessageEvent.delta);
}
});
await session.prompt('What files are in the current directory?');
或者更简单的 shell 调用:
omp --model claude-sonnet-4.5 '重构 src/server.ts,把所有 callback 改成 async/await'
第 4 步:10 分钟验证 8 大创新
# ① Hashline 编辑验证
omp '把 src/utils.ts 里 parseUrl 函数重命名为 parseUrlV2,自动更新所有引用'
# → 看到 "workspace/willRenameFiles" 调用 + 同步更新 7 个引用文件
# ② LSP wired 验证
omp '把 src/types.ts 里 User 类型改成 UserEntity,所有 import 也跟着改'
# → 看到类型诊断 + barrel 文件自动更新
# ③ 真调试器验证
omp '段错误在 src/crc.c:42,attach lldb 找到根因'
# → 看到 lldb attach + frame 输出
# ④ TTSR 验证
# 配置规则:" 不要用 deprecated API",触发时自动注入
# ⑤ Subagent 隔离验证
omp '并行检查 3 个 npm package 的 type 定义'
# → 看到 task fan-out 到 3 个 worktree
第 5 步:5 分钟接通 MCP / 调 IDE
# 启动 collab live session,把链接发给别人一起用
omp --collab
# 用 ACP (Agent Client Protocol) 让外部编辑器接管
omp acp
# 启动 RPC 模式供其他语言嵌入
omp --mode rpc --no-session
# 然后从 stdin 发 JSON-RPC:
# {"id":"req-1","type":"prompt","message":"List all .ts files"}
七、3 大坑 + 修复
坑 1:Hashline 哈希碰撞 / 锚点漂移
症状:在并发编辑中,行内容变了但 hash 没变,模型锚点到错位置。
修复:
# settings
hashline:
revalidate_on_conflict: true
fallback_to_str_replace: true # 哈希失败时回退字符串匹配
max_concurrent_edits: 1 # 同一文件不并发
坑 2:LSP workspace 重命名冲突 barrel
症状:重命名时如果目标名字在 barrel 文件里有同名导出,import 路径会冲突。
修复:
# settings
lsp:
rename_strategy: "preserve_alias" # 保留原 alias 不破坏现有 import
barrel_merge: "auto" # 自动合并 barrel 文件
report_unresolved: true # 不解决就报告,不要猜
坑 3:debug bridge 权限 / 系统调用失败
症状:lldb / dlv / debugpy 接入需要 ptrace 权限,容器里默认禁用。
修复:
# Linux 容器加 ptrace 权限
docker run --cap-add=SYS_PTRACE --security-opt seccomp=unconfined ...
# macOS 需要 codesign
codesign --sign - --force --deep /path/to/omp
# 调试 DAP 设置
# settings.json:
{
"dap": {
"auto_attach": true,
"default_debugger": "lldb" // Linux/macOS C/C++/Rust
// "default_debugger": "dlv" // Go
// "default_debugger": "debugpy" // Python
}
}
八、商业场景 + 报价参考
| 场景 | 周期 | 报价 |
|---|---|---|
| PoC:跑通 Hashline + LSP + 真调试器,1 个代码库试点 | 2-3 周 | 5-15 万 |
| 完整落地:60+ provider 接入 + MCP server 集成 + 团队培训 | 1-2 月 | 20-50 万 |
| 企业级改造:金融 / 政企 / 医疗,audit log + 多租户 + 私有部署 | 3-6 月 | 50-200 万 |
对照传统方案 :传统 IDE 集成(如 Cursor Business $20/ 月 / 席 + JetBrains $779/ 年 / 席)+ 内部 AI 平台搭建 6-12 月 + 持续维护团队 3-5 人 ≈ 第一年成本 80-300 万 ,oh-my-pi 自托管方案 第一年能砍掉 60-80% 成本,且不锁定任何 LLM 厂商。
九、总结:oh-my-pi 是不是 Pi 的 ” 正确打开方式 ”?
是。当 Pi 还是 ” 克制脚手架 ” 时,oh-my-pi 选择了 ” 重型但开箱即用 ” 的工程化路径 —— 用 19 npm + 8 Rust crate 的双 monorepo 架构,把 8 大创新(Hashline / LSP 真接入 / 真调试器 / TTSR / subagent / web search / native core / code review)做到位。
加上 Pi 作者 badlogic 亲自下场贡献 1,343 次提交,oh-my-pi 不是 ”fork 后另起炉灶 ”,而是 ” 父子同台 ”。这种延续性是任何其他 coding agent 工具都难以复制的优势。
3 个最值得用的理由:
- Harness 层创新让任何模型都更强 —— Grok Code Fast 1 编辑成功率 10 倍提升证明了 ” 换 harness 不换模型 ” 的可行性。
- 企业级工程化能力开箱即用 —— LSP 真接入 + 真调试器 + worktree 隔离 + 60+ provider,对工程团队极度友好。
- 父子同台 = 长期可持续 —— badlogic 加持 + MIT ✅ + 周更 1-2 个版本,2 年内不用担心项目废弃。
4 周读者实践路线图:
| 周次 | 任务 |
|---|---|
| 第 1 周 | 安装 omp + 配 API Key + 跑通 5 大安装方式 |
| 第 2 周 | 接入 1 个真实代码库,对比 Cursor / Claude Code 在 Hashline 编辑上的差异 |
| 第 3 周 | 配置 LSP 真接入,验证重命名 / barrel / 引用更新的工程级联效果 |
| 第 4 周 | 接入真调试器,处理 1 个真实段错误,对比 ” 打日志 ”vs”lldb attach” |
一句话价值:Oh My Pi 用 19 npm + 8 Rust crate 把 ”AI 真的能写代码 ” 这件事做到 IDE 级。当 Claude Code / Codex / Cursor 还在内卷 ” 哪个模型更强 ”,oh-my-pi 已经在 harness 层把战火烧到了真正决定生产力的地方。
参考
- Oh My Pi GitHub —— 主仓,28,657 ⭐ / MIT
- omp.sh 官网 —— 文档 + 安装 + benchmark
- Can Bölük – The Harness Problem —— oh-my-pi 设计哲学原文
- Mario Zechner – Pi 原始设计 —— Pi 起源,badlogic 个人博客
- earendil-works/pi GitHub —— Pi 主仓,98,728 ⭐,上一期 P22 Pi 调研 详解
- Time-Traveling Stream Rules (TTSR) 设计 —— TTSR 官方文档
- LSP workspace/willRenameFiles 规范 —— LSP 重命名协议
- DAP Debug Adapter Protocol —— 调试接入规范
- MCP Model Context Protocol —— MCP 协议
- Node.js N-API —— Rust 与 Node 桥接
- tree-sitter 语法库 —— 50+ 语言 AST 基础
- Brush-shell —— oh-my-pi vendored 的 bash 实现
- 上一期 P22 Pi 调研 —— 源头 Pi 详解
- 本期 Oh My Pi 调研 —— 本篇,oh-my-pi 重型 fork 详解