在浏览器里管理智能体会话、工具审批与 Git 历史
28.2/100
综合分
3
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/10/6 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add LaneSun/omp-web该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:仅索引
是什么
dsh 原生插件 · browser
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
更新放缓:最近一次提交在 69 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码v2.7.0⚪ 扫描:无法判定尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0已尝试扫描但取不到可分析的源码:仓库或包不存在、已删除,或为非 JS/TS 实现、未随包发布源码。无法判定,不代表安全。
- · 取源不可用(Error: 仓库体积 487.1MB 超过扫描上限 200MB(避免单条拖垮整轮))
扫描于 2026/11/4(0 天前)
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
功能亮点
- 管理智能体会话
- 工具审批
- 查看Git历史
oh-my-pi 的浏览器 GUI(--mode web)——在 DeepSeek Harness web 客户端栈上跑完整智能体界面
README
由 DeepSeek 最新模型翻译生成omp-web — 带完整浏览器 GUI 的 oh-my-pi
can1357/oh-my-pi 的 fork,新增 --mode web:为智能体提供完整浏览器 GUI,基于 DeepSeek Harness(dsh)web 客户端技术栈构建。这个 GUI 是完整的 TUI 替代界面——会话管理、带工具卡片和审批的流式聊天、斜杠命令、设置、模型与思考等级选择、计划模式、子代理,以及带 rewind/fork 的 git-graph 历史视图。
安装与运行
前置条件:Bun ≥ 1.4 和 Rust 工具链(智能体的 N-API addon 从源码构建;nix develop 会同时提供两者并锁定版本)。
只有从源码构建 dsh 运行时(方案 B)才需要 Node ≥ 22.19 和 pnpm 11.7。
git clone https://github.com/LaneSun/omp-web.git
cd omp-web
bun setup # installs workspaces + builds the pi-natives addon
浏览器技术栈由 dsh-web 运行时目录树提供(MIT 协议,锁定基线版本)。
展开完整文档(README 剩余 1 节)
omp-web — 带完整浏览器 GUI 的 oh-my-pi
can1357/oh-my-pi 的 fork,新增 --mode web:为智能体提供完整浏览器 GUI,基于 DeepSeek Harness(dsh)web 客户端技术栈构建。这个 GUI 是完整的 TUI 替代界面——会话管理、带工具卡片和审批的流式聊天、斜杠命令、设置、模型与思考等级选择、计划模式、子代理,以及带 rewind/fork 的 git-graph 历史视图。
安装与运行
前置条件:Bun ≥ 1.4 和 Rust 工具链(智能体的 N-API addon 从源码构建;nix develop 会同时提供两者并锁定版本)。
只有从源码构建 dsh 运行时(方案 B)才需要 Node ≥ 22.19 和 pnpm 11.7。
git clone https://github.com/LaneSun/omp-web.git
cd omp-web
bun setup # installs workspaces + builds the pi-natives addon
浏览器技术栈由 dsh-web 运行时目录树提供(MIT 协议,锁定基线版本)。二选一:
A. 预构建运行时(推荐)——从 latest release 下载 dsh-web-runtime-.tar.gz,解压到本仓库内的 dsh-web/(会自动检测):
mkdir -p dsh-web
curl -fsSL https://github.com/LaneSun/omp-web/releases/download/v0.1.0/dsh-web-runtime-0.1.0.tar.gz | tar -xz -C dsh-web
B. 源码构建——在锁定基线上克隆 deepseek-harness,覆盖 fork 的 @omp/client-settings 插件,然后构建全部内容:
scripts/setup-dsh-web.sh # clones + builds into ./dsh-web
然后启动 web 模式:
bun dev --mode web
→ http://127.0.0.1:3180
配置项:OMP_WEB_PORT(默认 3180)、OMP_WEB_DSH_ROOT(默认:若已构建/解压到 ./dsh-web 则用它,否则用 ../dsh-web)。
仓库结构
| 路径 | 内容 |
| packages/web/ | @oh-my-pi/web —— Bun 宿主:启动图、/api RPC 载体、下行 WebSocket、静态资源与插件包分发(dsh 宿主的胶水层移植,不含展示代码) |
| packages/coding-agent/src/modes/web/ | OmpWebDriver —— 把 OMP 的会话/事件/设置映射到 dsh 客户端契约 |
| dsh-overlay/ | fork 的 dsh 侧插件源码(@omp/client-settings:设置分区 + 历史视图) |
| scripts/setup-dsh-web.sh | 源码构建 dsh 运行时(锁定的 deepseek-harness + overlay) |
| scripts/package-dsh-runtime.ts | 打包 Releases 页面分发的运行时 tarball |
| docs/web/PROVENANCE.md | 组件来源台账(A2/A3 记录,中文) |
| docs/web/NOTES.md | 工程日志与设计决策(中文) |
内置的 dsh 目录树零文件改动;所有适配都宿主侧的胶水代码,或者 overlay 插件。强制规则见 docs/web/PROVENANCE.md。
两个上游都是 MIT 协议,这个 fork 也是(见 LICENSE)。
把 IDE 接进体内的编码智能体。
omp.sh
Fork 自 Pi,作者 @mariozechner
目前发布出来最能打的智能体界面。在真实使用中持续调优——开箱即用,从里到外全部开放。
60+ 服务商 · 31 个内置工具 · 14 个 lsp 操作 · 28 个 dap 操作 · ~80k 行 Rust 核心代码。
[!NOTE]
Pull request 暂时对所有人开放,属于试用阶段。以前接受 PR 需要有人担保;现在这个要求先撤掉,我们看看开放贡献效果如何。视结果而定,担保机制可能会回来。
安装
macOS · Linux
curl -fsSL https://omp.sh/install | sh
Alpine / musl: 预编译的 musl 二进制会动态链接 libstdc++/libgcc,而 Alpine 默认不带这些库。先装上:apk add libstdc++ libgcc。
Homebrew
brew install can1357/tap/omp
Bun(推荐)
bun install -g @oh-my-pi/pi-coding-agent
Nix
Run without installingsh
nix run github:can1357/oh-my-pi
或者安装到当前配置档
nix profile install github:can1357/oh-my-pi
使用 Flake 的话,可以用 packages.<system>.omp、overlays.default、nixosModules.default 或 homeManagerModules.default。Home Manager 配置可以安装 OMP,并以声明式方式管理它的设置: nix {
inputs.omp.url = "github:can1357/oh-my-pi";
在你的 Home Manager 模块里:
imports = [ inputs.omp.homeManagerModules.default ];
programs.omp = {
enable = true;
settings.startup.quiet = true;
};
}
Windows(PowerShell) powershell irm https://omp.sh/install.ps1 | iex
固定版本(mise) sh mise use -g github:can1357/oh-my-pi
macOS · Linux · Windows · bun ≥ 1.3.14
Shell 补全
omp 会根据实时的命令与参数元数据,自己生成 bash、zsh 和 fish 的补全脚本,所以永远不会和真正的命令行脱节。子命令、参数和枚举值都是静态补全;模型名(--model、--smol、--slow、--plan)会对照内置的模型目录解析,--resume 则对照你磁盘上的会话。
sh
zsh — 加到 ~/.zshrc(或者把输出写进 $fpath 上的文件)
eval "$(omp completions zsh)"
bash — 加到 ~/.bashrc
eval "$(omp completions bash)"
fish
omp completions fish > ~/.config/fish/completions/omp.fish
每个工具,都 _benchmaxxed_。
一次就改对的编辑。把文件总结出来、而不是把内容一股脑倒出来的读取。瞬间返回的搜索。随便挑哪个模型——omp 都能搞定。
| 模型 | 指标 | 说明 |
| Grok Code Fast 1 | 6.7% → 68.3% | 编辑格式不再把模型往死里坑的那一刻,提升十倍。 |
| Gemini 3 Flash | +5 pp | 相比 str_replace——比 Google 自己在格式上的最佳尝试还强。 |
| Grok 4 Fast | −61% token | 坏 diff 上的重试循环一消失,输出量就崩下来了。 |
| MiniMax | 2.1× | 通过率翻了一倍还多。同样的权重,同样的提示词。 |
- read:总结过的片段 · 理想的默认值 · 选择器命中率
- grep:西部最快
- lsp:你的 IDE 知道的一切,智能体也知道
- prompts:针对每个模型反复调校
阅读完整文章 ↗
你爱的 Pi,电池已装好。
omp 最初构建在 Mario Zechner 出色的 Pi 之上,补齐了你缺的所有东西。
01 · 带工具调用的代码执行大多数 harness 只给智能体一个 Python 沙箱就完事了。我们的不一样:它跑着常驻的 Python 和 Bun worker,两个内核都能通过回环桥回调智能体自己的工具——read、search、task。智能体在 Python 里用 tool.read 加载 CSV,再用 JavaScript 画成图,全程不离开单元格。
omp TUI 运行 Python 代码并渲染图表。
02 · 每次写入都接入 LSP
你要求重命名,得到的就是重命名。调用走 workspace/willRenameFiles,所以再导出、桶文件、别名导入都会在文件移动前更新。你的 IDE 知道什么,智能体就知道什么。
omp TUI 中 TypeScript 和 Biome 语言服务器处于活动状态。
_阅读 LSP 配置文档_
03 · 驱动真正的调试器
C 二进制段错误:智能体挂上 lldb,单步走到坏指针,读出栈帧。Go 服务卡死:它挂上 dlv,遍历 goroutine。Python 进程僵住:debugpy,暂停,检查,求值。大多数智能体还在到处撒 print。
omp TUI:针对 /tmp/omp-native/demo 处原生二进制的实时 lldb-dap 会话。Adapter=lldb-dap,Status=stopped,Frame=xorshift32,指令指针 0x10000055C,Location demo.c:6:10。Debug scopes 和 Debug variables 卡片显示局部变量(x = 57351),智能体确认了运算:x 从 7 → 57351(= 7 ^ (7<<13))。
_观看录屏 ↗_
04 · 穿越时间的流式规则
你的规则一直休眠,直到模型跑偏才醒来。正则一匹配,就在 token 中途中断流,把规则作为系统提醒注入,再从同一位置重试。你得到纠偏,又不必每一轮都付上下文税。注入能挺过压缩,所以修正是持久的。
omp TUI:智能体正在读 src.rs,即将写入 Box::leak 时请求中断(红色 Error: Request was aborted),一张琥珀色 ⚠ Injecting rule: box-leak 卡片注入规则正文 Don't reach for Box::leak in production code paths,随后智能体纠偏,提出 Arc<str> 并请用户确认。
_观看录屏 ↗_
05 · 一等公民的子代理
把任务拆给多个 worker,拿回带类型的结果。task 扇出到隔离的 worktree,每个 worker 跑自己的工具面,最终产出是经过 schema 校验的对象,父级直接读取。不用解析散文,兄弟之间没有合并冲突,也没有孤儿编辑。
omp TUI 显示 task 派生两个子代理 ComponentsExports 和 RoutesExports,constraints 块要求同伴之间用 IRC 私信,每个子代理的状态卡片带成本和耗时,最后的 Findings 部分列出两个导出,外加一条诚实的「IRC coordination note」,说明这是一次单向握手。
_观看录屏 ↗_ 边跑边看 fan-out:Alt+A 打开 Agent Hub,花名册里能看到每个子代理当前的活动和用量。点开一个,就能读它的实时记录、发一条引导消息、唤醒停下的 worker,或者杀掉卡住的 worker,而不用中止父会话。
06 · 第二个模型,盯着每一轮。
把 reviewer 模型配到 'advisor' 角色上,它就会读主智能体走的每一轮,把笔记直接注入进去——一句轻声提醒、一个顾虑,或者一个硬性阻断。它跑在自己的上下文和自己的模型上,所以能抓住执行者匆匆略过的东西。主智能体看到笔记后会纠正方向,或者告诉你它为什么不改。
omp TUI: /advisor status shows the advisor running on openai-codex/gpt-5.5; after the main agent scopes a catch to ENOENT instead of swallowing every error, an amber 'Advisor 1 note (concern)' card warns the fix no longer matches the user's literal acceptance criterion.
_Watch the capture ↗_
07 · 把链接丢给别人,人就进来了。
/collab 把你的实时会话放到中继上,返回一个链接——还有一个二维码。队友从另一个终端用 omp join 加入,或者直接在浏览器里打开。分享读写权限,就能和同一个人智能体结对;用 /collab view 则拿到只读链接,谁都能看,但谁都改不了。帧在客户端加密;中继永远看不到你的密钥。
omp TUI: /collab view prints 'Collab session started!' with an omp join command, a my.omp.sh browser link, the note 'Anyone with this link can watch the session but cannot prompt the agent', and a large scannable QR code.
_Watch the capture ↗_
08 · 在 arxiv 上读 pdf,为什么不呢?
web_search 串起二十三个排好序的服务商,找到什么 URL 就直接交给 read。Arxiv PDF、GitHub 页面、Stack Overflow 帖子,回来都是结构化 markdown,锚点原样保留——和你在本地文件上用的是同一套工具界面。引用、跟进、摘录,永远不丢来路。
omp TUI: web_search returns 10 ranked Perplexity sources for inference-time compute scaling, the agent picks an arxiv paper, calls read https://arxiv.org/pdf/2604.10739v1, and summarizes the paper's headline result with real numbers.
_Watch the capture ↗_
09 · 原生到底。Windows 上也是。
别的智能体要 shell 出去调 rg、grep、find、bash。很多机器上根本没这些二进制,就算有,每次调用都要付一次 fork-exec 往返。omp 把真正的实现链进进程里。ripgrep、glob、find:都在进程内。brush 就是那个 bash——会话跨调用存活,58 个命令行工具(ls、sed、sort、xargs,连 jq 都有)移植进 builtins crate,在进程内运行,零 fork/exec。同一个 omp 二进制跑在 macOS、Linux 和 Windows 上——不需要 WSL 桥接。
10 · 代码审查:带优先级和结论
直接给出结论:这次改动能不能上线,每个问题按 P0 到 P3 排序,并附上置信度评分。/review 会拉起专门的审查子代理,并行扫分支、单个提交或未提交的改动。你先处理挡住发布的问题;重要的事不会埋在一大段文字里。
11 · Hashline:按内容哈希编辑
编辑更精准,token 更少。模型指向锚点,而不是重新敲一遍要改的行,于是空白符之争和「找不到字符串」的死循环就此消失。编辑一个已过期的文件,锚点会对不上——我们在补丁破坏任何东西之前就把它拒掉。同样的活,Grok 4 Fast 的输出 token 少花 61%。
12 · GitHub 就是另一个文件系统
别的 harness 会外挂 gh_issue_view、gh_pr_view、gh_search——每个都有自己的参数,智能体得学,你得调试。我们跳过了这一步。read 本来就能处理路径;PR 就是路径。只教模型一套接口,只维护一个面。
13 · 由智能体自己整理的记忆
智能体跨会话记住你的代码库。它在运行中用 retain 写下事实,用 learn 记下可复用的经验,用 recall 把它们取回来,并把每个会话压缩成一份心智模型,下次会话第一轮就加载。用 memory.backend 挑引擎——local、Hindsight 或 Mnemopi。默认按项目隔离,所以它对这个仓库学到的东西就留在这个仓库里。
14 · ACP:可由编辑器驱动的智能体
在 Zed 里跑 omp,你得到的就是终端里那个智能体——读你正看着的缓冲区,走编辑器的保存路径写入,在编辑器的终端里起 shell。破坏性工具会停下来弹权限提示,你答一次就不用再管。没有桥接,没有插件,没有第二个要同步的大脑。
15 · 继承你其他工具已经写好的东西
别的智能体都带个导入器,指望你去转换。omp 直接按原生格式读磁盘上已有的八种格式——Cursor MDC、Cline .clinerules、Codex AGENTS.md、Copilot applyTo,等等。不用迁移脚本,不用把 YAML 移植成 TOML,没有「支持的子集」这类脚注。你团队上个季度写的配置,今晚照样能用。
16 · omp commit:原子拆分,校验过的提交信息
omp 通过 git_overview、git_file_diff 和 git_hunk 读工作区,然后把不相关的改动拆成原子提交,按依赖关系排序。有循环依赖就在写入前拒掉。源文件得分高于测试、文档和配置,所以头条提交是真正重要的那个。锁文件完全不参与分析。
17 · 读 PR。_走技能。_ 从子代理里掏出 JSON。
十六个内部 scheme —— pr://、issue://、agent://、skill://、ssh:// 等等 —— 在智能体已经调用的每个 FS 形态工具里透明解析。read pr://1428 返回的形状和 read src/foo.ts 一样。grep 像遍历目录一样遍历 diff。agent://<id>/findings.0.path 按路径从子代理的输出里取出一个字段。
18 · 冲突解决,轻松搞定。
每个合并冲突都变成一个 URL。智能体把 @theirs、@ours 或 @base 写到 conflict://N,文件就干净地解决了。批量形式:conflict://。
omp TUI: ✓ Read src/session.ts (⚠ 1 conflict), then ✓ Write conflict://1 · 1 line with content @theirs, then a confirmation 'Resolved.'
_观看录屏 ↗_
19 · 先预览,再接受。
ast_edit 返回一张 _(proposed)_ 卡片,带上替换数量。改动先暂存。智能体把一行理由写到 xd://resolve;TUI 把它变成一张 Accept 卡片,磁盘写入随即发生 —— 原子操作,全有或全无。
omp TUI: ✓ AST Edit: console.log($X) (proposed) 3 replacements · 1 file, then ✓ Accept: 3 replacements in 1 file (AST Edit), followed by 'Applied 3 replacements in src/auth.ts.'
_观看录屏 ↗_
20 · 驱动一个_真正的浏览器_。_还是你的 Slack?_
Stealth 默认开启,所以页面看到的是普通用户,而不是无头机器人。同一套 API 原地驱动任何 Electron 应用 —— 把它指向 Slack,智能体就能像读网页一样读你的私信。或者干脆跳过沙箱:浏览器中继扩展让智能体接管你已经打开的 Chrome 标签页,还不抢焦点。
21 · 直接操作桌面本身
computer 针对真实主机运行持久 JavaScript:枚举窗口和显示器、截图、发送原生输入、遍历操作系统无障碍树、操作剪贴板。不是浏览器工具,没有 DOM —— 就是你眼前这个桌面。
任务需要什么,_盒子里都已经有了_。
31 个工具和 read、bash 同处一个命名空间。用 --tools read,edit,bash,… 固定当前启用的集合;不常用的可发现工具留在 xd:// 设备后面。read xd:// 列出它们,启用 tools.xdev 后 write xd://<tool> 就能运行其中一个。
文件与搜索
- read —— 文件、目录、归档、SQLite、PDF、notebook、URL、远程 ssh:// 路径,以及内部 :// scheme,全走一条路径。
- write —— 创建或覆盖文件、归档条目或 SQLite 行。
- edit —— hashline 补丁,带内容哈希锚点和过期锚点恢复。
- ast_edit —— 应用前先预览的结构化重写,基于 ast-grep。
- ast_grep —— 覆盖 50 多种 tree-sitter 语法的结构化代码查询。
- grep —— 对文件、glob 和内部 URL 做正则匹配。
- glob —— 基于 glob 的路径查找;需要匹配内容时改用 grep。
运行时
- bash — 工作区 shell,内置 46 个进程内 coreutils,可选 PTY,支持后台任务派发。
- eval — 持久化的 Python 和 JavaScript 单元,共享 prelude,可重新进入工具。
代码智能
- lsp — 诊断、导航、符号、重命名、代码操作、原始请求。
- debug — 驱动 DAP 会话 — 断点、单步执行、线程、栈、变量。
- security_scan — 规划并运行原生安全审查;驱动 Codex Security 云端扫描。
协同
- task — 并行派发子代理,可选工作区隔离。
- hub — 给在线智能体发消息,等待或取消后台任务,监管长时间运行的进程。
- todo — 对会话待办列表做有序变更,带阶段跟踪。
- ask — 为交互式运行提供结构化追问。
桌面与 Web
- browser — 通过 Puppeteer 操作无头 Chromium 标签页、CDP 接入的应用,或经 relay 连接你自己的 Chrome。
- computer — 针对宿主机桌面运行持久化 JS:窗口、截图、原生输入、AX 树、剪贴板。
- web_search — 一次查询覆盖已配置的服务商,返回答案和引用。
- github — GitHub CLI 操作 — 仓库、PR、issue、代码搜索、Actions 运行监视。
- generate_image — 通过 Gemini、GPT 或 xAI Grok 图像模型生成或编辑位图。
- inspect_image — 用视觉模型分析本地图像文件。
- tts — 通过 xAI Grok Voice 做文本转语音 — 五种内置音色,WAV 或 MP3。
记忆与技能
- checkpoint — 标记对话状态,供之后折叠并生成报告。
- rewind — 修剪探索性上下文,保留一份简明报告。
- retain — 把持久事实排入当前记忆库。
- recall — 在记忆库中搜索原始记忆。
- reflect — 在记忆库上综合出答案。
- memory_edit — 按 id 更新、遗忘或作废已存记忆。
- learn — 记录可复用的经验;可选将其提升为受管技能。
- manage_skill — 创建、更新或删除隔离的受管技能。
由设置开关控制、默认关闭:github、security_scan、generate_image、tts、checkpoint、rewind,以及记忆工具(retain/recall/reflect/memory_edit,取决于 memory.backend)。当前模型无法看图时,inspect_image 会自动启用。
完整参考 →
提示词控制
三个独立的小写单词,可让某一轮对话启用专门的智能体行为:
- ultrathink — 请求谨慎的多步推理,并使用支持的最高自动思考强度。
- orchestrate — 通过并行子代理执行大量独立工作,并验证每个阶段。
- workflowz — 用当前 task 工具构建确定性的多子代理工作流。
它们只在正文中触发,不会在代码段、围栏代码块、XML/HTML 区块、标识符或路径中触发。精确匹配规则和配置见 Magic keywords。
会话控制
斜杠命令改变整个会话的运行方式:
- /vibe — 进入 Vibe 模式:扮演导演,驱动常驻的 fast/good 工作会话,工具集为 read 只读。
- /fresh — 重置服务商流状态(提示词缓存过期、流卡死),不改动本地记录。见 会话操作。
六十多家服务商,上千个模型,_只差一个 /model_。
十个角色按意图分流任务。default 处理普通轮次。smol 用于廉价的子代理扇出。slow 用于深度推理。plan 用于计划模式。commit 用于变更日志。另有 vision、designer、task、advisor 和 tiny,各司其名。启动时用 --smol、--slow 或 --plan 覆盖;用 Ctrl+P 在当前角色已配置的模型间循环切换。会话中途用 /model 斜杠命令换掉当前模型。
下面的认证标签:oauth 用你的服务商账号登录,plan 走编程套餐订阅,local 连本地服务器运行,密钥可选。
前沿 API
直连 API 和网关。按角色混用服务商。
Anthropic oauth · OpenAI · OpenAI Codex oauth · Google Gemini · Google Vertex · Google Antigravity oauth · xAI · SuperGrok oauth · DeepSeek · Mistral · Groq · Cerebras · Fireworks · Together · Baseten · Hugging Face · NVIDIA · Meta · Amazon Bedrock · Azure OpenAI · SiliconFlow · GMI Cloud · CoreWeave · Sakana AI · OpenRouter · Synthetic · Vercel AI Gateway · Cloudflare AI Gateway · Wafer Serverless
编程套餐
走订阅路由。用 /login 绑定会话。
Cursor oauth · GitHub Copilot oauth · GitLab Duo · Devin oauth · Kimi Code plan · Moonshot · MiniMax Coding Plan plan · MiniMax Coding Plan CN plan · Alibaba Coding Plan plan · Qwen Portal oauth · Z.AI / GLM Coding Plan plan · Zhipu Coding Plan plan · Xiaomi MiMo · Qianfan · Umans plan · NanoGPT · Novita · Venice · Kilo · ZenMux · OpenCode Go · OpenCode Zen
自己跑
兼容 OpenAI 的 /v1/models。本地实例跳过密钥。
Ollama local · Ollama Cloud · LM Studio local · llama.cpp local · vLLM local · LiteLLM
自定义兼容 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
运行 omp models spark 验证发现结果。然后运行 omp setup,在默认模型那一步选中它,或者在会话里打开 /model,把它分配给 default 角色。
不想用选择器,想直接预配置默认模型,就把选择器写进 ~/.omp/agent/config.yml: yaml modelRoles: default: spark/minimax-m3
让路由真正好用的四个旋钮
- 自定义服务商 —— 只要支持 openai-completions、openai-responses、openai-codex-responses、azure-openai-responses、anthropic-messages、bedrock-converse-stream、google-generative-ai、google-gemini-cli 或 google-vertex,都能在 ~/.omp/agent/models.yml 里声明。
- 回退链 —— 在 retry.fallbackChains 下按角色或按模型配置链条。主服务商抛出 429 或撞上配额上限时,下一项接手本轮剩余部分 —— 冷却结束后恢复。
- 路径作用域模型 —— 给 enabledModels 和 disabledProviders 的条目加上 path: 前缀,就能在某个仓库上固定另一套模型,不用动全局配置。作用域条目覆盖该路径及其下所有内容。
- 轮换凭据 —— 为每个服务商堆叠多个 API key,运行时按会话亲和性轮换,并对每个凭据单独退避。当单个 key 撑不到中午就会烧完配额时,这招很好用。
完整的服务商与路由参考见 omp.sh/docs/providers。
二十三个后端。_一个智能体早就熟悉的工具_。
web_search 是内置的,不是外挂的。auto 会走一条二十三个服务商的链条;如果你已经为某个服务商付费,直接按名字固定它。每次命中背后,站点感知提取都会把 GitHub、各类 registry、arXiv、Stack Overflow 和文档转成结构化 markdown —— 锚点和链接目标都保留下来。
搜索服务商
二十三个后端。固定其中一个,或者让 auto 按顺序走完整条链。
| provider | auth |
| auto | chain |
| perplexity | PERPLEXITY_API_KEY (anonymous fallback) |
| gemini | oauth |
| anthropic | oauth |
| codex | oauth |
| xai | oauth or XAI_API_KEY |
| zai | ZAI_API_KEY |
| exa | EXA_API_KEY (or mcp) |
| tinyfish | TINYFISH_API_KEY |
| jina | JINA_API_KEY |
| kagi | KAGI_API_KEY |
| tavily | TAVILY_API_KEY |
| firecrawl | FIRECRAWL_API_KEY (keyless fallback) |
| brave | BRAVE_API_KEY |
| kimi | /login kimi-code or search key |
| parallel | PARALLEL_API_KEY |
| synthetic | SYNTHETIC_API_KEY |
| searxng | self-hosted |
| duckduckgo | no key |
| startpage | no key |
| google | no key (browser) |
| ecosia | no key (browser) |
| mojeek | no key (browser) |
| public | 无密钥(以上全部,合并版) |
Exa 也支持通过 /login exa 保存 API key;显式选择无密钥时,走 public MCP 兜底。
专用处理器
智能体拿到的是结构化内容,不是剥掉标签的 HTML。
- 代码托管平台 — github、gitlab
- 包注册表 — npm、PyPI、crates.io、Hex、Hackage、NuGet、Maven、RubyGems、Packagist、pub.dev、Go packages
- 研究来源 — arxiv、semantic scholar
- 论坛 — stack overflow、reddit、hn
- 文档 — mdn、readthedocs、docs.rs
页面转成 markdown 时保留链接结构。智能体可以引用、跳转、摘录,不会丢掉锚点。
安全数据库
漏洞查询返回的是厂商数据,不是博客摘要。
- NVD — national vulnerability database
- OSV — open source vuln feed
- CISA KEV — known exploited vulns
web_search reference ↗
Roughly ~80,000 lines of Rust, doing the work other harnesses shell out for.
Six crates, one platform-tagged N-API addon. Search, shell, AST, highlight, PTY, desktop control, image decode, BPE counting — all in-process on the libuv pool. No fork/exec on the hot path. Another ~80k lines ride along vendored: the brush bash fork, plus 58 command-line utilities — coreutils, findutils, sed, jq, ripgrep-backed grep, fd, diff, moreutils — ported into the builtins crate and compiled straight into the shell.
- Crates: pi-natives, pi-shell, pi-ast, pi-iso, pi-voice, pi-walker
- Platforms: linux-x64, linux-arm64, darwin-x64, darwin-arm64, win32-x64 — x64 ships dual AVX2 and baseline binaries
Per crate, code lines only:
| Crate | What it does | ~LoC |
| pi-shell | Embedded bash engine · persistent sessions · in-process coreutils dispatch · minimizer | 38,000 |
| pi-natives | The N-API surface — every module in the table below | 25,000 |
| pi-walker | Parallel ignore-aware walker + scan cache shared by grep · glob · workspace · shell | 5,200 |
| pi-iso | Workspace isolation · apfs · btrfs · zfs · reflink · overlayfs · projfs · rcopy | 3,300 |
| pi-ast | tree-sitter + ast-grep matching, block resolution, structural summaries | 2,900 |
| pi-voice | Audio capture/playback · Opus · live WebRTC | 1,000 |
Inside pi-natives, the per-module breakdown (glue and tests omitted):
| Module | What it does | Powered by | ~LoC |
| desktop | Window/display enumeration · screenshot · native input · AX tree for computer | xcap · enigo · OS AX FFI | 10,600 |
| grep | Regex search · parallel/sequential · glob & type filters · fuzzy find | grep-regex · grep-searcher | 3,280 |
| text | ANSI-aware width · truncation · column slicing · SGR-preserving wrap | unicode-width · segmentation | 2,070 |
| snapcompact | Bitmap-frame rasterization + PNG encode for context compression | image · png | 1,760 |
| keys | Kitty keyboard protocol with xterm fallback · PHF perfect-hash lookup | phf | 1,740 |
| ast | ast-grep pattern matching and structural rewrites | ast-grep-core | 1,510 |
| diff | Structured file diffing for tools and previews | in-tree | 1,030 |
| pty | Native PTY allocation for sudo · ssh interactive prompts | portable-pty | 630 |
| crash_handler | Native crash capture and reporting | in-tree | 610 |
| highlight | Syntax highlighting · 11 semantic categories · 30+ aliases | syntect | 550 |
| appearance | Mode 2031 + native macOS dark/light via CoreFoundation FFI | core-foundation | 450 |
| task | Blocking work on libuv thread pool · cancellation · timeout · profiling | tokio · napi | 440 |
| glob | Discovery with glob · type filters · mtime sort · gitignore respect | ignore · globset | 430 |
| fd | Filesystem walker for find-tool replacement | ignore | 385 |
| clipboard | Text copy and image read from system clipboard · no xclip/pbcopy | arboard | 370 |
| workspace | Workspace walker with gitignore + AGENTS.md discovery in one pass | ignore | 275 |
| power | macOS power-assertion API for idle/system/display-sleep prevention | IOKit FFI | 270 |
| prof | Circular buffer profiler with folded-stack and SVG flamegraph output | inferno | 240 |
| file_lock | Cross-process advisory file locking | in-tree | 210 |
| ps | Cross-platform process-tree kill and descendant listing | libc · libproc · CreateToolhelp32Snapshot | 195 |
| tokens | O200k / Cl100k BPE token counting · both tables embedded | tiktoken-rs | 70 |
| html | HTML to Markdown with optional content cleaning | html-to-markdown-rs | 60 |
| sixel | Terminal image rendering · decode PNG · JPEG · WebP · GIF · resize · SIXEL encode | icy_sixel · image | 55 |
Four entry points: _interactive_, _one-shot_, RPC, and ACP.
Same engine, four wrappers. omp runs the TUI. omp -p answers a single prompt and exits. The Node SDK embeds the session in your process. omp --mode rpc and omp acp hand the wheel to another program over stdio.
Interactive — when in doubt, the agent asks
The TUI is the default surface. Tool calls render as cards, edits preview before they land, and ambiguity routes through the ask tool — a structured option picker the agent can call mid-turn. The keyboard handles the rest.
The same prompt cards surface over ACP, so editors get the picker without writing one.
omp TUI showing a multi-select question from the ask tool.
SDK — embed in Node
@oh-my-pi/pi-coding-agent
Node and TypeScript hosts pull the engine in directly. The package exposes ModelRegistry, SessionManager, createAgentSession, and discoverAuthStorage; the session emits typed events you subscribe to.
ts
import {
ModelRegistry,
SessionManager,
createAgentSession,
discoverAuthStorage,
} from "@oh-my-pi/pi-coding-agent";
const auth = await discoverAuthStorage();
const models = new ModelRegistry(auth);
await models.refresh();
const { session } = await createAgentSession({
sessionManager: SessionManager.inMemory(),
authStorage: auth,
modelRegistry: models,
});
await session.prompt("list .ts files");
RPC — drive over stdio
omp --mode rpc
For non-Node embedders, or when you want process isolation. NDJSON commands in, response and event frames out. --mode rpc-ui adds tool cards, selectors, and dialogs as extension_ui_request frames the host must answer.
$ omp --mode rpc --no-session
{"id":"r1","type":"prompt","message":"list .ts files"}
< {"id":"r1","type":"response", ...}
{"id":"r2","type":"set_model","provider":"anthropic","modelId":"sonnet-4.5"}
{"id":"r3","type":"abort"}
ACP — speak to editors
omp acp
The Agent Client Protocol over JSON-RPC. When the editor advertises capabilities, tool I/O routes through it and writes are gated by session/request_permission.
| omp tool | ACP route |
| bash | terminal/create + terminal/output |
| read | fs/read_text_file |
| write | fs/write_text_file |
| edit, bash | session/request_permission |
Full reference: omp.sh/docs/sdk.
A harness worth keeping is one you _don't_ outgrow.
Pick it up at omp.sh.
omp is a fork of Pi by Mario Zechner, rewritten as a coding-first surface: sessions, subagents, slash commands, extensions — all TypeScript, all MIT, all on GitHub. Shape it from config, hook it from outside, or read the source when you need to.
Primitives
An extension is a TypeScript module. Same tool API, same slash-command registry, same hotkey table, same TUI primitives the built-ins use. Nothing is reserved.
Discovery
On first run omp inherits whatever is already on disk: rules, skills, and MCP servers from .claude, .cursor, .windsurf, .gemini, .codex, .cline, .github/copilot, and .vscode. No migration script.
Extensibility
Ask omp to write the piece you're missing, then /reload-plugins. Keep it local, ship it in a marketplace, or publish it to npm.
Philosophy
omp is a fork of pi-mono by Mario Zechner, extended with a batteries-included coding workflow.
Key ideas:
- Keep interactive terminal-first UX for real coding work
- Include practical built-ins (tools, sessions, branching, subagents, extensibility)
- Make advanced behavior configurable rather than hidden
Development
Getting started from source
Fresh clones need both workspace dependencies and the local Rust/N-API addon before the source CLI can start.
sh
bun setup
bun dev
bun setup installs Bun workspaces and builds @oh-my-pi/pi-natives. Re-run bun run build:native after changing Rust crates or packages/natives.
Nix users get the pinned Bun and Rust toolchains plus all native build dependencies:
sh
nix develop
bun setup
bun dev
Build and smoke-test the distributable Nix package with nix build .#omp. Wayland screencast support is off by default (linking libpipewire adds ~750 MB of runtime closure); enable it with omp.override { withWaylandScreencast = true; }. nix/bun.nix is generated only when bun.lock changes; releases regenerate it automatically. For dependency changes, run:
sh
bun run gen:nix
The command uses bun2nix from nix develop when available, otherwise enters the development shell through Nix, then falls back to the pinned bunx bun2nix@2.1.2. Do not edit nix/bun.nix manually.
For a non-interactive smoke check:
sh
bun dev -- --version
Debug Command
/debug opens tools for debugging, reporting, and profiling.
For architecture and contribution guidelines, see packages/coding-agent/DEVELOPMENT.md.
Monorepo Packages
| Package | Description |
| @oh-my-pi/collab-web | Browser guest client, mock host, and local relay for collab live sessions |
| @oh-my-pi/pi-ai | Multi-provider LLM client with streaming and model/provider integration |
| @oh-my-pi/pi-catalog | Model catalog: bundled model database, provider descriptors, and identity |
| @oh-my-pi/pi-agent-core | Agent runtime with tool calling and state management |
| @oh-my-pi/pi-coding-agent | Interactive coding agent CLI and SDK |
| @oh-my-pi/pi-tui | Terminal UI library with differential rendering |
| @oh-my-pi/pi-natives | N-API bindings for grep, shell, image, text, syntax highlighting, and more |
| @oh-my-pi/omp-stats | Local observability dashboard for AI usage statistics |
| @oh-my-pi/omptype | ArkType-compatible schema validation with lazy JIT compilation |
| @oh-my-pi/pi-utils | Shared utilities (logging, streams, dirs/env/process helpers) |
| @oh-my-pi/pi-wire | Shared collab live-session protocol types and relay constants |
| @oh-my-pi/hashline | Line-anchored patch language and applier behind the edit tool |
| @oh-my-pi/pi-mnemopi | Local SQLite memory engine for Oh My Pi agents |
| @oh-my-pi/snapcompact | Bitmap-frame context compression package and SQuAD eval suite |
| @oh-my-pi/browser-relay | Chrome extension that lets the browser tool drive your existing tabs |
| @oh-my-pi/pi-metaharness | Unified benchmark runners, Harbor run storage, REST/SSE API, live dashboard |
| @oh-my-pi/typescript-edit-benchmark | Edit benchmark suite built on TypeScript source mutations |
Rust Crates
| Crate | Description |
| pi-natives | Core Rust native addon (N-API cdylib) used by @oh-my-pi/pi-natives; aggregates the crates below |
| pi-shell | Embedded shell / PTY / process management split out of pi-natives (wraps brush-*) |
| pi-ast | tree-sitter-based code summarizer and AST utilities (50+ language grammars) |
| pi-iso | Task isolation backend resolver: APFS clones, btrfs/zfs reflinks, overlayfs, projfs, rcopy |
| pi-voice | Audio capture/playback, Opus codecs, and live WebRTC streaming primitives |
| pi-walker | Parallel ignore-aware filesystem walker with the scan cache shared by grep, glob, and workspace |
| brush-core | Vendored fork of brush-shell for embedded bash execution |
| pi-builtins | Bash builtins (cd, echo, test, printf, read, export, …) plus 67 in-process command-line utilities |
Contributing
Issues and pull requests are open to everyone. Open PRs are currently a
trial — the previous vouch requirement is lifted while we evaluate how it goes, and it may return. See CONTRIBUTING.md for guidelines on contributing.
License
OMP is licensed under the MIT License.
Third-party and vendored code, including crates/vendor/brush-core and the
third-party portions identified in crates/pi-builtins/LICENSE, remains under
its respective upstream license. See THIRD-PARTY-NOTICES.txt and
component-local notices for attribution and additional terms.
© 2025 Mario Zechner
© 2025-2026 Can Bölük
© 2026 Stencil Labs, Inc.
_made for terminals that stay open_
- omp.sh
- GitHub
- Changelog
- npm
- Discord
- MIT预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
LaneSun/omp-web
在浏览器里管理智能体会话、工具审批与 Git 历史
相关插件 · 浏览器
智能体插件框架deepseek-ai/deepseek-harness
DeepSeek Harnessdsh是由 DeepSeek AI 开发的开源 agent harness智能体框架。
★ 270,422已汉化DSH
71.9
多设备 Agent 看板YaoApp/yao
✨ 所有 Agent 和工作区集中管理,覆盖你的每一台设备。任务看板追踪进度,桌面端、移动端、浏览器、API…
★ 8,147已汉化DSH
71.2
可扩展侧边栏工作台omdsh-dev/DSH-better-sidebar
DSH 的双工作台:原生右侧栏 + 自绘底部面板,并把 ctx.betterSidebar 服务开放给所有插件
★ 4,761已汉化DSH
71.1
浏览器自动化桥Tencent/BrowserSkill
你的 Agent。你的浏览器。连接,就能协作。
★ 9,967已汉化DSH
71
AI 小说创作工作台EthanYoQ/AI-Novel-Writer
AI 小说作家 / AI Novel Writer
★ 1,591已汉化DSH
70.7
智能体浏览器引擎platonai/Browser4
DeepSeek Harness 集成
★ 1,175已汉化DSH
70.4
这是你的仓库?认领条目