oh-my-pi is the engine Agent Pi runs on. This is a copy of its own changelog, newest release 18.6.2.
Written by can1357 and contributors. Licence: MIT. Project: github.com/can1357/oh-my-pi. Copied on October 5, 2026. The original is always the latest.
[18.6.2] - 2026-10-04
Fixed
Fixed snapcompact's short final frames preventing vision-backed sessions from continuing on backends that reject 32px-or-smaller images (#14355).
Fixed the agent's goal calls asking for approval under --approval-mode write, which paused goal-mode loops at complete; always-ask still prompts for goal changes but not get (#14368)
Fixed MCP server connection progress popping up a toast for every server that connects or fails in native terminals such as Tern; it now shows only in the classic terminal transcript
[18.6.1] - 2026-10-04
Fixed
Fixed waiting for subagent follow-up messages: responses now appear as background jobs that can be waited on or canceled, and are delivered only once.
Improved /switch autocomplete so model and role suggestions use the same relevance ordering as the model picker, including support for @role aliases.
Fixed concurrent skill:// searches blocking other filesystem operations and delaying subagent artifact publication.
Fixed compatibility checks for browser relays from other OMP versions and added guidance for resolving stale connection-refused errors.
Fixed follow-up hashline edits being incorrectly rejected after earlier edits shifted anchored lines, while continuing to reject genuinely stale line references.
Fixed pi.exec() reporting exit code 0 when a process was terminated by a timeout or signal; terminated processes now report code -1.
Fixed /collab guests being unable to respond to setting-change approval and tool-issue report consent prompts.
Fixed follow-up hashline edits being rejected as anchored on lines "never displayed" after an earlier edit shifted those lines, when the replacement carries the anchored content; genuinely stale line numbers are still rejected (#14254 by @abilliontokens).
Fixed long /btw answers in Tern being clipped with no way to scroll: /btw now answers in the scrollable BTW history sheet (#14331 by @H4vC)
Fixed /btw answers longer than 4 KiB being cut off with […truncated] once they finished (#14331 by @H4vC)
In Tern, Esc puts the BTW history sheet away while an answer keeps streaming (/btw reopens it); x cancels the answer (#14331 by @H4vC)
[18.6.0] - 2026-10-03
Added
The /models Roles view shows which saved model preset is in effect, and Ctrl+←/→ (or p/P on the role rows, for macOS where Ctrl+←/→ switches Spaces) switches to the next or previous one, in Tern and text mode (#14210 by @H4vC)
Changed
Picking a model for a role in /models now puts the cursor on the model list, so ↑/↓ choose a model and Enter assigns it right away instead of moving through the sidebar and dropping the role selection; ← still reaches the providers (#14210 by @H4vC)
Sped up secret redaction on long conversations: it no longer slows down as history grows (#14213 by @H4vC)
Startup is faster with plugins that bundle large dependency trees: the extension loader no longer re-reads and re-checks the same files while loading them (e.g. ~280 ms → ~185 ms with the IDA MCP plugin) (#14219 by @H4vC)
Fixed
Fixed an EPIPE: broken pipe unhandled rejection crashing the session when a debug adapter, eval kernel, IDA worker, or RPC server exits mid-write (seen on Windows) (#14196 by @andrebrait)
[18.5.1] - 2026-10-03
Added
Added RPC support for GPT live voice sessions bound to the RPC session, including live start, stop, mute, phase, level, transcript, and end events; closing stdin also stops an active live session.
Published a machine-readable RPC wire schema and added generated-client support for Python, Rust, and Go RPC clients, including protocol v2 negotiation, prompt-result handling, host tools, and host URIs. The Python client is now distributed from the SDK package location.
Added the read-only archive eval global for browsing projects and past sessions, viewing idle recaps and recap journals, opening session prompts, and searching prompt history. It is enabled by default with archive.enabled.
Changed
wait now waits only for background jobs and services started by the calling agent and reports an error when there is no such work to wait for; messages can still end the wait.
Improved automatic session titles for image-only requests and mid-session refreshes so titles better reflect the user's actual goal and no longer echo placeholder text.
In focused subagent views, submitting . or c now continues the subagent just as it does in the main session.
Reduced memory use and loading time when forking sessions or when session history references the same image multiple times.
The computer tool's clipboard.write now updates only the desktop clipboard and no longer sends text to the terminal clipboard via OSC 52.
Improved terminal layout stability in Rebuild mode when resizing or zooming tmux panes.
Advisor concerns and notes now reach an active same-run continuation after a terminal answer instead of being retained unnecessarily.
Fixed
Fixed background-job completions being lost when IRC-woken subagents finished while owned asynchronous work was still settling.
Fixed session reset leaving stale hashline edit snapshots available for later mismatch diagnostics.
Fixed multi-subagent task calls reporting success when one subagent failed.
Fixed RPC clients waiting indefinitely for prompt results after automatic compaction handoffs.
Fixed the retry prompt layout after interrupted tool calls and eliminated several TUI display issues, including flickering, duplicate streamed tool cards, blank space, and stray escape-code fragments during streaming, resizing, zooming, and clipboard or notification output.
Fixed shared headless browsers remaining resident after a failed close; unresponsive browser instances are now replaced automatically.
Fixed eval calls to extension and custom tools with strict schemas so they receive the same arguments as direct tool calls.
Skill URI reads now expose the selected skill path, allowing nested skills to locate sibling helpers.
Fixed reasoning-only stops and user-uninterrupted aborts leaving sessions idle instead of continuing their configured retries.
OTLP exports now include chat request costs in spans, metrics, and completion logs, including provider charges when available and an explicit unavailable status when pricing cannot be determined.
Fixed background Bash jobs and automatically backgrounded eval cells being terminated at their default deadlines without clear guidance; async and timeout behavior is now documented and background-start messages show the applicable deadline.
Fixed user plugins being detected as project plugins when HOME has a trailing slash or resolves through a symlink.
Fixed collab.autoStart failing to host a session after a transient relay connection failure; failed room creation is retried with backoff.
Fixed the default advisor remaining at no model when its model becomes available after background discovery.
Disposed SDK sessions now release spilled tool output and reject further artifact writes.
Fixed Python Eval corrupting quoted source containing shell or magic syntax, including multiline strings.
Fixed explicit GitHub Copilot model selections and enabledModels entries being replaced by similarly named bundled models when the requested model came from the cached Copilot catalog.
Fixed copied text, Warp agent notifications, and terminal notifications occasionally corrupting the display while output streamed.
Advisors now receive the file path for pasted or dragged images so they can open the image with read.
Fixed collaboration guests queueing host-only prompts locally instead of receiving the appropriate refusal.
git worktree add and omp worktree add now run the new worktree's post-checkout hook, including fallback checkouts.
Added a warning when submitted prompts cannot be saved to persistent history until saving recovers.
Compiled extensions can now import root-level @oh-my-pi/pi-catalog modules.
Fixed idle compaction hiding the final assistant answer when advisor notes followed it.
omp render and resumed sessions now preserve token counts when imported assistant messages lack cost data.
Fixed cross-agent messages and background-job output from incorrectly closing or forging harness blocks.
openai-codex model discovery now uses the configured compatible gateway for model listing without sending ChatGPT OAuth credentials to that gateway.
Plan mode and device-only write sessions can now cancel their own background jobs and subagents with write proc://<id>/kill.
Fixed browser relay opens stalling on discarded tabs.
Fixed GitHub web scraping entries with deleted authors failing to render; they now display as @ghost.
Fixed stale-read pruning incorrectly discarding code that had already been read after a later summarized, partial, or failed read.
Session usage and cost totals now include Mnemopi memory completions, including billed failures before a fallback succeeds.
Fixed Hindsight banks with more than 100 mental models losing models from context, seed setup, or listings.
Prompts submitted during /handoff generation now wait for compaction to complete before starting.
Fixed supervised PTY services receiving an unintended startup keypress.
Fixed bash commands using pty: true missing shell environment variables, and ensured extension-provided environment changes follow session switches correctly.
Fixed notes-backed context rollover restoring an outdated parent assignment when reviving a subagent.
Advisor tool calls now report the advisor as the calling agent to extension tool-call and tool-result handlers.
Fixed the IDA integration on Windows: the IDA worker crashed after its first response, and timing out or aborting an IDA request killed the worker instead of interrupting it (#14186 by @H4vC)
[18.5.0] - 2026-10-03
Breaking Changes
task.completionProbeMs is replaced by the on/off setting task.completionProbe; an existing task.completionProbeMs migrates automatically (0 → off, any period → on).
SessionStorage.claimSessionFile(sessionPath) is replaced by claimSession(sessionId, sessionPath) (which also refuses when the path now holds a different session), and sessionOwnerLeasePath() by tryAcquireSessionLease(sessionId): custom storage backends that implemented claimSessionFile must implement claimSession to keep cross-process ownership (#14095 by @andrebrait)
Added
/dump all writes a zip to the temp directory with the main transcript, the LLM request JSON, and one file per subagent transcript (nested subagents included, killed ones marked aborted); the TUI copies the archive path to the clipboard. Plain /dump is unchanged (#13908 by @H4vC)
Added /effort [level] to set the thinking level without switching models: bare /effort opens a picker, and completions offer only the current model's levels within the session effort ceiling. Its description includes thinking and intelligence so either term finds it; Shift+Tab still cycles levels (#12222 by @Xytronix, #14113 by @andrebrait).
Added a per-call model selector to task items, eval agent(), and workpool(): a provider/model[:level] pattern or role alias, or an ordered array of them, that takes precedence over task.agentModelOverrides and the agent definition. Selection is an ordered preference — requested candidates are tried before configured fallbacks — and the spawn fails at preflight instead of silently routing elsewhere when the selector is the ambiguous literal default/inherit with or without a :level suffix (use @default), is blank or comma-only, carries an invalid thinking suffix, matches no available model, or sits on the batch container instead of a tasks[] item. A requested model without working credentials fails the spawn instead of running on the parent's model, and the error tells the caller to report the unavailable model rather than substitute another. A pool applies its selector to each worker's first turn and reuses that worker's session afterwards (#12229 by @Xytronix, #13669 by @andrebrait).
Changed
Subagent completion estimates are asked after 2, 5, 10 and 30 more minutes, then hourly, instead of at a fixed interval, and only for subagents the main agent spawns in an interactive session; print (-p), RPC, ACP and SDK runs and nested subagents never request them.
/changelog, /context, /tools, /hotkeys, /advisor status, /memory view|queue|stats|diagnostics, and the mental-model views no longer add their report to the transcript. In text mode a report that fits shows above the editor like /btw and Esc dismisses it; a taller one (such as /changelog full) opens as a full-screen page on the alternate screen, scrolled with the arrow/page/Home/End keys and the wheel, and Esc returns to the screen exactly as it was. In the native terminal it opens as a sheet like /usage whose long reports scroll, closed with Esc or Close (#14136 by @H4vC).
/jobs, /mcp help|list|resources|prompts|notifications and /ssh help|list no longer add their report to the transcript either: they show the same way, and natively /jobs opens the live background-jobs sheet the jobs pill opens (/jobs full keeps the full command lines in a report sheet) (#14138 by @H4vC).
The welcome banner (in the terminal and as Tern's native card) is now the omp logo and wordmark with the version and a tip. It no longer shows the "Welcome back!" greeting, the model (the status line does), LSP servers or recent sessions (/resume), and the #/!$ prompt prefixes moved into the rotating tips.
Fixed
Auto-retry now retries the same model once after a mid-stream socket drop that had already streamed reasoning or tool calls, instead of switching to the fallback chain on the first attempt; the fallback chain is consulted only if that retry also fails. This applies to every provider, since a dropped socket says nothing about the model (#13747 by @abilliontokens)
Fixed native git patch apply, checkout, stash, cherry-pick, and worktree removal on Windows ignoring core.autocrlf: LF patches failed to apply to CRLF checkouts and clean CRLF files were treated as modified
Fixed the command image-URL uploader stripping backslashes from Windows paths in its command template (C:\tools\upload.exe {file} ran C:toolsupload.exe)
Fixed reading a SQLite database (local or by URL) and closing prompt history leaving the database file locked on Windows
Fixed RPC mode on Windows freezing when the client stopped reading stdout: the worker blocked on the full stdout pipe and stopped reading stdin, so a client writing a batch of commands before reading replies deadlocked. Output now goes through a non-blocking stdout stream that spools to disk under backpressure, as on Linux and macOS
Fixed HTML export hanging when a session's subagent directory held a transcript named ..jsonl; discovery now only descends into real child directories (#13908 by @H4vC)
Fixed resuming a session through a symlink or hard link to a file another omp process is writing: the resumed session no longer mixes its turns into that file and continues in a new file next to it (#14095 by @andrebrait)
Fixed moving a session to another directory replacing a session file there that another omp process is writing, or moving a session another process is writing; the move now stops with an error and leaves both files untouched (#14095 by @andrebrait)
Preserve the parent’s upstream route and live reasoning effort for inherited task/eval/workpool selectors and restored workers; caller effort, a requested @default:<level>, and the agent definition's own thinking-level still take precedence over the inherited effort (#12229 by @Xytronix, #13669 by @andrebrait).
Fixed the browser tool's Tern backend being refused by any Tern newer than the protocol omp was built against; it now speaks Tern's protobuf session protocol (level 12), which Tern serves across builds, and a Tern from before it reports as unavailable (update Tern) so the Chromium fallback takes over.
Fixed reloading a legacy Pi extension on Windows serving the previously loaded source instead of the edited files
Fixed Redis-, SQL-, and in-memory session storage listing no sessions on Windows: directory listing now matches \-separated session paths, so /resume and the session picker find them
Fixed an MCP stdio server whose configured command path does not exist failing on Windows with "MCP subprocess closed stdout before responding" instead of a not-found error naming the path
Fixed omp commit never closing its credential store, leaving agent.db open (and a broker-backed store's sync loop running) after the commit finished
Fixed every new session (including subagents) staying in memory for 5 seconds after creation, held by an uncancelled workspace-scan deadline timer; a parked or disposed subagent's session and settings are now released immediately
Fixed autoresearch run_experiment on Windows running autoresearch.sh through the WSL bash.exe launcher found on PATH (a separate Linux environment that fails when WSL is unavailable); it now uses Git Bash or the configured shellPath
Fixed sessions started in a temp-directory cwd on Windows landing under a home-relative -AppData-Local-Temp-… session directory instead of the -tmp-… one; existing directories under the old name are migrated forward
Fixed the write tool claiming "Made executable via chmod +x" for shebang files on Windows, where chmod keeps no execute bits
Fixed readlink in the bash tool printing a provider-backed path (e.g. local://file) with a \\?\ prefix on Windows
Fixed the daemon broker on Windows dying with the omp process that started it, which stopped the shared browser relay (and every other broker daemon) while other omp sessions were still using it
Fixed the browser tool's Tern backend being refused by any Tern newer than the protocol omp was built against; it now speaks Tern's JSON script protocol, which no Tern build ties it to, and a Tern from before it reports as unavailable (update Tern) so the Chromium fallback takes over.
[18.4.12] - 2026-10-02
Added
Added omp auth-gateway stdio: a long-lived inference server for other programs speaking JSON lines on stdin/stdout ({"id", "path": "/v1/chat/completions", "body"} in, {"id", "status", "body"} out) with your own sign-ins; a request's model takes any --model selector (@smol, sonnet, @commit,@smol) and falls back along retry.fallbackChains when an attempt fails.
Changed
Reduced CPU use while streaming with several agents active: extension message_update handlers are delivered through a lighter queue, and RPC no longer processes subagent events unless a client subscribed to them (#13244 by @iliaal).
Fixed
Fixed web search stopping at Perplexity's anonymous signup wall instead of falling back to the next configured provider (#12756).
Fixed imported Claude Code sessions on Windows reporting the encoded C--… directory name instead of the registered project path when the transcript records no cwd (#13363 by @jchanghong023).
Fixed JavaScript eval wait()/handle.wait() ignoring a positional timeout; h.wait(30) now waits up to 30 seconds like { timeout: 30 }, and mixing an options object with positional arguments throws a TypeError (#12720 by @F0Rextasy).
Fixed Herdr and other lifecycle-tracking extensions showing a collab guest (omp join) as idle while the host is working; extension-initiated turns (pi.sendMessage with triggerTurn, pi.sendUserMessage) are refused as host-only while joined instead of running on the guest's local model (#13156 by @Fruitseller).
Fixed omp update failing with "Malformed npm registry response … missing version" on registries such as Sonatype Nexus that answer the /<pkg>/latest lookup with the full package document or a non-manifest body; the updater now reads the version from the package's dist-tags (#14115).
Fixed wait and proc:// failing with "Daemon list request timed out" when the project daemon broker hangs; background jobs and agents are still reported, and proc:// shows that services are unavailable (#14120 by @H4vC).
Fixed agent://<id> showing an agent's previous published output as current while that agent runs a follow-up or wake turn; the read now says the output is from the previous run (#14120 by @H4vC).
Fixed proc:// listing agents as running when they have no turn in flight; their rows now say the run is stale or already finished, as the jobs tool does (#14120 by @H4vC).
Changed subagents to skip their own builds, tests, and smoke runs and leave verification to the main agent, avoiding CPU spikes from many subagents verifying at once.
[18.4.11] - 2026-10-02
Added
Added goal management for RPC hosts and optional automatic goal continuation via goal.continuationModes: ["rpc"]. RPC clients can create, inspect, pause, resume, and remove goals, and view the current goal in get_state.
Added --goal <objective> for interactive launches to begin a new session in goal mode without requiring the /goal command.
Added periodic completion estimates for running subagents, with configurable polling through task.completionProbeMs and progress displayed in wait and task views.
Added the RPC fork command (RpcClient.fork(entryId?), Python fork(entry_id=None)): it moves an RPC session onto a new session file holding the history up to and including any message entry (and the tool results answering a cut tool-call batch), together with the session's artifacts, or a copy of the whole session when entryId is omitted (#14077 by @andrebrait).
Added reason ("branch", "fork" or "btw") to the session_before_branch and session_branch extension and hook events, so handlers can tell whether entryId is dropped (branch) or kept (#14077 by @andrebrait).
Fixed
Fixed skill-description and text-prediction data not respecting XDG directories; existing data is now migrated to $XDG_DATA_HOME/omp when applicable.
Fixed subagent MCP calls ignoring the parent transport timeout, including configured OMP_MCP_TIMEOUT_MS and unlimited (timeout: 0) settings.
Fixed fresh setups failing on the first turn when the automatically selected model did not support the configured thinking level.
Fixed the read tool hanging and the TUI becoming unresponsive when asked to read standard input, FIFOs, or other non-regular files; these paths are now rejected.
Fixed project configuration from ~/.omp being incorrectly applied to unrelated working directories under the user's home directory.
Fixed omp update failing on standalone-binary installs when npm advertised a version whose GitHub release was never published; the updater now installs the newest published release instead (#12913).
[18.4.10] - 2026-10-02
Added
Added global and per-advisor review cadence, including final-yield reviews and intervals that accumulate skipped transcript updates (#12385 by @olegpulatov).
Added per-advisor catch-up policy and cancellable strict waiting, so asynchronous turn reviewers can run beside synchronous final reviewers (#12385 by @olegpulatov).
Added /jobs full to show each background bash job's full command line; plain /jobs still shortens it to fit the terminal (#13980 by @rickythefox)
Changed
Advisor notes merge at final boundaries with age markers and at most one permitted continuation per batch; advisor continuations no longer trigger recursive reviews (#12387 by @olegpulatov).
Fixed
Fixed read of an executable and ida hanging indefinitely while IDA's initial analysis of a large binary runs; they now give up after two minutes with an error naming the still-analyzing host, which keeps analyzing for later calls
Fixed await completion(...), await agent(...) and asyncio.gather(*handles) in Python eval cells failing with Missing session/run/name (#13999)
Fixed isolated tasks picking up edits that other agents or merges made in the parent checkout while the task was starting, which put unrelated changes on task branches
Fixed releasing a kept-alive isolated agent creating a duplicate omp/task/* branch for work that had already been merged
Fixed isolated task branch capture leaving full-checkout temporary worktrees and empty omp/task/* branches behind when interrupted
Fixed merging isolated task branches stashing the entire working tree, which rewrote every Git LFS file and left omp-task-merge stash entries; merges now touch only the picked files and combine them with your unstaged edits
Fixed openai-models-list discovery to honor nested OpenAI model-list input/output token limits while preserving explicit top-level context precedence (#13988 by @github-nicolas-stadler)
Fixed importing @oh-my-pi/pi-coding-agent source from an installed package (SDK, extension loader, bun-global omp) failing with Export named 'createRatchetPrelude' not found (#14027)
Fixed finished subagent runs staying in memory for as long as the session that spawned them, through an abort listener left on the session's signal (#14038 by @theolundqvist).
Fixed print, RPC and ACP runs recording startup timing spans for their whole lifetime, which grew memory with every session and subagent they started (#14039 by @theolundqvist).
Fixed parked subagents keeping their spawn-time run state and settings in memory until the process exits, which grew memory with every subagent a long session spawned (#14040 by @theolundqvist).
Fixed parked and disposed agent sessions keeping their persistent shell (about 70 KB of native memory each) for the life of the process; a revived subagent now starts with a fresh shell (#14042 by @theolundqvist).
Fixed discovered models' request headers nesting one level deeper on every model refresh, which grew memory and per-request work in long sessions with many subagents (#14041)
RPC prompt, steer, and follow_up run native input handlers in submission order and acknowledge prompt only after admission, so a later prompt cannot overtake an idle image skill during vision description, an abort accepted during an earlier hook cancels that frame instead of letting it start a new turn, and a skill failure after the acknowledgement rejects RpcClient.promptAndWait instead of being dropped (#13027 by @andrebrait).
Fixed test suite failures on non-FHS hosts and under ambient terminal and Git configuration (#12358 by @olegpulatov).
Fixed late TTSR matches on short tool calls ending a run before the rule interrupt reaches the model (#14018).
Fixed omp gc --apply holding history.db and stats.db open until exit, which left an empty history.db-wal behind after a WAL checkpoint (#14043).
Fixed coding-agent session and gc tests failing on Windows (#14043).
Fixed background skill-description compression requests emitting no OTLP chat span or token usage (#14056 by @xaviergmail).
Fixed same-ID runtime API replacements carrying a prior route's prompt-cache lifetime into a route without a cache policy (#13966 by @anatoli-tsinovoy).
Hashline edits no longer reject fully read lines below an earlier same-file edit as "never displayed" when that edit left them at the same line number (#13983)
Fixed read agent://<id> returning Not found for a running agent (dotted child ids and agents that only submitted non-terminal yield sections included) while write agent://<id> reached it; the read now shows the agent's status, its yields so far, and its latest text, an unknown id suggests at most five near ids instead of listing every output, and bare read history:// refreshes the caller's persisted roster like history://<id> does (#14000 by @radkawar)
Fixed enabledModels/--models entries naming a judge, search, image, or speech model logging No models match pattern on every startup (#14016)
Fixed local-memory startup consolidation rebuilding the system prompt of a conversation that had already sent requests, which invalidated its signed thinking blocks; the new summary now applies from the next session (#14019 by @nick-maderight)
Fixed the Darwin Nix flake / NixOS module build producing an omp that fails to start after nix-collect-garbage with Library not loaded: /nix/store/…-libiconv-… by repointing the embedded native addon's libiconv install name at the system library and failing the build if the addon references any /nix/store path (#13992 by @krzysztofkusmierczyk).
Fixed /context and clicks on the status-line context meter stacking a new Context Usage card every time; the existing card is refreshed in place, or moved to the bottom if newer blocks follow it
Fixed the jevify keyword notice teaching the removed judge() handle API, so agents following it failed on the first judge cell; it now uses judge_batch() (#13588, #13698 by @holny)
[18.4.9] - 2026-10-01
Added
Added opt-in stale-session garbage collection with omp gc --stale or gc.stale, removing orphaned session markers and terminal breadcrumbs and expiring old debug reports and collaboration replicas according to configurable retention limits.
Added RPC controls to cancel or steer individual foreground and background subagents without aborting the session.
Added RPC word-completion commands so web and IDE hosts can provide the same ghost-text completion available in the terminal editor.
Added an opt-in RPC ask-dialog mode that lets hosts render all questions together with checkbox or radio-button controls and submit their answers in one response.
Added SDK notifications when a session moves to a new persistence file, including the previous and new paths.
Added SDK APIs to inspect and cancel background jobs, including their command, working directory, process IDs, exit status, and captured output.
Changed
Improved the omp predict comparison view with an interactive native interface, table rows, action controls, and clearer status information.
Improved MCP authorization prompts with clickable links, native copy/open context menus, and a clearer URL layout.
RPC hosts are now notified when omp cancels an expired select, confirm, input, or ask dialog, allowing stale UI prompts to be closed.
Limited saved bash, Python, and JavaScript evaluation output artifacts to 16 MB by default while preserving both the beginning and latest output; configure the limit with tools.artifactMaxBytes, or set it to 0 for unlimited output.
Fixed
Fixed /wt on filesystems without copy-on-write cloning, including NTFS, so unchanged files are not incorrectly marked modified and staged edits, additions, and deletions retain the correct contents.
Fixed Windows Ctrl+V taking about a second to paste by avoiding unnecessary PowerShell clipboard checks.
Fixed local:// paths being misinterpreted as local filesystem paths by the read, write, and search tools.
Fixed read handling of semicolon-separated URLs, local paths, and line selectors so each entry is processed independently.
Fixed session persistence conflicts between multiple omp processes, preventing lost or interleaved turns and continuing in a new session file when necessary.
Fixed session image handling to avoid unnecessary rewrites, preserve images after interrupted writes, and prevent garbage collection from removing images that are referenced again.
Reduced unnecessary disk writes and improved persistence efficiency across sessions, model data, configuration, and background jobs.
Fixed the native composer showing the main session's effort level instead of the selected subagent's level.
Fixed the omp predict comparison view and MCP authorization prompt rendering with their full native interfaces, including clickable link actions.
[18.4.6] - 2026-10-01
Added
Added a live Background Jobs view that lets you monitor running background jobs without interrupting the transcript.
Added agent lineage navigation, making it easy to move between subagents and the main session from the composer header.
Added queued-message controls to the RPC clients and session API, including promotion of queued follow-ups to steering messages without duplicating text or losing attachments, plus explicit steering or follow-up behavior for prompts sent while the agent is busy.
Added support for keeping Claude prompt caches warm on Amazon Bedrock and Bedrock Mantle according to configured model cache lifetimes and retention settings.
In Tern terminals, the effort indicator now visualizes the selected thinking level and becomes a fireball at the maximum level.
Changed
RPC prompt requests now acknowledge only after the message has been accepted for processing, queued, or routed to an extension command, so subsequent queue-management operations can act on the admitted message reliably.
Idle recaps now appear as structured notices in the transcript rather than status-line messages.
Attached-image descriptions for text-only models now time out after 20 seconds and stop when aborted, while preserving the image and informing the model when a description is unavailable.
The status line now separates the session's own cost from total subagent spend, including nested, background, and resumed subagents, and matches the Agent Hub total.
Tool-use reminders are now delivered as separate developer messages, keeping them distinct from tool output.
Reworked Tern transcript navigation and presentation: Esc-Esc rewind now uses the transcript with turn-by-turn and branch navigation, attached images open in Tern's image viewer, idle recaps remain unobtrusively in the transcript, and the background-jobs pill opens the live jobs view.
Tern now reports agent activity through terminal progress consistently, and its progress and agent indicators update smoothly during subagent work.
Fixed
Fixed Tern commands issued while the agent is working so they appear immediately in the transcript instead of being clipped above the prompt.
Added a dismiss action for Tern's prompt-area error notifications.
Fixed dollar signs in prompts being mistaken for Python mode until a following space confirms the mode.
Fixed turns getting stuck in a working state when post-turn maintenance, such as saving the session, fails; the session now becomes idle and reports a warning.
Fixed failed tool-output pruning from leaving live context out of sync with saved history.
Fixed oversized or undersized attached images being distorted when resized to fit display limits.
Fixed interrupted tool calls disappearing from the model's context after resuming a stopped session.
Fixed aborted prompts with images still being prepared from starting or entering the queue afterward.
Fixed aside messages containing pasted image or video paths so the source path is preserved when sent to the model.
Fixed extension-registered prompt-cache settings, including explicit opt-outs, not taking precedence over matching models.yml definitions.
Fixed prompt-cache warming to honor cache-retention settings, including disabling replay for no-retention caches and using the lifetime written by long-retention requests.
[18.4.5] - 2026-09-30
Added
Added Factory Droid login and model selection with base credit badges and account-matched regional discovery (#8577 by @will-bogusz, continued in #13276 by @DusKing1).
Added HELMCODE_API_KEY to the environment variables listed in omp --help (#13630 by @alexcerezo).
RPC hosts can send messageUpdates: "delta" with set_event_filter to receive message_update frames without the accumulated message snapshots (message shrinks to { role } and assistantMessageEvent.partial is omitted); the response echoes the active mode (#13716 by @alphastorm)
RPC hosts can follow each cache-warming refresh through cache_warming_start and cache_warming_end events (also written by --mode json), which report the outcome and the recorded usage, and can set the session's warming mode with set_cache_warming without changing config.yml; the Python client gains set_cache_warming() (#13717 by @alphastorm)
The /review and /annotate code-review menus have a "Review a specific PR" option that lists the repository's open pull requests, with server-side search and a #123 shortcut (#12399 by @abilliontokens)
Pinned Subagents rows can show each agent's current (or most recent) tool call with a one-line detail and an elapsed marker; enable with display.subagentLivePreview (off by default) (#3821 by @abilliontokens)
Model presets: save every role assignment plus the default thinking level under a name and switch between them with /modelpreset save|switch|delete|list, pick one interactively with /modelpreset, or press s in the /models Roles view to save the current setup (#5253 by @abilliontokens)
Subagent tool previews name the files a freeform edit (apply_patch, sloppy, hashline) touches (#11210 by @DarkPhilosophy).
Changed
omp auth-gateway serve now attributes peers to the socket address by default; deployments behind a trusted reverse proxy can restore forwarded peer headers with --trust-proxy-headers (#13827 by @shawnkoh)
--no-ui now also works with --mode rpc-ui: extensions run headless while tool UI such as the ask tool still reaches the host (#13718 by @alphastorm)
omp models --json reports each model's pricingStatus (fixed, free, included, variable, or unknown) (#11613 by @will-bogusz).
Fixed
Fixed the subagent live preview blanking or mislabelling a running call when a sibling call finishes: concurrent calls are tracked by call id and keep their own intent, and the row keeps the last completed call with its success or error mark until the next one starts (#11210 by @DarkPhilosophy).
Fixed subagent tool previews rewriting a search pattern that names a home directory: path arguments are now shortened by argument key, so the pattern still shows what was searched (#11210 by @DarkPhilosophy).
Fixed background task job progress dropping the current tool's arguments and start time (#11210 by @DarkPhilosophy).
Replying c during a /guided-goal interview now sends c as your answer instead of triggering the continue shortcut (#13819 by @H4vC)
Cache-warming refreshes cancelled or superseded after the provider accepted them now count toward session usage and cost instead of being dropped (#13717)
Fixed Cursor turns that fail with "Cursor stream ended before turnEnded" stopping instead of continuing with their completed tool results kept (#13684 by @eggpeat)
omp plugin upgrade <name> now upgrades npm- and git-installed plugins (e.g. ida-mcp installed from github:HexRaysSA/ida-mcp#latest, which hcli mcp install relies on) and resolves a bare marketplace plugin name, instead of failing with "Invalid plugin ID"; the plugin's enabled state and feature selection are kept (#13812 by @H4vC)
Extension providers that offer /login and also name an env var as their apiKey (e.g. the Nexos provider's NEXOS_API_KEY) now use the key saved by /login when that env var is unset, instead of sending the env var's name as the key, which made their models fail to load or disappear (#13815 by @H4vC)
Reduced memory held by finished subagents during long sessions (#13624 by @iliaal).
Fixed role and subagent retry.fallbackChains being skipped once the session's thinking level differed from the role's configured one (e.g. task: grok-4.7:high running at :xhigh), and cold-revived subagents losing the fallback chain they were spawned with (#13789)
Fixed compiled OMP extensions importing @oh-my-pi/pi-catalog and its provider-model subpaths (#13731).
Explicit symbolPreset: unicode now stays Unicode after a Glyph Protocol handshake instead of switching the status bar to Nerd Font icons (#13865).
Fixed rewinding (/rewind, /tree) during a running turn hiding the queued-prompt bar, making the still-pending queue look deleted and uneditable (#13680)
[18.4.4] - 2026-09-29
Added
Added compat.bedrockMessagesApi to models.yml, so Claude reached through a proxy or an ANTHROPIC_BASE_URL reroute to Bedrock's /anthropic API gets Bedrock request shaping and on-demand compaction; false opts a Bedrock URL out (#13311).
Submitting exactly exit, quit, or q (any case, no leading /, nothing else in the input) in a session with no messages now quits; turn off with input.bareExitOnEmptySession (#13755 by @H4vC)
Added the opt-in input.bareSlashCommands setting (Interaction > Input): submitting exactly a command name without the leading / (e.g. model, compact, a skill or extension command) runs that slash command. Before the first message it runs at once; after that, the first Enter asks for confirmation and a second Enter runs it (a leading space sends the word as a message) (#13780 by @H4vC)
Extensions can now rewrite finalized assistant-message text through the awaited assistant_message hook before it reaches context, history, and message_end (#13769 by @NaC-L)
In Tern (TERM_PROGRAM=tern), omp reports its session file to the terminal (OSC 1337 user variable omp_session_file) at start and whenever the session changes, so an agent pane Tern's daemon restores after a crash or restart resumes the same session with --resume
Added additionalContext to extension and hook tool_result results, so success- and failure-specific post-tool guidance reaches the model through the trusted developer channel instead of altering tool output (#13267 by @andrebrait).
The ask tool's custom-answer and note prompts accept pasted images, which reach the model with the answer (#13774 by @DrFaustus-vic)
Added /fast ultra to select OpenAI's Ultrafast service tier on models that offer it (OpenAI API with preview access, or Codex models that advertise it, such as GPT-6.1 Sol once Ultrafast rolls out); /fast off clears it and /fast status reports ultra. ultrafast is also accepted by tier.openai, tier.subagent, tier.advisor, and --service-tier (#13782 by @H4vC).
RPC clients can now cancel one pending steering or follow-up message with remove_queued_message, including its hidden attachment context, without aborting the turn or changing other queued work (#11872 by @andrebrait).
Added typed queued-message removal to the official Python RPC client, including validated success and refusal results (#11872 by @andrebrait).
RPC clients can now render the actual pending-message queue instead of tracking it themselves: get_state reports a queuedMessages snapshot and a new queue_update event reports it live as steering/follow-up messages are queued, delivered, removed, or cleared (#11872 by @andrebrait).
Changed
omp stats --summary now labels costs as API-equivalent estimates and shows subscription usage that has no reference price as N/A instead of $0.0000, matching omp-stats.
Fixed
Fixed the mnemopi.polyphonicRecall and mnemopi.enhancedRecall settings (and MNEMOPI_POLYPHONIC_RECALL / MNEMOPI_ENHANCED_RECALL) having no effect: polyphonic recall now surfaces graph- and fact-linked memories, enhanced recall caches repeated recalls until the next memory write, and both apply per session instead of through process-wide defaults (#2323)
Fixed computer.window(74) matching every open window and computer.window({ id: 74 }) matching none; a numeric id now resolves the same window as "74" (#13649 by @will-bogusz)
Fixed /fast on showing fast mode as active on Codex models whose discovered service tiers list others but not priority; it now reports that fast mode is unavailable for the current model. Models whose tier list is empty keep /fast (#13782 by @H4vC).
Cancelling a concurrently queued prompt now preserves the other prompt's hidden keyword context instead of removing it with the cancelled message (#11872 by @andrebrait).
Hidden attachment context and its queued prompt are now claimed together in one-at-a-time mode, preventing successful cancellation after only the companion has been delivered (#11872 by @andrebrait).
Queued RPC skill commands retain their original invocation for cancellation, and queue editing no longer treats agent-attributed user-role messages as user input (#11872 by @andrebrait).
Builtin slash commands (including /record and /skills) no longer erase a draft typed after Ctrl+Enter detached its submission from the editor (#13026 by @andrebrait)
Failed detached submissions, including Ctrl+Enter /queue, and failed Enter /plan, /vibe, /goal, or /guided-goal commands now restore their text and attachments beside newer typing, with image markers remapped (#13026 by @andrebrait)
Native extension input handlers now intercept main-session Ctrl+Enter, including queued input, with consistent transformations (#11834 by @andrebrait)
/plan, /vibe, /goal, or /guided-goal with attachments that starts no turn (for example /plan while goal mode is active) now restores its text and attachments beside newer typing instead of re-attaching only its images ahead of the newer draft's own (#11834 by @andrebrait)
Same-named skills from different sources are no longer silently discarded. A duplicate with identical content still collapses without a warning; otherwise the higher-precedence skill (an authored skill over an installed package, a custom-directory skill over a provider skill, else whichever loaded first) keeps its bare name and the other stays reachable as <namespace>/<name> via skill://<namespace>/<name> and /skill:<namespace>/<name>, with a collision warning naming both files. Skill names containing / or \ are now rejected for every provider and custom directory, since / is reserved for that addressing (#12151 by @andrebrait)
Added native HUD and UI elements (status, tool cards, usage heatmap) for TSP terminals
Added support for native-only session info and job dashboard views in TSP terminals
Inside a Tern pane, the browser tool opens tabs as browser picture-in-pictures over omp's pane and drives their native web view (trusted input, ARIA snapshots, screenshots, PDF, dialogs, downloads, cookies, console, fetch/XHR routes and HAR, recording); it falls back to Chromium when no Tern window can host them. Opt out with browser.tern, PI_BROWSER_TERN=0 or app.tern: false; app.tern: true requires it
Fixed the startup "what's new" notice dropping the last unseen release when it was the final section of a changelog ending in a newline.
xAI web search honors XAI_BASE_URL again when the selected model uses the bundled https://api.x.ai/v1 endpoint; a custom baseUrl from models.yml still wins, and official xai-oauth OAuth credentials always stay on the bundled endpoint (API keys, including command-backed ones, follow the override as in chat and image generation).
Removed
Removed the bash tool's env parameter; services inherit the configured shell environment
[18.4.3] - 2026-09-28
Added
Batch task calls now start each subagent as soon as its tasks[] item finishes streaming instead of waiting for the whole call; launched agents are aborted if the finished call is invalid, blocked, or changed. Controlled by task.speculativeLaunch (default on; requires auto-allowed task approval and no extension tool lifecycle handlers)
Set PI_SMART_GIT=1 to have every git worktree add in the bash tool — including inside compound commands, functions, and loops — copy-on-write clone the checkout (APFS, btrfs/XFS reflink, ReFS) instead of checking out every file, so new worktrees start with ignored build caches (target/, node_modules/) already in place; every worktree add option except --orphan, --no-checkout, --track, and --relative-paths is handled, and anything else still runs real git.
In terminals that speak the Tern Surface Protocol, the working row, todo HUD, subagent HUD, judge/download progress rows, retry hint and stream console are native: the working spinner, message shimmer, elapsed timer and tok/s are terminal-clocked, todos are a phase tree with a progress bar, and clicking a subagent row focuses that agent
/usage refreshes its reports with r. In terminals that speak the Tern Surface Protocol it is a glass sheet: provider frames with per-window meters, reset times and banked-reset badges, and a year of activity as a native heatmap with per-day tooltips; /context is one frame with a block grid, a legend and a bar marked at the compaction threshold; /session info gains a context meter; /jobs shows task jobs as live agent rows; /stats adds an Open dashboard button
In terminals that speak the Tern Surface Protocol, MCP tool calls are native cards (an argument grid while running, then a collapsed Args section over highlighted JSON or markdown results) instead of the generic tool card; custom tools can supply their own describeCall/describeResult hooks for native views
In terminals that speak the Tern Surface Protocol, a sent prompt's bubble shows its attached images above the text (click one to open the file) and keeps its attachment, skill and model-mention tokens highlighted as the composer drew them
In terminals that speak the Tern Surface Protocol there is no status bar: the session name (and the branch's PR) is the tab title, Tern's pane header shows the path and branch, each finished turn ends with its time, tokens and cost, the composer carries a model chip (click to switch), an effort meter (click to cycle), a context hairline along its top edge and the context share and session cost, and other configured status segments sit as small facts in the composer; background jobs get a HUD pill
Added the /ratchet [flow and goal] command: the agent asks one batched round of setup questions, builds (or reuses) an eval for the flow you name, gets three approvals (inputs, grader, plan), then hillclimbs it unattended, keeping a change only when it beats the best round on both train and held-out cases. It enables a new ratchet(flow) eval global for the session (docs at xd://eval/ratchet; persist with ratchet.enabled) that stores state in .omp/ratchet/<flow>/, invalidates approvals when the approved files change, and prices runs from the model catalog (#13672 by @H4vC)
Changed
Running omp "prompt" without a terminal on stdin (scripts, CI, </dev/null) now runs the prompt headless like -p; a bare omp without a terminal exits 2 with an error instead of exiting silently (#13623 by @H4vC)
Invalid --thinking, --approval-mode, and --mode values are now rejected with a usage error (exit 2) listing the valid values, instead of being silently ignored (#13623 by @H4vC)
The default web search chain is now free-only: Parallel, the session's own model (new web/hosted), Exa, Firecrawl, SearXNG, and the credential-free scrapers. Paid engines (Perplexity, Tavily, Brave, Kagi, …) and other providers' chat models run only when you set them on the web role or its fallback chain.
Parallel, Exa, and Firecrawl now run their keyless endpoints in the automatic chain instead of only when explicitly selected.
Perplexity search no longer falls back to your OpenRouter key; select openrouter/perplexity/… explicitly to search through OpenRouter.
Hosted web search now follows the model rather than the host: GPT-5+ over any Responses API, Claude 4+ over any Messages API, and Gemini 2+ (including Gemini CLI), so web/hosted works through proxies and gateways. A model-backed search that returns no sources now counts as a failure, so the chain moves on to the next engine instead of showing an unsourced answer.
web/hosted first tries a cheaper model on the session's own provider (e.g. Opus → Haiku, GPT-5.x → GPT-5.6 Luna, Gemini Pro → Flash) and falls back to the session model itself when the host does not offer it or the call fails.
Image generation now tries the session provider's own image model first (e.g. GPT-5.x → gpt-image-2, Gemini → gemini-3-pro-image, Grok → grok-imagine-image), and a GPT-5+ session model generates images itself through the hosted image tool when its provider or proxy has no image model.
The default image model chain now uses openai/gpt-image-2, openai-codex/gpt-image-2, and the GA gemini-3-pro-image (Google and OpenRouter) instead of gpt-image-1 and the Gemini preview id.
Reduced CPU while streaming replies and tool calls: the reveal no longer deep-compares frozen leading content on every flush, streamed argument extraction no longer re-verifies the whole prefix, and deltas no longer queue extension notifications when no extension listens for message_update (#13650 by @H4vC).
Reduced CPU and allocations for in-memory reads (URLs, notebooks, converted documents), tool-result spill checks, write read-projection guards, and hashline prefix stripping (#13650 by @H4vC).
Fixed
Fixed alt+p and /switch model picker latency by avoiding unnecessary catalog rebuilds
Fixed --tools with an unknown name printing a stack trace and listing only the tools left after filtering; it now prints a clean error naming unknown tools, built-in tools unavailable in the session, and the built-in and registered tools (#13623 by @H4vC)
Fixed unknown CLI flags exiting 1 with an extra "ended before completing" line instead of exiting 2 (#13623 by @H4vC)
Fixed a mistyped --model in print mode telling you to set an API key; it now suggests the closest available models (#13623 by @H4vC)
Fixed the alt+p / /switch model picker taking seconds to appear: it rebuilt the whole model catalog on every open before painting, and now re-reads it only when startup discovery is still landing or models.yml changed
Fixed tool_calladditionalContext being delivered more than once when several extension or hook handlers on the same call returned identical text (#13633 by @andrebrait)
Fixed hosted OpenAI web search on hosts that accept only string tool_choice values, such as Command Code (#13666 by @riicodespretty)
Removed
Removed the web search provider picker from omp setup; set the web model role (or keep the free default chain) instead.
[18.4.2] - 2026-09-28
Added
The shell's cp builtin accepts macOS's -c (clone where possible, else copy; same as --reflink=auto).
Changed
Removed unused timestamp metadata from model usage tracking queries to optimize database overhead
Improved session storage reliability by using atomic inode identity verification for lock management
Optimized internal role chain resolution and caching to reduce event-loop contention during judge initialization
On macOS, the shell's cp builtin now also clones (copy-on-write) when overwriting an existing file, instead of rewriting its data; the destination keeps its permissions, and hard-linked destinations are still written in place.
The find tool now fails with a timeout error after 20 seconds instead of blocking the turn when the judge model stalls.
Reduced main-thread stalls with many agents running: read code summaries now parse off the main thread, streamed tool-call snapshots no longer deep-copy growing argument text on every delta, and model-cache reads skip re-parsing unchanged rows.
Reduced CPU while an agent streams: the working-row token rate and status line no longer re-tokenize or re-resolve settings every frame, and ^ model mentions no longer rebuild the model scope per keystroke.
task and /vibe subagents now get their own Python kernel and JS/Ruby/Julia eval state instead of sharing the parent's, so agents can no longer overwrite each other's variables or reset each other's kernels.
On Windows, the shell's cp builtin now clones files (copy-on-write) on ReFS and Dev Drive volumes by default, falling back to a regular copy elsewhere; --reflink and -c no longer fail there.
Fixed the shell's cp --reflink=always emptying an existing destination when the filesystem cannot clone; the destination is now left untouched.
Fixed block-clone task isolation on Windows ReFS and Dev Drive volumes failing on files whose size is not a whole number of clusters, larger than 4 GiB, or sparse.
Fixed Google Antigravity requests failing with 429 RESOURCE_EXHAUSTED on every turn: the system prompts' RFC 2119 conventions line is reworded so the endpoint no longer rejects it (#13379 by @heshuoshuo0512)
Fixed CRLF SKILL.md files injecting raw YAML frontmatter into user-invoked and autoload skill messages (#13590).
Fixed Cursor native Grep ignoring requested context, Read negative offsets starting at the top, and Delete reporting zero-byte files (#13600).
[18.4.1] - 2026-09-28
Changed
With LSP disabled (--no-lsp or lsp.enabled: false), startup skips language-server discovery and warmup, and the welcome screen no longer shows the LSP Servers section
The first frame's status bar now renders live at the current terminal width from the cached model, thinking level, and status-line settings instead of replaying an …-filled snapshot: path and git branch are always current, the context gauge shows the window without a stale percent, git dirty counts no longer blank out when the session bar takes over, and folders that never ran omp paint the bar (and your theme) too.
Moved the composer startup cache (theme, welcome, recent sessions, LSP rows, status bar) from per-project JSON files under cache/composer/ to a single cache/composer.db; the old directory is no longer read and can be deleted.
Improved interactive startup: the session status bar appears sooner because retry.fallbackChains validation, the background model-catalog refresh, and project daemon registration no longer block the first session frame.
Reduced CPU use from subagent HUD repaints during active sessions (#13245 by @iliaal).
Clarified which provider transports honor thinkingBudgets and that local OpenAI-compatible models use effort controls instead (#13503).
/fork now prints how to resume the session it leaves behind (omp --resume <id> or /resume <id>) instead of the new transcript's filename (#13338 by @LlemonDuck)
/vibe status checks no longer redraw every worker the director killed: vibe_wait and vibe_list leave killed sessions off the wall with a N killed hidden count, and vibe_list collapses them to one trailing line naming the most recent (transcripts stay at history://<id>) (#13073 by @igasmi).
Fixed
Fixed find exhausting memory on trees with many matching lines: its keyword scan now counts matches as they stream in, holding a few hundred MiB where a 5-million-line tree took several GiB, and finishes faster (#13495)
Fixed a native compaction speculation that failed for good turning off background compaction for the rest of the cycle. With compaction.methodOrder such as ["remote", "soft"], speculation now moves to the next configured method and the threshold pass keeps deferring to it, instead of running that method on the blocking path (#13478 by @andrebrait).
Extensions that register bash through the legacy createBashTool/createBashToolDefinition with a spawnHook no longer make every bash call fail with ready and env require a service name. (#13461 by @sjawhar)
Fixed /new with automatic thinking starting the new session at the previous session's classified effort instead of the provisional level, both in its first thinking_level_change entry and on the wire (#13383)
Fixed a corrupt agent.db crashing every launch with no such table (for example hint_usage) instead of being preserved and recreated (#13530 by @Hunter-124)
Fixed edit rejecting a one-line replacement of an if opener, case label, or function signature with another of the same shape as an "ambiguous boundary" whenever another edit in the same batch broke the file's syntax; it now applies with the usual syntax-error warning. (#13522)
Jujutsu status and diffs now report renames and copies (R/C, rename from/rename to) the way jj status and jj diff do, instead of a delete plus an add (#13406 by @sjawhar).
Fixed a subagent that finished before a later step failed (such as the isolation merge) losing its evidence: the task result now names the child's exit status and agent:// output, keeps that output on disk, and is marked as an error (#13557 by @aktanazat)
Fixed SDK sessions created with agentDir loading user rules (rules/, RULES.md) and custom tools from the default agent dir instead of that agentDir; discoverCustomToolPaths and discoverAndLoadCustomTools accept an agentDir argument (#13558 by @aktanazat)
Reduced daemon broker metadata writes for historical services when owners reconnect or the broker restarts (#13471 by @Dante-dan).
Fixed compaction re-emitting the whole transcript into native scrollback when display.collapseCompacted is off, for both the automatic compaction-end and the manual /compact path (#12140, #13235 by @holny)
Subagents can submit their preceding report with a data-less yield after a finish reminder (#12837 by @iliaal).
Fixed session dispose losing the final message and exit record on SQL/indexed session storage (#13415 by @sjawhar)
Fixed the recall, reflect, and memory_edit tool descriptions naming each other by bare name when those tools are reachable only as xd:// devices (#13207 by @andrebrait).
Listed the directories searched for agent files in the task tool's unknown-agent error, with the home directory shortened to ~
Fixed sessions and subagents of the same agent in different working directories (such as one git worktree per task) never sharing the cached Anthropic system prompt: context files, workspace tree, workspace roots, and other directory-specific sections now come after the static system prompt, which stays a cache hit across directories (#13104)
Fixed the startup "What's New" heading and config warnings keeping the dark palette on a light terminal: they were colored before the terminal reported its background, so the heading rendered near-white on white. Both now resolve their color at render time and follow the auto theme switch
Fixed idle display: true custom messages (such as extension pi.sendMessage notices sent without starting a turn) not appearing in the transcript until the session was reloaded (#12718 by @Broglah1).
Fixed omp usage ignoring usage providers registered by extensions, which left those accounts listed as having no usage data; omp usage now also accepts -e/--extension and --no-extensions (#13579)
Fixed a task model saved in /agents being ignored for the rest of the session after an Alt+P session-only pick (#13345).
Fixed tool calls made through an xd:// alias being recorded under the alias, which made OpenAI/OpenRouter Responses replay reject every later request (#13352).
Fixed pasted images in skill invocations not reaching the configured vision model when the main model supports only text (#13480).
A provider listed in disabledProviders no longer answers through a retry fallback chain, an advisor or a restored model, and gets no credential however one of its models was selected (#13194 by @sjawhar).
Fixed glob silently clamping limit above 200 while advising Use limit=<clamped> retries: a clamped request is now disclosed up front and the "Use limit=" advice is dropped once the hard cap is reached (#13263)
Fixed subagents that stop to wait for their own background job failing with a missing yield instead of waiting for the job (#13305).
Fixed a failed session append leaving partial bytes behind on Windows, where ftruncate is refused on the append handle: the rollback now reopens the file without O_APPEND and verifies it is still the same file before truncating (#13362 by @jchanghong023)
Fixed plugin installation failing on Windows outside developer mode by linking the plugin through a directory junction, matching the marketplace link (#13364 by @jchanghong023)
Fixed the grep tool searching subdirectories for globs whose base path merely resolved to the cwd: only globs spelled without a directory prefix (like *.ts) now match at any depth, while ./*.ts and absolute paths stay scoped to their directory (#13360 by @jchanghong023)
Fixed the ask tool's "Other (type your own)" prompt sending RPC and SDK clients a terminal-rendered title (options with icon glyphs, lines clipped to the terminal width) instead of the question text; the interactive TUI's own ask dialog is unaffected (#13477 by @andrebrait)
Fixed prewalk targets registered by extensions resolving before their provider was loaded. The hand-off now retries after extension registration, preserves role fallback order, and refreshes a cold runtime provider when needed.
Fixed saving settings on Windows through a symlinked config.yml whose target contains .. writing a file other than the one the link reads, and agent.db staying open after its storage is closed (#13351 by @Vortex727)
Fixed grep line ranges (path:N-M) returning out-of-range lines for absolute paths with ./ or .. segments (#13296 by @pedropaulovc).
Fixed service requests the project's service broker cannot parse, such as commands added by a newer omp after an update, waiting 30 seconds to time out; the broker now rejects them immediately with the reason (#13301 by @eggpeat).
Fixed sessions stopping on "Anthropic stream stalled while waiting for the next event" (and other mid-stream stalls, HTTP/2 resets, premature closes, or sockets closed mid-response) when the connection died after the reply's text had already rendered. Replay was refused to avoid duplicating shown text and the tool-turn continuation needed a tool call, so text-only turns had no recovery; the partial turn is now kept and the model is asked to continue from where it stopped, up to 3 times per prompt when retry.enabled is on (#13333 by @jerryfane)
Fixed editing one fallback chain in the model hub, or one agent in /agents, saving every chain or agent a --config overlay supplies into config.yml (#13308 by @Vortex727)
Fixed omp install --dry-run <local-path> and omp plugin link --dry-run linking the plugin and writing the lockfile instead of only previewing (#13241).
Sessions containing assistant messages with no recorded usage now open with that usage counted as zero, instead of crashing on load with undefined is not an object (evaluating 'usage.cacheRead') (#13386 by @ParadaCarleton).
Fixed rules with an astCondition and interruptMode: always letting the matching write or edit run before the interrupt, so the file changed on disk even though the rule fired; the call is now blocked before it executes (#13303 by @JYeswak)
Fixed rules not applying to tool calls made from inside eval (for example tool.write(...)), which ran without any rule check; they are now checked the same way as direct calls (#13316 by @JYeswak)
Fixed bash calls whose optional fields arrive filled with empty values being rejected as service starts (#13182).
Fixed keyless vLLM providers failing every request with "No API key found" (#13246).
Fixed the Agent Hub usage gauge measuring a subagent against its startup model's context window after a fallback model swap (#13061).
Fixed HTML session exports failing to render offline or under a strict script CSP; the viewer libraries are now inlined (#12948).
Fixed a module created with write leaving the importing file stuck on TS2307 in typescript-language-server (#12925).
Fixed startup waiting up to 10s on an unresponsive LM Studio loopback probe; the probe now gives up after 250ms like Ollama and llama.cpp (#12945).
The interactive /usage dashboard keeps connected accounts visible when some or all usage lookups fail, showing unavailable usage instead of hiding accounts (#13476 by @aktanazat).
Fixed multiline pastes splitting into separate submissions after a terminal drops bracketed-paste mode, and text typed right after Enter being erased by the post-submit clear (#13440 by @Dante-dan).
Fixed subagents never compacting when the parent sets compaction.midTurnEnabled: false; a subagent's run is a single turn, so subagents keep mid-run compaction on unless a spawn overrides it (#13212).
Fixed the exit resume hint so the omp --resume <id> command prints on its own line, letting triple-click select just the command (#12748 by @F0Rextasy).
[18.4.0] - 2026-09-28
Added
Added the telemetry.otlpExportEnabled setting under Settings → Providers → Privacy to disable OTLP trace, log, and metric export even when OTEL_* endpoints are configured; exporting remains enabled by default.
Added a first-launch warning when Python evaluation is enabled but no working Python interpreter is available, with guidance for configuring python.interpreter and checking the installation with omp setup python --check.
Changed
Updated omp stats and /stats to open the redesigned dashboard immediately while session data synchronizes in the background with live progress; --json and --summary continue to synchronize before producing output.
Replaced the stats dashboard’s Behavior page with a Frustration page that can classify messages using the judge model role, showing an estimated cost before analysis and recording /stats spending in the current session.
Clarified the eval tool documentation to explain that its kernel may be shared with the parent session and concurrent task subagents.
Fixed
Fixed /tree reopening saved Ask results instead of navigating past them when an optional preview was saved as null.
Fixed the legacy createGrepTool() API when searching with both a file path and a glob filter.
Improved task and subagent reliability: eligible saved usage resets are now redeemed automatically when polling is throttled or transient failures occur, concurrent tasks share confirmed resets, headless subagents retain assignments across session transitions, tagged ^model agents are available to nested subagents, and wait returns promptly with information about still-running work when no owned jobs are available.
Fixed SDK requests using ApiKeyResolver to wait for a nearby healthy credential when a drained account’s quota block is about to expire, instead of immediately failing with a multi-hour quota error.
Fixed Anthropic requests failing after native compaction when experimental context notes were enabled.
Fixed Windows path handling for 8.3 short paths, including project-directory detection and home-directory display in status, tool labels, and errors.
Fixed editPUT >N producing syntactically invalid code when inserting shallower constructs near closing braces.
Fixed Windows one-shot commands, including omp update, incorrectly reporting successful completion as an error; also fixed this behavior when no user npm or Bun configuration file exists.
Fixed Cursor sessions under-reporting token usage and cost, compacting based on the wrong context measurement, and applying shell-command timeouts in the wrong units.
Updated goal mode to wait for user input when all remaining todos are blocked instead of repeatedly requesting approval.
Fixed pi-background-tasks 2.6.0 and later failing to load due to a missing legacy pi-ai compatibility export.
Fixed blob broker requests when PI_PROXY is configured.
Fixed generate_image reporting the catalog model instead of the image model actually used by the ChatGPT/Codex backend; saved image metadata now reflects the provider-returned size and quality.
Fixed fast-model fallback selection so it no longer chooses Gemini or MiniMax models when no smol role is configured.
Fixed extension tool renderers using upstream pi’s renderCall(args, theme, context) signature failing to render.
Fixed Nix flake and NixOS module builds failing because the native package version stamp was not recognized.
Fixed Nix dependency-lock checks failing after obsolete stats chart dependencies were removed.
[18.3.5] - 2026-09-27
Added
Added API-key-billed OpenAI Responses web search (openai/gpt-6-luna, then openai/gpt-5.6-luna), tried after every Codex entry in the default search fallback chain so ChatGPT-subscription search is exhausted before any API usage is billed (#13467 by @anatoli-tsinovoy).
Added prompt-cache warming, ported from earendil-works/pi: shortly before a prompt-cache entry expires, the main agent loop replays its last request and cuts the replay off at the first generated token, so idle gaps no longer force a full-prefix cache re-write. A refresh fires only when the expected avoided-miss cost clears its cost by $0.05, and warming stops as soon as a refresh misses the cache. Controlled by providers.cacheWarming (off / streaming / idle, default idle); idle warming covers 5-minute entries only, and models without a declared promptCache lifetime are never warmed. Extensions can override each decision through the cache_warming_decision event (#12699 by @KamijoToma).
[18.3.4] - 2026-09-27
Breaking Changes
Replaced the task tool's complexity field with solutionSpace, a description of how open-ended the subtask is; auto thinking for spawned subagents now picks effort from it alone
Changed
auto thinking now picks effort for every turn by how open-ended the problem is, so large volumes of mechanical work no longer raise it
Fixed
Fixed agents looping for hours when every turn spends the whole output limit on reasoning: length-stop retries now tell the model its reasoning was discarded and to act in smaller steps, and a subagent whose length-stop recovery gives up now fails with that error instead of being re-prompted into the same loop
Fixed tagging a model with ^ mid-session dropping the provider prompt cache for every following turn: new m<N> pseudonyms now arrive as a hidden session notice instead of rewriting the task description, which only absorbs them at a base-prompt rebuild
[18.3.3] - 2026-09-27
Added
Added a unified predictive text engine with N-gram, SmolLM2, and macOS native providers, including cross-engine blending, background model downloads, and a cross-process prediction daemon.
Added the omp predict command for evaluating completion performance and support for ingesting existing Claude Code and Codex prompt histories to bootstrap predictions on new installations.
Added omp skill list [dir] [--json] to report skills resolved for a session directory, including discovery warnings in JSON output.
Added a centralized progress display for background tool and model downloads, including support for downloading the SmolLM2-135M word-completion model.
Added dynamic evaluation guidance through hidden session notices.
Added a required complexity rationale to the task tool to improve automatic thinking-depth selection.
Agents using task or bash now receive the wait tool for background-process coordination, and subagents can receive it when explicitly requested.
Added context-aware suggestions to empty composers based on agent activity and effort.
Added optional global or per-project memory scopes to the retain and learn tools when Mnemopi scoping is enabled.
Added /btw to focused subagent views for asking questions about that agent's transcript with separate side-conversation history.
Changed
Completion behavior now uses the N-gram engine for standard auto completion across platforms, with blended N-gram and SmolLM confidence scoring where applicable; the SmolLM2 model uses a 145 MB GGUF (Q8_0) download and is prefetched only when explicitly activated.
Updated spelling.autocomplete to use an enum-based engine configuration.
Completion ghost text is now preserved through manual keystrokes.
Window input actions now default to background execution; set takeover: true to opt into foreground activation, with clarified cross-platform coordinate and activation behavior.
omp tiny-models download can now download the word-completion model.
Updated /play help, read-tool summaries, platform-aware shortcut labels, and other UI hints for clearer interaction guidance.
Updated the empty-submit behavior to account for live-steered messages and surface pending live-steering status in the UI.
ps --all now includes exited global services, while the default view shows live global services.
Orchestrator task documentation now follows a Target/Change/Acceptance format.
Slash-command and hint usage tracking is now persistent and namespaced.
Fixed
Preserved MCP structuredContent in live tool-result details so evaluation callers can consume server data without reparsing model-facing JSON; spilled results continue to retain an artifact reference without duplicating the payload in session history.
Fixed Collab hosts becoming unable to reclaim a room after a brief network interruption; hosts now retry room recovery without losing guests or queued updates.
Fixed one-shot commands that stopped before completing, such as omp config set on a fresh Windows profile, incorrectly exiting successfully without output; they now report failure with diagnostic guidance.
[18.3.2] - 2026-09-25
Added
Added ctx.agent to the extension context, reporting whether the session is the top-level agent or a subagent, plus its registry id, agent definition name, task depth and parent id, so handlers rebound to subagent sessions can tell which agent they serve (#13314 by @andrebrait)
Added tracking of Anthropic's usage-limit wrap-up allowance for Claude subscription accounts: after the 5-hour or weekly limit is reached, the status line and /slow status show limit reached · wrapping up · resets HH:MM, and the agent is told to wrap up when neither low priority nor extra usage will continue the work (#13340 by @H4vC)
Changed
providers.anthropic.slowMode now controls only the low-priority lane; the usage-limit wrap-up allowance is tracked for every first-party Claude subscription account (#13340 by @H4vC)
Enter on the /model hub sidebar now moves focus to the model list (like →) instead of acting on the highlighted row (#13347 by @H4vC)
Fixed
Fixed the Windows bash tool exporting TEMP, TMP, and TMPDIR with 8.3 short names such as ADMINI~1, so they now match the long-form pwd/$PWD after cd "$TEMP" (#13265 by @CoderTCY)
edit and write no longer refuse handwritten files named generated.go, generated.ts, generated.js, or generated.py; these are treated as auto-generated only when their header carries a generated-code marker (#13138, #13139 by @radkawar)
Fixed the edit tool warning that valid Go 1.26 new(expr) calls (e.g. new(f(x))) introduced a syntax error, and ast_grep/ast_edit reporting parse errors on them (#13148, #13149 by @radkawar)
Fixed hashline PUT N* / CUT N* on the first statement of a block (for example a Go or Python function that opens with an if) also replacing or deleting every statement after it (#13153, #13154 by @radkawar)
Fixed the Full output: artifact:// link on large background bash and eval results pointing at a truncated copy with […elided…] gaps instead of the complete output (#13142, #13143 by @radkawar)
Fixed grep paths like dir/*.go also matching files in subdirectories of dir (#13146, #13150 by @radkawar)
Fixed auto-compaction re-sending a failed native (server-side) compaction on every turn, re-reading the full context each time; after a failure a retry would repeat, the next configured method runs instead until a compaction succeeds (#13310 by @alphastorm)
Fixed a /slow off session resending requests indefinitely when another session had activated the shared Anthropic low-priority lane (#13340 by @H4vC)
[18.3.1] - 2026-09-25
Added
Added a filter to the Esc Esc rewind selector: press f and type to show only items containing every word, then Enter to rewind (#13295 by @H4vC)
Added native filesystem support for local:// and omp:// URLs across file-search, content-search, AST, shell, and related tools, including support for virtual working directories.
Added a native cp builtin for filesystem copy operations.
Added IDA Pro integration for opening executables and IDA databases, browsing pseudocode, assembly, imports, exports, strings, and cross-references, and performing database-aware actions such as renaming, commenting, type editing, function creation, saving, and persistent Python execution.
Added shared, project-scoped IDA database access with broker-managed host processes, configurable concurrency and idle cleanup via ida.maxOpen and ida.idleCloseSec, automatic autosaving, and universal Mach-O architecture selection with :@<arch> syntax and host-architecture detection. IDA features can be configured with ida.enabled, ida.python, and ida.installDir.
Added the /slow [on|off|status] command for opting into lower-priority service tiers on OpenAI, Google, and Anthropic subscription sessions, including automatic continuation when Anthropic session limits are reached.
Added the providers.openaiLiveSteering setting to control whether input can be delivered while a response is in progress.
Added session-wide approval for configuration changes through an Always for this session option in cfg:// prompts, with clear timeout handling for unanswered prompts.
Added the cfg:// protocol and a configuration registry for reading, modifying, unsetting, and reactively managing layered agent settings with approval and precedence feedback.
Added paged reading for large files, with metadata that allows clients to recover and continue displaying results.
Added per-agent compaction thresholds for task and evaluation subagents, configurable as percentages or fixed token limits without changing the main session threshold.
Added trusted additional context for extension and hook tool results, including ctx.addAdditionalContext(), allowing instructions to reach the model without altering displayed tool results.
Added dictation support to /btw follow-up input.
Added support for multiple simultaneous browser instances, including concurrent Chrome and Edge connections.
Added detailed benchmark phases for measuring single-user throughput, parallel scaling, and prefill performance, with automatic prefill sizing based on model context limits.
Added opt-in CUDA support to the Nix package for tiny-model inference through ONNX Runtime.
Added reliable RPC prompt lifecycle reporting with prompt_result, structured provider errors, session-settled state, prompt identifiers, event filtering, and --no-ui support for non-interactive hosts.
Added RPC session management through open_session, plus corresponding TypeScript and Python client APIs including openSession, setEventFilter, onPromptResult, onSessionSettled, and waitForSettled.
Added attachment:// and conflict:// resource URL handlers.
Added a per-server MCP instructions: false option to keep a server's guidance out of the system prompt while retaining its tools.
Added stale tool-result eviction for advisors: before each review, an advisor replaces its own read/grep/glob output from reviews older than the latest one with a short placeholder, so it stops re-sending that output on every request. The deltas it reviews, the notes it wrote, and other tool results such as recall are never touched. Turn it off with advisor.evictStaleResults (#13238 by @alnaggar-dev)
Changed
Improved recovery from output-length and context-window limits so truncated but actionable turns can be retained and retries are handled more accurately.
Shortened the default system prompt by approximately 150 tokens while preserving its guidance.
Improved Anthropic fallback handling so credit tokens and signed thinking context are preserved across same-provider fallbacks.
Improved filesystem safety and path consistency across virtual URL protocols, including symlink and containment validation and correct Windows long-path reporting.
Improved IDA database resource management with project sharing, bounded concurrency, idle cleanup, autosave, and clearer database status in listings.
Improved runtime configuration behavior with type-safe layered settings, live updates, and safe sequential saves.
Improved authentication and credential management to support live broker and credential-store changes.
Fixed
Fixed concurrent project access by enforcing file locking across processes.
Fixed Windows file reads with line selectors such as :1-40.
Fixed omp update and startup update checks to honor configured npm registries, including scoped registries and authentication tokens.
Fixed invalid auto-QA grievance reports blocking the rest of the upload queue; rejected reports are now surfaced with the server error while other reports continue.
Fixed advisor reviews making unnecessary follow-up requests, losing context after pruning, using the wrong thinking effort, or sending excessively large edit diffs.
Fixed /login crashes in source-link and development installs after extension loading.
Fixed retry fallback loops that could continue indefinitely when the fallback resolved to the same effective request.
Fixed setup wizard detection for Gemini web search when Antigravity OAuth is active.
Fixed headless print mode failing to complete an advisor review when a configured fallback reviewer was available.
Fixed embedded shell startup when the inherited working directory had been deleted.
Fixed Codex usage displays showing stale subscription plans and corrected usage views that combined separate quota limits.
Fixed explicit model and provider selections bypassing disabledProviders; disabled providers are now refused and skipped during fallback.
Fixed memory storage errors so failed items and underlying storage failures are identified.
Fixed Anthropic server-side fallback requests using invalid model names.
Fixed large-output model requests failing near the context limit by adjusting the output allowance to the remaining context.
Fixed tool references in system prompts for tools exposed only through xd:// devices.
Fixed dictation remaining active after a recording restart during transcription.
Fixed automatic account sign-outs going unannounced; sessions now report the affected account and login action through interactive, print, JSON, and RPC output.
Fixed duplicate MCP tool listings in the system prompt.
Fixed supervised service exits being missed or repeatedly replayed instead of being delivered to the session that started the service.
Fixed memory backend failures to identify the affected item and underlying storage error.
Fixed write xd://<tool> validation behavior so devices can return precise schema-mismatch responses.
[18.3.0] - 2026-09-24
Breaking Changes
The hub tool is deprecated; use wait, write, and the proc:// protocols instead.
The irc.timeoutMs configuration setting has been removed.
The edit mode syntax now uses *** Edit File:, *** Find, and *** Replace headers instead of SM: headers.
Cancelling a process through write now requires an explicit proc://<id>/kill target; other write targets validate content normally.
Added
Added omp:// documentation scopes for find and omp find. Search all embedded harness documentation with omp:// or a specific document with omp://<file>.md; results are returned as canonical URLs that read can open, including range selectors.
Added extension support for ephemeral, /btw-style side turns through ctx.runEphemeralTurn(), with optional tool suppression and output/context limits without adding the turn to session history.
Added background job and service management through the wait tool and proc:// URLs, including supervised services in bash and direct agent messaging through agent:// write targets.
Added *** Insert Before and *** Insert After edit operations for adding lines without replacing existing code.
Added the toks command for offline token counting, including support for Jev (TypeSafe Jev 1.13) encodings.
Added automatic discovery of Apple Foundation Models on supported Apple silicon devices.
Added /changelog last [N] for viewing the latest release or a selected number of recent releases.
Added terminal-based OAuth authentication with omp login, including browser-assisted login, account and organization details, and automatic model discovery refresh. Added provider support for org-scoped-identity, oauth-token-env, and per-account OAuth priority/reserve policies through auth.accountPolicies, with policy state shown by omp usage.
Added the daybreak badge to omp usage for enabled accounts.
Added /export and /usage to focused subagent views for exporting a focused transcript and viewing account usage without returning to the main session.
Pasted clipboard images are now saved in the session artifact directory, allowing agents to read, copy, or upload them by file path.
Added /annotate for attaching notes to diffs, replies, session messages, files, or quoted text and inserting or sending those notes in prompts and reviews.
Added configurable MCP startup behavior through MCP_STARTUP_TIMEOUT_MS/mcp.startupTimeoutMs and OMP_MCP_REQUIRE_READY=1, allowing headless runs to require MCP servers to become ready before the first turn.
Added native judgment usage reporting, including error stop reasons and messages, and added openrouter/~typesafe/jev-latest as a native judge candidate.
Changed
Session compaction now supports native Anthropic snapshot branches and rewinds.
The default bash.autoBackground.strategy is now catalog.
The Launch configuration group has been renamed to Services.
Terminal OAuth behavior is now consistent between omp login and omp auth-broker login.
Judgment fallback now uses only native candidates, preventing prompted models from replacing failed native judges.
Browser screenshot comparisons now tolerate minor rasterizer differences.
Fixed
Fixed credential-aware API key resolution during authentication rotation.
Fixed comma-separated line selectors in read, grep paths, and fetch; selectors now read the requested range, while a bare number selects only that line.
Fixed write reporting JavaScript character counts instead of UTF-8 byte counts.
Fixed background job and service status reporting, including incorrect durations, reused job IDs, stale logs after named-service restarts, and foreground calls incorrectly appearing as background jobs.
Fixed wait and agent messaging so completed subagent results and peer messages are delivered reliably, including when a wait is interrupted by an incoming message.
Fixed headless print mode dropping or silently ignoring MCP servers that start slowly; it now waits within the configured timeout and warns when a server is not ready.
Fixed reader-mode fetch sending inline SVG icons and base64 images as unreadable model input; alt text is retained instead.
Fixed long non-Latin judged TTSR output exceeding token limits by applying token-aware truncation.
[18.2.11] - 2026-09-23
Fixed
Fixed nested eval Todo updates not being reflected by the Todo tracker, including cases where a cell fails after committing an update.
Fixed strict-mode structured-output validation for JSON Schemas without a root type, preserving their items and required keywords.
Improved streamed TTSR whole-buffer matching to avoid repeated scans from the beginning of the buffer.
Fixed plural browser queries when compiled binaries provide shallow stack traces.
Fixed browser tab.fill timing out on pages whose animation frames stall.
Fixed the first LSP diagnostics request returning no results while a newly started language server is still analyzing.
/shake thinking now reports the number of tokens freed.
[18.2.10] - 2026-09-22
Added
Added live benchmark results table with real-time model ranking and per-kind performance metrics
Added dedicated prefill throughput reporting for prefill-focused benchmarks
Added /record slash command to capture terminal sessions as replayable .ompcast files
Added omp play CLI for terminal-based playback of session recordings
Added intent descriptions to judgment batching
Added live progress tracking for judgment batches in the TUI
Changed
Refined AI-assisted git staging verification to reduce false positives
Updated omp bench default profile to chat and improved CLI flag documentation
Coalesced judgment batch drain operations for better performance under high load
[18.2.9] - 2026-09-22
Added
Added Claude saved resets to usage views and /usage reset, with automatic blocked-limit recovery and expiring-reset redemption controlled by claudeResets.
Added support for searching embedded harness documentation with find and omp find using omp:// scopes, including file-specific searches and :start-end selectors; results open directly through canonical omp:// URLs.
Changed
Updated server-side fallback documentation and logic to target claude-opus-5-5
Added support for claude-opus-5-5 to model priority registry
Updated the read tool guidance to decode images inline by default and require an explicit :img selector for SVG rendering.
Improved model discovery and fallback behavior: authentication failures are surfaced in the /models hub, and models without a matching role-specific fallback now use the default fallback chain.
Improved resilience for subagents by retrying provider stream failures that occur after partial output and preserving configured ordered model fallbacks at startup.
MCP OAuth with Google issuers now requests offline access so refresh tokens can be issued; repeated auth-broker token rotations also preserve the required refresh and client metadata.
MCP servers from omp-plugins now expand ${CLAUDE_PLUGIN_ROOT} and ${OMP_PLUGIN_ROOT} in commands, arguments, and working directories.
/review now uses the session's current working directory after /move or /wt.
Pasted and dragged image files now retain their original filesystem paths so the agent can act on the source files directly.
Custom sessions can now be moved across filesystems without losing transcripts or artifacts.
hub jobs now returns a compact, non-consuming status summary instead of replaying completed output or consuming pending auto-delivery.
The display-reset shortcut now works while the ask dialog has keyboard focus, and tab.press() provides a clear error for the legacy argument order.
Wayland keyboard input now follows the compositor's active XKB layout instead of assuming a US layout.
LSP diagnostics now refresh when watched files are created or deleted and after a server reload.
Compiled bytecode binaries now start correctly when bundled dependencies use import.meta.resolve.
Fixed
Fixed JavaScript eval assignments in cells containing top-level await so they persist into subsequent cells.
Fixed skill hints becoming out of sync with the active prompt after discarded rebuilds and in advisor sessions.
Restored pi.pi.askToolRenderer for extensions that replace the built-in ask tool, preserving native rendering.
Fixed npm plugin upgrades and reinstalls leaving stale or duplicate manifest entries that could break bun install.
Fixed eval waits longer than approximately 24.8 days returning immediately because of native timer overflow.
Fixed deleted sessions being resurrected from stale rewrite backups.
Fixed /collab relay connections honoring HTTPS_PROXY and NO_PROXY.
Fixed sessions remaining blocked by queued turns or Hindsight auto-recall after disposal or cancellation.
Fixed edits to auto-generated files aborting the entire turn; they now return a tool-scoped error.
Fixed Edit handling of invalid overlapping selections in multibyte text so the worker reports a match error instead of panicking.
Fixed local memory consolidation on case-insensitive filesystems when project path casing changes between launches.
Fixed first-time Xcode MCP connections on macOS by allowing the signed omp binary to request Apple Events permission.
Fixed stale or duplicated TTSR trigger events during streaming.
Fixed MCP OAuth credentials retaining their refresh endpoint and client metadata across repeated token rotations.
Fixed local model and provider retry behavior for streamed and partially buffered failures.
Fixed memory and session cleanup issues that could leave stale artifacts or inconsistent state.
lsp.formatOnWrite now prefers a dedicated isLinter formatter server when a type-checker also claims the file (#12847 by @roboomp).
/extensions no longer shows OMP-installed marketplace capabilities as disabled behind the foreign-plugin opt-in gate (#12849 by @roboomp).
Removed
Removed support for image query parameters (?q=) and bare image paths in the read tool.
Custom models now honor provider-level transport: pi-native and send requests to the native gateway (#12845 by @joshrzemien).
Fixed live models that match no retry.fallbackChains role primary (e.g. Fable after /model) resolving no chain, so a wait longer than retry.maxDelayMs aborted the session instead of walking default (#12421).
Fixed skill hints drifting from the active prompt after discarded rebuilds or in advisor sessions (#12148 by @jerome-benoit).
Restored askToolRenderer on the extension namespace (pi.pi.askToolRenderer) after the pi-tui renderer migration dropped it, so extensions that shadow the built-in ask tool can keep the native rendering again. (#12694 by @xiechimon)
Model discovery rejected with 401/403 now surfaces an authentication error in the /models hub instead of a silently empty model list. (#12436 by @xiechimon)
Pasted or dragged image files now reach the agent with their original filesystem path, so it can read and act on the source file directly; clipboard screenshots keep working unchanged. (#12404 by @xiechimon)
/review now runs VCS operations against the live session cwd after /move or /wt instead of the session-start checkout (#12712 by @F0Rextasy).
Reinstalling or upgrading an npm plugin no longer leaves stale or duplicate manifest edges that broke bun install (#12727 by @F0Rextasy).
TTSR now emits one ttsr_triggered event per streamed violation instead of one per evaluation pass (#12729 by @F0Rextasy).
Eval wait() timeouts above ~24.8 days no longer overflow the native timer and return immediately (#12731 by @F0Rextasy).
MCP OAuth against Google issuers now requests access_type=offline so refresh tokens are issued (#12737 by @F0Rextasy).
Deleting a session now also removes its stale .bak rewrite backups so the picker cannot resurrect it (#12746 by @F0Rextasy).
/collab relay WebSockets now honor HTTPS_PROXY/NO_PROXY like other transports (#12762 by @jacobcolyvan).
tab.press() now rejects the inverted press(selector, key) call with a hint naming the corrected (key, { selector }) form, instead of the key parser's opaque Unknown key: <selector> (#12136) (#12266 by @danilouchoa).
The display-reset shortcut (app.display.reset, alt+l by default) now fires while the ask dialog holds keyboard focus, instead of being dropped silently; the #11215 global-listener promotion covered the other four editor display actions but missed this one (#12217) (#12262 by @danilouchoa).
Custom sessions can move across filesystems without losing their transcript or artifacts (#12360, #12378 by @Dante-dan).
Fixed hub jobs replaying full output for every settled job and consuming pending auto-delivery; it now returns a compact non-consuming status summary (#12547 by @pedropaulovc).
Compiled bytecode binaries now start correctly when bundled dependencies use import.meta.resolve (#12133 by @andrebrait).
Subagents now retry provider stream errors that arrive after buffered partial output, and such failures are reported as transport errors instead of schema-invalid results (#12752 by @bse-ai).
Edits targeting auto-generated files now return a tool-scoped rejection instead of aborting the whole turn (#12499 by @Dante-dan).
Subagents with an ordered model fallback keep it reachable on startup when the parent default role shares the same primary model (#12377 by @Dante-dan).
omp-plugins MCP servers now substitute ${CLAUDE_PLUGIN_ROOT}/${OMP_PLUGIN_ROOT} in command, args, and cwd (#12801 by @holny).
[18.2.8] - 2026-09-21
Added
Added comprehensive browser automation tools for accessibility auditing, React inspection, console and network monitoring, performance tracing, semantic DOM queries, tab management, screen recording with cursor overlays, downloads, custom initialization scripts, persistent storage, and WebMCP cross-frame tool discovery.
Added support for buffered cloud transcription with OpenAI-compatible models.
Added visual change detection for video processing, including FFMPEG analysis and SVG overlays.
Added support for declaring native judges through custom providers using the typesafe and openrouter-decisions API values, with configurable base URLs, API keys, and headers.
Changed
Expanded browser security and resilience controls with configurable HTTPS error handling, domain allow-listing, and automatic tab recycling when security-sensitive state changes.
Updated background job notifications to deliver output as follow-up messages and discourage unnecessary polling.
Expanded the bash tool's documented auxiliary utilities and removed its truncation footer notice.
Fixed
Improved responsiveness in long sessions by significantly reducing the time required to scan provider context for credential patterns.
Fixed native judges failing to honor configured request headers, enabling authenticated and header-routed judge providers to work as configured.
Fixed LSP requests hanging when aborted while waiting for an earlier write to complete.
[18.2.7] - 2026-09-21
Breaking Changes
Image-generation overrides now use model selectors, and web-search CLI overrides use --model instead of --provider.
Removed the bash tool's env parameter.
Eval judge(state, questions) is now awaited and returns answers directly; JudgmentHandle and judgment support in wait() have been removed.
Added
Added find tool for semantic workspace searching, allowing agents to locate behaviors and symbols using natural language
Added find CLI command for performing semantic workspace searches
Added batch evaluation with judge_batch(states, questions) / judgeBatch(...), including bounded background execution, incremental result and status access, per-item failure reporting, and the ability to wait for or reattach to jobs across turns or after a reset.
Added the jevify magic keyword to have the agent establish an evaluation rubric before classifying bulk items and inspect only items flagged by the judge.
Added omp web-search as an alias for omp search.
Added tui.titleSpinner configuration to select the terminal-title working-state spinner (braille, dots, or line).
Added Handlebars-based system prompt templates through SYSTEM_TEMPLATE.md, --system-prompt-template, and the SDK, with access to live settings and tool data.
Added configurable image, web, speech, dictation, judge, and memory model roles with ordered fallbacks, legacy backend-setting migration, and omp models --kind filtering.
Added native OpenRouter image generation, model-selected web-plugin search, and live discovery of TypeSafe judge models.
Changed
Updated agent system prompts to prioritize the find tool over grep and glob for behavioral lookups
Refined system prompt instructions for XML tag handling and agent persona
Updated sloppy edit tool syntax to use plain text headers instead of XML tags
Improved startup performance by validating provider-qualified model selectors against only the relevant provider catalog.
Reduced launch time for npm and compiled builds by embedding the model catalog more efficiently.
Fixed
Fixed system prompt configuration validation so systemPromptTemplate and customSystemPrompt cannot conflict with a full systemPrompt replacement, including when values are empty.
Added browser-relay support for listing eligible pages without attaching to or claiming them.
Fixed Codex compatibility with the sloppy edit tool.
Capped concurrent eval judge and completion requests to prevent large fan-outs from overwhelming judge and fallback models.
Temporarily avoids retrying judgment requests with credentials that recently failed due to authorization or billing errors.
Fixed image and speech fallback models disappearing after discovery and eliminated incorrect incompatibility warnings for providers without credentials.
Fixed resume and continue flows to hide empty sessions.
Fixed edit operations that could loop after empty insertions or fail on Unicode no-op and overlapping duplicate matches.
Fixed live subagent messages being delayed by agent discovery and roster discovery looping on dot-named transcripts.
Fixed llama.cpp discovery and routing for PrismML Bonsai 2 27B GGUF models, including support for cached models and the Qwen 3.8 thinking-level ladder.
[18.2.6] - 2026-09-18
Fixed
Fixed clipboard paste stalling on an empty clipboard; image and text clipboard reads now run concurrently so the empty-clipboard status surfaces after the slower read instead of the sum of both.
Fixed memory recall blocks carrying a minute-resolution Current time stamp that dirtied the cached system prompt on every refresh; recall rows already carry dates, so the stamp is removed.
Fixed omp auth-broker token and omp auth-gateway token exiting silently without creating a token on Windows when no token file exists yet; token and config reads now use node:fs instead of Bun.file.
[18.2.5] - 2026-09-17
Breaking Changes
Moved terminal UI modules—including themes, tool renderers, chat, overlay, status-line, composer, setup wizard, and Git/PS/debug apps—to @oh-my-pi/pi-tui. The corresponding @oh-my-pi/pi-coding-agent subpaths no longer exist; names re-exported from the package root remain unchanged.
Added
Added omp stream for livestreaming terminal sessions at live.omp.sh/<your Stencil username>, with viewer chat, pane-per-session display for sessions in the same directory, screen redaction, and configurable stream.serverUrl and stream.redactPatterns settings. Use --server to override the stream server, --title to set a title, and --no-tui to retain the line-based log interface.
Added Stencil account support to /login. omp stream uses a signed-in Stencil account or STENCIL_API_KEY for channel ownership and authentication. Sensitive environment, dotenv, secrets.yml, credential-shaped, and configured pattern-matching values are redacted before screen data is transmitted.
Added faster keyless web search fallback by prioritizing the default keyless Parallel provider ahead of Perplexity.
Changed
Improved parent IRC message prompts to make interruption handling more reliable.
Improved subagent task labels and plan filenames to use concise, action-oriented descriptions.
Updated CLI byte sizes to use decimal KB units and made duration displays coarser and easier to read.
Fixed
Fixed edit auto-repair waiting up to 60 seconds when the smol model does not respond; it now times out after 20 seconds and reports repair start and timeout details.
Fixed subagents leaving queued parent messages behind after tool interruptions.
Fixed a subagent burning its whole run on yield calls that never finish it: an incremental-only yield turn no longer bypasses the request budget, and the forced final yield ends the run (#12351 by @pedropaulovc).
Fixed browser.open({ app: { relay: true } }) waiting for the full tool timeout when no relay extension is installed or reachable; it now fails promptly with an actionable error while preserving the wait for a connected extension to recover.
Fixed edit handling of ellipsis markers, inline closing tags, copy-ready corrections, and retries, including cases that could insert literal markers, misreport matches, omit the file target, or panic.
Enabled edit.enforceSeenLines by default to reject hashline edits anchored to content that was not displayed, and prevented stale-tag recovery from applying edits to a structurally different duplicate construct (#12369 by @pedropaulovc).
Fixed startup failures when the plugins directory or its manifest cannot be read; inaccessible plugin roots are now skipped with a warning.
Fixed generation token-rate displays for subagents and restored the main session's reading after switching focus.
Fixed subagent HUD labels and plan filenames being populated with example prompt text on smaller models.
Improved shell, file, session, and persistence operations to avoid unnecessary repeated work, improving responsiveness and resource usage.
[18.2.4] - 2026-09-17
Added
Added an optional live generation speed readout via composer.tokenRate, showing smoothed tokens-per-second output in the working row and keeping the rate visible between turns.
Added TypeSafe provider support through /login typesafe or TYPESAFE_API_KEY. TypeSafe can power thinking-level detection, unexpected-stop detection, and AI-assisted git staging with calibrated judgment probabilities; configure providers.judgmentProvider as auto, typesafe, or llm to select the judgment backend.
Added the judge(state, questions) evaluation helper for Python and JavaScript cell code, supporting typed choice, boolean, and score judgments. It returns a handle whose .wait() method provides answers and probabilities, using TypeSafe when configured and available or a fallback chat model otherwise.
Changed
Unified thinking-level detection, unexpected-stop detection, and AI-assisted staging around a shared judgment system with automatic fallback across configured models when TypeSafe is unavailable or cannot complete a request. AI-assisted staging now evaluates files as a single batched judgment while preserving one yes/no decision per file.