Release · Oh My Pi · can1357

Oh My Pi v18.10.3

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

Release notes

Oh My Pi v18.10.3

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

Breaking Changes
  • Removed estimateImageContentTokens() from @oh-my-pi/pi-agent-core/image-tokens; use Tokenizer.imageTokens(size, detail), which prices with the reading model's catalog image rule (#15446 by @will-bogusz)
  • applyShakeRegion() and applyShakeRegions() take the replacement's token count (replacementTokens); a block rewrite of an assistant turn adds the tokens it removes to elidedOutputTokens, so a replayed Claude turn's count stays lowered after a reload (#15446 by @will-bogusz)
Fixed
  • Fixed Claude context counts reading Opus 5.5 requests about 55% over their billed input: a replayed thinking turn now counts at the output size Claude billed for it, not its signature's bytes (#15446 by @will-bogusz)
  • Fixed screenshots and other non-frame images being counted at the OpenAI rate for every model instead of the reading model's own; Claude billed them about 16% higher (#15446 by @will-bogusz)
  • Fixed OpenAI Responses and Codex context estimates leaving out replayed reasoning: each turn whose encrypted reasoning actually replays now counts its reported reasoning tokens (its ciphertext when the backend reports none), and none while a cold session rebuilds it out of the request, so compaction and snapcompact sizing match billing; branch summaries no longer budget for encrypted reasoning they never send (#15447 by @will-bogusz)

@oh-my-pi/pi-ai

Breaking Changes
  • isOfficialCodexApiUrl moved from @oh-my-pi/pi-ai to @oh-my-pi/pi-catalog/wire/codex, next to CODEX_BASE_URL, so the catalog's compat resolver classifies Codex endpoints with the same check (#15434 by @will-bogusz)
Added
  • Added withoutUnverifiedThinking utility to filter reasoning capability from models when no effort is requested
  • Added reachesOfficialEndpoint(model): whether a request to the model reaches the official endpoint its compat was built for, following ANTHROPIC_BASE_URL and Foundry's FOUNDRY_BASE_URL reroutes of first-party Anthropic models (#15434 by @will-bogusz)
  • Added AssistantMessage.elidedOutputTokens, the visible output tokens a history rewrite (shake) has removed from the turn, which usage.output still counts (#15446 by @will-bogusz)
  • Exported shouldDropTruncatedThinkingOnlyAssistant from providers/transform-messages, isColdReplayableResponsesTurn from providers/openai-shared and the new openAIResponsesReplaysNativeHistory from providers/openai-responses, so local token estimates can follow which turns replay drops and whether a session replays native history (#15447 by @will-bogusz)
Fixed
  • Fixed Claude on Google Antigravity failing every turn with "image exceeds 5 MB maximum" once a large image entered the conversation; images are now downscaled to the host's limits before sending, as on the Anthropic API (#15444 by @will-bogusz)

@oh-my-pi/pi-catalog

Breaking Changes
  • resolveInlineImageByteBudget(model, officialEndpoint) and resolveImageCountBudget(model, officialEndpoint) take whether the request reaches the official endpoint instead of reading compat.officialEndpoint, which misses request-time reroutes such as ANTHROPIC_BASE_URL; pass pi-ai's reachesOfficialEndpoint(model) (#15434 by @will-bogusz)
Added
  • Added Muse Wonder (muse-wonder-1.0) to Meta and Muse Code with its minimal–max effort ladder and pricing
  • Added the thinking-unverified rule axis: on hosts whose model list carries no capability metadata (Meta, Muse Code), unrecognized models now offer an opt-in thinking ladder (ThinkingConfig.unverified) instead of none
  • Added thinking-unverified axis for offering reasoning ladders on unclassified model IDs
  • Added Muse Wonder 1.0 model definition to Meta provider
  • Added the opt-in snapcompact-image-reads axis: snapcompact images a fresh read result only for readers whose rule sets it; Claude Opus 5.5 and later opt in (#14249 by @will-bogusz)
  • Added the image-count-budget rule for how many images one request may carry (Anthropic 90, Codex 200, other hosts unchanged) and the official-image-count-budget override that applies only on the official endpoint: Anthropic 600 (100 on 200k-window Claude models), Codex 2,000 (#15434 by @will-bogusz)
  • Added a 24 MB inline-image byte budget for the Codex backend, which now counts as its official endpoint at its default URL and at paths under it such as /codex/responses (#15434 by @will-bogusz)
  • Added isOfficialCodexApiUrl to wire/codex, moved from pi-ai (#15434 by @will-bogusz)
  • Added verified to image-tokenization rules, marking the Claude 4.7+ high-res tier and the GPT-5.5 to 6.1 and gpt-6-astra rules as matching measured provider billing (#15442 by @will-bogusz)
  • Added the image-max-edge axis and resolveImageMaxEdge() for hosts that shrink images before the model reads them; Cursor's Claude and GPT models and its default (Auto) route fit 1024×1024 (#15448 by @will-bogusz)
  • Added the thinking-replay-tokens axis; Claude lines set it to output on every host, since a replayed signed thinking block bills the turn's full reasoning, not the signature's bytes (#15446 by @will-bogusz)
  • Added a KDL opt-in for sibling subagent prompt-cache sharing, enabled for Muse Code's Spark 1.3, Wonder 1.0, and Wonder Full 1.0 variants over the Responses API (#15467 by @iliaal)
Changed
  • Updated model definitions and compatibility rules for provider metadata
  • Google Antigravity, xAI and Cursor requests keep up to 60 images, 20 for Claude on Antigravity and Cursor, up from 5; this counts snapcompact frames and live screenshots together (#15449 by @will-bogusz)
  • Snapcompact sizes archives at the frame prices measured for Antigravity Gemini (a fixed 1,089 tokens), Grok 4.6 to 4.20, and Claude Sonnet 4.6's standard tier (#15449 by @will-bogusz)
Fixed
  • Applied max-image-dimension

…