Oh My Pi 调研:28K stars 的 Pi 重型 fork 凭什么让 Grok 编辑成功率从 6.7% 飙到 68.3% —— 60+ LLM Provider × Hashline × LSP × 真调试器

210次阅读
Oh My Pi 调研:28K stars 的 Pi 重型 fork 凭什么让 Grok 编辑成功率从 6.7% 飙到 68.3% —— 60+ LLM Provider × Hashline × LSP × 真调试器

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 后原作者反而来帮忙改进 ” 在开源圈极罕见。意味着:

  1. 接口兼容 得到原作者背书 —— Pi 的所有插件 / Skill / MCP Server 几乎都能直接迁移到 omp
  2. 核心架构决策 原作者认可 —— 比如 pi-mono 的 monorepo 结构 + Rust native 加速的延续
  3. 项目稳定性 有 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
Google 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 个最值得用的理由:

  1. Harness 层创新让任何模型都更强 —— Grok Code Fast 1 编辑成功率 10 倍提升证明了 ” 换 harness 不换模型 ” 的可行性。
  2. 企业级工程化能力开箱即用 —— LSP 真接入 + 真调试器 + worktree 隔离 + 60+ provider,对工程团队极度友好。
  3. 父子同台 = 长期可持续 —— 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 层把战火烧到了真正决定生产力的地方。


参考

  1. Oh My Pi GitHub —— 主仓,28,657 ⭐ / MIT
  2. omp.sh 官网 —— 文档 + 安装 + benchmark
  3. Can Bölük – The Harness Problem —— oh-my-pi 设计哲学原文
  4. Mario Zechner – Pi 原始设计 —— Pi 起源,badlogic 个人博客
  5. earendil-works/pi GitHub —— Pi 主仓,98,728 ⭐,上一期 P22 Pi 调研 详解
  6. Time-Traveling Stream Rules (TTSR) 设计 —— TTSR 官方文档
  7. LSP workspace/willRenameFiles 规范 —— LSP 重命名协议
  8. DAP Debug Adapter Protocol —— 调试接入规范
  9. MCP Model Context Protocol —— MCP 协议
  10. Node.js N-API —— Rust 与 Node 桥接
  11. tree-sitter 语法库 —— 50+ 语言 AST 基础
  12. Brush-shell —— oh-my-pi vendored 的 bash 实现
  13. 上一期 P22 Pi 调研 —— 源头 Pi 详解
  14. 本期 Oh My Pi 调研 —— 本篇,oh-my-pi 重型 fork 详解
正文完