omp 使用指南:把 IDE 装进终端的全能 Coding Agent

前言

在之前的两篇文章里,我分享过自己用 RooCode 和 OpenCode + OMO 搭的 Vibe-coding 工作流(半自动篇、全自动篇)。它们解决的是”让 AI 持续帮我写代码”,但用得越久,越能感觉到几类反复出现的问题:

  • 工具链是拼的:编辑器、终端、浏览器、调试器各管一摊,agent 想看运行时状态就得来回倒腾;
  • 模型被绑死:换一家模型往往等于换一套工具链;
  • 子代理是黑盒:派出去的子任务只能等结果,不能中途看、不能纠偏,失败只能重开;
  • 长会话会失忆:上下文一满,要么截断丢信息,要么全靠模型自己总结;
  • 会话是消耗品:换项目、换机器,积累的上下文和协作方式带不走。

最近我把日常主力换成了 omp(仓库名 oh-my-pi),用下来它恰好在这几个点上给了解法。这篇文章按「它是什么 → 相比其他 agent 的优势 → 怎么用 → 特色功能」的顺序完整介绍一遍。内容基于 omp 官方文档与我的使用体验整理,不是跑分对比。

别和之前提过的 OMO(oh-my-openagent)搞混:omp 是 oh-my-pi 项目的命令行工具名,两者不是同一个东西。

omp 是什么

omp 是一个终端优先(terminal-first)的 coding agent,官方定位是 “A coding agent with the IDE wired in”——把 IDE 级别能力直接内置进 agent,而不是靠外挂插件一点点补。几个硬信息:

  • 官网 omp.sh,文档 omp.sh/docs,开源仓库 can1357/oh-my-pi(MIT),由 Stencil Labs 开发;
  • 原生 Rust 核心,Windows 原生支持,不需要 WSL;
  • macOS / Linux / Windows 一条命令安装(见下文);
  • 它不是绑定某家模型的客户端,而是一个可换模型、可扩展、可编程的 agent harness。

相比其他 agent 的优势

1. IDE 能力内置,不用自己拼插件

omp 开箱自带且默认可用:

  • LSP 代码智能:跳定义、查引用、重命名、诊断、格式化,按项目自动发现语言服务器;
  • DAP 真机调试:对运行中的进程下断点、单步、看变量;
  • 结构化编辑:codemod、符号级重命名,带”预览 → 接受 / 拒绝”确认,不怕大规模误改;
  • 浏览器自动化:默认受管 Chromium;也可用 Browser Relay 接管你自己 Chrome 的标签页;
  • 桌面控制:截图 + 无障碍树操作真实桌面应用;
  • GitHub / 提交 / 安全扫描:读 issue / PR、生成 commit、/security 扫描。

很多 agent 这些能力要靠 MCP / 插件逐个装,omp 是同一套上下文里的内置工具。

2. 模型自由 + 角色分工

供应商层面,omp 可以同时接入:订阅 OAuth(Claude、ChatGPT 等)、各家 API Key、自建 OpenAI 兼容网关(new-api / one-api / Sub2API 这类)、本地模型(Ollama、llama.cpp、LM Studio、vLLM)。

更重要的是模型角色(model roles),把不同工作分给不同模型:

角色 用途
default 主会话模型
smol / tiny 轻量任务(会话标题、快速子代理)
slow 深度推理
plan 规划模式
task / advisor / judge 子代理 / 顾问审查 / 批量判定
vision / image / speech 看图 / 生图 / 语音

配合 @smol、@slow 这类别名和 /modelpreset(整套角色一键切换),成本和质量可以精细控制——单模型绑定的 agent 做不到这一点。

3. 真正的多代理:可观察、可接管、可复活

  • 一次 task 调用可以批量派发多个子代理,默认并发上限 32,后台异步执行;
  • 内置专家:scout(只读调研)、designer、reviewer、security-reviewer、librarian(查外部库/API)、task、sonic(机械性修改);
  • Agent Hub(Alt+A)是实时控制台:看每个 worker 的状态(running / idle / parked / aborted)、用量、当前工具;可以进去接管对话、发指令纠偏、复活已休眠的代理,或 kill;
  • 子代理能跑在隔离工作区(worktree / overlay 等),完成后按补丁或分支合并,互不干扰。

很多工具的”子代理”发出去就只能等;omp 更像一个你随时能介入的团队。

4. 长任务有”工作模式”,不只是聊天

  • Plan 模式(/plan):只读规划,产出 Markdown 计划,进入 Plan Review 逐节审阅、批注、删改;批准时可选”全新会话执行 / 压缩上下文后执行 / 保留全部上下文执行”;
  • Goal 模式(/goal):给一个持久目标,跨多轮自动推进,带 token 预算,可暂停、恢复、查看;
  • Vibe 模式(/vibe):主会话退居只读的”导演”,并行指挥多个 worker(fast 档用 sonic,good 档用 task)推进多条独立工作流。

再配合 /loop(重复任务)、/force(强制某次工具调用)、/fast(优先服务)等回合控制,长任务不容易”跑偏了只能重开”。

5. 上下文工程与记忆

  • 自动压缩按顺序尝试多种策略:provider 原生压缩 → snapcompact(把旧历史渲染成 PNG 交给视觉模型,省 token 又保信息)→ handoff 结构化交接 → shake(大块输出换成可恢复引用)→ soft 摘要;
  • 手动入口:/compact、/handoff、/shake;
  • 记忆后端可选:local(项目总结 + 经验)、Mnemopi(本地 SQLite + 向量检索)、Hindsight(远程)、Sharpshooter(决策文件),用 /memory 管理。

对比”截断 / 总结”两招打天下的方案,omp 是真把上下文当工程问题在做。

6. 会话是一等公民

  • 自动保存;omp -c / omp -r 恢复;/resume 选择器支持跨项目搜索;
  • /fork、分支、会话树(/tree),可以大胆试错;
  • /export 导出 HTML,/share 生成端到端加密分享链接;
  • /collab 实时协作:把正在跑的会话分享给别人,对方在自己终端或浏览器(my.omp.sh)里看直播、发指令、打断;omp stream 还能把会话直播到 live.omp.sh(需登录 Stencil 账号);
  • 兼容导入:--from-claude / --from-codex 把 Claude Code / Codex 的历史会话导进来接着用。

7. 可扩展、可编程

  • Skills:SKILL.md 技能包,官方市场 skills.omp.sh,/skill:<name> 调用;
  • 插件与市场:/marketplace 兼容 Claude Code 的插件市场格式(如 /marketplace add anthropics/claude-plugins-official),插件可包含 skills、命令、agent、hooks、MCP、LSP/DAP 适配器;
  • Hooks / 自定义工具 / MCP / 扩展 API:事件钩子能拦截、改写工具调用,扩展用 TypeScript 编写;
  • 程序化接入:omp -p 一次性输出、--mode json 机器可读、RPC / ACP(编辑器集成)、SDK(@oh-my-pi/pi-coding-agent);
  • 内置 eval 内核:持久 Python / JS 运行时,直接调 judge() 批量判定、agent() 派子代理、workpool() 起工作池。

怎么使用

安装

macOS / Linux:

1
curl -fsSL https://omp.sh/install | sh

Windows(PowerShell):

1
irm https://omp.sh/install.ps1 | iex

验证与更新:

1
2
omp --version
omp update

第一次启动

1
2
cd ~/code/my-project
omp

首次启动进入设置向导:

  1. Set up your providers:选 “Sign in” 用浏览器登录订阅账号(可登录多个);习惯 API Key 的话,先在终端 export ANTHROPIC_API_KEY=... 这类环境变量,再按 Esc 跳过;
  2. Choose your default model:搜索并选定默认模型;
  3. 完成后每次启动直接进对话。

后续用 /model(或 Alt+M)换模型,/login 重新登录。

基本交互

操作 按键
发送;工作中插话(steer) Enter
排队”做完再说”的消息 Ctrl+Q / Ctrl+Enter
打断当前回合 Esc(不会退出)
展开 / 收起工具卡片 Ctrl+O
只看文字,隐藏工具活动 Ctrl+Shift+O
搜索历史提示词 Ctrl+R
引用项目文件 输入 @ 模糊搜索
粘贴图片 Ctrl+V
外部编辑器写长 prompt Ctrl+G
继续上一意图 发送 . 或 c
重试失败的回合 Alt+R

一个可以直接复制的首任务:

1
2
通读这个项目,找出一个能在本地验证的小 bug 或小不一致;
解释你的发现,做最小修复,并运行最相关的检查。不要提交。

常用斜杠命令

命令 用途
/settings 设置面板
/model、/modelpreset 选模型 / 角色预设
/plan、/plan-review 规划模式 / 重开计划评审
/goal 目标模式(set / show / pause / resume / drop / budget)
/vibe 导演模式,并行指挥 worker
/compact、/handoff、/shake 手动压缩 / 结构化交接 / 去冗余
/memory 记忆查看与维护
/resume、/fork 恢复 / 派生会话
/export、/share 导出 HTML / 加密分享
/collab、/join 实时协作
/marketplace、/plugins 插件市场
/skill:<name> 调用技能
/security 安全扫描
/agents、/jobs 子代理定义 / 后台任务快照
/advisor 顾问模型开关与配置
/context、/usage 上下文用量 / 用量统计
/loop、/force、/fast 回合控制

常用 CLI

1
2
3
4
5
6
7
8
9
omp                       # 交互式会话
omp "解释一下这个报错" # 带初始提示启动
omp -p "总结最近的提交" # 一次性(headless),可配合 --mode json
omp -c # 继续最近会话
omp -r # 选择历史会话恢复
omp --from-claude # 导入 Claude Code 会话
omp models # 列出可用模型(omp models refresh 刷新)
omp config set <key> <value>
omp worktree # git worktree 管理

配置与接入自建号池

  • 全局配置:~/.omp/agent/config.yml;项目级:<项目>/.omp/config.yml;
  • 模型 / 供应商定义:~/.omp/agent/models.yml;
  • 会话内用 /settings,命令行用 omp config,两者等价。

以我 自建 AI 号池 里的 Sub2API 网关为例,在 models.yml 里加自定义供应商:

1
2
3
4
5
6
7
providers:
sub2api:
baseUrl: http://127.0.0.1:8080/v1
apiKey: sk-你的网关key
disableStrictTools: true # Anthropic 前置代理通常不接受 strict 字段
discovery:
type: proxy # 自动按 /v1/models 的 supported_endpoint_types 判定每个模型走哪种协议

然后 omp models refresh,/model 里就能看到号池模型。想把角色分配到号池模型,在 config.yml 里写:

1
2
3
4
modelRoles:
default: sub2api/gpt-5.4
smol: sub2api/gpt-5.4-mini
plan: sub2api/gpt-5.4:high

特色功能详解

模型角色与预设

在 /model(或 Alt+M)里进入 Roles 页,可以给每个角色单独指定模型和思考等级;在 Roles 页按 s 把当前整套分配存成预设,之后用:

1
2
3
/modelpreset save cheap      # 保存当前角色分配与思考等级
/modelpreset switch deep # 一键切换整套预设
/modelpreset list # 查看 / 删除

预设写在 config.yml 的 modelPresets 里,适合准备”日常省钱”和”攻坚高质量”两套配置来回切。

子代理与 Agent Hub

让 omp 并行干活时,它会派发具名 worker(也可以点名,比如”用 librarian 核实上游重试语义”)。按 Alt+A 打开 Agent Hub:

  • 列表里能看到每个代理的状态、模型、开销、请求数、token 数;
  • Enter 进入某个代理的会话,直接输入消息就是 steer;
  • r 复活 parked(已休眠)的代理,x 杀掉;t 切换平铺 / 树形视图,/ 过滤;
  • 输入框上方常驻 Subagents 小面板,实时显示每个 worker 正在做什么。

配合隔离工作区(task.isolation),几个 worker 可以同时改代码而互不打架;子代理的产出还能用 agent://<id>(最终产物)和 history://<id>(对话记录)随时回看。

Plan / Goal / Vibe 三种工作模式

  • Plan:/plan 把内存队列换成 Postgres,保持公共 API 不变。只读调研后产出计划,Plan Review 里可以逐节批注、删改,批准时选择实现方式(新会话 / 压缩后 / 保留上下文)。适合跨文件重构、迁移这类”先想清楚再动手”的任务。
  • Goal:/goal 修复所有 flaky 测试。omp 会跨多轮自动推进,空闲片刻自动继续下一轮;/goal show 看进度和 token 用量,/goal budget 500000 设预算,超预算自动收尾而不是无限烧钱。
  • Vibe:/vibe 后主会话变成导演,只读 + 派活,用 fast(sonic)和 good(task)两档 worker 并行推进多条工作流,你来审阅和纠偏。适合”三条独立支线同时开工”的场景。

三种模式互斥,Plan 还有暂停态,切换前先完全退出。

魔法关键词

在 prompt 里写一个特定单词,就能改变这一次回复的执行方式(只影响当次,不进入会话状态):

关键词 效果
ultrathink 这一轮强制最认真的多步推理;自动思考模式下会拉到当前模型支持的最高推理档
orchestrate 把任务里相互独立的部分拆给子代理并行做,再汇总验证
workflowz 更显式的多代理工作流(并行 + 分阶段 + 综合),适合大范围调研、审查、迁移
jevify 面向批量判定的工作流:先冻结标准,再用 eval 内核的 judge() 批量分类,只读被判为有问题的条目

示例:

1
2
3
orchestrate 把这三个独立包的构建失败分别修掉

workflowz 对认证、鉴权和会话处理做一次对抗性审查

匹配规则很克制:必须小写、独立成词,代码块 / 行内代码里的同名文字不会触发,避免误伤正常讨论。

上下文压缩与记忆

omp 的自动压缩是一条策略链:provider 原生压缩(OpenAI Responses / Anthropic 自带的服务端压缩)→ snapcompact → handoff 交接文档 → shake → soft 摘要,前一个不可用就顺延下一个。

其中 snapcompact 最有意思:它把即将被丢弃的历史序列化后渲染成 PNG 图片交给视觉模型——本地完成、不额外调用模型,用”看图”的方式保留比纯文本更便宜的长历史。会话太长时也可以手动压缩:

1
2
3
/compact     # 常规压缩
/handoff # 生成结构化交接文档,之后在同一会话继续
/shake # 只把大块输出替换成可恢复引用,不做摘要

记忆(跨会话的长期知识)是可插拔的:local 把每个项目的会话总结成记忆文件,Mnemopi 是本地 SQLite + 向量检索,Hindsight 走远程服务,Sharpshooter 维护决策文件;/memory 查看、同步、清理。

协作与分享

  • /share:把当前会话打包成端到端加密链接(密钥放在 URL fragment 里,服务端只见密文),对方浏览器打开就能看完整对话;
  • /collab:实时分享正在跑的会话。对方可以 omp join 到自己终端,或直接用浏览器打开 my.omp.sh 加入——能看直播、发指令、按 Esc 打断(只读链接则只能看);适合结对排障或”远程指挥”;
  • omp stream:把终端画面单向直播到 live.omp.sh/<用户名>,适合演示、教学;
  • /export:导出为自包含 HTML,便于归档。

代码智能、调试与守卫

  • 在项目根目录启动后,omp 会按 package.json / Cargo.toml / go.mod 等标记自动拉起语言服务器,跳转、引用、重命名、诊断都是原生体验;
  • 结构化编辑(codemod)有”预览 → 接受 / 拒绝”三步,符号重命名会沿引用、作用域、导入/导出传播,而不是文本替换;
  • 需要看运行时状态时,它可以用 DAP 直接调试进程,不用你手工加 print;
  • TTSR(Time-Traveling Stream Rules):在 .omp/rules/ 里放一条规则,就能在模型”正在生成”时拦截——比如禁止在 Rust 里写 Box::leak:
1
2
3
4
5
6
7
8
9
---
description: Prevent permanent Box::leak allocations in Rust edits
condition: 'Box::leak\('
scope:
- 'tool:edit(*.rs)'
- 'tool:write(*.rs)'
---

Do not introduce `Box::leak` in production Rust code. Prefer `Arc<str>` or `Cow<'static, str>`.

匹配时 omp 会立刻打断这次生成,把规则正文喂给模型重新生成——是”工具调用执行前的拦截”,不是事后补救。规则可以用 omp ttsr test / list / scan 单独验证。

  • Advisor(顾问模型):让一个独立模型在旁边被动审查每一轮工作,发现问题就注入提醒;用项目里的 WATCHDOG.md 定制审查重点(比如”绕过队列的写入””未转义的用户输入”),/advisor 开关和配置。

可编程与集成

  • eval 内核:会话内直接跑持久化的 Python / JS,状态跨调用保留,还能把函数注册成工具给子代理用:
1
2
data = read("package.json")
display(sorted(data["dependencies"]))

judge() / judge_batch() 做批量判定,agent() / workpool() 起子代理和工作池,completion() 做无工具的单次模型调用——写自动化脚本不用离开会话。

  • Browser Relay:omp browser-relay install 后把 ~/.omp/browser-relay/extension 加载进 Chrome,omp 就能直接操作你自己的浏览器标签页(保留登录态);也可以让它用受管的无头 Chromium。
  • 桌面控制:开启后能截图、点按真实桌面应用(macOS 需要屏幕录制 / 辅助功能权限),处理那些没有 API 的老软件。
  • MCP / Hooks / 插件:既支持标准 MCP 服务器,也有事件钩子和 TypeScript 扩展;插件市场兼容 Claude Code 格式,生态可以直接复用。
  • 程序化:omp -p 适合 CI / 脚本,--mode json 输出结构化事件流,omp acp 给编辑器做集成,SDK 可以把 agent 嵌进自己的程序;官方还有个 robomp,能拿 GitHub webhook 自动分诊 issue 并提修复 PR。

总结

什么样的人适合 omp:

  • 习惯在终端里干活,希望一个工具覆盖”调研 → 编码 → 调试 → 验证 → 提交”全流程;
  • 手里有多个模型来源(订阅、API、自建网关、本地模型),想做精细化分工和成本控制;
  • 经常跑长任务、开多项目并行,需要子代理可观察、会话可恢复、上下文可控;
  • 需要分享、协作、审计会话的团队场景。

两个上手提醒:

  1. omp 默认是 Yolo 审批模式(读写执行不弹确认)。敏感项目建议在 /settings → Interaction → Approvals 改成 Always ask,或用 omp --approval-mode always-ask 启动;
  2. 成本上善用模型角色和 /goal 预算:重活给 slow / plan,轻活交给 smol,别让主模型干所有事。

相关链接: