@oh-my-pi/pi-agent-core
Added
- Added
transformAssistantMessagePreservesToolCalls, letting stream speculation and direct speculative candidates run under atransformAssistantMessagethat never rewrites streamed tool calls - Added
authorizeLaunchto the speculative execution host and coordinator so tool stream sessions can start host-approved effectful work (e.g. subagents) before their call dispatches
Fixed
- Fixed auto-compaction with the
remotemethod failing on long Codex/OpenAI sessions with "Remote compaction input exceeds the context window" (#13611) - Fixed passive tool-call context being repeated when several calls in one batch returned the same text; identical per-call context is now delivered once, at its first position (#13633 by @andrebrait)
@oh-my-pi/pi-ai
Added
- Added Command Code usage limits (5-hour, weekly, and credit balance) to /usage and the status line (#13666 by @riicodespretty)
Changed
- Reduced per-token CPU and allocations while streaming: the leaked-thinking scanner used for OpenAI-compatible and custom endpoints no longer allocates per character, chat-completions and Bedrock look up a delta's content block in constant time, Google, Gemini CLI, Codex, and chat-completions streams skip raw SSE line capture unless an
onSseEventlistener is attached, and event streams drain backlogs withoutArray#shift(#13650 by @H4vC).
@oh-my-pi/pi-catalog
Added
- Added Command Code's typesafe/jev decision model for the judge role (#13666 by @riicodespretty)
- Added Command Code's DeepSeek V4.1 Flash Fast model (#13666 by @riicodespretty)
- Added Command Code's Claude Sonnet 5.5 model (#13666 by @riicodespretty)
- Added
trust-forbidden=#truefor optional loginvalidatechecks, so a key check that answers 403 keeps the pasted key instead of rejecting it (#13666 by @riicodespretty) hosted-image #falseandimage-model #falsenow remove a hosted image flag or image model that a class rule grants (#13666 by @riicodespretty)- Added support for Claude Sonnet 5.5 model with image and text inputs
- Added new compatibility rules for Anthropic Sonnet family enabling mid‑conversation system features and disabling forced tool choice
- Added the
web-search-model,hosted-image, andimage-modelcatalog axes (Model.webSearchModel,hostedImage,imageModel).web-searchnow comes from the model's lineage and API (GPT-5+ Responses, Claude 4+ Messages, Gemini 2+), so proxies and gateways that expose these models inherit it.
Changed
- Renamed the Codex image model
openai-codex/gpt-image-1toopenai-codex/gpt-image-2to match what the Codex backend runs (gpt-image-2-codex); savedopenai-codex/gpt-image-1selectors resolve to the new id. - Routed Command Code's 10 GPT models through the OpenAI Responses API (#13666 by @riicodespretty)
- Command Code login now rejects a key that Command Code answers with 401; a 403 or an unreachable check keeps the pasted key, as the Command Code CLI does (#13666 by @riicodespretty)
- Command Code GPT models no longer advertise hosted image generation or the
gpt-image-2image model, which Command Code does not serve (#13666 by @riicodespretty) - Command Code Muse Spark models drop the minimal thinking level, and Muse Spark 1.3 adds max, matching the Command Code CLI (#13666 by @riicodespretty)
- Changed Command Code prices to match the Command Code CLI: DeepSeek V4 Flash and V4 Flash Vision Exp drop from 0.22 / 0.66 to 0.15 / 0.6 per 1M tokens, Step 3.5 Flash input drops from 0.1 to 0.09, and LongCat 2.0 is no longer shown as free (0.3 / 1.2) (#13666 by @riicodespretty)
Fixed
- Fixed missing thinking levels, image input, and prices for Command Code models (#13666 by @riicodespretty)
@oh-my-pi/pi-coding-agent
Added
- Batch
taskcalls now start each subagent as soon as itstasks[]item finishes streaming instead of waiting for the whole call; launched agents are aborted if the finished call is invalid, blocked, or changed. Controlled bytask.speculativeLaunch(default on; requires auto-allowed task approval and no extension tool lifecycle handlers) - Set
PI_SMART_GIT=1to have everygit worktree addin the bash tool — including inside compound commands, functions, and loops — copy-on-write clone the checkout (APFS, btrfs/XFS reflink, ReFS) instead of checking out every file, so new worktrees start with ignored build caches (target/,node_modules/) already in place; everyworktree addoption except--orphan,--no-checkout,--track, and--relative-pathsis handled, and anything else still runs real git.
Changed
- Running
omp "prompt"without a terminal on stdin (scripts, CI,</dev/null) now runs the prompt headless like-p; a bareompwithout a terminal exits 2 with an error instead of exiting silently (#13623 by @H4vC) - Invalid
--thinking,--approval-mode, and--modevalues are now rejected with a usage error (exit 2) listing the valid values, instead of being silently ignored (#13623 by @H4vC) - The default web search chain is now free-only: Parallel, the session's own model (new
web/hosted), Exa, Firecrawl, SearXNG, and the credential-free scrapers. Paid engines (Perplexity, Tavily, Brave, Kagi, …) and other providers' chat models run only when you set them on thewebrole or its fallback chain. - Parallel, Exa, and Firecrawl now run their keyless endpoints in the automatic chain instead of only when explicitly selected.
- Perplexity search no longer falls back to your OpenRouter key; select
openrouter/perplexity/…explicitly to search through OpenRouter. - Hosted web search now follows the model rather than the host: GPT-5+ over any Responses API, Claude 4+ over any Messages API, and Gemini 2+ (including Gemini CLI), so
web/hostedworks through proxies and gateways. A model-backed search that returns no sources now counts as a failure, so the chain moves on to the next engine instead of showing an unsourced answer. web/hostedfirst tries a cheaper model on the session's own provider (e.g. Opus → Haiku, GPT-5.x → GPT-5.6 Luna, Gemini Pro → Flash) and falls back to the session model itself when the host does not offer it or the call fails.- Image generation now tries the session provider's own image model first (e.g. GPT-5.x →
gpt-image-2, Gemini →gemini-3-pro-image, Grok →grok-imagine-image), and a GPT-5+ session model generates images itself through the hosted image tool when its provider or proxy has no image model. - The default image model chain now uses
openai/gpt-image-2,openai-codex/gpt-image-2, and the GAgemini-3-pro-image(Google and OpenRouter) instead ofgpt-image-1and the Gemini preview id. - Reduced CPU while streaming replies and tool calls: the reveal no longer deep-compares frozen leading content on every flush, streamed argument extraction no longer re-verifies the whole prefix, and deltas no longer queue extension notifications when no extension listens for
message_update(#13650 by @H4vC). - Reduced CPU and allocations for in-memory reads (URLs, notebooks, converted documents), tool-result spill checks, write read-projection guards, and hashline prefix stripping (#13650 by @H4vC).
Fixed
- Fixed alt+p and
/switchmodel picker latency by avoiding unnecessary catalog rebuilds - Fixed
--toolswith an unknown name printing a stack trace and listing only the tools left after filtering; it now prints a clean error naming unknown tools, built-in tools unavailable in the session, and the built-in and registered tools (#13623 by @H4vC) - Fixed unknown CLI flags exiting 1 with an extra "ended before completing" line instead of exiting 2 (#13623 by @H4vC)
- Fixed a mistyped
--modelin print mode telling you to set an API key; it now suggests the closest available models (#13623 by @H4vC) - Fixed the alt+p /
/switchmodel picker taking seconds to appear: it rebuilt the whole model catalog on every open before painting, and now re-reads it only when startup discovery is still landing or models.yml changed - Fixed
tool_calladditionalContextbeing delivered more than once when several extension or hook handlers on the same call returned identical text (#13633 by @andrebrait) - Fixed hosted OpenAI web search on hosts that accept only string tool_choice values, such as Command Code (#13666 by @riicodespretty)
Removed
- Removed the web search provider picker from
omp setup; set thewebmodel role (or keep the free default chain) instead.
@oh-my-pi/pi-natives
Changed
- Lowered the macOS native addons' minimum supported macOS version to 12.0 (previously 15.5)
- Reduced snapshot cost on every hashline read and grep: file-hash tagging no longer builds a normalized copy of the file, and the seen-line prefix regex is compiled once (#13650 by @H4vC).
Fixed
- Fixed released Darwin arm64 addons omitting Apple Foundation Models support (#13610).
- Fixed the edit tool's
replace block/delete blockoperations in indentation-based languages such as Python extending a statement's block over every following statement in its body when a comment line at a different indentation came right after it (#13358 by @jchanghong023).
@oh-my-pi/omp-stats
Fixed
- Fixed
omp statsdashboard numbers following the browser locale while the rest of the UI is English (e.g.546 Bmeaning 546 thousand and$38.003,33on a Turkish browser); figures now always use en-US formatting (#13640 by @NaC-L)
@oh-my-pi/pi-tui
Changed
- Reduced frame spikes and memory while long assistant replies retire into scrollback mid-stream: retiring rows no longer re-renders the whole published reply once per row, and the transcript no longer rescans the entire session history every frame (#13650 by @H4vC).
- Reduced memory held by finished messages: streamed Markdown blocks release their streaming row caches, frozen lex tokens, and syntax-highlight streams when they finalize, and the Mermaid render cache is now size-bounded (#13650 by @H4vC).
- Reduced per-frame CPU while streaming Markdown, edit previews (header facts are reused across frames; replace previews process only the visible lines), bash previews (highlighting is deferred to paint and the highlight cache is size-bounded), interleaved thinking blocks, and the live bash/ssh output tail (#13650 by @H4vC).
- Changed git status refresh interval to 10 seconds and added generation tracking to avoid stale counts after HEAD moves
Fixed
- Fixed streaming bash previews showing fields that follow the
envobject (e.g.command) as environment assignments (#13650 by @H4vC). - Fixed model picker latency by avoiding unnecessary catalog rebuilds
- Fixed the
@completion popup showing aSearching…placeholder while a refreshed file search is pending; the popup now stays hidden until results arrive, and Escape is no longer swallowed by it - Fixed multi-line IME and dictation input (for example, voice input in Ghostty or cmux) being sent as one message per line; it now lands in the prompt as a single multi-line draft, while Enter typed during a UI freeze still submits (#13378 by @goransh-walia)
Removed
- Removed the setup wizard's "Web search" tab; the providers scene is now sign-in only, and web search is chosen through the
webmodel role like other kind roles.
@oh-my-pi/pi-utils
Added
- Added an optional
onDonecallback toreadSseJsonOrTextthat reports the[DONE]sentinel without attaching a raw-event observer (#13650 by @H4vC).
Changed
- SSE events read without raw capture now share one frozen empty
rawarray instead of allocating one per event (#13650 by @H4vC).
Fixed
- Fixed the unsettled-command report overriding an explicit non-zero exit code with 1 and printing a spurious "ended before completing" line (#13623 by @H4vC)
What's Changed
- fix(ai): repair DeepSeek Responses replay by @roboomp in #13084
- fix(agent): exclude encrypted payloads from remote compaction fit check by @roboomp in #13613
- fix(natives): built apple foundation models in macos releases by @roboomp in #13612
- test(vcs): isolate Rust test oracles from developer git config by @ParadaCarleton in #13388
- fix(pi-ast): keep block-range detection working across comment-only lines by @jchanghong023 in #13358
- Fix: TUI: multiline IME/dictation input is split into separate single-line by @goransh-walia in #13378
- cli ux gap fixes by @H4vC in #13623
- fix(stats): format dashboard numbers in en-US regardless of browser locale by @NaC-L in #13640
- fix(prompt): address append provenance review follow-ups by @andrebrait in #12147
- fix(agent): deliver identical passive tool context once per batch by @andrebrait in #13633
- tui perf fixes by @H4vC in #13650
- feat: refresh the Command Code provider by @riicodespretty in #13666
New Contributors
- @goransh-walia made their first contribution in #13378
- @riicodespretty made their first contribution in #13666
Full Changelog: v18.4.2...v18.4.3