2026年10月4日 · 阅读 —
omp 常用"外挂"盘点:一个把 Pi 武装到牙齿的分支
omp 常用”外挂”盘点:一个把 Pi 武装到牙齿的分支
如果你用习惯了 Claude Code,第一次打开 Pi 多半会觉得寒酸:内置工具就 read、write、edit、bash 这几个,没有 plan mode,不接 MCP,连权限弹窗都省了。这套”内核极简”的设计只预留扩展位,能力全靠往里加。
这时候另一条路出现了:与其自己慢慢加,不如直接用别人把料加满的分支。omp(oh-my-pi)就是干这个的——它是从 Pi fork 出来的独立项目,把 Pi 没做的一大堆能力直接内置。这篇把 omp 自带的常用功能和平常好用的扩展按场景理一遍。
先说清关系,免得两个名字绕晕。
先认清 omp 和 Pi 不是一回事
Pi 是 Mario Zechner 在 2025 年 8 月创建的编码代理,纯 TypeScript。omp 是 Can Bölük 从 Pi fork 出来的独立项目,两者各自发展,omp 会定期从 Pi 合并上游变更。规模差距已经拉得很开:Pi 约 20 万行 TypeScript、4 个包、四千多个 commit;omp 约 112 万行 TypeScript 加 17 万行 Rust,16 个包加 8 个 Rust crate,一万四千多个 commit。
两者 fork 时留下的四个同名包,各自演进后也差得多(数字来自项目现状):
| 包 | Pi 当前 | omp 当前 |
|---|---|---|
| ai(LLM 接口) | 58K | 188K |
| agent(运行时) | 14K | 26K |
| coding-agent(CLI) | 104K | 631K |
| tui(终端 UI) | 26K | 61K |
差距最大的 coding-agent,Pi 那边是核心流程(会话管理、工具调度、RPC 模式),omp 在这个基础上加进了下面要说的功能。所以一条实用的选型结论是:喜欢开箱即用就选 omp,喜欢极简自己折腾就用 Pi。
下面分两类聊:omp 自带的这批”外挂”,以及 Pi/omp 生态里整体口碑靠前的扩展。
omp 自带:把 Pi 不肯内置的能力全做进去了
Pi 把 MCP、plan mode、子代理这些明摆着留给生态,omp 反过来直接收编。这 14 项是它家谱里最常被提起的,一张表对齐:
| 外挂 | 干什么 | 和 Pi 的差别 |
|---|---|---|
| Hashline | 用块哈希定位改代码,不用 AI 抄旧代码 | Pi 没有 |
| AST 编辑 | 按语法结构批量改,支持预览和原子写入 | Pi 没有 |
| LSP 集成 | 理解函数定义/引用,改名连引用一起改 | Pi 没有 |
| DAP 调试器 | 挂在真实调试器上跑程序找 bug | Pi 没有 |
| 子代理 | 并行拆活,带 worktree 隔离和结构化输出 | Pi 有基础版,omp 更深 |
| Advisor | 双模型,一个写一个实时审 | Pi 没有 |
| 持久化执行 | 常驻 Python + Bun 进程,跨步保留状态 | Pi 是离散执行 |
| TTSR | 规则平时静默,触发时注入 | Pi 没有 |
| Hindsight | 跨会话记忆 retain/recall/reflect | Pi 没有 |
| 协作共享 | /collab 生成链接,实时看会话 | Pi 没有 |
| 原生引擎 | ripgrep/glob/brush 编译进程序 | Pi 调系统外部命令 |
| 内部 URL | read/write 统一 pr/agent/conflict 路径 | Pi 没有 |
| Agentic Commit | 自动把改动拆成有意义的多个 commit | Pi 只有 auto-commit |
| 浏览器/Web 搜索 | web_search + read 开 PDF/网页 + Puppeteer | Pi 没有 |
绝大多数是 Pi 没有的;子代理和自动 commit 两项 Pi 有基础版本,omp 做得更深。下面挑几个反直觉、最值得说道的展开。
Hashline:AI 改代码不用再”抄一遍”了
绕过传统编辑器的核心痛点:AI 要改旧代码,得先把旧文本原样抄出来再附上新内容,让工具做替换。问题就在”抄一遍”——空格、Tab、换行差一点,工具就找不到一模一样的位置,报错重试,有时十几轮才改对一次。
omp 的 Hashline 换了思路:工具读文件时用 tree-sitter 把代码解析成语法块(函数、类、if 块),给每块算出一个哈希当标识。AI 只消说”把标识 a3f2 的块换成……”,工具按哈希精确命中。哈希是工具自己算的,不是 AI 抄的,天然抄不错。还有一层保护:如果改的过程中文件被别处动了,原块的哈希对不上,工具会拒绝写入,提示先重新读,绝不蒙头覆盖搞坏文件。
效果数字摘自 omp 的 README(未经过独立实测):Grok 4 Fast 用 Hashline 比传统文本匹配少输出 61% 的 token,因为省掉了抄旧代码和反复重试。
AST 编辑:批量改同一写法,预览完一次写入
搜 console.log( 的字符拼写会误伤 myConsole.log(,也漏掉中间多空格的 console .log(。AST 编辑找的是”语法上是 console.log 的函数调用”,空格换行怎么排都不影响。
流程分四步:AI 说”找出所有匹配 console.log($X) 的调用”($X 是占位符参数)→ 工具用 ast-grep(基于 tree-sitter,覆盖五十多种语言)定位全部命中 → 找到后不急着写,先挂起预览”准备替换 3 处,在 1 个文件里” → AI 调 resolve 确认,一次性全部写入。写入是原子操作:要么三处全改,要么一处不动,不会改到一半卡住。
和 Hashline 的分工:Hashline 靠块级指纹精改某个函数,AST 靠语法结构批量改同一写法,比如把所有 console.log 换成 logger.info。
DAP:AI 真的跑程序找 bug,而不是看源码猜
比 LSP 更进一步的动作是接到调试器上。大部分编码 AI 只能读源码猜 bug,omp 能 attach 到真实调试器:
- C/C++ 崩溃,attach lldb,打断点、单步到出错那行、读当时各变量值;
- Go 服务卡住,attach dlv,暂停后遍历所有 goroutine 找出谁在死等;
- Python 进程挂了,attach debugpy,暂停、查变量、执行任意表达式。
说到底就是让 AI 从”读代码猜”升级成”跑起来看运行时状态”。
Advisor:第二个模型在旁边盯着主力
这是 omp 的双模型功能:同一个会话配两个模型,一个负责写(主力),一个负责审(Advisor)。Advisor 每轮都读主力模型的操作,发现问题就注入一条备注——可能是提醒(“这样会把别的错误也吞掉”),可能是担忧,也可能是硬性阻止。它跑在自己的独立上下文和模型上,不抢主力的 token。主力看到备注可以修正,也可以说明为什么不采纳。等于给 AI 干活配了个不会累的 code review。
Hindsight:聊完不忘事
大多数 AI 会话结束就清空,下次要重新介绍项目背景。Hindsight 做跨会话记忆,三件套:retain 让 AI 随手记一条事实(“这个项目用 Postgres 14,端口 5432”);recall 下次会话搜记忆库拉回相关事实;reflect 让 Hindsight 基于记忆推理合成答案。每次会话结束自动压缩要点加载进项目记忆库,下次新会话第一轮就带着”上次聊过,主路由是 /v2/orders”。记忆按项目隔离,聊 A 学的东西不会串到 B。
生态扩展:Pi/omp 通用,按场景挑
omp 基于 Pi,所以 Pi 的扩展生态照样能用。市面上口碑靠前的扩展按场景分几组,比一股脑装一打要清楚。
流程控制
- plan-mode(@narumitw/pi-plan-mode):
/plan之后所有写工具禁用,bash 只放行只读命令,管道重定向全拒,让 AI 先交一份 Markdown 计划给你审,再动手。针对的是”满嘴答应开干、写到一半方向才不对、返回工还把锅背了”的老毛病。pi install npm:@narumitw/pi-plan-mode(包在 narumiruna/pi-extensions 仓库,需要 Pi 0.80.6 以上) - pi-code(pi.dev/packages/pi-code):把 Claude Code 那套体验整套搬进 Pi——todo 清单、checkpoint、记忆、web、子代理、目标管理都补齐,还有对应命令。若你从 Claude Code 迁过来、想少学一套操作,这包最省事。
pi install npm:pi-code - pi-subagents(nicobailon/pi-subagents):派只读子代理去审自己的 diff。自查自纠容易客气,换一双眼睛挑刺实在得多。
pi install npm:pi-subagents
后台任务
跑长命令(压测、大文件编译、每日抓取)时不想干等它清屏:
- pi-background-tasks(pi.dev/packages/pi-background-tasks):把 shell 任务变成持久的后台任务跑,同时派只读子代理去盯结果,适合长链路。
pi install npm:pi-background-tasks - @narumitw/pi-goal(pi.dev/packages/@narumitw/pi-goal):给 Pi 一个单目标让它自主推进到完成,不用一步一步手把手喂。
pi install npm:@narumitw/pi-goal - pi-agent-plugins(pi.dev/packages/pi-agent-plugins):能从 plugin.json 包自动发现、校验、加载便携插件(skill + MCP server),装一套跑多个项目都认。
pi install npm:pi-agent-plugins
浏览器
- pi-agent-browser(pi.dev/packages/pi-agent-browser):让 Pi 能真正操作浏览器——交互式浏览、截图带内联视觉理解、会话后清理。适合需要它填表单、抓动态页面、看渲染结果的场景。
pi install npm:pi-agent-browser
记忆
- pi-memory(jayzeng/pi-memory):把记忆全部存成
~/.pi/agent/memory/下的 markdown 文件,分三层——长时记忆放事实和决策,每日日志按天追加,scratchpad 放待办。每回合开始按优先级注入(scratchpad、今日日志、MEMORY.md、昨日日志),总预算 16K 字符,超了截断不硬塞。可读可改可恢复,没有黑盒。可选装 qmd 对记忆做语义检索。 - 同赛道对比:pi-hermes-memory 用 SQLite 做全文索引,@remnic/plugin-pi 要先跑独立守护进程,都更重。文件即真相是这套生态的主流取向。
接入
- pi-mcp-adapter(nicobailon/pi-mcp-adapter):Pi 官方不内置 MCP,但这个适配器把几十上百个工具压成一个代理工具,约 200 token,需要哪个能力再 search → describe → call 三步。MCP server 懒启动,闲置十分钟自动断开,输出超限截断到临时文件。官方反对的从来不是 MCP 本身,是为没用的工具预付 token——这个思路在其他工具里少见,值得单独看。
效率小件
- caveman(v2nic/pi-caveman):
/caveman让回答简短,/caveman ultra极简到一句话上下。回答太冗长时按下就干净。 - save-last(NonlinearFruit/dotfiles):
/save-last把最后一次回答存成文件,好解释转文档、发给同事都方便。 - answer(同仓库):Pi 回答末尾常挂 3~6 个问句,
/answer把问题逐条拎出来问你,你一个个答完再汇总发回,不用一口气输入一长串。 - pi-statusline(@narumitw/pi-statusline):底部状态栏显示模型、分支、上下文水位(如 ctx 38%/200k),水位过半就主动压缩或开新会话,是全列表里最便宜的可观测性教育。
- pi-file-context(@narumitw/pi-file-context):大文件几千行,圈出精确行范围或 Git 改动块喂给 agent,贴之前还能预览 token 估算。喂得准,答得就准。
- pi-btw(@narumitw/pi-btw):干到一半想问”这个 API 干嘛的”,
/btw丢进旁路线程,看完就扔,主线不打断、上下文不脏。 - tmustier 小件:街机小游戏、session-recap、code actions,装几个摸鱼用的快乐件。
可观测性:Token 账单变厚时用的五双眼睛
用得越深越关心”Token 烧在哪、为什么慢”。这五款是近期绕不开的:
| 插件 | 干的事 | 什么时候用得上 |
|---|---|---|
| pi-inspect | 把所有已加载内容摊开,看 System Prompt、Tools、Skills、Commands 构成 | 怀疑任务变慢是某几个全局插件在偷偷占 Context |
| pi-cost | Project→Session→Message 粒度拆 Token 与费用 | 想知道钱到底花在哪个 Skill、哪条长会话 |
| pi-stats-dashboard | 对历史 Session 做模型/provider/工具调用/Cache 命中/错误率统计 | 把几百上千个 Session 当行为语料挖”活情报” |
| pi-usage-widget | 实时盯 Context、Cache、Token、Cost,异常状态提醒 | 上下文接近上限或费用飙升时要即时介入 |
| pi-health | 扫描配置、依赖、扩展状态做健康检查 | 装了大量插件后排查冲突和配置错误 |
一个提醒:监控本身别变成新负担。装完若答不出”谁撑大了 Context、哪条 Session 最贵”,这些数据就是新的噪音。明确验证目标,监控最好能带来具体的优化决策或省钱动作,不然简化配置。
好外挂的共性:都贴着”内核克制”的脾气
把口碑好的扩展摆一起看,能拧出三条共性,也是装扩展前的筛选标准。
一是走公共扩展点,不碰内核。Pi 的扩展 API 覆盖工具、命令、UI、provider,正规扩展点能做的事不需要动内核,装得再乱升级也不碎。能走公共扩展点就别动内核,能用 skill 就不写扩展。
二是把 token 当钱花。Pi 每次请求的结构固定:system prompt、工具列表、对话历史。工具列表每胖一点,每次缓存命中都要按缓存价重读这一大块;工具列表中途一变,整个会话历史的缓存直接作废。所以生态里口碑好的扩展几乎都在省 token:plan mode 不发明新工具只约束现有工具,pi-memory 做分层预算,mcp-adapter 压 schema。这条对踩过 99% 缓存命中率、把成本压到 1/50 的人来说尤其有体感。
三是内核没做的才补,做好的不重复。七个内置工具已经覆盖 bash、文件、编辑这些通用能力,扩展专补策略层:plan mode 管流程、pi-memory 管记忆、mcp-adapter 管接入。装之前问一句:这是内核天生该做的,还是你的使用习惯需要?前者不用装,后者才值得装。
边界:不是装上就赢
把这套东西当作通用方案之前,先认清几条限制。
第一,极简底座对轻任务契合,长链条、多分支、深度依赖上下文的任务,可能丢掉必要的中间层,反而降成功率。Composio 那组公开对比里,Pi Agent 30 项任务过 20 项拿下第一,omp 过 17 项排第二,都赢在干净。但那是相对短程、可控的高难度任务,不是拿它当所有场景的银弹。
第二,open 的底座要求使用者有一定调优能力。Pi 不是”装上就赢”,是”装上后要调”的工具集——不熟悉它的扩展机制和上下文压缩策略,默认配置可能反而不适合你的任务。扩展也同理,装太多小件,每个注册一个命令,终端交互会变复杂,新用户容易分不清 /plan、/caveman、/answer 各自什么时候用。从最痛的场景开始,哪个问题最烦先装哪个。
第三,不管 omp 还是 Pi 生态,好用的前提是理解”内核克制 + 扩展按需”这套组合本身。单拎任何一个外挂都撑不起效率提升,要什么加什么,每件职责清楚、行为可预期,才是这套东西真正值钱的地方。
选型落点起落一句话:想开箱即用、功能堆满,就 omp;想极简、亲手在 hook 上长出自己要的东西,就 Pi。装扩展前先用 -e 跑一个会话试试,过了热乎劲还觉得”没它不行”的才正式装——工具多不厉害,少而准才是。
安装与链接速查:本文提到的每一款都在这
Pi/omp 生态的官方包目录在 pi.dev/packages,多数扩展直接 pi install npm:<包名>。个别是纯文件式扩展(把 .ts 放进 ~/.pi/agent/extensions/,然后 /reload)。下面把前文提到的全列出来,地址和命令照抄即可。
| 插件 | 一句话用途 | 安装命令 / 来源 |
|---|---|---|
| plan-mode | 锁写权限,先出计划再过你 | pi install npm:@narumitw/pi-plan-mode · github.com/narumiruna/pi-extensions |
| pi-code | Claude Code 体验整体搬进 Pi | pi install npm:pi-code · pi.dev/packages/pi-code |
| pi-subagents | 派子代理审 diff、干杂活 | pi install npm:pi-subagents · github.com/nicobailon/pi-subagents |
| pi-background-tasks | 长命令转后台 + 只读子代理盯 | pi install npm:pi-background-tasks · pi.dev/packages/pi-background-tasks |
| @narumitw/pi-goal | 单目标自主推进到完成 | pi install npm:@narumitw/pi-goal · pi.dev/packages/@narumitw/pi-goal |
| pi-agent-plugins | 自动发现/加载便携 skill+MCP | pi install npm:pi-agent-plugins · pi.dev/packages/pi-agent-plugins |
| pi-agent-browser | 浏览器自动化,截图带视觉理解 | pi install npm:pi-agent-browser · pi.dev/packages/pi-agent-browser |
| pi-memory | 记忆存 markdown,跨会话不忘 | pi install npm:pi-memory · github.com/jayzeng/pi-memory |
| pi-mcp-adapter | 一个代理工具接整个 MCP 生态 | pi install npm:pi-mcp-adapter · github.com/nicobailon/pi-mcp-adapter |
| pi-btw | 旁路提问,不打断主线 | pi install npm:@narumitw/pi-btw · github.com/narumiruna/pi-extensions |
| pi-file-context | 圈精确行喂上下文,不整文件 | pi install npm:@narumitw/pi-file-context · github.com/narumiruna/pi-extensions |
| pi-statusline | 底部状态栏看上下文水位 | pi install npm:@narumitw/pi-statusline · github.com/narumiruna/pi-extensions |
| caveman | 回答要说人话,/caveman ultra 极简 | pi install git:github.com/v2nic/pi-caveman |
| whimsical | thinking 文本换随机趣句 | pi install git:github.com/mitsuhiko/agent-stuff |
| tmustier 小件 | 街机游戏 + session-recap + code actions | pi install git:github.com/tmustier/pi-extensions |
| save-last | 把最后一次回答存成文件 | 文件式,放 ~/.pi/agent/extensions/ · github.com/NonlinearFruit/dotfiles |
| answer | 把末尾问题逐条拎出来答 | 文件式,同上仓库 |
| pi-inspect | 摊开所有已加载内容 | pi install npm:pi-inspect · pi.dev/packages/pi-inspect |
| pi-cost | Project→Message 粒度看费用 | pi install npm:pi-cost · pi.dev/packages/pi-cost |
| pi-stats-dashboard | 历史 Session 多维统计 | pi install npm:pi-stats-dashboard · pi.dev/packages/pi-stats-dashboard |
| pi-usage-widget | 实时盯 Context/Cache/Cost | pi install npm:pi-usage-widget · pi.dev/packages/pi-usage-widget |
| pi-health | 配置/依赖/扩展健康检查 | pi install npm:pi-health · pi.dev/packages/pi-health |
几点提醒:
- 装 repo 型扩展用
-e先试跑一个会话再决定(如pi -e npm:pi-memory),过了热乎劲还觉得”没它不行”再正式装。 - 文件式扩展(save-last、answer)放进
~/.pi/agent/extensions/后要/reload才生效。 - 装前删掉已知用不上的:工具列表每胖一点,每次请求缓存命中都要按缓存价重读一遍;装得多不如装得准。
仓库地址:https://github.com/oh-my-pi/omp(Pi 原版 https://github.com/badlogic/pi-mono)
#AI编程 #Agent #pi #omp #开源工具 #测试开发