问题:其他 Coding Agent 都在"壳"外面绕

你用 Claude Code 或 Codex CLI 写代码时,有没有遇到过这些场景:

这些问题的根因,在于大多数 Coding Agent 的 harness(工作框架)写得不够深——它们只是把 LLM API 包了一层 CLI,底层工具调用还是 fork/exec 外部进程(grep、find、bash)。

oh-my-pi(简称 omp)换了个思路:把底层工具全部用 Rust 内联到进程里,让 Agent 像一个真正有 IDE 经验的工程师一样干活。

它到底是什么

oh-my-pi 是 Pi(由 Mario Zechner / badlogic 创作)的 Fork 和深度进化版,由 Can Bölük 维护。它不是一个全新的 Agent,而是在 Pi 的地基上,把所有 Coding Agent 应该有的能力全部补齐。

核心数据:

真正有用的 12 个能力

omp 的特性列表很长,但真正让 Coding Agent 体验质变的,是这几件事:

1. Hashline 编辑:让 Agent 永远改对地方

大多数 Agent 写代码时,会返回完整的「前后文 + 要改的内容」给 LLM,LLM 再返回一个 diff。但 LLM 经常把行号数错,或者你的文件刚好被人改过一行,整个 diff 就错位了。

omp 的做法是 hashline——用内容哈希锚点而不是行号来定位。模型只需要说"找到包含 function foo(x, y) 的那行",omp 自动定位并应用修改。文件变动时锚点自动失效,拒绝应用错误的 patch。

实测效果:Grok 4 Fast 用 hashline 后,输出 token 减少了 61%,因为模型不用再重复输出它只想改那一行周围的内容。

2. LSP 直连:Agent 拥有 IDE 的全部知识

omp 把 LSP(Language Server Protocol)直接集成到工具链里。当 Agent 做 rename 操作时,它会走 workspace/willRenameFiles,自动更新所有引用—— barrel 文件、别名导入、导出重定向,全部同步。

你:把 formatBytes 改成 humanizeBytes
Agent:→ lsp rename formatBytes humanizeBytes
→ read format.ts 确认改动
→ read report.ts 确认改动
→ read cli.ts 确认改动
→ 5 处修改全部完成

这比你让 Agent 用 sed/regex 改要靠谱得多——LSP 知道你的代码结构,Agent 也就知道了。

3. 真实调试器驱动:不再 print 打天下

大多数 Coding Agent 遇到 Bug 的做法是让你加 console.log 或者 print。omp 的 Agent 可以直接驱动真实调试器(DAP):

你:这个 C 程序在 xorshift32 处崩溃
Agent:→ debug attach /tmp/demo
→ step to line 6
→ read variable x = 57351
→ "x went from 7 → 57351 (= 7 ^ (7<<13)),这是对的,崩溃在后续"
→ 继续调试...

3. 子 Agent 并行:task 工具

omp 有一个 task 工具,可以把一个大任务拆成多个子 Agent 并行执行,每个子 Agent 在自己的 workspace 里工作,互不干扰,最后聚合结果。

你:把这个功能拆成三个模块重写
Agent:→ task → 启动 3 个子 Agent
  → 子 Agent A:重写 auth 模块
  → 子 Agent B:重写 routes 模块
  → 子 Agent C:重写 utils 模块
  → 等待全部完成 → 聚合结果

子 Agent 的输出是 schema-validated 的结构化数据,主 Agent 可以直接读取字段,不需要从大段文本里解析。

4. Advisor 模式:第二个模型在看

omp 支持在同一个会话里跑两个模型——主模型负责干活,副模型(Advisor)负责读每一个回合的输出,发现问题时插入提示让主模型修正。

主模型(Grok 4 Fast):我把错误处理改成吞掉所有异常
Advisor(Claude Sonnet):⚠ 注意,这不符合用户之前的需求——用户明确要求错误要向上抛出
主模型:好的,我改回来,改用 try-catch + 日志

这个设计很像 Pair Programming——一个写,一个 review,实时交互。

5. 5 分钟记忆系统(Hindsight)

omp 的 Agent 有持久记忆,但不是靠 remember.md 文件。它用 SQLite 做本地存储,Agent 可以在运行中用 retain 工具写入关键事实,下次会话开始时用 recall 自动检索。

Agent:retain("项目使用 PostgreSQL,连接字符串在 .env")
Agent:retain("API 规范遵循 OpenAPI 3.0,详见 docs/api.yaml")

(下次会话)
Agent:recall("数据库连接配置")
→ 自动加载之前记住的事实

记忆是 project-scoped 的——这个项目记住的不会污染另一个项目。

6. GitHub 当文件系统用

omp 让 Agent 可以用 read pr://1428read issue://99search github:// 这样的路径直接读取 PR、issue、代码。不需要记住一堆 GitHub CLI 的参数,一个接口统一。

你:看看这个 PR 的 diff,告诉我能不能合
Agent:→ read pr://1428
→ /diff/1 读取第一个 hunk
→ 分析变更内容
→ "可以合,但有一个小问题:第 42 行的 import 没有用到"

7. 25 个搜索后端,一个 web_search 工具

omp 内置了 web_search 工具,背后挂了 25 个搜索引擎——Perplexity、Gemini、xAI、Exa、Tavily、Brave、Kagi、DuckDuckGo、Bing 等。你不需要一个个配,auto 模式会自动遍历。

更关键的是,它会把搜索结果的网页结构化提取成 Markdown——GitHub 页面、arXiv PDF、Stack Overflow、npm 文档,都能返回带锚点的结构化内容,Agent 可以直接引用和溯源。

8. 协作模式:一个链接,拉人入局

omp 有个 /collab 命令,把你的会话通过中继转发出去,生成一个链接和二维码。队友可以用 omp join 加入你的终端,或者直接在浏览器里看——只能看不能操作。

你:/collab
Agent:Collab session started!
→ omp join ws://relay.omp.sh/xxx
→ 二维码已生成

这是一个很适合 code review、结对编程的场景。

9. 自动导入已有配置

omp 会自动读取你电脑上已有的 Agent 配置——Claude Code 的 .claude/、Cursor 的 .cursor/、Windsurf 的 .windsurf/、Gemini 的 .gemini/、Codex 的 AGENTS.md、Copilot 的 .github/copilot/ 等。你之前配置好的规则和 skills,直接继承,不用迁移。

10. omp commit:原子提交,智能拆分

omp 内置了一个 omp commit 命令,它不会盲目地 git add -A && git commit。它会用 git diff 分析你的改动,把不相关的修改自动拆分成多个原子 commit,按依赖顺序排列。source 文件 > test 文件 > docs > config,lock files 不参与分析。

技术架构

omp 的架构分三层:

层级技术做什么
Rust 原生层N-API + libuvgrep、bash shell、AST、高亮、PTY、图片解码——全部内联,零 fork/exec
TypeScript 运行时Bun + Node.jsAgent 调度、工具编排、会话管理、LLM 客户端、记忆系统
TUI 层TypeScript终端 UI,工具调用卡片渲染、编辑预览、交互式选择器

Rust 部分 ~55,000 行,分四个 crate:pi-natives(核心 N-API 绑定)、pi-shell(嵌入式 bash/PTY)、pi-ast(tree-sitter AST 解析,支持 50+ 语言)、pi-iso(工作空间隔离,APFS clone / btrfs reflink / overlayfs)。

怎么接入

# 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

装完直接 omp 启动 TUI,omp -p "你的问题" 一次问答退出。

支持 Zed 编辑器集成(ACP 协议),可以直接在 Zed 里跑同样的 Agent——读的是你正在看的 buffer,写的是编辑器的保存路径。

和同类工具对比

工具定位omp 的优势
Claude CodeAnthropic 官方,TypeScriptomp 支持 40+ 提供商,不绑定 Anthropic
OpenAI Codex CLIOpenAI 官方,TypeScriptomp 内置 LSP + DAP + 25 搜索后端,Codex 没有
Pi(原版)Agent 框架,TypeScriptomp 是在 Pi 基础上加了 coding 全部能力
jcodeRust harness,单二进制omp 功能更完整(LSP/DAP/子Agent/记忆),jcode 主打极致轻量
Cursor / WindsurfIDE 插件omp 是终端优先 + Zed 集成,不绑定特定 IDE

实际体验的一些坑

适合谁用

总结

oh-my-pi 是目前功能最全面的 Coding Agent harness 之一。它不是"又一个 Agent",而是把 Pi 的灵活性和 Coding Agent 需要的全部基础设施(LSP、DAP、子 Agent、记忆、协作、搜索)整合到了一个项目里。~55,000 行 Rust 打底,让工具调用不再 fork/exec,21K Star 说明它在社区里已经找到了自己的位置。

如果你在找 Claude Code 的替代品,或者想让现有的 Agent 工作流多一个更强大的选择,oh-my-pi 值得一试。

项目地址:github.com/can1357/oh-my-pi · 官网:omp.sh