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。
来源: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 / 各特性节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)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-*)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)规则平时休眠,模型一旦跑偏,regex 命中就中途打断 token 流、把规则作为 system reminder 注入、从同一点重试——纠偏不用每轮都付上下文税,注入还能挺过 compaction 所以修正持久。例:要写 Box::leak 时被规则拦下,改提 Arc
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://
不做 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'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'四种驱动方式:交互式 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中心为项目本体,内环 = 核心功能模块,外环 = 关键技术依赖;按 deep.json 中的 core_features 与 tech_stack.key_deps 自动生成
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 41. 想要「工程深度」终端编码 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 节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。
来源:综合分析