推荐语:如果你受够了「AI 改错行」和「上下文里没有 IDE 能力」,omp 是当前终端编码 Agent 里最值得一试的那个——Hashline 哈希锚点编辑把改错文件变成小概率事件,LSP/调试器/Python+JS 双内核/并行子 Agent 全套内置且互相咬合,8 万行 Rust 让它在 macOS/Linux/Windows 上行为一致。它不是 Claude Code 的平替,而是技术设计更激进的「下一代」:代价是学习曲线和折腾成本。愿意投入的开发者,它不会让你失望;犹豫的人,先读完这篇再决定。
更多AI工具分享,参见猫哥的博客:https://blog.csdn.net/qq8864
一个有趣的彩蛋:DeepSeek Harness(DSH) 的 LLM 层依赖 @earendil-works/pi-ai,而 omp 是 Pi 生态的旗舰应用——也就是说 omp 和 DSH 共享底层 LLM 运行时(都是 can1357 的 pi-ai 架构),但 DSH 走了"事件溯源 + 服务化插件 + Web GUI"的产品路线,omp 走了"终端单机全能 IDE"路线。二者更像是"兄弟项目"而非竞品。
一句话定位
Oh My Pi(命令行简称omp)是一个终端优先的开源 AI 编程 Agent:不依赖 IDE、全屏 TUI 运行,内置 31 个工具、完整 LSP/DAP 集成、Python+JS 双执行内核、并行子 Agent、跨会话记忆,底层是约 8 万行 Rust 原生实现——搜索、shell、AST、高亮全部进程内完成,零 fork/exec。
它由 Can Bölük fork 自 Mario Zechner 的 Pi,在 GitHub 上已有24.8k+ stars,MIT 开源。核心理念一句话:工具不应该只是「连上去」,而要被打磨到极致——每个工具都经过基准测试调优,编辑命中率、搜索速度、LSP 集成力求同类最优。
为什么值得关注:它解决的是真问题
传统 Coding Agent 的痛点,omp 几乎逐个给了解法:
| 痛点 | 传统方案 | omp 的解法 |
|---|---|---|
| 编辑频繁失败、重试烧 Token | str_replace 重打旧内容 | Hashline:内容哈希锚点,一次命中 |
| 读文件浪费上下文 | 全文 dump | 结构化摘要:Tree-sitter 提取符号,按需展开 |
| Agent 对代码库的理解靠猜 | 无 | LSP 14 种操作:重命名、跳转、诊断走协议 |
| 排查 bug 全靠 print 调试 | 无 | DAP 调试器:lldb / dlv / debugpy |
| 数据分析弱 | 单一 Python 沙箱 | Python + Bun 双持久内核,可回调 Agent 工具 |
| 大任务串行慢 | 无 | 并行子 Agent:隔离工作区、类型化返回 |
| 模型不守规矩 | 全靠 prompt 唠叨 | 流规则:正则命中 → 中断流 → 注入规则 → 重试 |
| 每次会话失忆 | 无 | Hindsight 记忆银行(项目级) |
| 搜索慢、依赖外部二进制 | shell 调 rg | 进程内 ripgrep / glob / bash |
Hashline:技术含量最高的编辑机制
多数 Agent 用str_replace(模型输出「旧内容 + 新内容」),问题在于:空白/引号错一个就拒,文件被改过锚点就失效,于是进入「拒绝 → 重试 → 拒绝」的 Token 燃烧循环。
omp 让模型用内容哈希标识要改的行,而不是重新打出那些行:
@@{a3f2} - const result = compute(x) + const result = compute(x, options){a3f2}是目标行内容的哈希前缀。文件变了导致哈希对不上,patch 会被拒绝而不是打错地方。基准数据(官方实测,同权重同 Prompt):
- Grok Code Fast 1:编辑成功率 6.7% → 68.3%(10 倍提升)
- Gemini 3 Flash:比 str_replace 高 5 个百分点,超过 Google 自己对该格式的最佳实现
- Grok 4 Fast:输出 Token 减少 61%(重试循环消失)
- MiniMax:通过率提升 2.1 倍
更高层还有ast_edit(ast-grep 结构化重写,先出 proposed 预览卡片、Agent 写一行理由后xd://resolve才落盘,原子操作)和ast_grep(50+ 语言 Tree-sitter 结构化查询)。
read:统一读取接口,省一半 Token
read不只是读文件——返回的是 Tree-sitter 结构化摘要(函数名、类名、重要注释),需要细节时 Agent 再调用read展开具体行段。而且所有东西都是路径:
read src/auth/login.ts # 文件 → 结构化摘要 read src/ # 目录 → 树形概览 read data/app.db # SQLite → 表/行 read https://arxiv.org/pdf/… # 论文 PDF → 结构化 Markdown read pr://can1357/oh-my-pi/1428 # GitHub PR 就是路径 read issue://can1357/oh-my-pi/142 # Issue 也是路径「GitHub 只是另一个文件系统」——不用学一堆gh_issue_view之类的专用工具参数,一个接口走天下。
原生 Rust:搜索、shell、高亮全部进程内
其他 Agent shell 出去调 rg/grep/find/bash,每次都是 fork-exec 往返;omp 把真实实现链接进进程:ripgrep、glob、find 进程内;bash是内嵌的 brush shell(持久会话,跨调用保留环境变量和工作目录),58+ 个命令行工具(ls、sed、sort、xargs、jq…)移植进 builtins crate。同一个二进制原生跑 macOS/Linux/Windows,不需要 WSL 桥。
LSP 与 DAP:IDE 知道的,Agent 都知道
14 个 LSP 操作:diagnostics、hover、definition、references、rename、code_action、completion、signature_help、document_symbols、workspace_symbols、format、range_format、implementation、type_definition。重命名走workspace/willRenameFiles,re-export、barrel 文件、别名导入全部同步更新——不是文本替换。
28 个 DAP 操作:C/C++/Rust 用 lldb-dap,Go 用 dlv,Python 用 debugpy,Node 用内置 inspector。C 程序段错误?attach 调试器、看调用栈、读帧、debug.evaluate("*ptr")——不用再满代码撒 print。
eval:Python + JavaScript 双持久内核
大多数 Agent 只给一个 Python 沙箱。omp 跑两个持久内核,且任一内核都能回调 Agent 自己的工具:
# Python 内核里调用 Agent 的 read 工具df=pd.read_csv(tool.read("data/sales.csv"))print(df.describe())// 同一个 eval 会话切到 Bun 内核consttop=tool.read("data/sales.csv").split("\n").slice(1).map(l=>l.split(",")).sort((a,b)=>+b[2]-+a[2]).slice(0,5);console.table(top);两个内核共享 prelude,Python 处理数据、JS 画图,全程一个连续会话。
子 Agent:并行、隔离、类型化返回
task把任务拆给并行子 Agent:平台原生文件系统快照隔离工作区(macOS APFS clone、Linux reflink/overlayfs、Windows projfs),互不干扰、无合并冲突;每个子 Agent 返回schema 校验过的结构化对象,父 Agent 用路径语法直接取字段:
read agent://<subagent-id>/findings.0.path子 Agent 之间还能通过 IRC 短消息协调分工。Alt+A打开 Agent Hub 看每个子 Agent 的实时状态、活体转录、成本,还能中途发消息或杀掉卡住的 worker。
流规则:模型不听话的实时纠正
传统做法把所有规范塞进 System Prompt,每次对话付全量 Token,模型还可能无视。omp 的规则是睡着的,直到触发:
- 正则监听模型的流式输出
- 命中即中断当前流(mid-token 级别)
- 把规则作为系统提醒注入上下文
- 从同一位置重新生成
- 注入的规则在上下文压缩后依然存活
例如「禁止在 Rust 生产代码用Box::leak」,模型一旦写到就触发纠正为Arc<str>。用/omfg用自然语言生成规则:
/omfg 不要在任何地方用 any 类型,要求用具体的类型定义或 unknownHindsight:项目级跨会话记忆
Agent 运行中主动用retain写入记忆、recall检索、reflect综合;每次会话结束自动压缩成「心智模型」,下次会话第一轮就加载。项目级作用域——A 项目学到的东西不泄漏到 B 项目。用一段时间后,omp 自己就知道:项目用什么技术栈、模块怎么分工、哪些文件是「地雷区」。
模型路由:60+ 提供商、10 个角色
用角色而非模型名调度:「对的任务用对的模型」。default日常、smol廉价探索、slow深度推理、plan计划模式,另有 vision/designer/task/advisor/commit/tiny。启动时--smol/--slow/--plan覆盖,会话中/model或Ctrl+P切换。
支持 OAuth 一键登录(Anthropic、Codex、Gemini、Perplexity、Cursor、Copilot…)、Coding Plan 订阅路由、API Key、本地模型(Ollama/LM Studio/vLLM),还能自定义任意 OpenAI 兼容提供商、配 fallback 链(429 自动切换)、路径级模型绑定、多 Key 轮转。
其他值得说的
- /collab:把会话放上中继,甩个链接+二维码,队友浏览器就能围观/协作,密钥不出本机
- /commit:读整个工作树,把不相关改动拆成按依赖排序的原子 commit,循环依赖直接拒绝
- /review:专用 reviewer 子 Agent 并行扫描,问题按 P0-P3 分级+置信度评分
- 配置继承:自动读取
.cursor/rules/*.mdc、CLAUDE.md、.clinerules、AGENTS.md、Copilot applyTo 等 8 种现有格式,零迁移 - ACP/SDK/RPC:
omp acp接入 Zed;Node SDK 内嵌会话;--mode rpcstdio 驱动 - 插件:TypeScript 模块、与内置工具同一套 API、热重载
与主流工具对比
| 维度 | Claude Code / 同类 | omp |
|---|---|---|
| 编辑格式 | str_replace(易错) | Hashline(内容哈希锚点) |
| 文件读取 | 全文 dump | 结构化摘要 + 按需展开 |
| LSP | 无或有限 | 完整 14 操作 |
| 调试器 | 无 | 完整 DAP(lldb/dlv/debugpy) |
| 代码执行 | Python 沙箱 | 持久 Python + Bun 双内核 |
| 子 Agent | 无或有限 | 并行 + 隔离 + 类型化返回 |
| 搜索 | shell 调 ripgrep | 进程内 ripgrep,零 fork/exec |
| 行为纠正 | 靠 prompt | 流规则:中断注入重试 |
| 跨会话记忆 | 无 | Hindsight(项目级) |
| 技术栈 | 纯 JS/Python | ~8 万行 Rust 核心 + TypeScript |
安装
macOS / Linux(推荐)
curl-fsSLhttps://omp.sh/install|sh脚本自动检测 Bun(≥1.3.14),有则用 Bun 安装,否则下载预构建二进制。
其他方式
# Homebrewbrewinstallcan1357/tap/omp# Bun(推荐,最新版)buninstall-g@oh-my-pi/pi-coding-agent# Windows(PowerShell,原生运行,无需 WSL)irm https://omp.sh/install.ps1|iex# Nixnix profileinstallgithub:can1357/oh-my-pi# 版本锁定mise use-ggithub:can1357/oh-my-pi验证 + 补全
omp--version# shell 补全(bash → ~/.bashrc)eval"$(omp completionsbash)"# zsh → ~/.zshrceval"$(omp completionszsh)"# fishomp completions fish>~/.config/fish/completions/omp.fish模型配置:四种方式
/login# 方式一:OAuth 一键登录(Anthropic / Codex / Gemini / Cursor / Copilot…)/model# 方式二:打开模型选择器,直接填 API Key# 方式三:Coding Plan 订阅路由(/login 选对应提供商)# 方式四:本地模型(Ollama / LM Studio)ollama serve /model# 选择 Ollama,指向 http://localhost:11434自定义 OpenAI 兼容提供商(~/.omp/agent/models.yml):
providers:spark:baseUrl:http://192.168.10.223:8000/v1api:openai-completionsapiKey:dummymodels:-id:minimax-m3name:MiniMax M3contextWindow:100000maxTokens:32000故障转移与路径绑定:
retry:fallbackChains:default:-anthropic/claude-sonnet-4.6-openai/gpt-4o-google/gemini-2.0-flashmodels:enabledModels:-path:~/projects/side-projectmodels:["deepseek/deepseek-coder"]TUI 上手
cd~/your-project omp全屏 TUI 启动,工具调用渲染成卡片,编辑落盘前有预览。推荐在支持 Kitty 键盘协议的终端运行(Kitty、Ghostty、WezTerm、iTerm2)。
常用键位
| 按键 | 功能 |
|---|---|
| Enter | 发送消息 |
| Ctrl+J / Shift+Enter | 消息内换行 |
| Ctrl+P | 循环切换当前角色的模型 |
| Ctrl+T | 展开/折叠 Todo 面板 |
| Ctrl+C | 中断任务 |
| Esc | 取消待确认操作 |
| ↑ / ↓ | 历史消息 / 选项 |
| ? | 输入框内查看快捷键 |
单次执行与恢复
omp-p"列出所有 .ts 文件里未使用的 export"gitdiffHEAD~1|omp-p"给这个 diff 写一个精简的 commit message"omp--resume# 会话选择器(Tab 补全)omp--resume<id># 直接恢复常用斜杠命令
| 命令 | 功能 |
|---|---|
/model | 切换模型 |
/login | 提供商登录 |
/review | 代码审查(分支/commit/未提交,P0-P3 分级) |
/commit | 智能拆分原子提交 |
/omfg | 自然语言创建流规则 |
/collab | 分享实时会话 |
/compact | 手动压缩上下文 |
/reload-plugins | 热重载插件 |
/hotkeys | 全部快捷键 |
核心工具实操
# read:读文件/目录/URL/数据库/PR,全部结构化readsrc/auth/login.tsreadpr://can1357/oh-my-pi/1428# search:进程内 ripgrepsearch"useState\("src/ search"TODO:"--typets# bash:持久会话,环境变量跨调用保留bash:npmtestbash:gitlog--oneline-10# eval:Python + JS 双内核,可回调 Agent 工具eval:importpandas as pd;df=pd.read_csv(tool.read("data/sales.csv"));print(df.describe())# lsp:IDE 级代码智能lsp:renameformatBytes → humanizeFileSize# debug:真实调试器debug: attach lldb-dap,看崩溃栈、读变量、评估表达式# task:并行子 Agenttask(workers=[{name:"auth", workdir:"services/auth"},...])# ask:结构化提问(带推荐选项的选择器)我的评价
优点
- 工具质量是真实的,不是营销:Hashline 的基准数据可复现,编辑成功率提升是数量级的;read 的结构化摘要省 Token 立竿见影;进程内搜索在无 rg 的 Windows 上也能用——这些都在日常使用里感受得到。
- 一站配齐:调试器、LSP、双内核、子 Agent、记忆、浏览器、桌面控制……别的 Agent 要装一堆插件,omp 开箱即有,而且互相咬合(eval 回调 read、子 Agent 类型化返回、配置零迁移继承)。
- Rust 底子带来的一致性:macOS/Linux/Windows 同一二进制,不依赖外部工具链,行为一致。
- 可塑性:插件与内置工具同一 API,
/omfg建规则、/reload-plugins热重载,从配置到源码全开放。
局限
- 学习曲线:TUI + 斜杠命令 + 角色模型路由,比「打开即聊」的工具要花一两天适应;文档分散在 omp.sh/docs 和仓库 docs/。
- 生态相对年轻:插件数量远不如 Claude Code,社区仍在成长(PR 刚放开 trial)。
- 终端依赖:全屏 TUI 在 SSH/无头环境体验打折(有
-p单次模式兜底);依赖 Kitty 键盘协议,老终端要降级。 - 模型强绑定:编辑格式、工具调用是针对强模型调的,弱模型 + 复杂任务仍需人工盯。
适合谁:终端党、追求工具效率的资深开发者、想省 Token 的重度用户。不适合:只想点两下就完事的 GUI 用户(用 IDE 插件版或 Claude Code 更顺手)。
与 DeepSeek Harness(dsh)的关系:两者定位不同——omp 是「终端里打磨到极致的单体 Agent」;dsh 是「一切皆插件」的可重组框架(模型/工具/UI/循环都可替换)。omp 开箱即用、工具质量天花板高;dsh 可定制性更强、适合自组 harness。都用过之后我的建议:日常写代码用 omp,做自定义 Agent 平台用 dsh。
参考
- 官网:https://omp.sh
- GitHub:https://github.com/can1357/oh-my-pi(MIT,24.8k+ stars)
- 菜鸟教程入门:https://www.runoob.com/vibe-coding/omp-usage.html
- 工具文档:https://omp.sh/docs/tools
- 提供商文档:https://omp.sh/docs/providers
- npm:https://www.npmjs.com/package/@oh-my-pi/pi-coding-agent