Release · Oh My Pi · can1357

Oh My Pi v18.17.0

What's new in Oh My Pi v18.17.0, released Nov 6, 2026 (). Newer: v18.18.0 (Nov 7, 2026)

Release notes

Oh My Pi v18.17.0

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

Added
  • Added Agent.queuedMessageGate to 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)
  • AuthStorage can now be constructed over an AuthStorageBackend instead 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: false or PI_ANTHROPIC_MESSAGE_THREADS=0/1
  • Added devin-cli (Devin CLI seat key) and devin-windsurf (Windsurf Enterprise sign-in) logins, both stored as a devin API 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.openRouterRouting and compat.extraBody, including @provider pins (#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_denied when tools were available (#17435, #17515 by @harshav167, continued in #18053 by @abilliontokens)
  • Fixed xai-tts failing with 422 missing field language; language now defaults to auto (#17992 by @Mirceone)
  • Fixed Codex WebSocket turns sending malformed incremental input after reconnects or onPayload edits, and prewarming busy sockets (#17809 by @xiangnan0811)
  • API-key logins now store keys under the auth rule's store-as provider (#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-prefix compat 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-threads compat 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_3 flag) 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).
  • grep and glob inside 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 from ovnfs --json status when 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.manualSkills glob patterns to hide skills from the model catalog while keeping them manually invocable (#18114 by @Shadorain)
  • Added Keenable web search (web/keenable), using KEENABLE_API_KEY or a stored keenable credential, or a keyless public endpoint when explicitly selected (#17953 by @KGKallasmaa)
  • web_search results list failed providers with reason and status code in details.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 update refuses to run while another update (including auto-update) is installing.
  • Added none to edit.mode (and PI_EDIT_VARIANT) to remove the edit tool; bash stays available even if bash.enabled is off.

…