机器翻译正文由机器翻译自项目原始文档(英文),排版经程序统一处理,可能存在偏差,请以原项目仓库为准。
一个内置 IDE 的编码代理。 omp.sh
由 Stencil Labs 构建 · Pi 的分支,由 @mariozechner 提供
最强大的智能代理界面。通过真实世界的使用不断调整——开箱即用,完全开源。
60 个提供者 · 31 个内置工具 · 14 个 LSP 操作 · 28 个 DAP 操作 · 约 8 万 行 Rust 核心代码。
[!注意]
Pull 请求 暂时向所有人开放 作为试验。我们之前在接受 PR 前需要推荐;在评估开放贡献效果期间,这一要求暂时取消。根据结果,推荐系统可能会恢复。
安装
macOS · Linux
curl -fsSL https://omp.sh/install | sh
Alpine / musl: 预构建的 musl 二进制文件动态链接
libstdc++/libgcc,这是标准 Alpine 不提供的。请先安装它们:apk add libstdc++ libgcc。
自制
brew install can1357/tap/omp
面包(推荐)
bun install -g @oh-my-pi/pi-coding-agent
尼克斯
# Run without installing
nix run github:can1357/oh-my-pi
# Or install into the active profile
nix profile install github:can1357/oh-my-pi
片状消费者可以使用 packages.<system>.omp、overlays.default、nixosModules.default 或 homeManagerModules.default。Home Manager 配置可以安装 OMP 并以声明方式管理其设置:
{
inputs.omp.url = "github:can1357/oh-my-pi";
# In your Home Manager module:
imports = [ inputs.omp.homeManagerModules.default ];
programs.omp = {
enable = true;
settings.startup.quiet = true;
};
}
Windows(PowerShell)
irm https://omp.sh/install.ps1 | iex
固定版本(mise)
mise use -g github:can1357/oh-my-pi
macOS · Linux · Windows · bun ≥ 1.3.14
Shell 补全
omp 会根据实时命令/标志元数据生成自己的 bash、zsh 和 fish 补全脚本,因此它们永远不会与实际 CLI 偏离。子命令、标志和枚举值会静态补全;模型名称(--model、--smol、--slow、--plan)会根据捆绑的模型目录解析,而 --resume 会根据您磁盘上的会话解析。
# zsh — add to ~/.zshrc (or write the output into a file on your $fpath)
eval "$(omp completions zsh)"
# bash — add to ~/.bashrc
eval "$(omp completions bash)"
# fish
omp completions fish > ~/.config/fish/completions/omp.fish
每个工具,工作台全满。
首次编辑就能生效。读取能总结文件而不是只转储内容。搜索可以立即返回结果。选择任意模型 —— omp 都能正确处理。
| 模型 | 指标 | 描述 |
|---|---|---|
| Grok Code Fast 1 | 6.7% → 68.3% | 当编辑格式不再吞噬模型的瞬间,立即实现十倍提升。 |
| Gemini 3 Flash | 5 pp | 超越 str_replace —— 超过 Google 自身在该格式上的最佳尝试。 |
| Grok 4 Fast | −61% 令牌 | 当坏 diff 的重试循环消失后,输出坍缩。 |
| MiniMax | 2.1× | 通过率增加一倍多。相同权重,相同提示。 |
read:摘要片段 · 理想默认值 · 选择器命中率grep:西部最快lsp:IDE 知道的一切,代理也知道prompts:为每个模型不断调整
你喜爱的 Pi,带电池。
最初基于 Mario Zechner 的出色 Pi 构建,omp 补充了你缺失的一切。
01 · 使用工具调用进行代码执行
大多数框架只给代理一个 Python 沙箱,然后就结束了。我们的框架运行持久的 Python 和 Bun 工作者,任一内核都可以通过回环桥回调代理自己的工具 —— 读取、搜索、任务。代理在 Python 内使用 tool.read 加载 CSV,从 JavaScript 绘制图表,始终待在单元格内。
02 · 每次写入都接入 LSP
请求重命名,你就能得到重命名。调用通过 workspace/willRenameFiles,所以在文件移动前,重新导出、桶文件和别名导入都会更新。IDE 知道的一切,代理也知道。
03 · 驱动真实调试器
C 二进制发生段错误:代理附加 lldb,步进到错误指针,读取帧。Go 服务挂起:附加 dlv 并遍历 goroutine。Python 进程卡住:debugpy,暂停,检查,评估。大多数代理仍在散布打印语句。
04 · 时间旅行流规则
你的规则会在模型偏离脚本时才激活。正则匹配会在中途终止流,注入规则作为系统提醒,并从相同点重试。你可以进行修正,而无需每次都付上下文税。注入信息在压缩中存活,因此修复保持有效。
05 · 一流子代理
将一个任务分配给多个工作者,并获得类型化结果。任务分散到独立的工作树中,每个工作者运行自己的工具界面,最终产出一个由父级直接读取的模式验证对象。无需解析文本,无兄弟间的合并冲突,也不会有孤立的编辑。
在任务运行时观察分发情况:Alt+A 打开 Agent Hub,在这里名单显示每个子代理的当前活动和使用情况。打开一个子代理可以读取其实时记录、发送命令消息、恢复停放的工作者,或在不中止父会话的情况下终止卡住的工作者。
06 · 第二个模型,监控每一步动作。
为“顾问”角色配对一个审阅模型,它会读取主代理的每一步操作,并在文本中注入笔记——悄悄附言、关注点或阻断问题。它在自己的上下文和模型中运行,因此能捕捉主操作遗漏的内容。主代理看到笔记后可以调整策略,或者告诉你为什么不会调整。
07 · 给别人链接,他们就能加入。
/collab 将你的实时会话放在中继上,同时返回链接和二维码。团队成员可以通过另一个终端使用 omp join 加入,或直接在浏览器中打开。共享读写权限以在同一个代理上协作,或使用 /collab view 获取只读链接,任何人都可以观看,但无法操控。帧在客户端封闭,中继从未看到你的密钥。
08 · 在 arxiv 上阅读 PDF,为什么不呢?
web_search 链接二十三个排序提供者,并将找到的 URL 直接交给 read。Arxiv PDF、GitHub 页面、Stack Overflow 线程会以带有锚点的结构化 markdown 返回——与你在本地文件上使用的工具界面相同。引用、跟进、引用,永远不会丢失来源。
09 · 毫不妥协的本地体验。即使在 Windows 上。
其他代理调用 rg、grep、find 和 bash。在许多机器上这些二进制文件不存在,即使存在,每次调用也需要一次 fork-exec 循环。omp 将真实实现链接到进程中。ripgrep、glob、find:进程内运行。brush 是 bash——会话跨调用保持,并将 58 个命令行实用工具(ls、sed、sort、xargs,甚至 jq)移植到内建库并进程内运行,零 fork/exec。同一 omp 二进制可在 macOS、Linux 和 Windows 上运行——无需 WSL 桥接。
10 · 带优先级和裁决的代码审查
获得明确的更改发布裁决,每个问题按 P0 至 P3 排名并评估信心。/review 会生成专门的审阅子代理,针对分支、单个提交或未提交的工作并行扫描。你优先处理阻碍发布的问题;重要内容不会隐藏在大量文字中。
想自己掌控审查吗?/annotate code-review 会打开差异,让你在审查人员运行之前将笔记固定到行上。/annotate 也可以将最新回复、会话消息、文件或引用文本中的笔记粘贴到提示中。请参阅 /annotate 。
11 · Hashline:按内容哈希编辑
完美编辑,使用更少的令牌。模型指向锚点,而不是重新输入想要更改的行,因此空白冲突和找不到字符串的循环就不再发生。编辑过时文件时,如果锚点不一致——我们会在破坏任何内容之前拒绝补丁。Grok 4 Fast 在相同工作上减少了 61% 的输出令牌。
12 · GitHub 只是另一个文件系统
其他工具套件附带 gh_issue_view、gh_pr_view、gh_search——每个都有自己的参数,代理需要学习,你也需要调试。我们跳过了这些。read 已经处理路径;PR 就是路径。只需一个接口教模型,一个界面保持正确。
13 · 代理记忆
代理在会话之间记住你的代码库。它在运行中间用 retain 写入事实,用 learn 捕捉可重用的经验,用 recall 提取它们,并将每个会话压缩成一个心智模型,在下一次的第一次操作时加载。通过 memory.backend 选择引擎——本地、Hindsight 或 Mnemopi。默认按项目范围,所以它关于该仓库学到的内容只归这个仓库。
14 · ACP:可由编辑器驱动的代理
在 Zed 内运行 omp,你会得到与在终端驱动的相同代理——读取你实际查看的缓冲区,通过编辑器保存路径写入,在编辑器终端生成 shell。破坏性工具会暂停,等待你允许一次即可忘记的权限提示。无需桥接、插件或第二大脑同步。
15 · 继承你其他工具已写入的内容
其他代理都会提供导入器,并期望你进行转换。omp 读取磁盘上已有的八种格式的原生形态——Cursor MDC、Cline .clinerules、Codex AGENTS.md、Copilot applyTo 等。无需迁移脚本,无 YAML 到 TOML 转换,无“支持子集”脚注。你团队上季度写的配置今晚仍可使用。
16 · omp 提交:原子拆分,消息验证
omp 通过 git_overview、git_file_diff 和 git_hunk 读取工作树,然后将不相关的更改拆分为按依赖关系排序的原子提交。循环在写入前被拒绝。源文件优先于测试、文档和配置,因此最重要的提交是核心提交。锁文件完全不参与分析。
17 · 读取 PR。Walk 技能。 从子代理中提取 JSON。
十六个内部方案——pr://、issue://、agent://、skill://、ssh://及其余的——在代理已经调用的每个FS形状工具中透明解析。read pr://1428返回与read src/foo.ts相同的形状。grep像目录一样遍历差异。agent://<id>/findings.0.path通过路径从子代理的输出中提取字段。
18 · 冲突解决,轻而易举。
每个合并冲突都会变成一个URL。代理将@theirs、@ours或@base写入conflict://N,文件就会干净地解决。批量形式:conflict://*。
19 · 预览,然后接受。
ast_edit返回带有替换计数的_(建议)_卡片。变更已暂存。代理在xd://resolve写一行理由;TUI将其转换为接受卡片,磁盘操作发生——原子操作,要么全部,要么全无。
20 · 驱动一个真实浏览器。或者你的Slack?
Eval的browser.open(...)返回带有直接导航、检查、交互和元素助手的标签处理句柄;tab.run(...)处理自定义JavaScript。它在隔离标签运行时下驱动Chromium或Electron。默认情况下保持隐身,同时浏览器中继可以采用你已经打开的Chrome标签而不抢占焦点。
21 · 直接操作桌面本身
Eval的computer助手——computer.window(...)、win.screenshot()、win.ax()、el.press(),以及用于多步脚本的computer.run(fnOrCode, options)——控制真实主机:枚举窗口和显示器、捕获屏幕截图、发送本地输入、遍历操作系统辅助功能树,以及使用剪贴板。不暴露浏览器DOM。
无论任务需要什么,它已经在盒子里。
核心工具与 read 和 bash 位于相同的命名空间中。使用 --tools read,edit,bash,… 固定活动集合;不常用的可发现工具保留在 xd:// 设备之后。read xd:// 列出它们,而 write xd://<tool> 在启用 tools.xdev 时运行其中一个。
文件与搜索
read— 通过一个路径访问文件、目录、归档、SQLite、PDF、笔记本、URL、远程ssh://路径和内部://方案。write— 创建或覆盖文件、归档条目或 SQLite 行。edit— 使用内容哈希锚点和过期锚点恢复的 hashline 补丁。ast_edit— 通过 ast-grep 预览结构化重写,然后应用。ast_grep— 针对 50 种 tree-sitter 语法进行结构化代码查询。grep— 对文件、glob 和内部 URL 进行正则表达式操作。glob— 基于 glob 的路径查找;需要内容匹配时使用grep。
运行时
bash— 带有 46 个进程内 coreutils 的工作区 shell,可选 PTY 和后台作业调度。eval— 持久化 Python 和 JavaScript 单元,具有共享前置程序和工具重新进入功能。
代码智能
lsp— 诊断、导航、符号、重命名、代码操作、原始请求。debug— 驱动 DAP 会话 — 断点、单步、线程、堆栈、变量。security_scan— 计划和运行本地安全审查;驱动 Codex Security 云扫描。
协调
task— 并行分发子代理,可选工作区隔离。wait— 阻塞直到下一个后台结果、同伴消息或操控中断;通过agent://和proc://向同伴发送消息和控制作业。todo— 对会话待办列表进行有序变更,并进行阶段跟踪。ask— 用于交互运行的结构化后续问题。
桌面与网页
browser— 在无头 Chromium 上通过 Puppeteer 管理标签页,连接 CDP 的应用,或通过中继使用你自己的 Chrome。computer— 针对主机桌面的持久 JS:窗口、截图、原生输入、AX 树、剪贴板。web_search— 在配置的提供者中执行一次查询,返回答案及引用。github— GitHub CLI 操作 — 仓库、PR、问题、代码搜索、Actions 运行监控。generate_image— 通过 Gemini、GPT 或 xAI Grok 图像模型生成或编辑光栅图像。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)。
提示控制
三个独立的小写单词可选择将一个回合转变为专用代理行为:
ultrathink——要求细致的多步推理和最高支持的自动思考努力。orchestrate——通过平行子剂进行大量独立工作,并验证每个阶段。workflowz— 使用主动task工具构建确定性多子代理工作流程。
它们仅在散文中触发,不会在代码区间、围栏代码块、XML/HTML部分、标识符或路径内触发。详见[魔法关键词](https://github.com/can1357/oh-my-pi/blob/main/docs/magic-keywords.md)以了解精确匹配规则和配置。
会话控制
斩击命令改变整个会话的运行方式:
/vibe— 进入[Vibe模式](https://github.com/can1357/oh-my-pi/blob/main/docs/vibe-mode.md):作为导演,使用仅`read`的工具集驱动持久`fast`/`good`工作者会话。/fresh— 重置提供者流状态(过时提示缓存、楔形流),但不更改本地转录本。参见[会话操作](https://github.com/can1357/oh-my-pi/blob/main/docs/session-operations-export-share-fork-resume.md#fresh)。
六十多家供应商,一千多个型号,只差一个 /model。
九个角色根据意图路由工作。default用于普通回合。smol用于廉价的子代理散开。slow用于深度推理。plan用于计划模式。commit用于变更日志。此外还有vision、task、advisor和tiny,分别代表它们的名字。启动时用--smol、--slow或--plan覆盖;用Ctrl+P循环切换激活角色的配置模型。在会话中途用/model斜击命令交换激活模型。
认证标签如下:oauth用你的服务提供商账户登录,plan通过编码套餐订阅路由,local对本地服务器运行,密钥可选择。
Frontier API
直接使用API和网关。每个岗位混合供应商。
拟人oauth·开放人工智能·OpenAI法典oauth·谷歌双子座·谷歌顶点·谷歌反重力oauth ·xAI ·超级格罗克oauth ·深寻 ·密斯特拉尔 ·格罗克 ·脑血管 ·烟花 ·一起 ·Baseten ·深红外 ·拥抱脸 ·NVIDIA ·Meta ·亚马逊基岩 ·Azure OpenAI ·硅流 ·GMI 云 ·CoreWeave ·萨卡纳 AI ·指令代码 ·魅力超速 ·步舞乐 ·舵手代码 ·OpenRouter ·合成 ·Vercel AI 网关 ·Cloudflare AI 网关 ·无服务器晶圆
编码计划
订阅路由。/login连接会话。
光标oauth ·GitHub 副驾驶oauth ·GitLab Duo ·Devin oauth ·Kimi 代码plan ·登月计划 ·MiniMax 编程计划 plan ·MiniMax 编程计划 CN plan ·阿里巴巴编码计划 plan ·Qwen 门户oauth ·Z.AI / 谷歌尔曼编码计划 plan ·智浦编码计划 plan ·小米 MiMo ·千帆 ·乌曼斯plan ·NanoGPT ·诺维塔 ·威尼斯 ·Kilo ·ZenMux ·OpenCode Go ·OpenCode Zen
自己运行
兼容OpenAI的/v1/models。本地实例跳过密钥。
奥拉玛local ·奥拉玛云 ·LM工作室local ·llama.cpp local ·vLLM local ·LiteLLM
自定义兼容 OpenAI 的提供者
在 ~/.omp/agent/models.yml 中定义自定义提供程序:
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 :
modelRoles:
default: spark/minimax-m3
四个旋钮使路由功能更有用
- 自定义提供者 — 在
~/.omp/agent/models.yml中声明任何可使用openai-completions、openai-responses、openai-codex-responses、azure-openai-responses、anthropic-messages、bedrock-converse-stream、google-generative-ai、google-gemini-cli、google-vertex、typesafe或openrouter-decisions(两个 Judge API)的对象。 - 回退链 — 在
retry.fallbackChains下按角色或模型设置链。当主服务返回 429 或达到配额上限时,下一个条目接管剩余请求——冷却后恢复。 - 路径作用域模型 — 将
enabledModels和disabledProviders条目限定在path:前缀下,以便在不更改全局配置的情况下在一个仓库上固定不同的模型集合。作用域条目覆盖该路径及其下所有内容。 - 轮询凭证 — 按提供者堆叠 API 密钥,并在运行时按会话亲和性和每个凭证的回退策略轮换。适用于单个密钥可能在午餐前就用完配额的情况。
完整的提供者和路由参考请访问 omp.sh/docs/providers。
二十三个后端。一个工具,代理已经知道。
web_search 是内置的,而不是外加的。auto 遍历一个包含二十三个提供者的链条;如果你已经为它付费,可以按名称固定一个。每一个命中背后,站点感知提取将 GitHub、注册表、arXiv、Stack Overflow 和文档转换为结构化的 markdown —— 锚点和链接目标得以保留。
搜索提供者
二十三个后端。固定一个,或者让 auto 按顺序遍历链条。
| 提供者 | 认证 |
|---|---|
auto |
链 |
perplexity |
PERPLEXITY_API_KEY(匿名备用) |
gemini |
oauth |
anthropic |
oauth |
codex |
oauth |
xai |
oauth 或 XAI_API_KEY |
zai |
ZAI_API_KEY |
exa |
EXA_API_KEY(或 mcp) |
tinyfish |
TINYFISH_API_KEY |
jina |
JINA_API_KEY |
kagi |
KAGI_API_KEY |
tavily |
TAVILY_API_KEY |
firecrawl |
FIRECRAWL_API_KEY(无密钥回退) |
brave |
BRAVE_API_KEY |
kimi |
/login kimi-code 或搜索密钥 |
parallel |
PARALLEL_API_KEY |
synthetic |
SYNTHETIC_API_KEY |
searxng |
自托管 |
duckduckgo |
无需密钥 |
startpage |
无密钥 |
google |
无密钥(浏览器) |
ecosia |
无密钥(浏览器) |
mojeek |
无密钥(浏览器) |
public |
无密钥(以上所有,整合) |
Exa 也可以通过 /login exa 接收存储的 API 密钥;显式的无密钥选择使用公共 MCP 回退。
专用处理器
代理获取的是结构化内容,而不是剥离的 HTML。
- 代码托管 — github, gitlab
- 软件包注册表 — npm, PyPI, crates.io, Hex, Hackage, NuGet, Maven, RubyGems, Packagist, pub.dev, Go 软件包
- 研究来源 — arxiv, semantic scholar
- 论坛 — Stack Overflow,Reddit,HN
- 文档 — MDN,Read the Docs,Docs.rs
网页转换为 markdown,链接结构保持完整。代理可以引用、跟随和引用内容而不会丢失锚点。
安全数据库
漏洞查询提供的是厂商数据,而不是博客摘要。
- NVD — 国家漏洞数据库
- OSV — 开源漏洞源
- CISA KEV — 已知被利用漏洞
大约 ~80,000 行 Rust,完成其他工具依赖外壳程序完成的工作。
六个 crate,一个带平台标记的 N-API 插件。搜索、shell、AST、高亮、PTY、桌面控制、图像解码、BPE 计数——所有操作都在 libuv 池内进程进行。热路径上无 fork/exec。另有约 8 万行伴随工具:brush bash fork,以及 58 个命令行工具——coreutils、findutils、sed、jq、基于 ripgrep 的 grep、fd、diff、moreutils——移植到 builtins crate 并直接编译进 shell。
- Crates:
pi-natives、pi-shell、pi-ast、pi-iso、pi-voice、pi-walker - 平台:
linux-x64、linux-arm64、darwin-x64、darwin-arm64、win32-x64、win32-arm64——x64 提供 AVX2 和基础二进制版本
按 crate 分,仅代码行数:
| Crate | 功能 | ~代码行 |
|---|---|---|
| pi-shell | 嵌入式 bash 引擎 · 持久会话 · 内进程 coreutils 调度 · 最小化器 | 38,000 |
| pi-natives | N-API 接口 — 下表中的每个模块 | 25,000 |
| pi-walker | 并行忽略感知遍历器 · grep 共享扫描缓存 · glob · 工作区 · shell | 5,200 |
| pi-iso | 工作区隔离 · apfs · btrfs · zfs · reflink · overlayfs · projfs · rcopy | 3,300 |
| pi-ast | tree-sitter · ast-grep 匹配、块解析、结构化摘要 | 2,900 |
| pi-voice | 音频捕获/播放 · Opus · 实时 WebRTC | 1,000 |
在 pi-natives 内,每个模块的细分(不含 glue 和测试):
| 模块 | 功能 | 技术支持 | ~LoC |
|---|---|---|---|
| desktop | 窗口/显示枚举 · 截屏 · 原生输入 · computer 的 AX 树 |
xcap · enigo · OS AX FFI | 10,600 |
| grep | 正则搜索 · 并行/顺序 · glob 与类型过滤 · 模糊查找 | grep-regex · grep-searcher | 3,280 |
| text | ANSI 感知宽度 · 截断 · 列切片 · 保持 SGR 换行 | unicode-width · segmentation | 2,070 |
| snapcompact | 位图帧光栅化 · PNG 编码用于上下文压缩 | image · png | 1,760 |
| keys | Kitty 键盘协议带 xterm 回退 · PHF 完美哈希查找 | phf | 1,740 |
| ast | ast-grep 模式匹配和结构重写 | ast-grep-core | 1,510 |
| diff | 面向工具和预览的结构化文件差异 | in-tree | 1,030 |
| pty | 原生 PTY 分配用于 sudo · ssh 交互式提示 | portable-pty | 630 |
| crash_handler | 原生崩溃捕获和报告 | in-tree | 610 |
| highlight | 语法高亮 · 11 个语义类别 · 30 个别名 | syntect | 550 |
| appearance | Mode 2031 原生 macOS 深色/浅色模式通过 CoreFoundation FFI | core-foundation | 450 |
| task | libuv 线程池中的阻塞任务 · 取消 · 超时 · 分析 | tokio · napi | 440 |
| glob | 使用 glob 发现 · 类型过滤 · 按修改时间排序 · 遵守 gitignore | ignore · globset | 430 |
| fd | 用于替代 find 工具的文件系统遍历器 | ignore | 385 |
| clipboard | 从系统剪贴板复制文本和读取图像 · 无需 xclip/pbcopy | arboard | 370 |
| workspace | 工作区遍历器,支持 gitignore 和 AGENTS.md 一次性发现 | ignore | 275 |
| power | macOS 电源断言 API,用于防止空闲/系统/显示器睡眠 | IOKit FFI | 270 |
| prof | 带折叠堆栈和 SVG 火焰图输出的环形缓冲分析器 | inferno | 240 |
| file_lock | 跨进程的建议性文件锁 | in-tree | 210 |
| ps | 跨平台进程树终止和子进程列出 | libc · libproc · CreateToolhelp32Snapshot | 195 |
| tokens | O200k / Cl100k BPE 令牌计数 · 两个表均内嵌 | tiktoken-rs | 70 |
| html | HTML 转 Markdown,并可选择内容清理 | html-to-markdown-rs | 60 |
| sixel | 终端图像渲染 · 解码 PNG · JPEG · WebP · GIF · 调整大小 · SIXEL 编码 | icy_sixel · image | 55 |
四个入口点:交互式、一次性、RPC 和 ACP。
相同的引擎,四个包装器。omp 运行 TUI。omp -p 回答单个提示后退出。Node SDK 将会话嵌入你的进程中。omp --mode rpc 和 omp acp 将控制权通过 stdio 交给另一个程序。
交互式 — 当不确定时,代理会询问
TUI 是默认界面。工具将渲染为卡片,编辑预览后再提交,不确定的情况通过 ask 工具传递 — 一个结构化的选项选择器,代理可以在中途调用。键盘处理其余部分。
相同的提示卡界面在 ACP 上显示,因此编辑者无需编写即可获得选择器。
SDK — 嵌入到 Node 中
@oh-my-pi/pi-coding-agent
Node 和 TypeScript 主机直接拉取引擎。该包暴露 ModelRegistry、SessionManager、createAgentSession 和 discoverAuthStorage;会话会发出你可以订阅的类型化事件。
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 — 通过 stdio 驱动
omp --mode rpc
适用于非 Node 嵌入者,或当你需要进程隔离时。使用 NDJSON 命令输入,回应和事件帧输出;每个提示以它自己的 prompt_result 结尾。--mode rpc-ui 添加工具卡、选择器和对话框,而 extension_ui_request 框架则要求主机必须响应;--no-ui 即使扩展对话框也保持不在线传输,适用于没有 UI 的主机。
$ 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 — 与编辑交谈
omp acp
通过 JSON-RPC 的 代理客户端协议。当编辑宣告功能时,工具 I/O 通过它路由,写入由 session/request_permission 受控。
| omp 工具 | ACP 路由 |
|---|---|
bash |
terminal/create + terminal/output |
read |
fs/read_text_file |
write |
fs/write_text_file |
edit, bash |
session/request_permission |
完整参考:omp.sh/docs/sdk。
值得保留的工具,是你不会很快不用的工具。
在 omp.sh 获取它。
omp 是由 Mario Zechner 基于 Pi 分支的项目,重写为以编码为核心的界面:会话、子代理、斜杠命令、扩展——全部使用 TypeScript,全部采用 MIT 许可证,全部在 GitHub 上。可以通过配置来塑造它,从外部连接它,或者在需要时查看源代码。
基本元素
扩展是一个 TypeScript 模块。相同的工具 API,相同的斜杠命令注册表,相同的快捷键表,相同的内置 TUI 基元。没有任何保留内容。
发现
首次运行时,omp 会继承磁盘上已有的内容:来自 .claude、.cursor、.windsurf、.gemini、.codex、.cline、.github/copilot 和 .vscode 的规则、技能和 MCP 服务器。无需迁移脚本。
可扩展性
让 omp 编写你缺少的部分,然后 /reload-plugins。保存在本地,包含在 marketplace 中,或者发布到 npm。
哲学
omp 是 Mario Zechner 的 pi-mono 的一个分支,扩展了一个内置完整功能的编码工作流。
关键理念:
- 保持交互式终端优先的用户体验以进行实际编码工作
- 包含实用的内置功能(工具、会话、分支、子代理、可扩展性)
- 让高级行为可配置而不是隐藏
项目输入和信任
打开一个仓库会按设计加载其项目输入:设置、扩展、钩子、工具、命令、技能、规则和项目 MCP 配置。要在一次调用中排除项目 .mcp.json,传递 --config <file> 指向带有嵌套键的 YAML 覆盖(忽略单行的 mcp.enableProjectConfig: false)。
mcp:
enableProjectConfig: false
使用 --no-extensions 来跳过环境扩展发现;或使用 --trusted-extension /absolute/path/to/file.ts 来精确的扩展允许列表。--no-tools 禁用内置工具,但项目工具模块仍然是单独的发现范围。这些标志缩小输入范围而不改变仓库信任模型。
开发
从源代码开始
新的克隆需要在源代码 CLI 可以启动之前同时具备工作区依赖项和本地 Rust/N-API 插件。
bun setup
bun dev
bun setup 安装 Bun 工作区并构建 @oh-my-pi/pi-natives。更改 Rust 包或 packages/natives 后重新运行 bun run build:native。
Nix 用户将获得固定版 Bun 和 Rust 工具链以及所有原生构建依赖项:
nix develop
bun setup
bun dev
使用 nix build .#omp 构建并进行可分发 Nix 包的冒烟测试。Wayland 屏幕录制支持默认关闭(链接 libpipewire 会增加约 750 MB 的运行时闭包);通过 omp.override { withWaylandScreencast = true; } 启用它。nix/bun.nix 只有在 bun.lock 发生变化时才会生成;发布版会自动重新生成它。对于依赖项更改,请运行:
bun run gen:nix
该命令在可用时使用 bun2nix 来自 nix develop,否则通过 Nix 进入开发 shell,然后回退到固定的 bunx bun2nix@2.1.2。请勿手动编辑 nix/bun.nix。
对于非交互式的冒烟测试:
bun dev -- --version
调试命令
/debug 打开用于调试、报告和性能分析的工具。
有关架构和贡献指南,请参见 packages/coding-agent/DEVELOPMENT.md。
单仓库包
| 软件包 | 描述 |
|---|---|
| @oh-my-pi/collab-web | 浏览器访客客户端、模拟主机和协作实时会话的本地中继 |
| @oh-my-pi/pi-ai | 多提供商LLM客户端,支持流式传输和模型/提供商集成 |
| @oh-my-pi/pi-catalog | 模型目录:捆绑的模型数据库、提供商描述符和身份信息 |
| @oh-my-pi/pi-agent-core | 具有工具调用和状态管理的代理运行时 |
| @oh-my-pi/pi-coding-agent | 互动式编码代理命令行界面 (CLI) 和软件开发工具包 (SDK) |
| @oh-my-pi/pi-tui | 具有差异渲染功能的终端用户界面库 |
| @oh-my-pi/pi-natives | grep、shell、图像、文本、语法高亮等的N-API绑定 |
| @oh-my-pi/omp-stats | AI使用统计的本地可观测性仪表板 |
| @oh-my-pi/omptype | ArkType兼容的模式验证,支持延迟JIT编译 |
| @oh-my-pi/pi-utils | 共享实用工具(日志记录、流、目录/环境/进程助手) |
| @oh-my-pi/pi-wire | 共享的协作实时会话协议类型和中继常量 |
| @oh-my-pi/pi-mnemopi | 供OMP代理使用的本地SQLite内存引擎 |
| @oh-my-pi/snapcompact | 位图帧上下文压缩包和SQuAD评估套件 |
| @oh-my-pi/browser-relay | Chrome 扩展,可让 Eval 浏览器 API 驱动您现有的标签页 |
| @oh-my-pi/pi-metaharness | 统一基准测试运行器、Harbor 运行存储、REST/SSE API、实时仪表板 |
| @oh-my-pi/typescript-edit-benchmark | 基于 TypeScript 源代码变更构建的编辑基准测试套件 |
生锈的箱子
| 箱子 | 描述 |
|---|---|
| pi-natives | 核心 Rust 原生插件 (N-API cdylib ) ,被 @oh-my-pi/pi-natives 使用;汇总以下 crates |
| pi-shell | 嵌入式 shell / PTY / 进程管理,分离自 pi-natives (封装 brush-* ) |
| pi-ast | 基于 tree-sitter 的代码摘要和 AST 工具(支持 50 种语言语法) |
| pi-iso | 任务隔离后端解析器:APFS 克隆、btrfs/zfs reflinks、overlayfs、projfs、rcopy |
| pi-voice | 音频采集/播放、Opus 编解码器,以及实时 WebRTC 流原语 |
| pi-walker | 支持并行且忽略规则的文件系统遍历工具,扫描缓存由 grep、glob 和工作区共享 |
| pi-edit | edit 工具背后的编辑引擎:行锚定补丁/哈希行模式、流式预览、原子应用 |
| brush-core | brush-shell 的内部 fork,用于嵌入式 bash 执行 |
| pi-builtins | Bash 内置命令(cd、echo、test、printf、read、export 等)加 67 个进程内命令行工具 |
贡献
问题和拉取请求对所有人开放。当前开放的拉取请求是试行——在我们评估其效果时,之前的担保要求已被取消,但可能会恢复。有关贡献的指南,请参见CONTRIBUTING.md。
许可证
OMP 采用 MIT 许可证 授权。
第三方和供应商代码,包括 crates/vendor/brush-core 以及 crates/pi-builtins/LICENSE 中标识的第三方部分,仍然遵循其各自的上游许可证。请参见 THIRD-PARTY-NOTICES.txt 及组件本地通知以了解归属和其他条款。
© 2025 马里奥·泽纳 © 2025-2026 坎·博卢克 © 2026 Stencil Labs, Inc.
为保持终端开启而制作
- 本文标题:oh-my-pi - ⌥ 带有集成开发环境的编码代理
- 本文链接:https://www.cn121.com/cli/can1357-oh-my-pi.html
- 原项目:can1357/oh-my-pi 版权归原作者 can1357 及贡献者所有
- 收录信息:本站于 2026-10-10 收录本项目,本页所列协议与仓库指标均为收录当时的状态;该日期之后原项目的版本更新与协议变更,本页不作同步。
- 开源协议:收录时本项目采用 MIT(查看 LICENSE 原文),本站译文为其衍生内容;使用、修改、分发请以该仓库 LICENSE 原文为准。
- 站点出处:本文首发于 OneTwoOne,收录自 GitHub 开源项目 can1357/oh-my-pi。
- 翻译说明:本页正文为人工智能生成内容——由机器翻译对原项目 README 初译、经程序校验排版,可能存在错漏,请以原项目文档为准。
- 引用声明:商业转载、第三方聚合或 AI 检索训练引用时,请务必保留以上来源出处、本文永久链接,以及原项目的版权声明与许可信息。
- 下架通道:若原项目此后变更或收紧了许可协议、或作者/权利人认为本站的收录方式(译文、排版适配、简介翻译等)超出其授权范围,请通过 xyd3302001@163.com 发送下架通知,并附上项目地址与本页链接。本站核实后将第一时间删除本页内容,或改为不复制原文的目录性收录;署名更正等其他要求可一并提出。