@oh-my-pi/pi-agent-core
Breaking Changes
- Removed
estimateImageContentTokens()from@oh-my-pi/pi-agent-core/image-tokens; useTokenizer.imageTokens(size, detail), which prices with the reading model's catalog image rule (#15446 by @will-bogusz) applyShakeRegion()andapplyShakeRegions()take the replacement's token count (replacementTokens); a block rewrite of an assistant turn adds the tokens it removes toelidedOutputTokens, 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
isOfficialCodexApiUrlmoved from@oh-my-pi/pi-aito@oh-my-pi/pi-catalog/wire/codex, next toCODEX_BASE_URL, so the catalog's compat resolver classifies Codex endpoints with the same check (#15434 by @will-bogusz)
Added
- Added
withoutUnverifiedThinkingutility 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, followingANTHROPIC_BASE_URLand Foundry'sFOUNDRY_BASE_URLreroutes 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, whichusage.outputstill counts (#15446 by @will-bogusz) - Exported
shouldDropTruncatedThinkingOnlyAssistantfromproviders/transform-messages,isColdReplayableResponsesTurnfromproviders/openai-sharedand the newopenAIResponsesReplaysNativeHistoryfromproviders/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)andresolveImageCountBudget(model, officialEndpoint)take whether the request reaches the official endpoint instead of readingcompat.officialEndpoint, which misses request-time reroutes such asANTHROPIC_BASE_URL; pass pi-ai'sreachesOfficialEndpoint(model)(#15434 by @will-bogusz)
Added
- Added Muse Wonder (
muse-wonder-1.0) to Meta and Muse Code with itsminimal–maxeffort ladder and pricing - Added the
thinking-unverifiedrule 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-unverifiedaxis for offering reasoning ladders on unclassified model IDs - Added
Muse Wonder 1.0model definition to Meta provider - Added the opt-in
snapcompact-image-readsaxis: snapcompact images a freshreadresult only for readers whose rule sets it; Claude Opus 5.5 and later opt in (#14249 by @will-bogusz) - Added the
image-count-budgetrule for how many images one request may carry (Anthropic 90, Codex 200, other hosts unchanged) and theofficial-image-count-budgetoverride 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
isOfficialCodexApiUrltowire/codex, moved from pi-ai (#15434 by @will-bogusz) - Added
verifiedtoimage-tokenizationrules, 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-edgeaxis andresolveImageMaxEdge()for hosts that shrink images before the model reads them; Cursor's Claude and GPT models and itsdefault(Auto) route fit 1024×1024 (#15448 by @will-bogusz) - Added the
thinking-replay-tokensaxis; Claude lines set it tooutputon 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-dimensionandmax-image-payload-bytesto Google API models, and declared the 5 MiB per-image limit of Claude on Google Antigravity (#15444 by @will-bogusz) - Fixed local token counts for OpenAI GPT-5 and later models (Codex, OpenAI, Azure, OpenRouter, Copilot and other hosts) reading about 12% low: their text is now counted with o200k_base instead of a bytes/4 estimate (#15447 by @will-bogusz)
@oh-my-pi/pi-coding-agent
Added
- Added
task.agentSoftRequestBudgetto give named subagents their own soft request budget, so a long-running agent can get more requests (or0for no guard) while scout, sonic and other agents keep theirs (#15419 by @will-bogusz) - Added
o200kas atokenizervalue for custom models and overrides inmodels.yml(#15447 by @will-bogusz)
Changed
- Sized snapcompact archives for Claude 4.7+ and GPT-5.5 to 6.1 (gpt-6-astra included) at each frame's measured price instead of at least 5,024 tokens, so Codex archives can hold up to 1.7× as many frames when the room under the compaction trigger is the limit (#15442 by @will-bogusz)
- Enabled sibling subagent prompt-cache sharing for Muse Code's Spark 1.3, Wonder 1.0, and Wonder Full 1.0 variants while keeping their conversations separate (#15467 by @iliaal, based on #15285 by @YueyuHoshizora)
- Reduced tool-result tokens by omitting subsecond bash timing and redundant task size metadata (#15468 by @iliaal; #15265; based on #15284 by @YueyuHoshizora)
- On the official Anthropic and Codex endpoints, snapcompact archives may carry up to 12 MB of frames instead of 3 MB, Anthropic requests keep up to 600 images (100 on 200k-window models) instead of 90, and Codex requests up to 2,000 instead of 200; custom base URLs, including Anthropic requests rerouted by
ANTHROPIC_BASE_URLor Foundry'sFOUNDRY_BASE_URL, keep the previous limits and no longer get Anthropic's 24 MB inline image byte limit (#15434 by @will-bogusz)
Fixed
- Fixed
snapcompact.toolResultsre-sending each large tool result as images a turn after it went out as text, which broke the prompt cache and Anthropic signed thinking every turn; results are now imaged from their first send, andreadresults stay text unless the model is known to edit exactly from images (Opus 5.5+) (#14249 by @will-bogusz) - Fixed compaction on Claude sessions with thinking sometimes keeping about half the recent history
compaction.keepRecentTokensasks for, because each kept turn was counted at its signature's size (#15446 by @will-bogusz) - Fixed retry fallback rejecting a model with a smaller window by charging it the reasoning the active model's provider usage replayed, and the output cap charging reasoning a cold Responses session leaves out of its first request (#15447 by @will-bogusz)
- Fixed anonymized session exports losing whether bash timing was shown (#15468 by @iliaal)
- Added
omp --restore <session>: resumes a session like--resume, then goes on with what its last process left unfinished when it crashed or was killed, both the interrupted turn and the subagents it was running (their results reach the parent as usual); Tern's session daemon now restarts omp with it after a crash - Kept private prompt-cache routing keys out of shared sessions and HTML exports (#15467 by @iliaal)
@oh-my-pi/snapcompact
Breaking Changes
providerImageBudget(provider)andproviderFrameBudget(provider)becameproviderImageBudget(model)andproviderFrameBudget(model), andmaxFramesForDataBudget(shape)becamemaxFramesForDataBudget(shape, budget)with a required byte budget (#15434 by @will-bogusz)- Removed
PROVIDER_IMAGE_BUDGETSandFRAME_DATA_BYTES_BUDGET: image counts come from the catalog'simage-count-budgetrules, and frame byte budgets fromframeDataBytesBudget(model)(DEFAULT_FRAME_DATA_BYTES_BUDGETwhere the host has none) (#15434 by @will-bogusz)
Added
- Added
plannedFrameTokensandShape.frameTokensVerified: archive sizing charges a frame its own price when the reader'simage-tokenizationrule isverified, and at leastFRAME_TOKEN_ESTIMATEotherwise (#15442 by @will-bogusz)
Fixed
- Fixed snapcompact frames for Claude and GPT on Cursor, including its
default(Auto) route, being drawn at 1568–1932px, which Cursor shrank to 1024px before the model read them; frames now render at the host's catalogimage-max-edge(#15448 by @will-bogusz)
@oh-my-pi/pi-tui
Changed
- Updated model picker to offer manual effort selection for unverified models instead of automatic mode
Fixed
- Fixed the
snapcompact.shapesettings preview labelling variants5x8-sentand repeating the first variant's sample when the frame edge differs from the variant table (Claude and GPT on Cursor;autoon high-resolution Claude) (#15448 by @will-bogusz)
What's Changed
- feat(task): let named subagents get their own soft request budget by @will-bogusz in #15419
- feat(catalog,snapcompact,coding-agent): size snapcompact request limits from catalog policy by @will-bogusz in #15434
- fix(catalog,snapcompact,coding-agent): size snapcompact archives at billing-verified frame prices by @will-bogusz in #15442
- fix(ai,catalog): clamp Claude images to Antigravity's 5 MiB limit by @will-bogusz in #15444
- fix(catalog,snapcompact,tui): keep snapcompact frames legible to Claude and GPT on Cursor by @will-bogusz in #15448
- feat(catalog): size snapcompact archives on Antigravity, xAI and Cursor from measured limits and prices by @will-bogusz in #15449
- fix(agent,catalog,coding-agent): count replayed Claude thinking and images at what Claude bills by @will-bogusz in #15446
- perf(tools): trim bash timing and task size metadata by @iliaal in #15468
- fix(catalog,agent,ai,coding-agent): count GPT-5 and later context the way OpenAI bills it by @will-bogusz in #15447
- fix(coding-agent): stop snapcompact tool-result imaging from rewriting already-sent results by @will-bogusz in #14249
- perf(task): share sibling prompt-cache keys on opted-in providers by @iliaal in #15467
Full Changelog: v18.10.2...v18.10.3