Release · Oh My Pi · can1357

Oh My Pi v18.6.3

What's new in Oh My Pi v18.6.3, released Oct 6, 2026 (). Newer: v18.12.6 (Oct 21, 2026)

Release notes

Oh My Pi v18.6.3

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

Breaking Changes
  • Agent.withdrawUndeliveredQueuedMessages() replaces withdrawLiveSteering() and returns { steering, followUp }: it also takes back queued input already dequeued for the next model call, which the aborted run then neither records nor reports in agent_end (#14179 by @andrebrait)
Added
  • Added Agent.setOnModelCallSystemPrompt, called with the exact system prompt each model call is built from (#14338 by @will-bogusz)
Changed
  • SessionInitEntry.systemPrompt holds the system prompt blocks as sent; session files written earlier keep one joined string (#14338 by @will-bogusz)
  • Image token estimates now use the catalog's imageTokens() formula with its OpenAI Responses wire rule; values are unchanged (#14286 by @will-bogusz).
Fixed
  • Fixed the context count and auto-compaction trigger pricing every snapcompact archive frame at Opus's high-res rate, which overcounted Codex and Gemini sessions and could re-trigger compaction right after compacting (#14291 by @will-bogusz)
  • Fixed native (OpenAI) compaction being refused as over the context window in sessions with many screenshots. Images were counted as about 1,200 tokens when deciding to compact but 12,000 when checking whether the compaction request fits; both checks now estimate images from their actual dimensions, and a request is no longer refused when only the image estimate pushes it over the window (#14260 by @H4vC).
  • Fixed OpenAI and Codex Remote Compaction V2 dropping your recent messages instead of keeping them next to the compaction summary (#14247 by @will-bogusz)
  • Fixed the failed V2 remote compaction warning claiming a V1 fallback on Codex, where V1 does not run (#14245 by @will-bogusz)
  • Fixed Anthropic native compaction being rejected with Invalid signature in thinking block (or silently dropping the summarized thinking) on models with preserved thinking (#14251 by @will-bogusz)

@oh-my-pi/pi-ai

Added
  • Added per-model compat.statefulResponses to enable or disable stored Responses chaining (previous_response_id with store: true) for one endpoint without the official-only request fields that compat.officialEndpoint implies (#13686 by @alphastorm).
  • Added Snowflake Cortex with browser OAuth, token refresh, PAT environment authentication, and streaming Claude/OpenAI models with local tool execution (#14507 by @jorgoose).
  • AuthStorage.health.check() accepts excludeProviders to skip credentials of providers the caller does not serve (#14234 by @will-bogusz)
Changed
  • Reduced CPU spent on thinking-loop detection while streaming long reasoning (#14284 by @abilliontokens).
  • Added recordAffinity: false to credential resolution options, selecting as the session would without pinning the choice to that session (#14512 by @will-bogusz)
Fixed
  • Codex native-lane steering rejections (unsupported_native_inflight_message) now classify as retryable from their error text alone, matching the provider's own classification, and AIError.isCodexSteerRejection() identifies them so the agent retry can stay on the same model (#14242 by @alphastorm)
  • Fixed replayed Responses and Codex history, including persisted Codex user/developer and assistant items, sending detail: "original" images to endpoints whose supportsImageDetailOriginal is off (#13687 by @alphastorm).
  • Fixed thinking in turns kept after Anthropic native compaction being rejected or dropped on the next request (#14251 by @will-bogusz)
  • Fixed Claude usage being re-polled every 10 seconds while Anthropic rate-limits the account; a failed refresh now waits a minute before trying again (#14515 by @will-bogusz)
  • Fixed Devin requests skipping the onPayload hook, so payload capture now sees each Devin chat request and a returned replacement is what gets sent (#14506 by @will-bogusz)
  • An OpenAI Responses turn whose connection drops mid-stream can now recover the finished answer from the provider (on hosts that store results, such as Muse Code) instead of re-running the whole turn and discarding the reasoning already done. Storage is opt-in: pass storeResponses: true, set PI_MUSE_STORE_RESPONSES=1, or set a process-wide default with configureProviderStoreResponses (#14293 and #14534 by @abilliontokens).
  • Fixed the auth broker exiting when a background OAuth refresh sweep cannot read the credential store; the failure is now logged and the next sweep retries (#14538)
  • Fixed Anthropic OAuth billing headers changing during developer-first sessions and side turns, preserving the prompt-cache prefix (#14495).
  • Fixed OpenAI-compatible chat-completions gateways recording completed turns as client-cancelled because the connection closed before their [DONE] sentinel arrived (#14481).

@oh-my-pi/browser-relay

Fixed
  • Fixed the extension reporting tabs that DevTools or another debugger extension is inspecting as its own attachments, which made the relay skip attaching to them (#14224 by @will-bogusz)

@oh-my-pi/pi-catalog

Added
  • Added an optional statefulResponses compat field for OpenAI Responses models, kept through OpenRouter's Responses dispatch (#13686 by @alphastorm).
  • Added 15 Snowflake Cortex models with account-specific endpoints, Cortex compatibility rules, and estimated account-billed pricing (#14507 by @jorgoose).
  • Added the image-tokenization axis, which declares how GPT-5.2+, Claude and Gemini 3 lines bill input images on every host, with wire-API fallback rules for other models, plus imageTokens() to price one image (#14286

…