Release notes
Oh My Pi v18.13.2
@oh-my-pi/pi-agent-core
Added
AgentToolgained the optionalhandlesToolInterruptflag: an interruptible tool that sets it (such aswait) 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_grantwhen 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
InvalidParameter400s 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 asjudgemodels served over its/v1/decisionsendpoint, 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.sessionModesand observe changes with themode_changedevent, without submitting slash commands;extensionHandlers.modeControl: falseturns 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.advertisedReasoningto let a custom provider opt out of the reasoning ladder its/v1/modelsrows advertise (defaulttrue);discovery: proxynow reads that ladder, itsnoneoff-switch, and an explicitreasoning: falseinstead of building every model's thinking surface from the bundled catalog reference alone (#15255, #17077 by @Youwenqwq) WATCHDOG.ymladvisor entries now acceptscope(main,subagent, orall, defaultall) to attach an advisor only to the top-level session or only to advised subagents, andincludeReasoning: falseto omit primary assistant_thinking:_blocks from advisor review deltas (#17058 by @trukhinyuri)- Added
session.worktreeScopeto keep the resume picker scoped to one directory (#17061 by @Dante-dan). - LM Studio decision models can now serve the
judgerole (modelRoles.judge: lm-studio/<model>); they answer over LM Studio's/v1/decisionsendpoint instead of being offered as chat models (#17169 by @richiestanaway) - Extensions'
getAllTools()now reportsmcpServerName,mcpToolNameandmcpReadOnlyHintfor 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_summaryandset_label, with matchingRpcClientmethods (#17138 by @andrebrait) - RPC: delta
message_updateframes (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.inputnow accepts{ secret: true }to mask typed characters as bullets in the TUI, forward an optionalsecrethost hint on RPCextension_ui_requestframes, and refuse plaintext form elicitation in ACP mode (#17080 by @GTanger)- Added opt-in
gc.autoCompress(default off): interactive launches start a detached, low-priorityomp gc --compress --applyat 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 ingc-auto-compress.login the agent dir (#17189 by @wolfiesch) - Added
withFatLtoto the Nix package:omp.override { withFatLto = false; }linkspi-nativeswith thin LTO for faster builds (#13752 by @n3oney)
Changed
- Bundled
scoutsubagents now includeast_grepin their default tool list, matching the agent prompt's AST-search directive;scoutstays read-only, solsp(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 })andrefreshIdleMaintenance()(#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
…