Release notes
Oh My Pi v18.17.0
@oh-my-pi/pi-agent-core
Added
- Added
Agent.queuedMessageGateto filter queued messages before delivery and observe claimed messages returned undelivered. - Added
wireToolsFingerprint(), returning a hash of the tool specs sent with a request.
@oh-my-pi/pi-ai
Added
- Added opt-in standard Responses WebSockets for catalog-supported models, with incremental turns and automatic HTTP/SSE fallback; enable through OMP settings (#17354 by @TatsukiMeng)
AuthStoragecan now be constructed over anAuthStorageBackendinstead of a credential store, so another thread's instance can serve every call- Anthropic official-API sessions use message threads, sending only new messages per turn for faster first tokens; toggle with
statefulResponses: falseorPI_ANTHROPIC_MESSAGE_THREADS=0/1 - Added
devin-cli(Devin CLI seat key) anddevin-windsurf(Windsurf Enterprise sign-in) logins, both stored as adevinAPI key (#13637 by @pavel-kalmykov, #13288 by @pavel-kalmykov) - Factory Droid Gemini 4 Argon requests now match Droid's request and conversation handling (#17861 by @will-bogusz)
Changed
- Changing the Codex ultrafast service tier now opens a connection for the selected tier, so requests route correctly
- Factory Droid requests and login now match the current Droid client
- Codex HTTP requests (turns, compaction, image generation, web search, model discovery) no longer send
OpenAI-Beta: responses=experimental, matching the official Codex client
Fixed
- Fixed account switching stopping at rate-limited accounts; other eligible stored accounts are now tried first
- Fixed OpenRouter Decisions judges ignoring
compat.openRouterRoutingandcompat.extraBody, including@providerpins (#18140) - OAuth broker now validates residency, inference-region, and selected-organization metadata in uploaded credentials and remote snapshots
- Fixed Muse Code subscription sessions failing with
403 client_attestation_deniedwhen tools were available (#17435, #17515 by @harshav167, continued in #18053 by @abilliontokens) - Fixed
xai-ttsfailing with422 missing field language;languagenow defaults toauto(#17992 by @Mirceone) - Fixed Codex WebSocket turns sending malformed incremental input after reconnects or
onPayloadedits, and prewarming busy sockets (#17809 by @xiangnan0811) - API-key logins now store keys under the auth rule's
store-asprovider (#13637 by @pavel-kalmykov) - Fixed
openai-responses, Codex, and Muse Code continuations after an output limit cut a tool call, including reasoning-first models (#17847, #18189 by @mttzzz) - Gemini and Vertex malformed-response finishes now report the correct stop reason and keep token usage; RPC prompt errors are reported as retryable
- Fixed reranking when Cohere-compatible responses omit the model field
- Reranking requests now send configured model headers, including custom
Authorization - Provider retries no longer retry responses explicitly marked non-retryable
@oh-my-pi/pi-catalog
Added
- Added
tool-name-prefixcompat axis for Responses hosts that reject certain tool names; Muse Code sets it to_(#17435, #17515 by @harshav167, continued in #18053 by @abilliontokens) - Added
supports-message-threadscompat axis (supportsMessageThreads), enabled for Claude 4.5+ on first-party Anthropic - Added opt-in Responses WebSocket capability via OMP settings or SDK preferences, off by default (#17354 by @TatsukiMeng)
- Added Factory Droid Gemini 4 Argon on Global inference for accounts with the feature flag (#17861 by @will-bogusz)
- Added Factory Droid Muse Spark 1.3 (Global region,
muse_spark_1_3flag) with low to xhigh effort (#17862 by @will-bogusz)
Changed
- Updated Factory Droid client version reporting; improved tool-input streaming for Claude via Azure Foundry
Fixed
- Fixed newly published Azure models missing after catalog refresh (#18173, #18174 by @dunkpi)
- Fixed Factory Droid hiding models when the live-routing family default yields no usable upstream; explicit empty per-model routes still hide them (#17862 by @will-bogusz)
@oh-my-pi/pi-coding-agent
Added
- Bash commands, foreground and background, now show a live execution visualization in Raw or Python-like Pseudo view, with variable values and replay history; disable with
display.shellVisualization(default on). grepandglobinside an ovnfs checkout ask the ovnfs daemon to search the checkout in-process, avoiding per-file mount round trips; the daemon and its mount come fromovnfs --json statuswhen the ovnfs binary is found. They fall back to the native search when the daemon is unavailable or rejects the request, and cancelling the tool cancels the daemon's search. ovnfs with admin protocol 5 is required.- Added
skills.manualSkillsglob patterns to hide skills from the model catalog while keeping them manually invocable (#18114 by @Shadorain) - Added Keenable web search (
web/keenable), usingKEENABLE_API_KEYor a storedkeenablecredential, or a keyless public endpoint when explicitly selected (#17953 by @KGKallasmaa) web_searchresults list failed providers with reason and status code indetails.failures(#18124 by @will-bogusz)- Added opt-in background auto-update (
update.auto, offered in setup) that installs new releases via your install method and runs them next launch; skipped on Nix, source checkouts, and Tern. omp updaterefuses to run while another update (including auto-update) is installing.- Added
nonetoedit.mode(andPI_EDIT_VARIANT) to remove theedittool;bashstays available even ifbash.enabledis off.
…