oh-my-pi v15.13.1 发布 —— 专注力是程序员最稀缺的资源,这次版本全在为你省
oh-my-pi(以下简称 Pi)v15.13.1 的更新清单里,一半以上的改动指向同一个目标——让你在编码时保持专注,减少哪怕一秒钟的不必要打断。
虽然这次没有"颠覆式"的新功能亮相,但 v15.13.1 可能是今年以来最"护心流"的一个版本。从配置文件隔离到大粘贴处理,从 Linux 兼容到循环检测,每一个改动的落点都很一致:在你最不想被打断的时候,它不打断你。

一、一个 --profile,让每个项目都有自己的「分身」
如果你同时在维护两个以上项目,一定遇到过这个场景:项目 A 用 Claude Sonnet、配了一套 MCP server(模型上下文协议服务器)、开了自动学习(Auto-learn)技能;切到项目 B 的时候,所有的配置参数、插件、记忆全部混在一起。改一个项目想用 Gemini,发现全局设置被改了;想装一个新技能,结果另一个项目白名单里多了个奇怪的插件。
v15.13.1 的 --profile <name> 就是来解决这个的。
你只需要在启动时带上 --profile project-a,Pi 就会为该配置文件独立的状态根目录(profile root)——包含用户配置、扩展目录、MCP 凭据、技能目录全部按 profile 隔离。环境变量也能感知 profile:OMP_PROFILE 优先于 PI_PROFILE,profile 内的 .env 里声明的 XDG_DATA_HOME 等目录变量会被正确重建,不会泄漏到其他 profile。
更让我欣赏的是细节一致性的处理:/mcp unauth 删除 OAuth 凭据时,会跳过其他 profile 的凭据行,不会误删兄弟配置的认证信息;Auto-learn Managed Skills 也使用活跃 profile 的 agent 目录,profile 级别的技能始终优先于全局 fallback。
这不是一个让你「记得切 profile」的功能,而是一个让你忘掉「切」这个动作本身的功能。用的人越多,越记不起没有它的日子。
二、输入方式不再只有键盘
说这是本版本我最喜欢的改动群也不为过——因为它们在降低「输入摩擦」这件事上,做得太细了。
语音转文字预览:Editor 新增了 setVolatileText() / commitVolatileText() 接口。这意味着那些支持语音输入的扩展现在可以在编辑器里预览实时转录——看到文字一个个跳到光标处,而不是等语音说完了才啪一下出现。前者让你在说话时就知道错了可以重说,后者让你说完才默默祈祷正确。你感受一下区别。
大粘贴感知增强(Large-paste hook):当你粘贴了一大块内容(超过可配置阈值)时,Pi 不再默默缩成一个 [Paste #N] 标记。现在它会触发一个钩子(hook),你可以选择用代码块包裹、XML 标签包裹、或者作为附件保存。对于经常从浏览器复制代码段、从 API 文档粘贴响应体的开发者来说,这解决了长期以来"粘贴完格式全崩"的核心痛点。
Ctrl+J 换行:这个小细节值得单独说。很多终端工具在 shift+enter 被占用时,用户就永远失去了手动换行的权利。现在 ctrl+j 作为第二绑定始终可用——如果在现代终端上,它就是真正的换行;如果是传统终端(ctrl+j 和 Enter 都发同一个字节),它仍然提交,不会崩溃。
三个改动各自都很小,但组合起来的体验提升是1+1+1>3。输入不只是打字,输入是所有你把自己脑子里的东西搬到工具里这个过程。 这次 Pi 至少在这条路上多了三种沟通渠道。
三、Linux 用户的救星:glibc 兼容修复
如果让我只能挑一个"最重要的修复",我选这个。
v15.13.1 修复了 Linux 原生扩展加载不上的问题:之前 Pi 的 native addon 构建在 Ubuntu 24.04 的自托管 runner 上,编译产物锁定了 glibc 2.39。这意味着任何 CentOS 7、Ubuntu 20.04、甚至某些 System 76 的 Pop!_OS 用户,都有可能遇到 version 'GLIBC_2.39' not found 的错误。native addon 加载即失败,整个工具无法使用。
解决方案很彻底:x64 和 arm64 的 native addon 现在都通过 cargo-zigbuild 构建,glibc 版本固定在 2.17——这是 CentOS 7 和 Ubuntu 14.04 时代的基线。任何 glibc >= 2.17 的 Linux 发行版,现在都能原生运行 Pi。 这一刀切掉了一整个"因为构建环境太新而无法在旧系统上运行"的痛点群。
同属这个类别还有另一个隐蔽问题:之前 v15.12.6 引入的 Tokio 运行时初始化放在了 #[module_init] 里,而 #[module_init] 在动态加载器持有锁的时候执行。如果在锁内启动多线程运行时,新创建的 worker 线程去获取加载器锁——死锁。现在运行时初始化被移到了 dlopen 返回之后,彻底解决了这个启动死锁。
这对双修桌面用户(比如用 System 76 跑开发、用 Arch 跑实验、或者公司发的是 Ubuntu 20.04 工作站)尤其友好。 一个安装脚本覆盖所有,不用再费心折腾。
四、看得见的改善:Snapcompact 和 Collab
Snapcompact 是 Pi 的屏幕截图紧凑化(snapshot compaction)引擎,负责把工具调用的输出渲染成图片塞给大模型(LLM)。之前的设计偏 SQuAD 文本评估(text eval)优化,密度取胜;但现在代码搜索和读文件对行号、缩进敏感,太密的字形把这些结构信息全抹掉了。
v15.13.1 新增了两个间距微调字形变体:11on16-bw(加宽字距)和 8on22-bw(加宽行距),并且作为 Anthropic(默认用 11on16-bw)和 OpenAI/Google(默认用 8on22-bw)的新的默认形状。工具调用输出的工整性和可读性大幅提升——opencode-codex 的用户也获得了 200 张图片的请求预算,与 OpenAI API 一致。
Collab-web 的移动端修复也值得用户点赞:iOS Safari 输入框聚焦时不再自动缩放,Safe-area padding 让刘海屏 / 挖孔屏不再遮挡界面元素,垂直弹跳手势被禁用避免误触刷新页面。如果你经常用手机查看 Pi 的 collab 会话,这次的体验提升是立竿见影的。
五、深水区的修复同样精彩
每个版本都有那些「用户不一定会注意到,但一旦注意到就极其痛苦」的修复。v15.13.1 的深水区同样不含糊:
Gemini 重复循环检测:在流式推理中,AI 模型有时会陷入重复输出同一个文本或思考块(thinking block)的循环。之前这种循环可能被误判为正常 long output,白白浪费 token 和等待时间。现在 Pi 通过一个 O(1) 的滚动尾队列(bounded rolling tail)实时检测重复单元,一旦发现就把重复块折叠成一个代表副本、终止 provider 请求,优雅结束本轮。纯数字和空白序列不被误报——写代码时的一堆数字输出不会被打断。这是一个看着简单、做起来极其麻烦的修复。
Hashline 对 SwiftUI 的修复:如果你用 Swift/SwiftUI,replace block 操作执行在空行后的 var body: some View { 上一直报错「无法解析语法块」。原因是 tree-sitter-swift 在空行后的语句前插入了零宽度分隔节点(zero-width separator),导致语法解析器查不到正确的代码块。现在查询范围覆盖了第一个内容字符(而非零宽度点),SwiftUI 用户终于可以在编辑器中随便用 replace block 了——这是一个极其罕见的语言解析 bug,值得为 tree-sitter-swift 的隐式行为点赞背后的修复者。
Todo 提醒不再自激:之前的 Todo completion 进度提醒会在一次短暂的用户暂停中 1/3 → 2/3 → 3/3 三级跳——因为 agent 的文本确认触发了重新检查,每次检查自动升一级。现在引入了 #todoReminderAwaitingProgress 标记:进度提醒设置后,必须等到真正的工具结果或用户输入才会触发下一次检查。你不会再被在发号施令后的几秒内连续三次追问进度。
Mnemopi 嵌入模型自动迁移:当你换了嵌入模型(embedding model)后,旧的向量嵌入全部失效。以前你得手动重建记忆库。现在 v15.13.1 的 reconcileEmbeddingModel 自动检测配置变化——删除旧嵌入、在后台按批次重新生成新嵌入。新的嵌入还没就绪前,系统优雅降级到全文搜索(FTS),不会留下查询盲区。
升级方式
如果你已经在用 Pi,升级过程一如既往的简单:
# macOS / Linux
curl -fsSL https://omp.sh/install | sh
# Homebrew
brew install can1357/tap/omp
# Bun
bun install -g @oh-my-pi/pi-coding-agent
完整更新日志:GitHub Release v15.13.1
📢 关注我,获取最新开源更新日志和开发者工具动态。
#ohmyPi #AI编程 #开发者工具 #Linux兼容 #终端工具