oh-my-pi 是什么?

oh-my-pi(omp)是一个 TypeScript + Rust 写的终端 AI 编码 agent,在 Mario Zechner 的 Pi 之上做「batteries included」加强:hashline 按内容哈希锚点编辑、LSP 接进每次写入、真实调试器(lldb/dlv/debugpy)、持久 Python+Bun 双 kernel、并行 subagent、内置浏览器,~27000 行 Rust 把别的 harness 要 shell out 的活做进进程内,支持 40+ provider、一个 omp 二进制跑 macOS/Linux/Windows 不靠 WSL。

⭐ 7,637 Stars 🍴 620 Forks TypeScript MIT 作者: can1357
来源:README desc + 'The Pi you love' + '~27,000 lines of Rust' 节 查看 GitHub 仓库 →

为什么值得关注

终端编码 agent 已经卷成红海,omp 的差异化是「工程深度」而非又一个 TUI 套壳:它把别的 harness 靠 shell out(rg/grep/find/bash)或外挂工具做的事,用 ~27000 行 Rust 链进进程内(ripgrep/glob/find in-process、brush 当 bash 且会话跨调用存活),一个二进制跨三平台无需 WSL。再叠上一串别家没有的机制——hashline 按内容哈希锚点编辑(Grok 4 Fast 同样工作省 61% 输出 token)、time-traveling stream rules(regex 中途打断流、注入规则、原点重试)、把 GitHub/PR/conflict/subagent 输出全做成 pr:// / conflict:// / agent:// 这种 FS 形态 URL 让一个 read 工具通吃、ACP 直接在 Zed 里跑。高频迭代(v15.x、一天多个 release)+ MIT + 40+ provider,是「把编码 agent harness 工程化做到罕见深度」这条线上很硬的开源实现。

来源:README '~27,000 lines of Rust' / 'Unapologetically native' / Hashline / 各特性节

核心功能

Hashline:按内容哈希锚点编辑

edit 工具用 content-hash 锚点而非重打要改的行,模型指 anchor 就行,消除空白符之争和 string-not-found 循环;编辑过期文件时锚点发散会在打补丁前被拒,避免污染。README 称 Grok 4 Fast 同样工作省 61% 输出 token。配套 ast_edit 走 ast-grep 做结构化改写、改前出 (proposed) 预览卡、resolve 才落盘(原子全有或全无)。

来源:README '09 Hashline' / '17 Preview then accept' + 工具表(edit/ast_edit)
进程内原生工具 + 双 kernel 代码执行

ripgrep/glob/find 链进进程内、brush 作为 bash(会话跨调用存活),不 fork-exec、不靠 rg/grep 系统二进制,同一 omp 二进制跑 macOS/Linux/Windows 无 WSL。eval 跑持久 Python + Bun worker 双 kernel,两个 kernel 都能经 loopback bridge 回调 agent 自己的 read/search/task 工具——Python 里 tool.read 读 CSV、JavaScript 里画图,全程不出 cell。

来源:README '01 Code execution' / '07 Unapologetically native' + crates(pi-shell / brush-*)
LSP 接进每次写入 + 真实调试器(DAP)

rename 走 workspace/willRenameFiles,re-export、barrel 文件、aliased import 在文件移动前就更新,IDE 知道的 agent 都知道;lsp 工具提供诊断/导航/符号/rename/code action。debug 工具驱动真实 DAP 会话:C 段错误 attach lldb、Go 卡死 attach dlv、Python 卡住用 debugpy,断点/单步/线程/栈/变量全有,而非撒 print。

来源:README '02 LSP' / '03 Drives a real debugger' + 工具表(lsp/debug)
Time-traveling stream rules(流中途纠偏)

规则平时休眠,模型一旦跑偏,regex 命中就中途打断 token 流、把规则作为 system reminder 注入、从同一点重试——纠偏不用每轮都付上下文税,注入还能挺过 compaction 所以修正持久。例:要写 Box::leak 时被规则拦下,改提 Arc

来源:README '04 Time-traveling stream rules'
First-class subagents + 内部 :// 路径协议

task 把作业 fan out 到隔离 worktree,每个 worker 自己的工具面,最终 yield 是 schema 校验过的对象、父级直接读(无 prose 解析、无兄弟间合并冲突)。十种内部 scheme(pr:// / issue:// / agent:// / skill:// / rule:// 等)在每个 FS 形态工具里透明解析:read pr://1428 和 read src/foo.ts 同形、search 像目录一样走 diff、agent:///findings.0.path 按路径取 subagent 输出字段。

来源:README '05 First-class subagents' / '15 Read PRs Walk skills'
GitHub / 冲突 / 配置「皆为文件系统」

不做 gh_pr_view 之类专用工具——PR 是路径、read 直接读;每个 merge 冲突变一个 URL,写 @theirs/@ours/@base 到 conflict://N 即解(批量 conflict://*);还原样读 8 种已存在的他家配置(Cursor MDC、Cline .clinerules、Codex AGENTS.md、Copilot applyTo 等)无需迁移。

来源:README '10 GitHub is just another filesystem' / '13 Inherits' / '16 Conflict resolution'
Hindsight 自管记忆 + 32 工具单命名空间

agent 用 retain 写入持久事实、recall 取回、reflect 综合,并把每个 session 压成下次首轮加载的 mental model,默认 project-scoped。32 个工具(read/write/edit/bash/eval/lsp/debug/task/browser/web_search 等)在同一命名空间,--tools 钉住活跃集、其余隐藏但建索引,search_tool_bm25 中途按需召回。40+ provider 按 role(default/smol/slow/plan/commit)路由,/model 热切。

来源:README '11 Hindsight' + 'Whatever the task needs' 工具表 + 'Forty-plus providers'
四入口(交互 / SDK / RPC / ACP)+ 真实浏览器

四种驱动方式:交互式 TUI、Node SDK 内嵌、RPC over stdio、ACP 直接在 Zed 等编辑器里跑(读你正看的 buffer、走编辑器保存路径)。browser 工具用 Puppeteer 默认开 stealth(页面看到正常用户而非 headless bot),同一 API 能驱动 Electron 应用——指向 Slack 就像读网页一样读 DM。

来源:README 'Four entry points' / '12 ACP' / '18 Drives a real browser'

技术架构

omp 是 Bun(1.3.14)管理的 TS + Rust 混合 monorepo。TypeScript 侧 packages/ 拆 agent(agent 核心)、ai(多 provider LLM 层)、coding-agent、tui(终端 UI)、natives(NAPI 绑定)、utils、stats、swarm-extension;Rust 侧 crates/ 有 pi-ast、pi-shell、pi-iso、pi-natives 和 vendored 的 brush-core/brush-builtins(内置 bash),通过 napi3 把 Rust 能力暴露给 Node。ast-grep-core + tree-sitter(50+ 语法)做结构化代码查询与改写;浏览器走 puppeteer-core,web UI 用 React 19 + solid-js + tailwind,协议层用 ACP SDK + Anthropic/OpenAI SDK,可观测用 OpenTelemetry。python/(130 文件,含 robomp)承载持久 Python kernel 与相关能力。数据流是「统一的 FS 形态工具面(read/write/edit/search 既读本地文件也读 pr:// / conflict:// / agent:// 等内部 scheme)+ 32 工具单命名空间 + role 路由的 40+ provider」,把 GitHub、冲突、subagent 输出、PDF、SQLite 都收敛成同一种 path 抽象。设计判断:把别家 shell out 的活用 ~27000 行 Rust 链进进程内、并用「一切皆 path」统一工具面,是极高密度的工程化取舍,换来跨平台一致性和 token 效率;代价是仓库 3066 文件、TS+Rust+Python 三语言 + napi 桥的构建与维护复杂度很高,单作者高频发版(一天多个)下回归面巨大,长期可维护性是最大变量。

来源:package.json(workspaces/catalog)+ Cargo.toml(crates/tree-sitter)+ tree + README

项目知识图谱

知识图谱:项目核心节点(中心)+ 核心功能(内环六边形)+ 关键技术依赖(外环 chip) ast-grep-core 0.39 + tree-sitter 0.25(50+ 语法)— 结构化代码查询/改写ast-grep-core… brush(vendored)— 进程内 bash;ripgrep/glob/find 链进进程brush(vendore… @anthropic-ai/sdk + openai + 40+ provider 路由@anthropic-ai/… puppeteer-core — 浏览器/Electron 驱动(默认 stealth)puppeteer-core React 19 + solid-js + tailwind — web UI;@xterm/headless — 终端React 19 + sol… Hashline:按内容哈希锚点编辑Hashline:按内容哈希… 进程内原生工具 + 双 kernel 代码执行进程内原生工具 + 双 k… LSP 接进每次写入 + 真实调试器(DAP)LSP 接进每次写入 + 真… Time-traveling stream rules(流中途纠偏)Time-traveling stre… First-class subagents + 内部 :// 路径协议First-class subagen… GitHub / 冲突 / 配置「皆为文件系统」GitHub / 冲突 / 配置… Hindsight 自管记忆 + 32 工具单命名空间Hindsight 自管记忆 +… 四入口(交互 / SDK / RPC / ACP)+ 真实浏览器四入口(交互 / SDK /… oh-my-pi 项目本体 核心功能 关键依赖

中心为项目本体,内环 = 核心功能模块,外环 = 关键技术依赖;按 deep.json 中的 core_features 与 tech_stack.key_deps 自动生成

技术栈

语言TypeScript(packages 主体)+ Rust(crates,edition 2024,~27000 行)+ Python(python/,持久 kernel)框架Bun 运行时 + monorepo;napi-rs(napi3)做 Rust↔Node 桥;TUI 自研;ACP SDK 接编辑器
ast-grep-core 0.39 + tree-sitter 0.2…brush(vendored)— 进程内 bash;ripgrep/gl…@anthropic-ai/sdk + openai + 40+ pro…puppeteer-coreReact 19 + solid-js + tailwindzod 4
单 omp 二进制跨 macOS/Linux/Windows(无 WSL);Bun 构建,biome + prettier 格式化;Dockerfile(含 Dockerfile.robomp);四入口(交互/SDK/RPC/ACP);MIT 协议;版本 15.2.1,一天多个 release 的高频迭代
来源:package.json + Cargo.toml + tree(Dockerfile/biome/bun.lock)

快速上手

# 安装(见 README Install 节,brew / 脚本 / npm 等) # 启动交互式 TUI omp # 钉住活跃工具集(其余隐藏但建索引,可被 search_tool_bm25 中途召回) omp --tools read,edit,bash,lsp,task # 按 role 路由模型(默认/便宜 subagent/深推理/plan 模式) omp --smol # 便宜模型跑 subagent fan-out omp --slow # 深度推理 omp --plan # plan 模式 # 会话内 /model 热切模型,Ctrl+P 在当前 role 的候选模型间循环 # 其它入口 # - SDK:在 Node 里内嵌 @oh-my-pi/pi-coding-agent # - RPC:over stdio 驱动 # - ACP:在 Zed 等编辑器里直接跑 omp # 常用:/review(P0-P3 + verdict 的代码评审)、omp commit(原子拆分提交) # 具体安装命令以 README Install 与 omp.sh 文档为准
来源:README Install / 'Whatever the task needs' / 'Forty-plus providers' / 'Four entry points'

使用场景

1. 想要「工程深度」终端编码 agent 的开发者:要真实 LSP rename、真实调试器(lldb/dlv/debugpy)、进程内 ripgrep/bash,而不是 shell out 拼凑的体验;2. token 敏感场景:用 hashline 按哈希锚点编辑大幅省输出 token(README 称 Grok 4 Fast 省 61%),role 路由让 subagent fan-out 走便宜模型;3. 跨平台一致:一个 omp 二进制在 macOS/Linux/Windows 跑、Windows 无需 WSL;4. 编辑器内驱动:通过 ACP 在 Zed 里用同一个 agent,读当前 buffer、走编辑器保存路径;5. 复杂多步任务:subagent 并行 + 隔离 worktree + schema 校验结果,/review 出 P0-P3 verdict,omp commit 原子拆分;6. 多 provider 团队:40+ provider 按 role 混搭,一个 /model 切换。

来源:README 各特性节 + 工具表 + provider 节

优势与局限

优势

  • 工程深度罕见:~27000 行 Rust 把 ripgrep/glob/find/bash 链进进程内、brush 会话跨调用存活,一个二进制跨三平台无 WSL,省掉别家 shell out 的 fork-exec 开销和跨平台脆弱性
  • 一批别家没有的机制:hashline 哈希锚点编辑(省 token + 拒过期补丁)、time-traveling stream rules(流中途纠偏)、一切皆 path(pr:// / conflict:// / agent:// 让一个 read 通吃 GitHub/冲突/subagent 输出)、真实 DAP 调试器
  • 工具面设计统一:32 工具单命名空间 + --tools 钉选 + search_tool_bm25 按需召回,read 通吃文件/归档/SQLite/PDF/notebook/URL/内部 scheme,心智模型一致、可教模型一套接口
  • 互操作性强:原样读 8 种他家配置(Cursor MDC/Cline/Codex AGENTS.md/Copilot 等)无需迁移,四入口(交互/SDK/RPC/ACP)适配不同集成场景,ACP 直接在 Zed 跑
  • 现代技术栈与高频迭代:Bun + Rust(edition 2024) + napi3 + ast-grep/tree-sitter(50+ 语法) + Puppeteer,MIT 协议,一天多个 release 的迭代速度(v15.x)

局限

  • 可维护性风险:3066 文件、TS + Rust + Python 三语言 + napi 桥的混合 monorepo,构建链复杂;看似单作者主导(can1357)+ 一天多个 release,回归面巨大、bus factor 是真实隐忧
  • 可测试性风险:核心能力(hashline 锚点正确性、真实 LSP/DAP 驱动、双 kernel loopback、浏览器 stealth)大量依赖真实外部进程(语言 server、调试器、Chromium)与真实模型行为,纯离线 CI 难覆盖;仓库有 typescript-edit-benchmark 但整体覆盖率未在材料中说明
  • 稳定性风险:版本号已到 15.x 且一天多个 release,说明 API/工具签名/行为仍在快速变动,下游 SDK/RPC 集成者要锁具体版本;大量功能 setting-gated 默认关闭也反映部分能力仍在打磨
  • 可扩展性 / 复杂度风险:32 工具 + 10 种内部 scheme + 40+ provider + role 路由的组合非常丰富,但学习与配置成本高,「一切皆 path」的抽象对不熟悉的用户有理解门槛,误用空间不小
  • 性能 / 资源风险:进程内链入大量原生能力 + 持久 Python+Bun 双 kernel + Puppeteer Chromium + 真实调试器,单会话常驻内存与启动成本未量化;重型能力同时开会吃资源
  • 依赖外部生态:真实 LSP 要对应语言 server、调试要 lldb/dlv/debugpy 在机、浏览器要 Chromium,能力可用性取决于本机环境是否齐备,跨机器一致性需用户自行保证
来源:综合 README + package.json + Cargo.toml + tree + release 节奏

最新版本

v15.2.1(2026-05-21)。最近 5 个 release 全在 3 天内:v15.1.6 (2026-05-19) → v15.1.7 (2026-05-19) → v15.1.8 (2026-05-20) → v15.1.9 (2026-05-21) → v15.2.1 (2026-05-21),一天多个版本的极高频迭代节奏;内部包统一 15.2.1 版本(@oh-my-pi/pi-coding-agent 等)。

来源:GitHub Releases API(5 个 tag)+ package.json catalog 版本

总结评价

如果你要一个「工程深度」拉满的终端编码 agent——真实 LSP rename、真实调试器、进程内 ripgrep/bash、跨平台无 WSL、hashline 省 token——omp 在这条线上是少见的硬货,一批机制(哈希锚点编辑、流中途纠偏、一切皆 path)别家确实没有。务实建议:1) 先用默认工具集跑通核心体验(read/edit/bash/lsp/task),再按需用 --tools 收窄、用 setting-gated 开关逐步打开 github/browser 等重能力;2) 真实 LSP/DAP/浏览器依赖本机装好对应 server/调试器/Chromium,能力可用性看环境,跨机器要自己保证一致;3) 版本到 15.x 且一天多个 release,SDK/RPC/ACP 集成者务必锁具体版本,别跟主分支上生产;4) token 敏感场景重点用 hashline 编辑 + role 路由(subagent 走 smol 便宜模型);5) 三语言 + napi 桥 + 单作者高频迭代意味着回归面大、bus factor 偏高,关键工作流自己留回退预案;6) 想在编辑器里用就走 ACP(Zed),想嵌进自己工具走 SDK/RPC。

来源:综合分析
透明度声明
本页内容由 AI(大语言模型)基于以下公开材料自动生成:GitHub README、代码目录结构、依赖文件、Release 信息。 分析时间: 2026-05-22 02:34. 质量评分: 100/100.

数据来源:README、GitHub API、依赖文件