Release · Oh My Pi · can1357

Oh My Pi v18.13.2

What's new in Oh My Pi v18.13.2, released Oct 27, 2026 (). Newer: v18.18.0 (Nov 7, 2026)

Release notes

Oh My Pi v18.13.2

@oh-my-pi/pi-agent-core

Added
  • AgentTool gained the optional handlesToolInterrupt flag: an interruptible tool that sets it (such as wait) still runs, without blocking, when a loop-owned interrupt is already queued, so it can drain the queued wake event instead of being skipped; user cancellation still skips it (#17174 by @alphastorm)

@oh-my-pi/pi-ai

Fixed
  • Fixed OAuth logins shared by several processes being disabled with invalid_grant when they refreshed at the same time or one of them quit mid-refresh (#17128 by @sjawhar)
  • Fixed transient Google 429 rate-limit and capacity responses retrying in place without blocking or rotating credentials, while daily caps and zero-entitlement limits still rotate (#17127 by @GTanger)
  • Fixed Aliyun DashScope's multimodal gateway failing a turn on its intermittent InvalidParameter 400s for valid inline images ("provided URL does not appear to be valid", "Download multimodal file timed out"); they are now retried (#17101 by @shuairongzeng)
  • Fixed a revoked or rejected GitHub Copilot credential continuing to show its last cached usage quota instead of being dropped (#17081)
  • Fixed Devin requests compressing the request body on the UI thread, which briefly froze the TUI on long conversations; requests under 1 KiB are now sent uncompressed

@oh-my-pi/pi-catalog

Added
  • Added LM Studio decision models to discovery: models LM Studio reports as type: "decision" are listed as judge models served over its /v1/decisions endpoint, alongside its chat models (#17169 by @richiestanaway)

@oh-my-pi/pi-coding-agent

Added
  • Extensions in the interactive TUI can read and directly switch plan, vibe, goal, and loop modes with ctx.sessionModes and observe changes with the mode_changed event, without submitting slash commands; extensionHandlers.modeControl: false turns off extension-driven mode changes (#15753 by @Shadorain)
  • RPC hosts can capture draft-only speech-to-text with live previews when speech input is enabled, without submitting an agent turn; slow flushes have adjustable deadlines, and failed transcription does not block a session change after capture closes (#17158 by @felipe-santos-aya).
  • Added discovery.advertisedReasoning to let a custom provider opt out of the reasoning ladder its /v1/models rows advertise (default true); discovery: proxy now reads that ladder, its none off-switch, and an explicit reasoning: false instead of building every model's thinking surface from the bundled catalog reference alone (#15255, #17077 by @Youwenqwq)
  • WATCHDOG.yml advisor entries now accept scope (main, subagent, or all, default all) to attach an advisor only to the top-level session or only to advised subagents, and includeReasoning: false to omit primary assistant _thinking:_ blocks from advisor review deltas (#17058 by @trukhinyuri)
  • Added session.worktreeScope to keep the resume picker scoped to one directory (#17061 by @Dante-dan).
  • LM Studio decision models can now serve the judge role (modelRoles.judge: lm-studio/<model>); they answer over LM Studio's /v1/decisions endpoint instead of being offered as chat models (#17169 by @richiestanaway)
  • Extensions' getAllTools() now reports mcpServerName, mcpToolName and mcpReadOnlyHint for MCP-backed tools, so an extension can tell read-only connector tools from ones that change things (#17120 by @cfpperche)
  • RPC: navigate_tree (move the leaf in the same session file, optionally summarizing the abandoned branch), abort_branch_summary and set_label, with matching RpcClient methods (#17138 by @andrebrait)
  • RPC: delta message_update frames (messageUpdates: "delta") now carry the block on start/end events and the message on a restart, so a client can rebuild the streaming message from deltas alone (#17137 by @andrebrait)
  • ctx.ui.input now accepts { secret: true } to mask typed characters as bullets in the TUI, forward an optional secret host hint on RPC extension_ui_request frames, and refuse plaintext form elicitation in ACP mode (#17080 by @GTanger)
  • Added opt-in gc.autoCompress (default off): interactive launches start a detached, low-priority omp gc --compress --apply at most once a day, so idle sessions are stored compressed without running the command; volumes where compression does not shrink a probe file (e.g. macOS 27) are skipped, and the latest run's output or skip reason is in gc-auto-compress.log in the agent dir (#17189 by @wolfiesch)
  • Added withFatLto to the Nix package: omp.override { withFatLto = false; } links pi-natives with thin LTO for faster builds (#13752 by @n3oney)
Changed
  • Bundled scout subagents now include ast_grep in their default tool list, matching the agent prompt's AST-search directive; scout stays read-only, so lsp (which can rename and apply code actions) is not added (#17151 by @sinhduc01)
  • Clearing a draft now brings back the idle recap and idle compaction it held off, a subagent view you return to gets the recap it still owed, and prompts, turn-starting messages and IRC wakes that arrive during idle compaction wait for it to finish; SDK owners can opt a session in with AgentSession.enableIdleMaintenance({ isBlocked, scheduledTurn, onRecap }) and refreshIdleMaintenance() (#17136 by @andrebrait)
  • TTSR interrupts include a bounded excerpt of the text that matched the rule, quoted as untrusted data with harness tags escaped; excerpts are retained once per stream, preserved alongside AST matches, and omitted for zero-width matches (#17099 by @shgew)
  • Sessions that load several provider-registering extensions into a shared model registry (subagents, /tan, SDK hosts) start faster: the model catalog is rebuilt once instead of once per extension (#17088

…