Skip to main content

Changelog

OMP

Oh My Pi, an extended terminal coding agent based on Pi
Recently checked

Last checked against an official source:

Open official changelog source

Collection from official sources is limited. Earlier releases may be missing. This page does not claim a complete version history.

This view shows 107 of 186 recorded entries. Older entries are not loaded here.

Latest Version:v18.18.0
Loaded Releases:107
Source:GitHub Releases
RSS

Latest Releases (107)

v18.18.0New

v18.18.0

November 7, 2026

  • •Fixed Mistral discovery listing embedding, OCR, moderation, transcription, and speech models as chat models; only rows with capabilities.completion_chat are offered, with context, image input, and reasoning read from the row (#18244 by @VeigaPunk)
  • •A failed refresh no longer replaces a cached catalog whose models carry request headers with an empty snapshot; the next launch refetches it instead (#18227)
  • •Fixed transcript output freezing after provider restarts or switching sessions mid-stream (#18358 by @JustasMasiulis)
  • •Bash tool cards for a command whose leading cd <dir> && / cd <dir>; was hoisted into the working directory show that cd again above the visualized command, with the separator the model wrote, instead of dropping where it ran
  • •Bash commands starting with cd <dir>; ... now run in <dir> as their working directory when it exists, so its direnv environment loads and the directory shows on the tool card (#18329 by @harshaygadekar)
  • •Task-file approvals show and keep the checked file target through dispatch, so retargeted symlinks cannot silently substitute another assignment; replaced files require a retry (#18314 by @iliaal).
  • •Subagents receive task instructions with their blank lines, Markdown hard breaks, and table spacing intact, whether given inline or via taskFile.
  • •Hindsight retain and learn memories are no longer lost when delivery fails or omp exits: they are kept on disk, retried, and delivered by the next session without duplicates (#18176 by @alphastorm)
Show more (7)
  • •Fixed the session crashing with Native shell returned an invalid execution trace when a bash command assigned a long value containing multi-byte characters such as Chinese text (#18259)
  • •grep -e and rg -e in the bash tool accept patterns that start with - (e.g. grep -e "--canary") instead of failing with an unknown-option error.
  • •The bash execution visualization keeps updating, and saved traces still restore, after a command handles bytes that aren't valid UTF-8 (e.g. v=$(printf '\377'))
  • •On Windows, grep, glob and isolated subagents no longer flash a console window when they query or start the ovnfs daemon.
  • •A bash command containing a bare [ (e.g. a && [ while still streaming) no longer crashes omp in the Pseudo shell visualization (#18320)
  • •Fixed a prompt that mentions an internal-scheme URL with @ (e.g. @local://x, @vault://x) aborting the run with "uses internal scheme ... not as a filesystem path"; such a mention is now left as plain text (#16071)
  • •Fixed MCP OAuth login and token refresh failing with JSON Parse error: Unexpected identifier "access_token" against GitHub's token endpoint (#18292)
v18.17.0NewBreaking Change

v18.17.0

November 6, 2026

  • •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.
  • •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)
  • •Changing the Codex ultrafast service tier now opens a connection for the selected tier, so requests route correctly
Show more (7)
  • •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 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)
v18.16.0NewBreaking Change

v18.16.0

November 2, 2026

  • •Deprecated createFileOps, computeFileLists, formatFileOperations, upsertFileOperations, isUrlSchemePath and FileOperations in @oh-my-pi/pi-agent-core/compaction; they now re-export @oh-my-pi/snapcompact, which callers should import directly
  • •Context estimates for a model without a known tokenizer family (Gemini, Grok and the like), and token counts made without a model (compress metrics, the legacy estimateTokens export), count text in o200k_base instead of guessing 4 bytes per token, which undercounted what those providers bill by 11–48% on code-heavy sessions and let compaction fire late after a switch to them (#17607 by @will-bogusz)
  • •Context estimates no longer charge a reader another model's thinking signatures or redacted thinking, which the request strips: a Claude session switched to Grok or Gemini, including Gemini through Factory, counted them as text (#17607 by @will-bogusz)
  • •Removed PI_TOKENIZER_ACCURATE: every model is now counted with a native tokenizer (#17607 by @will-bogusz)
  • •/login mistral signs in through the browser like the Mistral Vibe CLI and stores the minted API key, whose usage counts against the plan's Vibe Code quota instead of pay-as-you-go API credits; MISTRAL_API_KEY still works (#13875 by @Gauthier-Huguenin, continued in #17672 by @abilliontokens)
  • •Added dropsForeignReasoningPayload(turn, model), which tells whether transformMessages certainly strips a turn's thinking signatures and redacted thinking on the way to model, and, for Factory Droid's Gemini wire, isFactoryDroidGeminiWire(model) and keepsFactoryGeminiReasoning(turn) (#17607 by @will-bogusz)
  • •Factory Droid Beam 1.0 requests accept tool-call turns that arrive without reasoning (#17766 by @will-bogusz)
  • •Deprecated formatError on the embeddings, images, rerank, speech, transcriptions, video, pi-native and SystemOne server modules (now aliases of codedErrorResponse / noStoreErrorResponse in auth-gateway/http) and asStrict in providers/aws-sigv4 (now asStrictBytes from @oh-my-pi/pi-utils)
Show more (7)
  • •Fixed Factory Droid Fable requests offering Opus 5 as the refusal fallback when your organization's model policy excludes Opus 5; Claude requests now offer only fallback models your account can use, and a request served by another organization's login than the one your model list came from offers none (#17772 by @will-bogusz)
  • •/login mistral now offers the Mistral Vibe browser sign-in beside MISTRAL_API_KEY (#13875 by @Gauthier-Huguenin, continued in #17672 by @abilliontokens)
  • •Added revisionAtLeast to compat/revision and exported withOpenAICompatibleDiscoveryTimeout from discovery/openai-compatible
  • •Added the Factory Droid models droid 1.1.0 serves: GPT-6.1 Terra, GPT-6 Sol and Luna Fast Mode, GPT-6 Astra and GPT-6.1 Sol Ultra Fast (after the organization's high-cost opt-in), Nemotron 3.5 Super, Muse Spark Open, Muse Spark 1.2 and Beam 1.0, each listed once the account may use it (#17766 by @will-bogusz)
  • •Added Factory Droid's dated credit rates: the credit rate follows Factory's promotions, discounted from a promotion's start and back to the base rate at its end, using the same dated rate cards as dollar prices (currently GPT-5.6 Sol and Gemini 3.7/3.8 Flash) (#16309 by @will-bogusz)
  • •Factory Droid lists Opus 5.5 Fast, GPT-6.1 Sol and MiniMax M3 without the feature flags Factory retired, and no longer routes GPT-5.5 to Snowflake (#17766 by @will-bogusz)
  • •Factory Droid Opus 5.5 now falls back to Opus 5 when Anthropic refuses a request, as droid does, while your account can use Opus 5 (#17772 by @will-bogusz)
v18.15.0NewBreaking Change

v18.15.0

November 1, 2026

  • •Fixed OpenAI remote compaction (/responses/compact) replaying backend-only internal_chat_message_metadata_passthrough metadata that Codex rejects as an unknown parameter (#17590 by @briankeefe)
  • •Fixed Codex conversation replay failing with an unknown internal_chat_message_metadata_passthrough.content_token_count parameter by omitting backend-internal response metadata from replayed input (#17590, #17597 by @briankeefe).
  • •Fixed service_tier: "ultrafast" being dropped for OpenAI-family models on custom providers even when the model's serviceTiers lists it (#17577 by @jakehemmerle)
  • •Fixed Google Vertex requests with Workforce Identity Federation ADC failing token refresh against the wrong endpoint (#17447).
  • •Fixed Anthropic (and other rotating-token) OAuth accounts being signed out automatically when a background usage poll's token refresh got invalid_grant, including refreshes a client delegates to an auth broker; usage polling no longer disables credentials, so only a real request's refresh can do that (#17468)
  • •Added Modular Cloud (modular) as a provider: /login modular with an API key, models and prices from the models.dev modular entry, and per-model reasoning controls for MiniMax M3.1 Flash, MiniMax M3, and Gemma 4 31B (#17334 by @tommyjtl)
  • •SambaNova Cloud follow-up turns now reuse the provider's prefix cache, so multi-turn conversations stop re-processing earlier context (#17555 by @rjuez00)
  • •Fixed newly discovered OpenAI-compatible models ignoring provider-reported context and output token limits (#17561 by @wolfiesch)
Show more (7)
  • •Long or multi-step background shell commands get a one-line caption saying what they do and when they end, written once per job by the widget model role when the job, after running 15 seconds, is shown in a live widget or listed by /jobs full; the jobs sheet and /jobs full show it under the job's purpose. It follows the Live Job Widgets setting (async.widgets), and CreateAgentSessionOptions.jobCaptionWriter replaces the model call (#17649 by @wolfiesch)
  • •In a source checkout, the error for a missing HTML export viewer now names the script that builds it, packages/collab-web/scripts/build-export-viewer.ts, beside bun gen:export-viewer (#17636 by @sjawhar)
  • •Fixed an eval cell running silently on a new kernel after the session's Python kernel or JS worker died between cells (a crash, a kill, an out-of-memory kill, or a cancelled JS cell): the first cell on the replacement now carries Kernel restarted: … state is unavailable. Re-run needed setup ahead of its own output, instead of failing with a bare NameError on a variable an earlier cell set (#17595 by @sjawhar)
  • •Fixed a task worker messaged (write agent://<id>) while still starting up running on the shared context alone and never receiving its tasks[].task assignment; the message now waits for the assignment's turn (#17587)
  • •lsp reload now discovers Rust crates created after rust-analyzer started, so hover and other analysis work without restarting omp (#17658).
  • •A model without image input (GLM, DeepSeek, Grok Composer and the like) reads a snapcompact archive's full kept text instead of image-omitted placeholders for its frames, after a model switch, on resume and in side requests (#17510 by @will-bogusz)
  • •Snapcompact no longer refuses a new archive as "would not reduce context" when it shrinks a session that already holds one (/compact snapcompact, idle and pre-prompt compaction) (#17490 by @will-bogusz)
v18.14.2NewBreaking Change

v18.14.2

October 31, 2026

  • •The soft steering signal a tool sees as toolCall.steeringSignal now aborts with the source of the queued message ("user", "irc", …) as its reason, so a tool can yield only to the sources it should (#17537)
  • •Reject incomplete local compaction, turn-prefix, handoff, and branch summaries ending with stopReason: "length" instead of using truncated text as complete context. Omit incomplete display-only short summaries without discarding a completed full summary (#17499 by @Xytronix).
  • •Replaced isLoopGuardedModel with loopGuardLevel, which returns "off", "exact", or "semantic" from the model's thinking-loop-guard catalog rule
  • •Added disableServerSideFallback to FactoryDroidOptions and SimpleStreamOptions: a Factory Droid request leaves out the server-side refusal fallback chain and fails, before any of its content is streamed, if another model answers it (#12229 by @Xytronix)
  • •DeepSeek and Grok models on Amazon Bedrock now get the same near-duplicate reasoning-loop checks as on other hosts
  • •Fixed Claude turns failing with "Thinking loop detected" when summarized thinking repeated a progress line such as "Still writing the parser..."; Claude models no longer run the loop guard
  • •Fixed the loop guard discarding turns from other models whose reasoning summary repeats one status line a few times; whole-line repetition now has to cover about 1 KB before it counts as a loop
  • •Fixed per-request OpenAI-compatible headers being combined with differently cased model headers instead of overriding them (#17513 by @jchanghong023)
Show more (7)
  • •Fixed a stalled Anthropic stream that keeps sending empty content deltas never timing out, because those deltas were treated as stream progress (#17484 by @jchanghong023)
  • •Fixed Anthropic-compatible endpoints that put a thinking signature on the streamed content block losing it, so replayed reasoning keeps its signed block (#17483 by @jchanghong023)
  • •Fixed AuthStorage.close() and replaceStore() losing a rotated OAuth refresh token when a refresh was still in flight, with or without durable refresh leases; the store now stays open until that token is saved, and new refreshes are refused (#17518)
  • •Fixed /usage showing Cursor's "Other Models" meter as an inflated dollar amount; it now shows the percentage Cursor reports, like Cursor Models (#17462 by @eggpeat)
  • •Fixed the omp auth-gateway Responses endpoint rejecting documented null values for temperature, top_p, output limits, reasoning, and reasoning summaries (#17466 by @Xytronix).
  • •Fixed provider HTTP errors printing the response body twice when the thrown error already carried it, including responses with a retry header (#17503 by @metaphoric-dev)
  • •Fixed Gemini tool calls through the omp auth-gateway chat-completions endpoint failing on the next turn: the gateway now returns each call's thought signature in extra_content and replays the one a client sends back (#17509 by @justdoGIT)
v18.14.1Breaking Change

v18.14.1

October 31, 2026

  • •SentToolDefinitions.inactiveFor(messages, tools) is replaced by withInactiveTools(context), which also clears a stale inactiveTools; transformProviderContext now receives the request's inactiveTools (#17492)
  • •Long tool-call intents no longer block tool execution when intent tracing is enabled (#13140).
  • •Added the codexAccessPrograms stream option and configureCodexAccessPrograms() process default to turn off the automatic Daybreak Blue access_programs request on Codex (#17508 by @H4vC)
  • •Added waitForSibling to RotateCredentialOptions; set it to false to skip the short sibling-unblock wait in limits.rotate() while still blocking the failed credential (#17439 by @wolfiesch)
  • •Cursor runs served through omp auth-gateway are limited to the client's own tools, all advertised as MCP; Cursor's built-in tools (file, shell, edit, todo, web fetch, SCM) are no longer offered on that path (#17382 by @eggpeat)
  • •Fixed native judgment requests (TypeSafe, OpenRouter Decisions, OpenAI Decisions, Workers AI) sending credentials in their state unredacted while credential redaction was on (#17443)
  • •Fixed every new Codex session, including each subagent, losing a response and retrying when the native turn lane refuses live steering; once refused, later sessions on the same account, endpoint, and model queue follow-ups for four hours (#14158, #17438 by @wolfiesch)
  • •Fixed Cursor models served through omp auth-gateway being told their file and shell tools were unavailable while the client ran the calls anyway, in Cursor's own argument shape (edits failed validation); each call now reaches the client as one of its own tools and the turn stops with toolUse until the result comes back (#17382 by @eggpeat)
Show more (7)
  • •Fixed Cursor models served through omp auth-gateway being told each tool call was handed off, which left Composer issuing calls blind and answering their results with empty stops; the gateway now keeps the Cursor run open while the client runs a step's calls and answers them in-band with the client's results on its next request (up to 30 minutes; otherwise the turn is rebuilt from history as before) (#17382 by @eggpeat)
  • •Fixed Anthropic-compatible endpoints behind a relay opening a new connection for every turn: the response body is now drained for up to 2.5 s after message_stop instead of being cancelled, so the kept-alive connection is reused (#17432 by @flosrn)
  • •Clamping a requested thinking effort now resolves through the model's effortMap alias first, so the request lands on the tier the model serves instead of the nearest lower one (#17395 by @Maziar123)
  • •Long image-heavy conversations on the official Anthropic API now keep up to 120 MB of inline images before evicting older ones, following the Messages API request limit increase from 32 MB to 128 MB
  • •The official Anthropic API now records its 128 MB request limit (request-body-byte-limit), so the newest message's images can use the 8 MB reserve and long text cannot push images past the limit (#17492 by @will-bogusz)
  • •Fixed Cursor's DeepSeek V4.1 Flash 1017 reporting zero cost; every effort level now bills at Cursor's API rate of $0.30/$1.20 per million tokens, with cache reads at $0.006 (#17390 by @eggpeat)
  • •Added the providers.openai-codex.daybreak setting (default on) to stop omp from automatically requesting the Daybreak Blue cyber access program on eligible ChatGPT accounts; each session follows its own value (#17508 by @H4vC)
v18.14.0Breaking Change

v18.14.0

October 29, 2026

  • •Removed the Bun event-loop workaround utilities from @oh-my-pi/pi-agent-core/utils/yield; agent loops no longer insert cooperative sleeps while streaming or between tool calls.
  • •Added AgentTool.approvalRestrictionPaths so tools can report the paths they read, allowing restricted-folder approvals to cover those paths without remembering approval separately for each path.
  • •Added Agent.logContext, which adds custom context fields to every log record written during an agent run.
  • •Moved Anthropic header and endpoint helpers, along with Codex session/transport inspection and OpenAI Responses replay/storage helpers, to dedicated provider modules. Update imports from the previous locations.
  • •Updated auth-gateway model resolvers to receive ModelResolveOptions, including the route's native API wire and the scoped client's accepted grants. Scoped client IDs no longer fall back to scanning all models; resolvers now select the best permitted candidate.
  • •Added mTLS support for Anthropic connections through the CLAUDE_CODE_CLIENT_CERT and CLAUDE_CODE_CLIENT_KEY environment variables.
  • •Provider implementations are now loaded on demand, reducing startup and memory overhead while preserving existing stream timeouts, cancellation, and host overrides.
  • •Account policy priority now takes precedence when usage information is temporarily unavailable, keeping new sessions on the preferred account.
Show more (7)
  • •Improved provider-specific credential usage lookups so they no longer wait for unrelated providers, while preserving cache freshness, cancellation isolation, and complete aggregate reports. The corresponding server-side latency improvement requires an updated auth broker.
  • •Credential usage is now prefetched during session setup without selecting, pinning, or advancing the OAuth account rotation.
  • •Fixed Mistral thinking-message replay requests that could be rejected by LiteLLM with a 422 extra_forbidden error.
  • •Fixed native Judge API requests missing the omp/<version> User-Agent, so omp usage is correctly identified in upstream statistics.
  • •Fixed Codex capacity-error retries over WebSocket and SSE ignoring provider-supplied Retry-After delays and retrying too early.
  • •Fixed cancelled OAuth refresh requests aborting the entire session, and ensured requests joining an existing refresh can still use the refreshed credential when the original request is cancelled.
  • •Fixed Cursor models losing omp system-prompt context, including context files, skills, and rules, on subsequent turns or when earlier messages precede the active turn.
v18.13.3

v18.13.3

October 28, 2026

  • •Updated Bun engine requirement to ≥1.4.4
  • •Fixed chat-completions context estimates counting past thinking that the request drops (no reasoning replay), which triggered compaction far below the threshold (#15797, #17231 by @ghisguth)
  • •Updated Bun engine requirement to ≥1.4.4
  • •Updated Bun engine requirement to ≥1.4.4
  • •Added DeepSeek V4.1 Flash 1017 to the Factory Droid provider for accounts with Factory's 1017 flag; turning thinking off on its Baseten route disables reasoning instead of falling back to low effort (#17234 by @skipper019)
  • •Made Kimi Code model discovery authoritative and cached per credential, added K3.1 Pro and K3.1 Pro Highspeed to the bundled Kimi Code catalog, and preserved live thinking metadata there (#17224 by @trukhinyuri)
  • •Updated Bun engine requirement to ≥1.4.4
  • •Codex model refresh now lists models available to an entitled account even when other saved accounts return HTTP 402 (#17198).
Show more (7)
  • •LiteLLM discovery now reads every /v2/model/info page before selecting the proxy's model roster, rather than caching only the first 50 entries; malformed or incomplete pagination falls back without caching a partial page (#17237 by @maykonmichel).
  • •Fixed hosted web search on OpenAI Responses and Codex Responses selecting GPT-5.6 Luna instead of GPT-6 Luna (#17202 by @mateo-bolanos).
  • •Manual compactions (RPC compact, /compact, extension ctx.compact()) emit manual_compaction_start and manual_compaction_end session events, so RPC hosts can show compaction progress; docs/rpc.md documents these with the other progress events (retry_fallback_applied, ttsr_triggered, goal_updated) (#17247 by @Quelaan1)
  • •Added retry.rateLimitWalksChain (default false): with it on, a 429 rate limit after a turn with signed Claude thinking moves to the next model in retry.fallbackChains at once instead of retrying the throttled model until retry.maxRetries is spent (#17232 by @sjawhar)
  • •Sessions can be renamed from the resume picker: the new title persists as a user title without loading the session, and renames of live sessions are refused instead of forking the transcript (#17262 by @Twilight0)
  • •Added display.advisorCollapsedLines (Settings → Appearance → Display) to cap how many note lines a collapsed advisor card shows; the default keeps the full preview (#17228 by @bluecapone)
  • •omp config list --scope global|project lists only the keys that layer sets, with the values as written: path-scoped enabledModels, enabledProviders and disabledProviders entries ({ path, … }) stay unresolved, so a host can edit the global value without dropping them (#17246 by @Quelaan1)
v18.13.2

v18.13.2

October 27, 2026

  • •AgentTool gained the optional handlesToolInterrupt flag: an interruptible tool that sets it (such as wait) still runs, without blocking, when a loop-owned interrupt is already queued, so it can drain the queued wake event instead of being skipped; user cancellation still skips it (#17174 by @alphastorm)
  • •Fixed OAuth logins shared by several processes being disabled with invalid_grant when they refreshed at the same time or one of them quit mid-refresh (#17128 by @sjawhar)
  • •Fixed transient Google 429 rate-limit and capacity responses retrying in place without blocking or rotating credentials, while daily caps and zero-entitlement limits still rotate (#17127 by @GTanger)
  • •Fixed Aliyun DashScope's multimodal gateway failing a turn on its intermittent InvalidParameter 400s for valid inline images ("provided URL does not appear to be valid", "Download multimodal file timed out"); they are now retried (#17101 by @shuairongzeng)
  • •Fixed a revoked or rejected GitHub Copilot credential continuing to show its last cached usage quota instead of being dropped (#17081)
  • •Fixed Devin requests compressing the request body on the UI thread, which briefly froze the TUI on long conversations; requests under 1 KiB are now sent uncompressed
  • •Added LM Studio decision models to discovery: models LM Studio reports as type: "decision" are listed as judge models served over its /v1/decisions endpoint, alongside its chat models (#17169 by @richiestanaway)
  • •Extensions in the interactive TUI can read and directly switch plan, vibe, goal, and loop modes with ctx.sessionModes and observe changes with the mode_changed event, without submitting slash commands; extensionHandlers.modeControl: false turns off extension-driven mode changes (#15753 by @Shadorain)
Show more (7)
  • •RPC hosts can capture draft-only speech-to-text with live previews when speech input is enabled, without submitting an agent turn; slow flushes have adjustable deadlines, and failed transcription does not block a session change after capture closes (#17158 by @felipe-santos-aya).
  • •Added discovery.advertisedReasoning to let a custom provider opt out of the reasoning ladder its /v1/models rows advertise (default true); discovery: proxy now reads that ladder, its none off-switch, and an explicit reasoning: false instead of building every model's thinking surface from the bundled catalog reference alone (#15255, #17077 by @Youwenqwq)
  • •WATCHDOG.yml advisor entries now accept scope (main, subagent, or all, default all) to attach an advisor only to the top-level session or only to advised subagents, and includeReasoning: false to omit primary assistant _thinking:_ blocks from advisor review deltas (#17058 by @trukhinyuri)
  • •Added session.worktreeScope to keep the resume picker scoped to one directory (#17061 by @Dante-dan).
  • •LM Studio decision models can now serve the judge role (modelRoles.judge: lm-studio/<model>); they answer over LM Studio's /v1/decisions endpoint instead of being offered as chat models (#17169 by @richiestanaway)
  • •Extensions' getAllTools() now reports mcpServerName, mcpToolName and mcpReadOnlyHint for MCP-backed tools, so an extension can tell read-only connector tools from ones that change things (#17120 by @cfpperche)
  • •RPC: navigate_tree (move the leaf in the same session file, optionally summarizing the abandoned branch), abort_branch_summary and set_label, with matching RpcClient methods (#17138 by @andrebrait)
v18.13.1

v18.13.1

October 27, 2026

  • •Hosts can distinguish safely paused agents from turns still draining with Agent.isPaused (#17073 by @anatoli-tsinovoy).
  • •Codex accounts whose spend cap is used up are no longer picked through credit overage or from usage cached before the upgrade (#16973 by @DusKing1)
  • •Fixed Codex capacity 429s (turn_rate_limit_exceeded, "Codex is at capacity") reporting "Try again in ~N min" from the plan's usage-window reset, which made retries wait hours instead of the response's Retry-After (#17087 by @H4vC)
  • •Added GPT-6.1 Terra: openai/gpt-6.1-terra ships bundled ($1/$5, $0.05 cached, >272K long-context tier, 1.05M window), and Codex-discovered gpt-6.1-terra/-wm get API-equivalent pricing, the 922K extended-context maximum, and routing to Plus-or-higher accounts.
  • •Added Kimi K3.1 Pro and K3.1 Pro Highspeed support on Kimi Code (k3.1-pro, k3.1-pro-highspeed) and the Moonshot API (kimi-k3.1-pro, kimi-k3.1-pro-highspeed): official pricing ($2/$10 and $4/$20 per MTok), a 131K output cap, and K3's reasoning and wire contract (#16901 by @eggpeat)
  • •Added tools.restrictedFolders: every action on a listed folder (the folder and everything below it) asks for an explicit Approve/Deny in every approval mode, yolo included, and no remembered grant, session approval, or ACP "Always allow" covers it; recursive searches rooted above a restricted folder ask too, commands are matched by the directory they run in, and a deny policy still denies (#16049 by @Peribunt)
  • •/pause shows draining turns and running jobs across the main agent's subagent tree, without waiting on finished turns, safely parked agents, or suspended advisor reviews (#17073 by @anatoli-tsinovoy).
  • •Reduced redraws during background subagent progress while keeping elapsed previews and native checklists current (#17131 by @iliaal, based on #16647 by @Komzpa).
Show more (7)
  • •Restoring a session with many subagents refreshes the running-subagent badge and lists once per burst instead of once per agent (#16642 by @Komzpa)
  • •ask answers now name the option a note is on (m: [X, Y] (note on Y: …), User added note on Y: …) (#17126 by @H4vC)
  • •Fixed advisors dropping their review and showing a rate-limit error when the provider returns a timed 429 such as Codex's turn_rate_limit_exceeded; the advisor now waits out the Retry-After (within retry.maxDelayMs) and retries like the main agent (#17087 by @H4vC)
  • •Fixed a hashline PUT being refused with "would hold one more copy of line N … than the range did" when its body restates the line next to the range, fills the range, and adds a new line equal to that neighbour (a second @property or #[test], or a break; above a new case); it applies again, dropping only the restated line (#17028)
  • •Fixed task subagents receiving AGENTS.md files, including the user-level ~/.omp/agent/AGENTS.md, when the session has additional workspace roots (--add-dir, /add-dir, workspace.additionalDirectories)
  • •Fixed an ask note added right after picking an answer landing on the next question's answer, in Tern and the TUI; Note now goes to the answer just picked until the next question gets other input (#17126 by @H4vC)
  • •ANSI and TSP /pause screens show unsettled turns and jobs, hide settled counters, and preserve counts and resume controls on short terminals (#17073 by @anatoli-tsinovoy).
v18.13.0Breaking Change

v18.13.0

October 26, 2026

  • •Added SummaryOptions.remotePromptCacheKey and remoteCompactionPolicyModel() so remote compaction can carry a cache key gated against the request it actually sends (#16988 by @rafalopilowski1)
  • •Remote compaction now sends cache and session headers for the endpoint and model the request actually uses, so a configured compaction override no longer inherits the live turn's routing (#16988 by @rafalopilowski1)
  • •Aside providers (AgentLoopConfig.getAsideMessages, Agent.setAsideMessageProvider) now receive which boundary is polled, "work" after tool calls or "stop" at the end of a turn, so they can keep a message out of a finished turn (#16583 by @will-bogusz)
  • •Fixed --max-time values above about 596 hours (such as 600h) aborting the first turn with "Deadline exceeded" right away (#17054 by @trukhinyuri)
  • •Fixed repeated compaction on small or provider-capped context windows: compaction keeps only as much recent history as fits under the configured trigger, and no longer counts stale pre-compaction usage (#16904 by @eggpeat)
  • •Fixed native compaction token estimates counting opaque encrypted-state bytes as conversation text (#16904 by @eggpeat)
  • •Fixed split-turn compaction leaving session.compacting context out of the turn-prefix summary (#16707 by @integrITsolutions)
  • •Fixed compaction failing as a whole, and discarding the completed summary, when the optional short summary fails or returns no answer; the compaction now completes without a short summary, and cancellation still cancels it (#16942 by @Mouriya-Emma)
Show more (7)
  • •OpenAIRequestSetupModel now requires the catalog-policy fields (api, reasoning), so callers building a reduced model for resolveOpenAIRequestSetup must pass them (#16988 by @rafalopilowski1)
  • •Added PI_ANTHROPIC_API_VERSION=2026-10-21 to send Anthropic API version 2026-10-21 to the official Anthropic API; sampling parameters are omitted under that version, which rejects them (#16706 by @H4vC)
  • •OpenCode Go requests on lanes that opt into shared prompt caching send an explicit prompt-cache key as x-opencode-session, so Task siblings, forks and their parent reuse one gateway cache; custom providers declaring providerType: "opencode-go" get the same OpenCode headers (#16988 by @rafalopilowski1)
  • •Reduced the CPU spent preparing tool schemas on every model call, so requests with many tools start faster (#16780 by @yuzu-octopus)
  • •Fixed tool schema normalization modifying the caller's schema in place, which added the folded const value to a tool's own enum array (#16780 by @yuzu-octopus)
  • •Google Antigravity requests now carry the same request labels as the official 2.26.0 client (cascade_id, root_cascade_id, request_id, used_non_gemini_model), and image model lookup sends the account's project (#17012 by @apoc)
  • •Google Antigravity requests now send each model tier's own model_enum label, output cap and thinking setting from the serving account's model list, as the official client does: Claude 5.5 and Gemini 4 Argon tiers send a thinking level, Gemini 3.8 Flash tiers the tier's thinking budget (#17012 by @apoc)
v18.12.6

v18.12.6

October 21, 2026

  • •Added the prompt-cache-persistent catalog axis (isPromptCachePersistent) for providers whose own endpoint never expires prompt caches; logged-in OpenAI Codex declares it
  • •Updated the bundled Yolo-Auto catalog to its current models, qwen3.8-27b (now the default), yolo, yolo-small, and yolo-128k, and removed the retired deepseek-flash-v4 and qwen3.8-flash
  • •Added the _session/steering ACP extension (advertised as _meta.steering.supported), so clients such as agent-shell can steer a running turn; a steer sent while a permission dialog is open cancels that dialog, and _meta.steering.queue: "followUp" queues a follow-up instead (#15885 by @marcintustin)
  • •/mcp reauth <name> now works over ACP, RPC, and print mode (omp -p '/mcp reauth <name>'): it opens the browser, prints the authorization URL, reconnects the server in the running session, and print mode exits 1 when reauthorization fails (#16046 by @marcintustin)
  • •ACP session/cancel now also cancels prompts that are queued or still dispatching, and stops autonomous runs, instead of being ignored when no client turn is streaming (#15885 by @marcintustin)
  • •Idle compaction no longer runs on logged-in OpenAI Codex accounts, whose prompt cache never expires; compacting while idle only threw away a warm cache
  • •ACP sessions no longer fail to start when a client-declared MCP server cannot connect; the failure is reported in the session, and an HTTP/SSE server can be repaired with /mcp reauth (#16046 by @marcintustin)
  • •/mcp reauth, /mcp test, and /mcp unauth now pick the project entry when a server is defined in both project and user config, and skip project config when mcp.enableProjectConfig is off (#16046 by @marcintustin)
Show more (7)
  • •/mcp reauth removes the server's stale Authorization header from its config when it writes the new OAuth binding (#16046 by @marcintustin)
  • •omp -p '/compact', /handoff, and /retry given as CLI arguments now run the command instead of sending the text to the model, and exit 1 when the command fails; slash text arriving on stdin or from @file is still sent to the model (#16387 by @marcintustin)
  • •Interactive startup no longer waits for extensions that register only tools, commands, flags, renderers, or event hooks (for example MCP bridge plugins): they load once the composer accepts input, and your first message waits for them instead. An extension is deferred only after one launch has confirmed it registers no providers, shortcuts, composer shapes, or file fallbacks. Launches that resume a session, pass --tools, or pass flags omp does not recognize still load every extension first (#16684 by @H4vC)
  • •Fixed subagents whose role has an explicitly empty fallback chain falling back through the default chain when the default role uses the same model, including after a retry fallback, prewalk or context promotion briefly switched models or the subagent was revived (#16548 by @eggpeat)
  • •Fixed /usage and omp usage --json listing identity-less OAuth accounts such as Devin as missing usage beside their working reports (#16549 by @eggpeat)
  • •Fixed releasing or reaping a browser tab returning while Chromium still listed the page; the close now waits until Chromium reports the tab destroyed (#16680 by @H4vC)
  • •Fixed the advisor prompt forbidding all repeated advice, including real escalations: advisors may now re-raise a prior nit or concern as a blocker once new evidence makes it one (#13887, #16484 by @pjh890321)
v18.12.5

v18.12.5

October 21, 2026

  • •Added OpenAI 12-hour prompt caching for GPT-5.6+ on the Responses API: cacheRetention: "long" now requests prompt_cache_options.ttl: "12h" (instead of the ignored legacy prompt_cache_retention: "24h"), and promptCache.ttl accepts "12h"
  • •Fixed every OpenAI Codex request failing with HTTP 404 {"detail":"Not Found"} on personal ChatGPT accounts whose token is not region-pinned (#16493)
  • •Fixed Moonshot kimi-k3 pricing cache writes at $0; usage cost now includes cache writes at Moonshot's $3/M 5-minute rate (#16508)
  • •providers.cacheRetention: long now keeps OpenAI GPT-5.6+ prompt caches for 12 hours (Responses API; cache writes cost 2.5× input instead of 1.25×)
  • •Fixed subagents spawning at a caller-supplied effort (e.g. hi → max) while task.enableEffort is off; the field is now ignored and the agent's configured thinking level (including :auto) applies (#16402)
  • •Fixed omp update --check failing against JFrog Artifactory registries that add empty dist-tags to a tagged manifest; the update check now uses the registry's curated latest version (#16375)
  • •Fixed <path>:conflicts on a file past the 10 MiB scan cap reporting no conflicts with no hint: it now names the line the scan stopped at and the ranged read that registers the blocks after it (#16269)
  • •Fixed the ts-set-map rule stalling tool-call streaming for seconds on a long single-line Map literal, and missing Map entries written ["key", value] as const (#16242)
Show more (6)
  • •Fixed the ts-import-type rule missing inline type imports whose member name is non-ASCII, such as import("./units").温度 (#16242)
  • •Fixed a macOS background action leaving its target in front of your app after you clicked another of your windows, when placing the click took longer than the click itself (#16217)
  • •fix(update): handled empty Artifactory dist-tags on tagged manifests (#16379)
  • •fix(task): ignored caller effort while task.enableEffort is off (#16406)
  • •fix(catalog): stopped declaring no_constraint codex residency (#16501)
  • •fix(catalog): priced moonshot kimi-k3 cache writes at the 5min rate (#16529)
v18.12.4Breaking Change

v18.12.4

October 20, 2026

  • •Enabled native compaction for supported Bedrock Claude models (#16343 by @anatoli-tsinovoy)
  • •Added opt-in reclaimAbovePct to auth.accountPolicies: sessions automatically moved to a lower-priority account return to the preferred one once it has that much quota left (#14237 by @will-bogusz)
  • •Added reachesBudgetedHost(): whether the catalog's host request budgets (inline image bytes, official image count) apply to a request, true on a model's official endpoint and on Factory Droid's own hosts (#16288 by @will-bogusz)
  • •Added Inception API-key login (/login inception) and INCEPTION_API_KEY environment authentication (#16439 by @eggpeat)
  • •Added image support for native OpenAI Decisions and Workers AI judgments, prompted vision chat, and auth-gateway System One requests; images exceeding a judgment API's documented caps (e.g. Clef's 4 images, 4 MiB each) are rejected locally (#15471 by @anatoli-tsinovoy).
  • •isSurvivingAssistant in providers/transform-messages: whether an assistant turn reaches a replay, malformed tool calls dropped first, so callers outside transformMessages pick the same latest turn (#15791 by @will-bogusz)
  • •Broker account-pool files (OMP_AUTH_BROKER_ACCOUNT_POOL_FILE) can hide whole providers and API keys: "*": false makes the file an allow-list, and an entry can be true, false, or { "accounts": [...], "apiKeys": false } (#14235 by @will-bogusz)
  • •cursorRawReadPath() writes a bare start line as raw:N- (file:10 → file:raw:10-), so Cursor exec reads of such a path still read from line N onward now that read takes N:raw as one line (#16438 by @will-bogusz)
Show more (7)
  • •Fixed Anthropic and Bedrock logging one warning per dropped thinking block (hundreds for one request) after a conversation change; the drop now logs one warning with the count (#16392 by @will-bogusz)
  • •Fixed Factory Droid Core models (Kimi, GLM, DeepSeek and others) dropping calls to tools with names over 64 characters and their results from later requests; such names now shorten to 64 characters, and shorter names are sent unchanged (#16384 by @will-bogusz)
  • •Fixed Devin /usage showing no data for accounts signed in with /login devin, and Devin chat sending a failing extra auth request for legacy Windsurf Enterprise keys (#13677 by @will-bogusz)
  • •Turns stopped for a thinking loop now keep the tokens and cost the provider had reported, the response id, the request's start time, and its time to first token and duration, instead of recording zero usage and no timing (#16437 by @will-bogusz)
  • •Fixed Claude requests answering a turn whose attachment is a video, PDF, HEIC or other format sent outside a JPEG/PNG/GIF/WebP image as if nothing were attached; the turn now fails with an error naming the format (#16407 by @will-bogusz)
  • •Fixed the repeated-tool-call guard missing a loop the model interleaves with a wait that elapses with nothing new; a wait that returns finished work still ends the repetition (#11874 by @dickyudhandika)
  • •Fixed Google Antigravity chat and image requests failing with false 429 quota-exhausted errors (#11849 by @jotafurtado)
v18.12.3

v18.12.3

October 19, 2026

  • •AgentTool gained the optional approvalCacheTargets hook, which the always-ask-cached approval mode uses to check and record per-file grants (#16049 by @Peribunt)
  • •Tools with lenientArgValidation now receive unknown root arguments that their closed schema would otherwise drop, so they can reject them (#16317)
  • •Added validateToolArguments(tool, call, { keepUnknownRootKeys: true }) to keep unknown root keys that a closed schema would otherwise drop during argument repair (#16317)
  • •Fixed Claude streams that a gateway cut off before message_delta failing the turn instead of being retried (#16341 by @lz-lunzi)
  • •Fixed Gemini pairing parallel same-name tool results with the wrong call when history stores them out of call order (sessions from before 18.4.2, SDK-built contexts) (#16259 by @will-bogusz)
  • •Fixed Factory Droid Gemini dropping calls to tools with names over 64 characters (most MCP tools) and their results from later requests, so the model called the tool again; such names now shorten to 64 characters (#16283 by @will-bogusz)
  • •Fixed Factory Droid Gemini requests failing with 400 "For schema with items, schema type should be ARRAY" when a tool parameter accepts a string or a list, as the default task tool's model field does (#16249 by @will-bogusz)
  • •Fixed PI_REQ_DEBUG=1 request dumps writing your API key, bearer token and response cookies to disk in plain text: credential headers now read [redacted], as in rejected-request dumps (#16293 by @will-bogusz)
Show more (7)
  • •Fixed finalized signed reasoning disappearing from displayed thinking when no deltas streamed (#16227)
  • •MiniMax MiniMax-M3.1-Flash (the launch id) now gets the always-on low–max thinking the bundled MiniMax-M3.1-Flash-Preview rows have, and omits sampling params (temperature, top_p, top_k) it rejects (#16315 by @SaladDay)
  • •Gemma 4 models on Google AI Studio (google/gemma-4-31b-it, google/gemma-4-26b-a4b-it, …) no longer fail every request with Thinking budget is not supported for this model; thinking is now toggled with thinkingLevel (on = high, off = minimal) (#16350)
  • •Added the Ask and remember approval mode (tools.approvalMode: always-ask-cached, --approval-mode always-ask-cached): it also asks before file reads, and file prompts can remember the folder or the file, for this session or across sessions, through approval-cache.db (#16049 by @Peribunt)
  • •Added /forget-approvals to forget every file and folder approval Ask and remember has recorded (#16049 by @Peribunt)
  • •Extension ui.approve() hosts can render the new prompt.grants choices and answer { grant, always }; hosts that ignore them keep answering once/session/deny (#16049 by @Peribunt)
  • •Extension and custom tools can declare approvalCacheTargets to take part in Ask and remember grants (#16049 by @Peribunt)
v18.12.2

v18.12.2

October 18, 2026

  • •The failed-tool-call correction sent to DeepSeek models now also covers chat-template tool-call tokens written out as text, not only malformed DSML (#16216 by @H4vC)
  • •Fixed Ollama chat history estimates counting stripped native thinking and missing foreign thinking replayed as text, which skewed compaction after model switches (#16164)
  • •Added nativeJudgmentImageBounds(): the image bounds a native judge enforces, its wire's transport limits tightened by the catalog's model bounds
  • •Added Box judgment questions (BoxQuestion/BoxAnswer, TypeSafe Jev 1.14+ direct or through OpenRouter): each names the request image it searches by image index, and comes back as that image's edges as 0–1 fractions; text, OpenAI Decisions, and Workers AI judges reject them
  • •Fixed Muse Code usage going stale whenever its 5-hour window sits idle: the idle window now reports as unused, and weekly usage carries over from the last active window until its reset (#16193 by @eggpeat)
  • •Fixed DeepSeek tool calls never running when the model writes them as chat-template tokens with _ in place of ▁, a missing |, or no per-call close (e.g. <|tool_calls_begin|>…<|tool_calls_end|>): they now run as tool calls, and any that still cannot be parsed are removed from history and reported to the model as a failed call (#16216 by @H4vC)
  • •Fixed a relay tab close failing when Chrome refuses it for a moment (a tab being dragged); the extension retries it (#16119 by @will-bogusz)
  • •Fixed tabs created for a relay request whose connection dropped mid-create staying open, and answers to such requests going to a later connection (#16119)
Show more (7)
  • •Fixed the relay resolving an old tab id to a different tab after a browser restart; the extension now reports each browser run (#16119)
  • •Seeded TypeSafe jev-1.14.0 and OpenRouter typesafe/jev-1.14, and made them the judge role defaults and TypeSafe's default model; TypeSafe discovery keeps seeded ids its alias-only /v1/models listing omits
  • •Added computer.backgroundFallback (takeover by default, or refuse): when a computer window input call has no background route, the tool reruns that one call in takeover, hands focus back to your app and says so in its result; refuse fails the call instead and also refuses the agent's own foreground requests (takeover: true, raise(), an activating apps.open, desktop input, and on macOS menus and AXOpen) (#15191 by @will-bogusz)
  • •Added DeepSeek as a web search engine (web/deepseek), using DeepSeek's new Search API with your existing DEEPSEEK_API_KEY or stored deepseek credential
  • •Added el.selectText(text, { prefix?, suffix?, select? }) to the macOS computer tool: it selects text (or places a caret) in a background app's text field without taking focus, moving the pointer or sending keys, so typing into that field replaces it (#15175 by @will-bogusz)
  • •Added { takeover: true } to computer-use win.move, so a hover that a window refuses in the background can be retried in the foreground (#15173 by @will-bogusz)
  • •Added a menu option to the computer tool's win.click, el.click, el.press and el.perform, so on macOS the call that opens a menu also chooses its item, e.g. menu: ["Add to", "Fonts"] (#15185 by @will-bogusz)
v18.12.1Breaking Change

v18.12.1

October 18, 2026

  • •Fixed every request failing behind a TLS-inspecting proxy that refuses compressed uploads: a 400/403/415 whose body is not JSON, or the Anthropic API's "request body is not valid JSON" after a proxy drops Content-Encoding, now resends the body uncompressed and stops compressing for that host (#16108 by @alphastorm)
  • •Anthropic's request-encoding-rejection now also matches the API's "request body is not valid JSON" 400, which a gzip body gets when a proxy drops its Content-Encoding header (#16108 by @alphastorm)
  • •Removed display() from eval in both Python and JavaScript; print (and console.log in JavaScript) covers it
  • •Added advisor.continueSeverity (nit, concern, blocker) to choose the minimum advisor note severity that wakes the agent after it finished with a final answer; lower-severity notes stay as a card at the end of the transcript
  • •Printed DataFrames/Series render as tables, large dicts/lists and objects as JSON trees, and Markdown objects as Markdown for the user, while the model sees the printed text
  • •Printing a figure or image in eval attaches the image to the result
  • •An advisor concern raised after the agent's final answer now continues the run by default instead of waiting at the end of the transcript; set advisor.continueSeverity to blocker for the previous behavior
  • •Fixed context-file @ imports failing to load paths containing backslash-escaped spaces (#16090)
Show more (7)
  • •Fixed native memory growing without bound, and eventually crashing the process, when files in a downloaded (WASM) grammar language such as C# were parsed repeatedly (#16067)
  • •numberedCode, readContentCode and nativeDiff take the file's path (path) instead of a language, and describeGroupedOutput drops its lang option: Tern picks the grammar of file contents from their path
  • •Advisor notes in Tern read as a callout tinted by their worst severity: its icon and a tally (Concern, 1 blocker · 2 concerns) head the card with the advisor's name at the end, and several notes each lead with their own severity icon
  • •Fixed images rendering blank inside tmux on Kitty-capable terminals when tmux's allow-passthrough is off (the default); omp now falls back to SIXEL or the text placeholder instead of sending Kitty graphics tmux drops
  • •Fixed Tern drawing tool cards' file contents (write, read, edit, grep, find, ast-grep, ast-edit) plain or in the wrong language when omp did not know the file's extension (.ptx) or mapped it to a neighbor (.cu as C++); omp now sends the file's path and Tern picks the grammar
  • •fix(ai): resend uncompressed when a proxy rejects a compressed request body (#16108)
  • •fix(tui): answered allow-passthrough in fake tmux client fixture (#16112)
v18.12.0Breaking Change

v18.12.0

October 17, 2026

  • •Fixed Cursor turns failing with PROVIDER_ERROR when a follow-up (a finished background job, a late diagnostic, a reminder) arrived while the previous turn was still streaming (#15821 by @robfeldmann)
  • •PI_CODEX_ZSTD is replaced by PI_REQUEST_COMPRESSION; set PI_REQUEST_COMPRESSION=0 to send Codex (and every other) request body uncompressed (#16086 by @H4vC)
  • •Added ThinkingContent.narration, set on Anthropic and Bedrock thinking blocks whose signature marks them as between-tool narration, and presentNarrationAsAnswer(message) to show those blocks as reply text while replay keeps them as signed thinking
  • •Added keys.peek(provider, { includeExpired: true }) to name the stored account behind an expired OAuth token for reads that never send it, such as keying an offline model-cache lookup (#16061 by @gchai)
  • •Added prewarmModelConnection(model) (providers/connection-prewarm), which opens the model's API connection ahead of a request using the same transport and TLS settings so the request reuses it instead of paying the connection handshake (#16086 by @H4vC)
  • •Anthropic requests to the official API now gzip the request body, so long conversations reach the model sooner on slow uplinks; set PI_REQUEST_COMPRESSION=0 to disable it (#16044 by @H4vC)
  • •GitHub Copilot requests (chat completions, Responses, and Claude messages) now send zstd-compressed bodies, cutting upload size by roughly 60–75% on long conversations; set PI_REQUEST_COMPRESSION=0 to disable it (#16086 by @H4vC)
  • •A rejected request-body encoding now only disables compression for that host, and only after the uncompressed resend succeeds, so a genuine 400 no longer turns compression off (#16086 by @H4vC)
Show more (7)
  • •Connection warm-up now covers every catalog provider, not only the official Anthropic API: it re-warms the origin a model's requests actually reach (Copilot plan hosts, MOONSHOT_BASE_URL, regional hosts), throttled per host; custom providers, built-in provider ids routed to a gateway, local hosts, and Anthropic gateways are never probed (#16086 by @H4vC)
  • •Fixed Ollama and Ollama Cloud streaming errors being silently accepted as successful responses (#16039 by @mottopanikeiku)
  • •Fixed the hermes in-band scanner exposing a truncated tool name for streaming tool calls: toolStart now waits for the complete JSON name, so a stream that splits or stops mid-name never reports a partial tool name (#16064 by @adi-IL)
  • •Fixed keys.peek() rotating through stored accounts on each call; it now returns the first account whose token has not expired, every time, so model discovery keeps reading one account's cached catalog (#16061 by @gchai)
  • •Fixed local JSON Schema references with URI-percent-encoded, JSON Pointer-escaped, or empty definition names resolving incorrectly during dereferencing, strict conversion, and value validation (#15926 by @jchanghong023).
  • •Fixed network failures showing a generic "Connection error."; offline, connection-refused, and TLS-verification failures now name the host and the cause (#16036 by @jorgoose)
  • •Fixed Jev image limits rejecting inputs for unrelated native judges and redundant TypeSafe image judgments when only detail changes (#16002 by @anatoli-tsinovoy).
v18.11.3Breaking Change

v18.11.3

October 16, 2026

  • •prepareQueuedMessages receives which queue (steering or followUp) a batch came from (#16026)
  • •Fixed JSON Schema dereferencing rewriting literal values in const, enum, default, examples, and custom annotations, or treating property names as schema keywords (#15927 by @jchanghong023).
  • •Fixed Anthropic requests hanging forever on Bun 1.3 when the upstream accepted the request but never sent headers: aborting the request (including the first-event timeout) now fails it, so the turn retries instead of waiting until the user interrupts it (#16010 by @ca-io-systems)
  • •Fixed the auth gateway's POST /v1/chat/completions streams being dropped (terminated) after ~255 s without upstream output, e.g. while xAI generates a large tool call's arguments, which arrive only when complete; the stream now sends an SSE : keepalive comment every 15 s (#15940 by @radkawar)
  • •Fixed Anthropic models with mid-conversation system messages (e.g. Claude Opus 5.5) receiving @file mention contents and hidden extension messages as a trailing system message instead of ending the request on the user's turn (#15881)
  • •Renamed the built-in google-antigravity login option to "Google Antigravity (Gemini, Claude, GPT-OSS)" so it is distinguishable from similarly named third-party plugins and no longer implies support stops at Gemini 3 (#15998 by @savanne-kham).
  • •Fixed Command Code's z-ai/glm-5.3-flash failing every request with "not available on this endpoint": the catalog routes it to chat completions, the only endpoint Command Code lists for it (#15922 by @jasonharrison)
  • •Fixed /handoff failing with 400 Provider returned error on OpenRouter's hosted Muse Spark 1.x and Muse Wonder models: requests no longer send a tool_choice the upstream Meta backend rejects (#15910)
Show more (7)
  • •Fixed OpenCode Zen bringing back retired bundled models from an authoritative model cache, and dropping drop-listed models such as gemini-3.7-flash when a refresh fails after an upgrade (#15770 by @adi-IL)
  • •Extension ui.approve() hosts receive an optional session choice label and answer "once", "session", or "deny" instead of a boolean
  • •Added imageCountBudget to custom models and modelOverrides in models.yml, so a custom gateway can state its host's image limit instead of the default of 5; past that limit the oldest images were dropped on every new image, which rewrote the provider's prompt cache (#15002, #15969 by @aramalipoor)
  • •The status line names the active profile next to the π brand (π-work), so sessions from different profiles are distinguishable at a glance; the default profile is unchanged (#15622 by @matthewrball)
  • •Added opt-in prewalk.auto (off, suggest, or on): the native judge decides per task whether to arm a prewalk handoff to prewalk.autoTarget, and the next task starts back on the planning model (#16026 by @taibenvenuti)
  • •Added /seance and the task seance agent: consult a saved session read-only, in place, without resuming it or copying its artifacts; pick the source and an optional model from pickers, and send follow-ups to the consultant (#15036 by @anatoli-tsinovoy)
  • •Tool approval prompts list Approve, Approve <tool> for this session, and Deny again: with an empty composer, pick with the arrow keys and Enter; typing in the composer denies and steers instead, and the Deny row reads "Deny and send message" while you do
v18.11.2Breaking Change

v18.11.2

October 16, 2026

  • •agent_start carries resumedToolCallIds when a continued run first executes the calls of an unpaired assistant tail
  • •Cancelling an ask after a background job finishes now reports the user cancellation instead of telling the model to retry a skipped tool (#15985)
  • •resolveGatewayApiKey and buildGatewayApiKeyResolver (@oh-my-pi/pi-ai/auth-gateway) take the request's route options ({ storage, client? }) instead of an AuthStorage, their resolver callback receives the resolved credential, and resolveGatewayAccount takes that credential (#15900 by @alphastorm)
  • •Added scoped clients to startAuthGateway (clients, setClients): each client bearer is limited to its own models and OAuth accounts, with no fallback to other accounts or API keys, and request log lines name the client and the credential a request started on (#5098, #15900 by @alphastorm)
  • •Added experimental native image judgments for TypeSafe Jev's jev-latest, jev-preview, jev-1.13.0, and jev-1.14.0, plus OpenRouter's typesafe/jev-1.13, typesafe/jev-1.14, and ~typesafe/jev-latest models; images outside Jev's documented size bounds fall through to a vision chat judge instead of failing (#15887 by @anatoli-tsinovoy)
  • •Fixed error results from non-first-party providers regaining partial output the provider had discarded; an error with empty content now stays empty (#14516, #14572 by @oleg494)
  • •Fixed the auth gateway's POST /v1/audio/speech answering 502 for requests the speech adapter rejects (unsupported format, over-long input); they now get 400 invalid_request_error (#14508 by @F0Rextasy)
  • •Fixed a single-string tool call with two or more mislabelled string fields silently dispatching whichever field came first in the JSON; such ambiguous calls now fail validation and the model sees its own arguments back (#14414 by @F0Rextasy)
Show more (7)
  • •Fixed GLM-5.2 on Ollama Cloud losing its reasoning between turns; Ollama Cloud now keeps assistant thinking in history for models verified to accept it (#14440 by @Dante-dan)
  • •Fixed GPT Image generation and edits failing on gateways that validate request parameters, such as LiteLLM; response_format is no longer sent to GPT Image models (#14619 by @jimhester)
  • •Fixed OpenRouter errors such as "Access denied by security policy" dropping the routed upstream's own explanation from error.metadata.raw (#10906, #14435 by @F0Rextasy)
  • •Fixed GitHub Copilot usage reporting an AI-credit allowance as "Premium Requests" in request units; the unit each billing item reports is now honoured (#13849, #14501 by @F0Rextasy)
  • •Fixed an OpenAI-compatible server's finish_reason: "repetition" or stop_reason: "repetition_detected" not being treated as a thinking loop, so the degenerate partial reasoning was kept and replayed into the next turn (#12525, #14535 by @F0Rextasy)
  • •Added keep-bundled-names catalog attribute to preserve static model display names during discovery
  • •Updated openai-codex provider configuration to prevent model name regressions during live discovery
v18.11.1

v18.11.1

October 15, 2026

  • •Tokenizer.countLatestTurn: counts a message as the transcript's latest assistant turn, which an Anthropic Messages replay keeps byte-for-byte (#15791 by @will-bogusz)
  • •Agent.prioritizeSteering: moves given pending steering messages ahead of older ones so one-at-a-time delivery takes them first (#15642)
  • •Fixed a Cursor tool call re-sent by the server persisting two results under one id; the re-run's result replaces the first (#15749)
  • •Fixed compaction keeping more recent history than keepRecentTokens when the latest Claude turn on the Anthropic Messages API ended its tool calls on stop or length: the replay keeps that turn's signed reasoning, but the cut point counted only its visible blocks (#15791 by @will-bogusz)
  • •Added image support for native OpenAI Decisions and Workers AI judgments, prompted vision chat, and auth-gateway System One requests; images exceeding a judgment API's documented caps (e.g. Clef's 4 images, 4 MiB each) are rejected locally (#15471 by @anatoli-tsinovoy).
  • •isSurvivingAssistant in providers/transform-messages: whether an assistant turn reaches a replay, malformed tool calls dropped first, so callers outside transformMessages pick the same latest turn (#15791 by @will-bogusz)
  • •Fixed Codex-hosted image generation ignoring the requested aspect_ratio/image_size, and 3:2/2:3 requests sending no size to OpenAI image models (#15601 by @chulmin-dev)
  • •Fixed Claude subagents failing to return structured results when yield arguments arrived as invalid JSON (#15605 by @farnoy)
Show more (7)
  • •Fixed turns stopping instead of retrying when a gateway reports its upstream WebSocket closed before response.completed (#15628 by @nqrwhal).
  • •Fixed Claude on Google Vertex ignoring cacheRetention: "long": prompt caches now get the 1h TTL instead of expiring after 5 minutes, and the extended-cache-ttl beta (which Vertex rejects) is never sent there (#15505 by @hpost)
  • •Fixed Gemini tool continuations failing on OpenAI-compatible gateways that return reasoning_signature, including restored sessions (#15678 by @Zzz141592653)
  • •Fixed Cursor sessions failing every rebuilt request with PROVIDER_ERROR after the server re-sent a tool call: the call is recorded once, and histories that already repeat it replay it once with its latest result (#15749)
  • •Fixed Cursor turns cut off mid-stream failing every retry with PROVIDER_ERROR until you sent a new message; the retry now starts a fresh Cursor conversation (#15830)
  • •Fixed malformed image-generation inputs being forwarded to providers or reported as credential/upstream errors (#15765 by @anatoli-tsinovoy).
  • •Fixed broker-backed auth-gateway processes retaining a cache entry for every distinct client session indefinitely under sustained traffic (#15841).
v18.11.0Breaking Change

v18.11.0

October 15, 2026

  • •Removed ApprovalDetailsOptions; formatApprovalDetails takes only args again, since the compact approval prompt no longer shows tool details (#15642 by @H4vC)
  • •AgentTool.delegationGuidance: instructions a same-name extension replacement inherits in its description when it delegates to the native tool (#15477 by @iliaal)
  • •CompactionPreparation.lastSummarizedEntryId and CompactionResult.providerReplayThroughEntryId: a remote compaction that could only fit the history before the kept tail reports the last entry its native history covers; later entries replay normally (#15712 by @H4vC)
  • •Fixed native (OpenAI/Codex) remote compaction refusing or truncating sessions that fit the window: its preflight counted the JSON-escaped request, inflating quote-, backslash- and newline-heavy tool output such as disassembly by ~10–20%; it now counts text as the model reads it (#15712 by @H4vC)
  • •Fixed OpenAI V1/V2 remote compaction failing outright when the history, kept tail included, exceeds the context window (a large final response or tool output after the last check); it retries on the history before the kept tail (#15712 by @H4vC)
  • •Fixed fitted output caps overflowing the context window on strict hosts (llama.cpp-family) after turns with many parallel tool results; chat-template framing is now charged per locally counted message (#15699)
  • •Fixed leaked DeepSeek DSML markup reaching saved history from reasoning blocks and from turns that also made a valid tool call (#15485)
  • •Fixed parallel tool calls failing with "Tool call arguments are not valid JSON" on some OpenAI-compatible gateways, such as Gemini (#15682 by @Zzz141592653)
Show more (7)
  • •Fixed Anthropic fallback-credit redemption losing its credit on errors that only mention 400 in their text, such as an overload message (#15702 by @H4vC)
  • •Fixed Anthropic fallback-credit redemption sending an extra fallback-credit-2026-06-01 beta when the refused request used a newer one (#15702 by @H4vC)
  • •Fixed Anthropic fallback-credit redemptions failing when the refused turn included unsigned thinking (#15702 by @H4vC)
  • •Fixed turns ending without automatic retry when a gateway forwards Go's use of closed network connection transport error; it now retries like other dropped connections (#15385)
  • •Fixed Codex SSE streams failing with an abort instead of retrying when the first event stalls (#15542)
  • •Fixed Codex (ChatGPT subscription) requests with reasoning disabled, such as judges, titles, commit messages, and thinking off, leaving effort to the server default; they now send the lowest supported effort, or none where the model accepts it (#15514)
  • •Fixed a Codex account whose token OpenAI rejects (401/403) continuing to show its last quota as healthy; omp usage now drops the stale report and omp auth-gateway check reports the credential as failing (#15439)
v18.10.4

v18.10.4

October 13, 2026

  • •AgentTool.formatApprovalDetails receives ApprovalDetailsOptions; compact: true asks for untruncated bodies so a compact approval prompt can count their lines (#15550 by @H4vC)
  • •Before-model-call hooks now receive the loop context as a second argument, and buildProviderContext receives the summarizer model (#15436 by @will-bogusz)
  • •Fixed a Claude compaction or branch summarizer receiving assistant reasoning from a snapcompact archive rendered under another model, which Claude refuses (reasoning_extraction) (#15436 by @will-bogusz)
  • •Fixed Codex cybersecurity policy errors incorrectly retrying without Daybreak and disabling it for subsequent requests, while preserving retries without Daybreak when access is rejected (#15472 by @taibenvenuti)
  • •Removed the toolNamespacesInfo stream option; Codex requests no longer send tool_namespaces_info turn metadata, and code_mode_tool_names/tool_namespaces_info are no longer reserved client metadata keys.
  • •Added Muse Code's subscription-only Muse Wonder Full and Wonder contributor tiers with the max effort, recording API-equivalent cost instead of $0: Wonder Full at Muse Wonder's $4 input / $0.20 cached / $20 output per 1M tokens, contributor tiers at the measured $1.60 / $0.08 / $8 (#15522 by @eggpeat)
  • •Added the classifier-cot-extraction rule axis, set for Claude, marking models whose classifier refuses earlier reasoning quoted back into their input (#15436 by @will-bogusz)
  • •Added Gemini 4 Argon pricing on Cursor ($2 input / $0.10 cached / $10 output per 1M tokens) and Google Antigravity, which now uses Google's first-party rate instead of showing $0 (#15620 by @eggpeat)
Show more (7)
  • •Added scheduled list-price changes to cost-patch, as cost-fallback already allowed: a dated effective-rates card sets the price from its date, and each request is priced at the card in force when it was made, even on models loaded before the change, on rebuilt models, and on Cursor lanes priced from a sibling's card. A malformed dated card now fails the model build instead of silently keeping the old price. getEffectiveTokenCost returns that card for price displays, and hasRecurringTariff tells these dated-only schedules apart from peak/off-peak tariffs, which alone show a status-line arrow (#15620 by @eggpeat)
  • •Devin models with a long-context price tier (GPT-5.4 through 5.6 standard lanes, GPT-6 through 6.1, Gemini Pro, and Grok 4.5 through 4.7) now default to a 272K or 200K context window, where that pricing starts; run /extended-context on to use the full window at long-context rates (#14891 by @eggpeat).
  • •Devin SWE-2, SWE-1.7, and GLM-5.2 fallback pricing no longer charges cache writes at the input rate, since Devin publishes no cache-write rate for them (#14891 by @eggpeat).
  • •Google Antigravity now lists Gemini 4 Argon once, with selectable low, medium, and high thinking levels, instead of a separate entry per thinking tier (#15620 by @eggpeat)
  • •Gemini 4 Argon on Google, Vertex, Google Antigravity, and Cursor moves to Google's $4 input / $0.20 cached / $20 output list price on 2026-12-01 (midnight US Pacific), including requests on models loaded before then, without a catalog update (#15620 by @eggpeat)
  • •Devin SWE-2's promotional fallback price now ends on 2027-01-01 for requests on models loaded before then too (#15620 by @eggpeat)
  • •Fixed Devin Claude and GPT-5.6 through GPT-6 models pricing prompt-cache writes at $0; they now use Devin's published rate of 1.25x input, and Adaptive uses its input rate (#14891 by @eggpeat).
v18.10.3Breaking Change

v18.10.3

October 12, 2026

  • •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 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)
  • •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 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)
Show more (7)
  • •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 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)
  • •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 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
v18.10.2

v18.10.2

October 12, 2026

  • •Added AgentLoopConfig.onDetachedToolUpdate: a tool's onUpdate frames that arrive after its run's event stream ended (a returned call whose background job keeps reporting) reach it instead of being dropped; Agent forwards them to its subscribers as tool_execution_update events
  • •Added support for CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS on the anthropic provider: when set, requests omit pre-release fields (context_management, beta tool fields such as strict and defer_loading, task budgets, structured-output format, thinking.block_binding, and Anthropic server compaction) along with their beta headers, so ANTHROPIC_BASE_URL gateways that reject them keep working (#15458 by @H4vC)
  • •Added the honors-claude-code-beta-kill-switch axis (compat.honorsClaudeCodeBetaKillSwitch), on for the anthropic provider, so a rule or models.yml override decides which providers honor CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS (#15458 by @H4vC)
  • •Added CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS support: set it to stop Anthropic requests sending experimental beta fields that a company ANTHROPIC_BASE_URL gateway rejects, such as the Sonnet 5.5 thinking.adaptive.block_binding 400 (#15458 by @H4vC)
  • •Added the task.structured setting (default off) for structured task results: when on, the task tool accepts outputSchema/schemaMode and subagents return results through yield as before
  • •Subagents spawned by the task tool now return their final message as plain text, with no yield tool, output schemas, or "Submit Result" fields; eval agent()/workpool spawns still return structured results
  • •In Tern, a backgrounded bash command or eval cell keeps filling its own card with live output (In background, with a running clock) and settles it with the job's outcome, Cancelled when the job is killed; wait lists each job on one line (type, id, label, duration) instead of repeating its output
  • •ACP clients now see a backgrounded call's job output stream into its tool call, which settles completed or failed with the job
Show more (7)
  • •Fails unstructured task runs that conclude without a final message
  • •Background task cards no longer stop updating once the agent ends its turn while the task is still running
  • •Transparent images the model receives (small icons, oversized screenshots) keep their transparency instead of turning into a black square, and resized edges no longer pick up a dark fringe
  • •Added in-process env, du, chmod, fold, rmdir, od, df, uptime, id, and dd shell builtins matching GNU coreutils 9.x options, output, and exit codes (chmod and id on Unix only; dd is disabled with the destructive set by PI_DISABLE_UUTILS_DESTRUCTIVE).
  • •Added an in-process nl shell builtin (ported from uutils coreutils 0.8.0, matching GNU nl), with header/body/footer numbering styles including pBRE regex styles, logical-page section delimiters, -l blank-line grouping, and ln/rn/rz number formats.
  • •Added opt-in /tree branch navigation across visible branches and nested fork depths; bind app.tree.previousBranch / app.tree.nextBranch (e.g. to Shift+Left / Shift+Right) in keybindings.yml (#12623 by @azain47).
  • •The wait tool's native job rows (omp.wait.job) are a single row: badge, id and label, progress and clock, without the output preview or capture notice beneath
v18.10.1

v18.10.1

October 12, 2026

  • •Added a Copy button that leads the turn footer under an answer in Tern (⧉ · 2m13s · 71K tok · $0.85 this turn, in place of the clock), which copies that answer
  • •Running agents and background jobs in Tern now share one compact counter over the composer (an icon and a count each, the words on hover) instead of two "N running" pills; each count still opens its own sheet
  • •In Tern, /session pin and /usage reset open the same picker sheet as the other small selectors (the active account checked, a confirm strip before a reset is spent, unusable accounts dimmed with the reason); the thinking level picker shows each level's depth as a meter, the plugin and queue mode pickers use badges (version, installed, scope, recommended) and plain-language names instead of bracketed text, and the theme picker no longer repeats "(current)" beside its check
  • •In Tern, the text editor an extension opens (and the ask tool's custom answer and note) is now a sheet in the composer's place: the title over its details, the text written straight on the sheet, and Open in editor, Cancel and Submit buttons whose keys show in their tooltips instead of a keycap hint row
  • •Fixed grep on a single file showing in Tern as separate boxed snippets with no file row or syntax colors; it now looks the same as a grep over a directory
  • •AssistantMessageComponent's native turn footer leads with a Copy icon (omp.turn.copy) and a dot instead of the clock icon; it copies the answer's text and shows when the host handles transcript actions
  • •UserMessageComponent's native hover toolbar (omp.user.tools) leads with Copy and Rewind icon buttons (copy, rewind) instead of text labels, then a dot and the time, like the turn usage footer
  • •ContextUsageView's native body (on terminals with meter) leads with the tokens used and the room left before auto-compaction, then one stacked bar ticked at the threshold, the breakdown as rows (omp.context.cat, .cat.free, .cat.buffer: swatch, name, tokens, share; the exact count in the row's title) and the snapcompact estimate as labelled rows (omp.context.snap); the blocks meter and legend kv are gone, and contextUsageHead no longer repeats the window size
Show more (7)
  • •AskDialogComponent's native root is omp.editor.ask (collapsed: omp.editor.ask.hidden, the countdown, the question as omp.ask.summary, Skip and Show): a chosen answer is the accent-toned row (a check also carries the check icon) instead of the highlighted one; multi-select Other… is omp.ask.other.check; the question tabs check answered questions and say their keys in the strip's title; the countdown moves from the head to the action bar beside Hide; the preview is omp.ask.preview; the Review tab leads with omp.ask.notice and lists answers (omp.ask.answers) by question name with inline code mono and no (Recommended) suffix; option descriptions run inline code mono, notes ride the row's detail as em; Submit/Next's tooltip names only Enter (and Space on a multi-select)
  • •MCPAddWizard's native sheet asks one question per step: a phase strip (omp.mcpAdd.progress of omp.mcpAdd.phase, toned done/current/upcoming and neutral when no auth was needed), the question and its lead (omp.mcpAdd.title, omp.mcpAdd.tag for optional fields, omp.mcpAdd.lead), then a mono field with a placeholder and its rule or refusal (omp.mcpAdd.field, tone: "error"; omp.mcpAdd.note), choice rows with icons and mono tags (omp.mcpAdd.choices), status lines (omp.mcpAdd.status, omp.mcpAdd.checks, omp.mcpAdd.error) or the review rows (omp.mcpAdd.summary). Cancel, Back and Continue / Save server buttons run Ctrl+C, Esc and Enter instead of a key-hint strip. The connection test shows its own busy step, the OAuth client secret field is masked, and the review saves on Enter (no Yes/No choice)
  • •ReportPanel's native body carries the role omp.report.body
  • •HookInputComponent describes a dock sheet (omp.overlay.hook-input col) like HookEditorComponent's: the title's first line (omp.hook-input.title, the countdown as omp.hook-input.timer) over its further lines (omp.hook-input.detail), the field (omp.hook-input.field, tone: "error" while a submit was refused) with its placeholder, and Cancel / Submit buttons that run Esc / Enter; the key legend under the field is terminal-only
  • •JobsSheet's native body is a master–detail split (omp.jobs.split: omp.jobs.master | omp.jobs.detail): the job list grouped Running / Recent (omp.jobs.group labels), each row a type icon tinted by status with its duration, beside the selected job's status pill, live elapsed and Cancel job (omp.jobs.status), its task title or command (omp.jobs.title / omp.jobs.command), facts (omp.jobs.facts: agent, directory, pids, exit code, artifact) and output (omp.jobs.out, omp.jobs.nooutput); the footer counts running and recent jobs (omp.jobs.summary), and no jobs shows an empty state (omp.jobs.empty). Task jobs no longer draw an agent node here
  • •BtwHistoryPanel's native sheet is centered and reads like a mail reader: the questions as two-line rows (omp.btw.history, list omp.btw.list / omp.btw.list.idle while the answer has the keys) beside the selected thread (omp.btw.reader › omp.btw.thread › omp.btw.turn: omp.btw.question / omp.btw.followup, omp.btw.meta, omp.btw.answer, omp.btw.error), the follow-up field under the last answer (omp.btw.composer), and footer buttons Stop answer, Copy answer, Close and Follow up (Cancel and Send while composing) in place of the focus labels and key-hint strip; an empty history is an md sheet (omp.btw.empty)
  • •CountdownTimer's native elapsed no longer sends stopped: 0, which froze every native countdown (extension input, selector and editor prompts) at zero from the start
v18.10.0Breaking Change

v18.10.0

October 12, 2026

  • •Raised the default context window for openai-codex/gpt-6.1-sol and gpt-6.1-sol-wm from 272K to 500K, matching OpenAI's new Codex default; extended context still opens 922K (#15421)
  • •Added /fork support for creating a new Tern pane while a turn is streaming, preserving the original session
  • •Added omp session pack, omp session unpack and omp session moved to move a session with its artifacts to another machine and continue it there; resuming the copy left behind forks it instead of continuing it
  • •Added omp auth export and omp auth import to carry model sign-ins to another machine
  • •Added hiding a pending ask question without answering it: Alt+H (app.ask.hide) or the Hide button in Tern collapses the dialog to one line; the same key, Enter, or Show brings it back (#15400 by @H4vC)
  • •Local IPC endpoints (daemon broker, LSP mux, IDA hosts, text prediction, omp stream, Collab discovery, local model workers) now run on a native transport: owner-only on every platform, including Windows named pipes; on Windows, daemons started by an older omp are not reused, so close older sessions after upgrading.
  • •Output hidden behind an open ask dialog, command report or todo list now reaches terminal scrollback once it closes, rather than while it is still open (#15405 by @H4vC)
  • •Fixed every session loading its own copy of the local mnemopi embedding model and keeping it in memory until exit; one server per model is shared across sessions and exits after 15 idle minutes (#9908)
Show more (7)
  • •Fixed the first-use mnemopi embedding-model download never completing for sessions shorter than the download; it now finishes in the shared embedding server after the session exits (#10240)
  • •Fixed RpcClient.stop() occasionally waiting forever because the agent process was never signaled.
  • •Fixed blank rows opening under the input after an ask dialog, command report or todo list closed in a session that had filled the screen; the transcript now refills the screen (#15405 by @H4vC)
  • •Fixed blank rows appearing between the last paragraphs of a streamed answer when the turn ended (#15405 by @H4vC)
  • •Added IpcServer, IpcConnection, and ipcEndpoint: a local IPC transport over Unix sockets and Windows named pipes with owner-only access, single-instance binding, stale-endpoint takeover, and newline framing.
  • •Optimized transport performance with task-local write coalescing and batch-based newline processing
  • •Removed RuntimeChildrenOptions.transient and Component.retireDisplacedTranscript: the composer now bills all chrome below the transcript at the smallest height it has rendered, so no root opts in or out (#15405 by @H4vC)
v18.9.2Breaking Change

v18.9.2

October 11, 2026

  • •Improved context caching for repeat turns, reducing redundant prompt processing and making subsequent turns faster when the system prompt is unchanged.
  • •Renamed TypeSafeJudge to NativeJudge and TypeSafeApiError to JudgmentApiError, including their associated option types. JUDGMENT_ROUTES has been removed; use isJudgmentApi or create a judge for catalog models with createNativeJudge(model, { apiKey }).
  • •Added native judge support for OpenAI’s Decisions API and Cloudflare Workers AI decision models, including the openai-decisions and workers-ai-systemone APIs. The auth gateway’s System One route supports both providers.
  • •Added createNativeJudge(model, { apiKey, headers, fetch }) for creating judges from catalog models with their configured request model IDs and question limits.
  • •Added Cloudflare Workers AI authentication with loginCloudflareWorkersAi, storing the API token and account ID; logging in again with the same token replaces the existing credential.
  • •Added automatic question batching to NativeJudge for endpoints with question limits, with up to four concurrent batches and merged answers and usage reporting. Usage from successful batches is reported through partial-usage callbacks and both session and auth-gateway usage ledgers, even if another batch fails.
  • •Improved Anthropic prompt caching for long conversations, reducing memory usage while selecting cache breakpoints.
  • •Fixed Devin-routed OpenAI models returning invalid_argument on every turn after an existing session was switched from openai-codex.
Show more (7)
  • •Removed parseCloudflareAiGatewayCredential, serializeCloudflareAiGatewayCredential, and CloudflareAiGatewayCredential from @oh-my-pi/pi-catalog/wire/cloudflare-ai-gateway. Use the equivalents from @oh-my-pi/pi-catalog/wire/cloudflare instead.
  • •Improved responsiveness when adding assistant text after tool calls in long transcripts.
  • •Fixed apply_patch handling of context-free hunks when the target text appears multiple times.
  • •Fixed find filename ranking and sketch scoring with judge endpoints that limit the number of questions per request.
  • •Fixed omp gc --apply leaving temporary session files after an interrupted save.
  • •Fixed omp auth-gateway serve handling of OpenRouter routing variants such as :floor and :nitro.
  • •Improved validation errors for computer helpers with missing or non-string text arguments by identifying the helper and argument involved.
v18.9.1

v18.9.1

October 11, 2026

  • •Added compat.supportsThinkingBindingControls for Bedrock Converse: setting it to false stops prefix-bound Claude requests from sending thinking.block_binding, the thinking-binding-controls-2026-08-01 beta and the /input_transformations response path, for gateways or regions that reject them (#15316 by @harshaygadekar)
  • •Fixed Bedrock Claude Fable 5.1 requests with thinking off and a forced tool choice sending the forced choice next to adaptive thinking; the choice now falls back to auto (#15316 by @harshaygadekar)
  • •Added the supports-thinking-binding-controls axis to Bedrock Converse models (on by default) so a rule or models.yml override can turn off Claude thinking-binding controls on hosts that reject them (#15316 by @harshaygadekar)
  • •Added supportsThinkingBindingControls to Bedrock compat in models.yml, so a Bedrock gateway or region that rejects Claude thinking-binding controls can turn them off (#15316 by @harshaygadekar)
  • •Fixed executable scripts without a #! line failing with "Exec format error" in the embedded shell (#15271 by @iliaal).
  • •Fixed inline charts and images leaving overlapping copies over text when moved, resized, replaced, or hidden, while preserving images in scrollback.
  • •fix(bedrock): add supportsThinkingBindingControls catalog opt-out (#15316)
  • •fix(shell): preserve executable text fallback with posix_spawn (#15271)
v18.9.0Breaking Change

v18.9.0

October 11, 2026

  • •Fixed stale queue updates when queued steering is adopted, withdrawn, or added to the transcript, ensuring queue listeners consistently receive the latest state.
  • •Removed the retainTextSignature option from consumeGoogleStream and streamGoogleGenAI; Google routes now consistently preserve text reply signatures.
  • •Custom SessionsApi implementations must implement permits(provider, sessionId, credentialId).
  • •Exported matchesReplacementCredential and isSameOAuthAccount to help identify credential replacement and account ownership.
  • •Added AuthStorage.sessions.permits(provider, sessionId, credentialId) for checking whether a stored account may serve a session restricted to an account pool.
  • •Added judgeQuestions() for loading judge questions from JSON with inferred choice labels and answer types, plus renderQuestion() for templated instructions.
  • •Devin chat turns now use the native Devin CLI sampling settings by default, while continuing to honor explicitly configured temperature, top-p, and stop sequences.
  • •Added parentSessionId and minimizeEffort stream options. Branched side requests can reuse a conversation's prompt cache, and supported models can run them at their lowest effort without losing cache reuse.
Show more (7)
  • •Improved cross-host continuation for supported models so confirmed prior reasoning is preserved as reasoning context rather than exposed as <think> text in replies.
  • •Fixed Anthropic subscription quota not appearing in /usage when an OAuth token is supplied through ANTHROPIC_API_KEY.
  • •Fixed custom OpenAI-compatible Responses streams truncating reasoning and incorrectly invoking custom tools with empty input.
  • •Fixed Codex WebSocket prewarming so optional service tiers and model routing are handled consistently with normal requests.
  • •Fixed OAuth sign-in result pages breaking or rendering injected markup when provider errors or callback values contain special characters.
  • •Fixed Anthropic requests failing when tools are added to a conversation or when resumed sessions no longer include earlier tools.
  • •Fixed Anthropic requests rejecting tall or oversized historical screenshots by resizing or re-encoding images to the host's limits.
Showing 30 of 107