命令行工具 活跃维护

oh-my-pi

can1357/oh-my-pi

⌥ 带有集成开发环境的编码代理。由 Stencil Labs 构建。

34827
Stars 标星
3789
Forks 分支
99
Watchers 关注
3645
Open Issues
TypeScript
主要语言
MIT
开源协议
666.7 MB
仓库大小
50 分钟前
最后推送
一键安装扩展 / 插件指令
dsh plugin --profile web add github:can1357/oh-my-pi
git clone https://github.com/can1357/oh-my-pi.git
git clone git@github.com:can1357/oh-my-pi.git
README.md main

机器翻译正文由机器翻译自项目原始文档(英文),排版经程序统一处理,可能存在偏差,请以原项目仓库为准。

一个内置 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 知道的一切,代理也知道。

阅读 LSP 配置文档

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)以了解精确匹配规则和配置。

会话控制

斩击命令改变整个会话的运行方式:

六十多家供应商,一千多个型号,只差一个 /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 — 已知被利用漏洞

web_search 参考 ↗

大约 ~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 发送下架通知,并附上项目地址与本页链接。本站核实后将第一时间删除本页内容,或改为不复制原文的目录性收录;署名更正等其他要求可一并提出。