深入 Oh My Pi(omp):终端里最能打的 AI 编程 Agent

推荐语:如果你受够了「AI 改错行」和「上下文里没有 IDE 能力」,omp 是当前终端编码 Agent 里最值得一试的那个------Hashline 哈希锚点编辑把改错文件变成小概率事件,LSP/调试器/Python+JS 双内核/并行子 Agent 全套内置且互相咬合,8 万行 Rust 让它在 macOS/Linux/Windows 上行为一致。它不是 Claude Code 的平替,而是技术设计更激进的「下一代」:代价是学习曲线和折腾成本。愿意投入的开发者,它不会让你失望;犹豫的人,先读完这篇再决定。

更多AI工具分享,参见猫哥的博客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 ZechnerPi,在 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 让模型用内容哈希标识要改的行,而不是重新打出那些行:

scss 复制代码
@@{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 展开具体行段。而且所有东西都是路径

bash 复制代码
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 复制代码
# Python 内核里调用 Agent 的 read 工具
df = pd.read_csv(tool.read("data/sales.csv"))
print(df.describe())
javascript 复制代码
// 同一个 eval 会话切到 Bun 内核
const top = 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 用路径语法直接取字段:

arduino 复制代码
read agent://<subagent-id>/findings.0.path

子 Agent 之间还能通过 IRC 短消息协调分工。Alt+A 打开 Agent Hub 看每个子 Agent 的实时状态、活体转录、成本,还能中途发消息或杀掉卡住的 worker。

流规则:模型不听话的实时纠正

传统做法把所有规范塞进 System Prompt,每次对话付全量 Token,模型还可能无视。omp 的规则是睡着的,直到触发:

  1. 正则监听模型的流式输出
  2. 命中即中断当前流(mid-token 级别)
  3. 把规则作为系统提醒注入上下文
  4. 从同一位置重新生成
  5. 注入的规则在上下文压缩后依然存活

例如「禁止在 Rust 生产代码用 Box::leak」,模型一旦写到就触发纠正为 Arc<str>。用 /omfg 用自然语言生成规则:

sql 复制代码
/omfg 不要在任何地方用 any 类型,要求用具体的类型定义或 unknown

Hindsight:项目级跨会话记忆

Agent 运行中主动用 retain 写入记忆、recall 检索、reflect 综合;每次会话结束自动压缩成「心智模型」,下次会话第一轮就加载。项目级作用域------A 项目学到的东西不泄漏到 B 项目。用一段时间后,omp 自己就知道:项目用什么技术栈、模块怎么分工、哪些文件是「地雷区」。

模型路由:60+ 提供商、10 个角色

角色 而非模型名调度:「对的任务用对的模型」。default 日常、smol 廉价探索、slow 深度推理、plan 计划模式,另有 vision/designer/task/advisor/commit/tiny。启动时 --smol / --slow / --plan 覆盖,会话中 /modelCtrl+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/*.mdcCLAUDE.md.clinerulesAGENTS.md、Copilot applyTo 等 8 种现有格式,零迁移
  • ACP/SDK/RPComp acp 接入 Zed;Node SDK 内嵌会话;--mode rpc stdio 驱动
  • 插件: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(推荐)

sh 复制代码
curl -fsSL https://omp.sh/install | sh

脚本自动检测 Bun(≥1.3.14),有则用 Bun 安装,否则下载预构建二进制。

其他方式

sh 复制代码
# Homebrew
brew install can1357/tap/omp

# Bun(推荐,最新版)
bun install -g @oh-my-pi/pi-coding-agent

# Windows(PowerShell,原生运行,无需 WSL)
irm https://omp.sh/install.ps1 | iex

# Nix
nix profile install github:can1357/oh-my-pi

# 版本锁定
mise use -g github:can1357/oh-my-pi

验证 + 补全

sh 复制代码
omp --version

# shell 补全(bash → ~/.bashrc)
eval "$(omp completions bash)"
# zsh → ~/.zshrc
eval "$(omp completions zsh)"
# fish
omp completions fish > ~/.config/fish/completions/omp.fish

模型配置:四种方式

sh 复制代码
/login      # 方式一:OAuth 一键登录(Anthropic / Codex / Gemini / Cursor / Copilot...)
/model      # 方式二:打开模型选择器,直接填 API Key
sh 复制代码
# 方式三:Coding Plan 订阅路由(/login 选对应提供商)
# 方式四:本地模型(Ollama / LM Studio)
ollama serve
/model      # 选择 Ollama,指向 http://localhost:11434

自定义 OpenAI 兼容提供商(~/.omp/agent/models.yml):

yaml 复制代码
providers:
  spark:
    baseUrl: http://192.168.10.223:8000/v1
    api: openai-completions
    apiKey: dummy
    models:
      - id: minimax-m3
        name: MiniMax M3
        contextWindow: 100000
        maxTokens: 32000

故障转移与路径绑定:

yaml 复制代码
retry:
  fallbackChains:
    default:
      - anthropic/claude-sonnet-4.6
      - openai/gpt-4o
      - google/gemini-2.0-flash

models:
  enabledModels:
    - path: ~/projects/side-project
      models: ["deepseek/deepseek-coder"]

TUI 上手

sh 复制代码
cd ~/your-project
omp

全屏 TUI 启动,工具调用渲染成卡片,编辑落盘前有预览。推荐在支持 Kitty 键盘协议的终端运行(Kitty、Ghostty、WezTerm、iTerm2)。

常用键位

按键 功能
Enter 发送消息
Ctrl+J / Shift+Enter 消息内换行
Ctrl+P 循环切换当前角色的模型
Ctrl+T 展开/折叠 Todo 面板
Ctrl+C 中断任务
Esc 取消待确认操作
↑ / ↓ 历史消息 / 选项
? 输入框内查看快捷键

单次执行与恢复

sh 复制代码
omp -p "列出所有 .ts 文件里未使用的 export"
git diff HEAD~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 全部快捷键

核心工具实操

sh 复制代码
# read:读文件/目录/URL/数据库/PR,全部结构化
read src/auth/login.ts
read pr://can1357/oh-my-pi/1428

# search:进程内 ripgrep
search "useState\(" src/
search "TODO:" --type ts

# bash:持久会话,环境变量跨调用保留
bash: npm test
bash: git log --oneline -10

# eval:Python + JS 双内核,可回调 Agent 工具
eval: import pandas as pd; df = pd.read_csv(tool.read("data/sales.csv")); print(df.describe())

# lsp:IDE 级代码智能
lsp: rename formatBytes → humanizeFileSize

# debug:真实调试器
debug: attach lldb-dap,看崩溃栈、读变量、评估表达式

# task:并行子 Agent
task(workers=[{name: "auth", workdir: "services/auth"}, ...])

# ask:结构化提问(带推荐选项的选择器)

我的评价

优点

  1. 工具质量是真实的,不是营销:Hashline 的基准数据可复现,编辑成功率提升是数量级的;read 的结构化摘要省 Token 立竿见影;进程内搜索在无 rg 的 Windows 上也能用------这些都在日常使用里感受得到。
  2. 一站配齐:调试器、LSP、双内核、子 Agent、记忆、浏览器、桌面控制......别的 Agent 要装一堆插件,omp 开箱即有,而且互相咬合(eval 回调 read、子 Agent 类型化返回、配置零迁移继承)。
  3. Rust 底子带来的一致性:macOS/Linux/Windows 同一二进制,不依赖外部工具链,行为一致。
  4. 可塑性 :插件与内置工具同一 API,/omfg 建规则、/reload-plugins 热重载,从配置到源码全开放。

局限

  1. 学习曲线:TUI + 斜杠命令 + 角色模型路由,比「打开即聊」的工具要花一两天适应;文档分散在 omp.sh/docs 和仓库 docs/。
  2. 生态相对年轻:插件数量远不如 Claude Code,社区仍在成长(PR 刚放开 trial)。
  3. 终端依赖 :全屏 TUI 在 SSH/无头环境体验打折(有 -p 单次模式兜底);依赖 Kitty 键盘协议,老终端要降级。
  4. 模型强绑定:编辑格式、工具调用是针对强模型调的,弱模型 + 复杂任务仍需人工盯。

适合谁 :终端党、追求工具效率的资深开发者、想省 Token 的重度用户。不适合:只想点两下就完事的 GUI 用户(用 IDE 插件版或 Claude Code 更顺手)。

与 DeepSeek Harness(dsh)的关系 :两者定位不同------omp 是「终端里打磨到极致的单体 Agent」;dsh 是「一切皆插件」的可重组框架(模型/工具/UI/循环都可替换)。omp 开箱即用、工具质量天花板高;dsh 可定制性更强、适合自组 harness。都用过之后我的建议:日常写代码用 omp,做自定义 Agent 平台用 dsh

参考

相关推荐
DS随心转APP2 小时前
deepseek生成的word怎么下载 AI导出鸭全平台方案技术深度测评
人工智能·ai·chatgpt·word·deepseek·ai导出鸭
阿萨德528号3 小时前
DeepSeek Harness 开源了,但先别叫“正式版”:从封闭内测到 Developer Preview,只隔了两周
人工智能·deepseek·harness
贵慜_Derek4 小时前
DeepSeek Harness 架构解读:三层组合与「一切皆插件」
人工智能·agent·deepseek
ss2734 小时前
DeepSeek Harness 从零到一运行教程
deepseek·deepseekharness
DS随心转小程序4 小时前
AI 导出鸭重构转化链路,全面优化腾讯元宝输出 word 文档办公效率
人工智能·重构·aigc·word·豆包·deepseek·ai导出鸭
TonyLee0175 小时前
Claude Code + DeepSeek:服务器安装与使用笔记
linux·服务器·deepseek·claude code
感谢地心引力6 小时前
DeepSeek-V4-Pro正式版发布,API价格翻倍,DeepSeek Harness体验如何?
ai·deepseek·harness
寥落半伤感6 小时前
codex接入deepseek+VLM视觉语言模型教程
人工智能·语言模型·自然语言处理·codex·deepseek
特立独行的猫a7 小时前
DeepSeek Harness插件和工具的区别介绍及开发入门指南
前端·ai·agent·插件·deepseek·harness