@oh-my-pi/pi-agent-core
Added
AgentToolgained the optionalhandlesToolInterruptflag: an interruptible tool that sets it (such aswait) still runs, without blocking, when a loop-owned interrupt is already queued, so it can drain the queued wake event instead of being skipped; user cancellation still skips it (#17174 by @alphastorm)
@oh-my-pi/pi-ai
Fixed
- Fixed OAuth logins shared by several processes being disabled with
invalid_grantwhen they refreshed at the same time or one of them quit mid-refresh (#17128 by @sjawhar) - Fixed transient Google 429 rate-limit and capacity responses retrying in place without blocking or rotating credentials, while daily caps and zero-entitlement limits still rotate (#17127 by @GTanger)
- Fixed Aliyun DashScope's multimodal gateway failing a turn on its intermittent
InvalidParameter400s for valid inline images ("provided URL does not appear to be valid", "Download multimodal file timed out"); they are now retried (#17101 by @shuairongzeng) - Fixed a revoked or rejected GitHub Copilot credential continuing to show its last cached usage quota instead of being dropped (#17081)
- Fixed Devin requests compressing the request body on the UI thread, which briefly froze the TUI on long conversations; requests under 1 KiB are now sent uncompressed
@oh-my-pi/pi-catalog
Added
- Added LM Studio decision models to discovery: models LM Studio reports as
type: "decision"are listed asjudgemodels served over its/v1/decisionsendpoint, alongside its chat models (#17169 by @richiestanaway)
@oh-my-pi/pi-coding-agent
Added
- Extensions in the interactive TUI can read and directly switch plan, vibe, goal, and loop modes with
ctx.sessionModesand observe changes with themode_changedevent, without submitting slash commands;extensionHandlers.modeControl: falseturns off extension-driven mode changes (#15753 by @Shadorain) - RPC hosts can capture draft-only speech-to-text with live previews when speech input is enabled, without submitting an agent turn; slow flushes have adjustable deadlines, and failed transcription does not block a session change after capture closes (#17158 by @felipe-santos-aya).
- Added
discovery.advertisedReasoningto let a custom provider opt out of the reasoning ladder its/v1/modelsrows advertise (defaulttrue);discovery: proxynow reads that ladder, itsnoneoff-switch, and an explicitreasoning: falseinstead of building every model's thinking surface from the bundled catalog reference alone (#15255, #17077 by @Youwenqwq) WATCHDOG.ymladvisor entries now acceptscope(main,subagent, orall, defaultall) to attach an advisor only to the top-level session or only to advised subagents, andincludeReasoning: falseto omit primary assistant_thinking:_blocks from advisor review deltas (#17058 by @trukhinyuri)- Added
session.worktreeScopeto keep the resume picker scoped to one directory (#17061 by @Dante-dan). - LM Studio decision models can now serve the
judgerole (modelRoles.judge: lm-studio/<model>); they answer over LM Studio's/v1/decisionsendpoint instead of being offered as chat models (#17169 by @richiestanaway) - Extensions'
getAllTools()now reportsmcpServerName,mcpToolNameandmcpReadOnlyHintfor MCP-backed tools, so an extension can tell read-only connector tools from ones that change things (#17120 by @cfpperche) - RPC:
navigate_tree(move the leaf in the same session file, optionally summarizing the abandoned branch),abort_branch_summaryandset_label, with matchingRpcClientmethods (#17138 by @andrebrait) - RPC: delta
message_updateframes (messageUpdates: "delta") now carry the block on start/end events and the message on a restart, so a client can rebuild the streaming message from deltas alone (#17137 by @andrebrait) ctx.ui.inputnow accepts{ secret: true }to mask typed characters as bullets in the TUI, forward an optionalsecrethost hint on RPCextension_ui_requestframes, and refuse plaintext form elicitation in ACP mode (#17080 by @GTanger)- Added opt-in
gc.autoCompress(default off): interactive launches start a detached, low-priorityomp gc --compress --applyat most once a day, so idle sessions are stored compressed without running the command; volumes where compression does not shrink a probe file (e.g. macOS 27) are skipped, and the latest run's output or skip reason is ingc-auto-compress.login the agent dir (#17189 by @wolfiesch) - Added
withFatLtoto the Nix package:omp.override { withFatLto = false; }linkspi-nativeswith thin LTO for faster builds (#13752 by @n3oney)
Changed
- Bundled
scoutsubagents now includeast_grepin their default tool list, matching the agent prompt's AST-search directive;scoutstays read-only, solsp(which can rename and apply code actions) is not added (#17151 by @sinhduc01) - Clearing a draft now brings back the idle recap and idle compaction it held off, a subagent view you return to gets the recap it still owed, and prompts, turn-starting messages and IRC wakes that arrive during idle compaction wait for it to finish; SDK owners can opt a session in with
AgentSession.enableIdleMaintenance({ isBlocked, scheduledTurn, onRecap })andrefreshIdleMaintenance()(#17136 by @andrebrait) - TTSR interrupts include a bounded excerpt of the text that matched the rule, quoted as untrusted data with harness tags escaped; excerpts are retained once per stream, preserved alongside AST matches, and omitted for zero-width matches (#17099 by @shgew)
- Sessions that load several provider-registering extensions into a shared model registry (subagents,
/tan, SDK hosts) start faster: the model catalog is rebuilt once instead of once per extension (#17088 by @Delije4) - Qwen 3.8 models (for example
Qwen3.8-Flash-Nextserved locally) now get thereplaceedit tool instead of hashline, like Kimi, DeepSeek and GLM 5.3 Flash; an explicitedit.mode,edit.modelVariants,PI_EDIT_VARIANTorPI_STRICT_EDIT_MODEstill wins (#17096 by @ianderse) - ACP clients now receive each tool's name on
tool_call, so tools without a specific ACP kind (task,wait,ask, …) show their own name instead of a generic "tool" label (#17162 by @epk) /contextnow opens an interactive, read-only viewer of the active prompt, tools, messages, and thinking with estimated token usage and per-tool output, instead of the static usage report (#16160 by @C-W-Z).- Nix builds cache Rust dependencies and the native addon in separate derivations, so Rust edits no longer recompile every dependency and TypeScript edits reuse the addon (#13752 by @n3oney)
Fixed
- Fixed
askquestions being unanswerable while the prompt held a draft: Up/Down now hand the keyboard to the question (typing still goes to the draft until then), and the untouched draft is back in the prompt once the question is answered or cancelled (#17215 by @H4vC) - Fixed the Agent Hub becoming unreachable after the last subagent finished: the people icon now stays (muted) while the session has subagents to inspect, and
/subagentsopens the hub as an alias of/hub(#17215 by @H4vC) - Fixed
/goal pauseleaving thegoaltool active; pausing now restores the toolset from before the goal started (#15753 by @Shadorain) - Fixed
/liveflipping betweenlisteningandspeakingat every pause in the assistant's speech;speakingnow holds through short pauses (#17114) - Fixed the
workflowznotice showing Python call forms in JS-only sessions and describing keep-alive workers wheneval.workpool.freshAgentsis on (#17152 by @bigHippoZz) - Fixed the first request after midnight or a working-directory change rewriting the conversation's first message, which broke OpenAI response chaining and the provider prompt cache, when an extension
contexthandler or secret obfuscation was active, when an extension inserted its own message afresh on every request (superpowers' bootstrap), or when requests from one or more advisors ran in between; the new date or directory is now appended after the earlier turns, and is repeated when a side question (/btw) or a branch left out the turn that carried it (#17117 by @sjawhar) - Fixed
:autoon a retry fallback entry being ignored: a fixed-effort session now switches to auto thinking on that fallback instead of inheriting the failing turn's effort, and advisor fallbacks keep following the primary's effort without enabling unverified thinking (#17100 by @shgew) - Fixed
ssh://home-relative paths resolving against literal/~instead of the remote account's home (#17182 by @alphastorm) - Fixed searches of
ssh://directories failing with unsupported directory scans (#17182 by @alphastorm) - Fixed clone-first worktrees carrying source-bound Python environments and CMake build trees, including self-ignored and nested directories (#17181 by @alphastorm)
- Fixed clean cloned worktrees carrying files ignored only by the source checkout, while retaining caches ignored by the target (#17181 by @alphastorm)
- Fixed glob patterns ending in
/returning no directories or including matching files; directory-only constraints now work across local, URL, and multi-root searches (#17180 by @alphastorm) - Fixed recursive
skill://glob and find discovery skipping contained linked directories; linked resources keep their skill URLs and directory cycles terminate (#17180 by @alphastorm) - Fixed find treating nonempty linked files as empty and dropping them before judgment (#17180 by @alphastorm)
- Fixed JSON selectors failing on BOM-prefixed input, backup and extensionless files, and modifier-only queries (#17179 by @alphastorm)
- Fixed JSON selectors on
ssh://text files while preserving pagination and the remote read limit (#17179 by @alphastorm) - Fixed
tool.apply_patch(...)being rejected as an unknown tool in JavaScript eval when apply-patch editing is enabled (#17178 by @alphastorm) - Fixed eval silently changing supplied cell deadlines without showing the requested and effective timeouts (#17178 by @alphastorm)
- Fixed unavailable Python remaining in eval's advertised languages and corrected its interpreter setup guidance (#17178 by @alphastorm)
- Fixed PDF archive members returning a binary-entry banner instead of converted text, with PDF selectors and page-image reads now supported (#17175 by @alphastorm)
- Fixed
githubrun_watchlabeling unavailable or partial failed-job logs as full logs, and included bounded fetch-failure reasons (#17173 by @alphastorm) - Fixed
githubpr_createechoing large PR bodies in creation summaries andxd://githubresult details (#17173 by @alphastorm) - Fixed raw URL reads prepending transport headers and normalizing response whitespace; raw URL bodies, ranges, and artifacts now share source-body coordinates (#17171 by @alphastorm)
- Fixed raw ranged reads adding elision rows, continuation notices for satisfied ranges, and conflict instructions to selected source text (#17171 by @alphastorm)
- Fixed
readreplacing a valid HTML page with a stale or missing guessed.mdpage; alternate representations now report their actual source URL (#16834) - Fixed implicit interactive
autoResumefailing every launch when a saved model cannot be restored and model fallback is disabled: startup now warns and opens a fresh session without carrying over the old history or cache identity, while preserving the original--max-timedeadline. Saved-model diagnostics in the warning are sanitized and length-limited before display. Explicit resume and headless model-restoration restrictions remain unchanged (#17163 by @SAKANA-MOONLIGHT). - Fixed
proc://<id>/modereporting a known in-process job or agent as a missing service, and clarified that stdin and lifetime modes are services-only (#17170 by @alphastorm) - Fixed Rex and other OSC 7501 terminals losing the
workingorblockedindicator when omp redraws a user message during a run (#17145) - Fixed hintless Google HTTP 429 model-capacity responses using the 45–75s model-capacity backoff instead of the short generic retry delay (#17127 by @GTanger)
- Fixed
skill://reads,/skill:commands (terminal, ACP and RPC) and subagent autoload skills serving a plugin's old version, or failing withFile not found, in a running session afteromp plugin upgradeinstalled a new version; the session now rediscovers its skills and uses the upgraded files, whether or not the old version's directory was deleted (#17027 by @sjawhar) - Fixed Esc on a busy session (and RPC
abort_and_restore_queue) silently discarding queued messages from extensions and agents, such aspi.sendMessagesteer/follow-up cards and agent-attributed prompts; they now appear in the transcript without restarting the run and reach the model with your next prompt (#17161 by @sjawhar) - Fixed a failed delivery of messages typed during compaction discarding other queued messages, such as an extension's prompt; only the messages that delivery queued are taken back, and messages anything else queued before, during or after it stay queued (#17161 by @sjawhar)
- Fixed a failed delivery of messages typed during compaction sending the first of them twice: once now and again with the retried batch (#17161 by @sjawhar)
- Fixed
--resume <file|id>,--continue,SessionManager.continueRecent(), the resume pickers and RPCopen_sessionreviving an old copy of a conversation that had continued in a new file because omp could not keep writing the original (another omp process held it, or the file changed under it); resume now opens the copy with the newest turn, unless the original has turns of its own that copy lacks (for--resume, the pickers, and--continueor auto-resume of the terminal's last session), and says which file it picked;--continueand auto-resume without a record of the terminal's last session, and RPCopen_session, take the copy with the newest turn among all linked copies, whichever one was written last. Copies saved before this fix are not linked and still resume as before (#17159 by @sjawhar) - Fixed a
retry.fallbackChainsentry naming another Claude model being skipped while the latest Claude turn carries signed thinking: the chain now moves to that entry when the failure is on another model, is not retried (an account-policy denial, a non-retryable error, or a wait pastretry.maxDelayMs), or has spent its retries (#17115 by @sjawhar) - Anthropic composer predictions now cache the persisted conversation prefix;
/btwfollow-ups reuse stable topic history without caching regenerated image descriptions (#17186) - Fixed
waitreturning a skipped-tool error for background completions, peer messages, or parent steering queued before execution (#17174 by @alphastorm) - Session-stop extensions now pass all continuation messages to the agent instead of silently discarding every message after the first; blocking decisions still take priority (#17129 by @aktanazat)
- Fixed the crash and SIGTERM recovery hint offering
omp --resume <id>for a session that was never saved to disk, which--resumecannot load; such a session now prints no resume command (#17119 by @sjawhar) - Fixed Ctrl+V over SSH pasting the server's clipboard when the client terminal forwards the key instead of pasting (e.g. Tern on Windows into a macOS host); omp now leaves the remote clipboard alone and points you to your terminal's paste shortcut (#17149 by @H4vC)
- Fixed
apply_patchcommitting unmatched old/context text or dropping numeric prefixes; matching now uses complete lines without changing other edit modes' fuzzy behavior (#17184 by @alphastorm) - Fixed context-free
apply_patchline deletions leaving blank rows, including first, last and only lines (#17184 by @alphastorm) - Fixed
apply_patchrejecting move-only updates and move-then-add envelopes; moves preserve source bytes and permissions and later sections see the ordered file state (#17184 by @alphastorm) - Fixed
omp plugincommands applying changes under--dry-run:upgradeandomp update --plugins --checknow preview, and actions without a preview reject the flag (#17104 by @sjawhar) - Turning off
async.widgetsmid-session now stops spec requests for already-shown job widgets and aborts any request in flight (#17090 by @yuzu-octopus) - Fixed
learnnot hot-registering a newly minted or updated managed skill in the active session (session.skills,skill://, and the system prompt), and fixedcomposeRecallQuerydropping prior user turns when an earlier turn repeated the latest prompt (#17113 by @GTanger) - Fixed
@pathfile mentions skipping.pdf,.docx,.xlsx,.pptx, and.epubfiles as binary instead of converting them to Markdown withmarkitlike CLI@filearguments andread(#17193 by @GTanger) - Fixed an automatic retry fallback (a hop down
retry.fallbackChainsor the Fireworks Fast degrade) re-rendering the system prompt for the new model, which made Anthropic write the whole cached conversation again on each hop; a hop now keeps the Model line and Delegation wording, and rebuilds only when the new model needs a different edit mode, tool-description handling, or tool set (#17014 by @sjawhar) - Fixed a live subagent's system prompt re-rendering its peer list, with each peer's current activity, on every rebuild, which made Anthropic write the whole cached conversation again; the list now updates only when a rebuild changes the rest of the prompt, and
history://lists the current peers (#17014 by @sjawhar) - SQLite row selectors now avoid shadowed ROWID aliases so reads, updates, and deletes target the intended single row. (#16998, #17001 by @ai-yang)
- Fixed composer predictions offering notes relayed in from other agents or sessions (for example an orchestrator's pasted status note) as the user's next message; predictions now cover only what the person at the keyboard would type (#17185 by @wolfiesch)
- Fixed image descriptions using the first vision model in catalog order (such as
claude-fable-5) when no vision model is configured; they now use the least expensive priced vision-capable model (#17148, #17196 by @gcp) - Fixed
waitresults and background job deliveries naming a finished subagent only by a job id that differs from its agent id (e.g.Foo-2for a messaged agent's new turn), whereagent://Foo-2andhistory://Foo-2are not found; they now namehistory://Foo, plusagent://Foowhen that turn published its output (#17112 by @sjawhar) - Fixed
RpcClient.promptAndWait()hanging until its timeout when the agent process exits or the client stops after the prompt was acknowledged; it now rejects right away (#17135 by @andrebrait) - Fixed reading versioned Read the Docs pages serving the development branch's source file instead of the requested version's content when the page's Edit link targets another branch (#17091 by @yuzu-octopus)
- Fixed RPC startup hanging when an extension opens a dialog during
session_start: the client can now answer it, and other commands still wait for startup to finish, in order (#17139 by @andrebrait) - Fixed extension tools disappearing once the startup plan mode (
plan.defaultOnStartup) was paused or its plan approved: tools of extensions that load after startup now stay, while built-ins that plan mode registered, such as itswritetransport, still go (#17085 by @appboypov) - Fixed a batch
taskcall silently ignoring amodel(orsourceSession) on a non-seanceitem while theseanceagent is hidden, so the child ran on its own model; the call is now refused with the same error as a single-agent call (#17107 by @sjawhar) - Fixed an edit under an older
[path#TAG]header, after another edit had changed the file, applying to lines that read never displayed, including a line it had cut at the column cap; such an edit now shows the anchored lines first, as it does under the file's current tag (#16208, #17033 by @sjawhar) - Fixed
omp gc --compress(and thegc.autoCompressbackground run) taking minutes on large session histories (#17195 by @H4vC) - Fixed
omp gc --compress --applyspending time on every idle session where the filesystem does not actually compress files (e.g. macOS 27); it now reportscompress skipped: <reason>, andgc.autoCompressno longer slows interactive startup with that check (#17195 by @H4vC)
@oh-my-pi/pi-mnemopi
Fixed
- Fixed local embeddings using one spinning CPU thread per core, so a single recall query cost several CPU-seconds on a many-core machine (#17109 by @sjawhar)
@oh-my-pi/pi-natives
Added
- Added opt-in, cycle-safe descendant-link traversal to native
globthroughfollowLinks, leaving default traversal unchanged (#17180 by @alphastorm)
Changed
Fixed
- Fixed the built-in
sortusing many times its-Sbuffer size, or more memory than its container allows or the machine has available, on inputs of short lines, and ignoringtimeoutor a cancel while it sorts (#17155 by @sjawhar) - Fixed the built-in
sort -mandsort -csplitting lines longer than their read buffer, andsortjoining a file's unterminated last line to the next file's first line (#17155 by @sjawhar) - Fixed the built-in
sort -S N%using the wrong buffer size:-S 50%gave 0 bytes and-S 100%a thousand times the machine's memory; it is now N percent of physical memory as in GNU sort (#17155 by @sjawhar) - Exited bash-tool
&jobs are reaped without another command;waitstill reports their status, and$!works inside pipelines, subshells, and command substitutions (#17144). - On macOS, the bash tool's built-in
psincludes other users' processes and unreaped zombies when selecting a PID (#17144). - Fixed native
globfile-type filters discarding target size and modification time for linked files (#17180 by @alphastorm) - Fixed leading UTF-8 BOMs causing embedded
jqJSON input parse errors while preserving raw-input bytes (#17179 by @alphastorm) - Fixed the shell's
timeoutand tool aborts not stopping built-in commands that were still reading (cat /dev/zero, huge files, FIFOs with no writer) (#17141 by @sjawhar) - Fixed a tool abort leaving a background in-process command, such as
cat /dev/zero > /dev/null &, running and keeping a core busy after its shell session was gone (#17141 by @sjawhar) - Fixed a shell redirect to or from a FIFO whose other end is a background job, such as
echo hi > f & cat < f, hanging the command; a tool abort now also stops a write redirect to a FIFO that has no reader (#17141 by @sjawhar) - Fixed a background external command with a FIFO redirect, such as
/bin/cat < f & echo hi > f, hanging the shell until the FIFO's other end opened; the command's own process now opens it, as in bash (#17141 by @sjawhar) - Fixed
timeoutprintingerror: interruptedwhen its limit stopped a built-in command; like GNUtimeout, it now prints nothing of its own and exits 124 (#17141 by @sjawhar) - Fixed crackling in live voice playback: the assistant's speech now absorbs packet jitter without dropping out, short turns play without waiting for the next response, and lost packets no longer insert extra synthesized audio (#17114)
- Fixed the bash tool's
rm -randducrashing the whole session with a stack overflow on a directory tree thousands of levels deep;rm -ralso removes such a tree without running out of file descriptors, and reports a directory that is its own ancestor instead of descending into it (#17021 by @sjawhar) - Fixed the bash tool's
findpanicking and writing a native panic report to~/.omp/logswhen the command reading its output exits early, as infind . -printf '%p\n' | head -1, or when its stderr is closed; it now stops quietly, and a failed-fprintfwrite is reported instead offind: internal error(#17079 by @trukhinyuri) - Fixed the shell's built-in
grepandrgrunning the whole agent out of memory on a file with no line breaks, such as a large sparse file: a line over 256 MiB is now reported asnot searchedfor that file and the search continues, and a-fpattern file over 256 MiB is refused with exit status 2 (#17108 by @sjawhar) - Fixed the embedded shell's globs keeping matches whose literal tail does not exist:
ls -d DIR/*/now lists only directories instead of passing every file asfile/, and*/namekeeps only matches that containname, as in bash (#17110 by @sjawhar) - Fixed the embedded shell ignoring
shopt -s globstar:**now matches any number of directory levels as in bash (**/*.rsfinds files at every depth, also incompgen -G), and a timeout or interrupt stops a long**expansion (#17111 by @sjawhar)
@oh-my-pi/pi-tui
Added
- Added a frame-write listener (
TUI.addFrameWriteListener) for terminal integrations that need to react to emitted ANSI output, including resize paints (#17145) HookInputComponent(showHookInput) now accepts{ secret: true }to mask typed characters as bullets (•) in input overlays (#17080 by @GTanger)- Added an ANSI and native
/contextviewer with category navigation, content inspection, token-usage and compaction estimates, and keyboard/mouse controls that adapt across Tern and other terminals (#16160 by @C-W-Z).
Fixed
- Fixed
AskDialogComponent's draft input guard holding the keyboard until the draft was cleared; Up/Down (or a pointer action) now release it so the question can be answered with the draft parked, andsyncPresentationreceives the effective blocked state (#17215 by @H4vC) - Fixed the prompt editor's autocomplete popup (e.g. emoji suggestions after
:D) staying open and following the cursor after Shift/Ctrl/Alt+Enter inserted a newline, so the next Enter submitted past a stale list; newlines and cursor motion (arrows, Home/End, word jumps, character jumps) now close it (#17215 by @H4vC) - Fixed
run_watchfailed-job rows hiding why a job's logs are unavailable; multilinegherrors now stay on one row (#17173 by @alphastorm)
Removed
- Removed the static context usage report (
ContextUsageView,renderContextUsage,describeContextUsage),contextUsageHead(), and theglyphandcolorfields ofContextBreakdowncategories; useContextViewer(#16160 by @C-W-Z). - Fixed Markdown tables inside list items disappearing from the terminal transcript (#17165).
@oh-my-pi/pi-utils
Added
- Added
deadlineMsandwaitMessagecleanup registration options: shutdown waits longer for that callback, but only while it is still pending, and says so on stderr once nothing else is left to wait for (#17128 by @sjawhar) - A process stopped by SIGTERM now prints its registered recovery commands after the terminal is handed back, so a stopped omp session shows
omp --resume <id>instead of leaving its last frame above the shell prompt like a crash (#17119 by @sjawhar)
Fixed
- Fixed plain TAR archives requiring a whole-container memory buffer to list entries or read a selected member (#17175 by @alphastorm)
What's Changed
- fix(coding-agent): keep composer predictions from echoing relayed agent notes by @wolfiesch in #17185
- feat(coding-agent): compress idle sessions in the background with gc.autoCompress by @wolfiesch in #17189
- fix(edit): ran the seen-line guard on the stale-tag recovery path by @sjawhar in #17033
- fix(builtins): stop find quietly when its output or stderr pipe closes by @trukhinyuri in #17079
- fix(coding-agent): keep extension tools registered while startup plan mode is on by @appboypov in #17085
- fix(coding-agent): only fetch ReadTheDocs raw source when ref matches version slug by @yuzu-octopus in #17091
- fix(task): refuse seance-only fields on batch items when seance is hidden by @sjawhar in #17107
- fix(grep,rg): bound the line buffer and pattern files so one file cannot exhaust the host by @sjawhar in #17108
- fix(shell): drop glob matches whose literal tail does not exist by @sjawhar in #17110
- fix(coding-agent): name agent:// and history:// for task jobs whose id is not the agent id by @sjawhar in #17112
- fix(rpc): reject acknowledged prompts when the client stops or the transport closes by @andrebrait in #17135
- fix(rpc): answer startup dialogs while extensions start by @andrebrait in #17139
- feat(coding-agent): make context content inspectable in /context by @C-W-Z in #16160
- nix packaging refactor by @n3oney in #13752
- fix(coding-agent): speed up gc --compress and move the compression probe into the gc run by @H4vC in #17195
- fix(coding-agent): avoid shadowed SQLite rowid aliases by @ai-yang in #17001
- fix(ci): install floored bun to a writable dir when ~/.bun is read-only by @bse-ai in #17076
- feat(acp): send the tool name on tool_call by @epk in #17162
- fix(coding-agent): stop plugin commands applying changes under --dry-run by @sjawhar in #17104
- fix(builtins): walk rm -r and du with explicit stacks by @sjawhar in #17021
- fix(coding-agent): keep the system prompt byte-stable across retry fallbacks and roster changes by @sjawhar in #17014
- perf(tui): memoize the output pane's styled content per frame by @yuzu-octopus in #16779
- perf(ai): memoize schemaDefinesProperty per schema identity by @yuzu-octopus in #16780
- fix(apply-patch): require matching context and support move-only sections by @alphastorm in #17184
- fix(coding-agent): use the cheapest vision model for image descriptions by @gcp in #17196
- fix(coding-agent): convert markit-supported documents in @file mentions by @GTanger in #17193
- fix(edit): use the replace edit tool for Qwen 3.8 models by @ianderse in #17096
- fix(coding-agent): stop Ctrl+V over SSH from pasting the remote host clipboard by @H4vC in #17149
- fix(ai): purged copilot usage when every endpoint rejects auth by @roboomp in #17086
- perf(coding-agent): rebuild the model catalog once when clearing several extension sources by @Delije4 in #17088
- fix(coding-agent): stop job widget spec requests when async.widgets is disabled by @yuzu-octopus in #17090
- feat(coding-agent): support secret input masking on extension input dialogs by @GTanger in #17080
- fix(mnemopi): bound the local embedding session's onnxruntime threads by @sjawhar in #17109
- fix(voice): buffered live playback against jitter and held speaking phase by @roboomp in #17125
- feat(utils): print recovery hints when SIGTERM stops the process by @sjawhar in #17119
- feat(rpc): make delta message updates rebuildable by @andrebrait in #17137
- feat(rpc): navigate the session tree and set labels over RPC by @andrebrait in #17138
- fix(wait): consume queued wake events instead of skipping wait by @alphastorm in #17174
- fix(coding-agent): reused persisted cache prefix for side turns by @roboomp in #17188
- fix(coding-agent): show matched text in TTSR interrupts by @shgew in #17099
- fix(coding-agent): refresh session skills on learn and preserve recall query turn boundaries by @GTanger in #17113
- fix(coding-agent): let a chain reach a sibling Claude model after a signed-thinking turn by @sjawhar in #17115
- fix(shell): stop in-process utilities reading when their command is cancelled by @sjawhar in #17141
- fix(ai): keep a shared OAuth login alive when processes race to refresh it by @sjawhar in #17128
- fix(session): resumed the newest copy of a session that continued in a sibling file by @sjawhar in #17159
- fix(coding-agent): keep queued extension messages through an interrupt by @sjawhar in #17161
- omp: preserve all stop continuation feedback by @aktanazat in #17129
- fix(skills): keep plugin skills readable in running sessions after a plugin upgrade by @sjawhar in #17027
- fix(ai): retry Aliyun multimodal gateway's flaky 400s by @shuairongzeng in #17101
- feat(extensions): expose MCP server, tool name and readOnlyHint in ToolInfo by @cfpperche in #17120
- fix(ai): classify Google RPC QuotaFailure, RetryInfo, and MODEL_CAPACITY_EXHAUSTED details by @GTanger in #17127
- fix(tui): restored program status after prompt redraws by @roboomp in #17147
- pi-ast: make tree-sitter wasm an opt-in feature (default on) by @ianks in #17153
- fix(proc): distinguish service controls from in-process jobs by @alphastorm in #17170
- fix(cli): start fresh when implicit auto-resume cannot restore its model by @SAKANA-MOONLIGHT in #17163
- feat(catalog): discover LM Studio decision models as judges by @richiestanaway in #17169
- fix(read): keep raw reads to the requested source bytes by @alphastorm in #17171
- fix(github): keep run_watch and pr_create results truthful and concise by @alphastorm in #17173
- fix(read): read pdf archive members and index large plain tars lazily by @alphastorm in #17175
- fix(eval): keep eval's advertised contract in step with what runs by @alphastorm in #17178
- fix(read): apply json selectors to bom, backup, modifier-only and ssh targets by @alphastorm in #17179
- fix(tui): rendered tables inside list items by @roboomp in #17168
- fix(read): stop substituting guessed Markdown for valid HTML by @roboomp in #16838
- fix(glob): honor directory-only patterns and linked skill entries by @alphastorm in #17180
- fix(worktree): keep source-only environments and ignored paths out of clones by @alphastorm in #17181
- fix(ssh): resolve home-relative paths and search directory scopes by @alphastorm in #17182
- fix(coding-agent): preserve auto thinking in retry fallback selectors by @shgew in #17100
- feat(coding-agent): allow directory-scoped resume picker by @Dante-dan in #17061
- feat(advisor): add per-advisor session scope and includeReasoning in WATCHDOG.yml by @trukhinyuri in #17058
- fix(coding-agent): trust a /v1/models row's own reasoning declaration by @Youwenqwq in #17077
- fix(shell): reaped background jobs and preserved nested pid by @roboomp in #17146
- fix(sort): bound the in-process sort's memory by its buffer and stop it on cancel by @sjawhar in #17155
- fix(shell): make
shopt -s globstarmatch**recursively by @sjawhar in #17111 - fix(coding-agent): keep the date/cwd reminder append-only when turns are re-allocated by @sjawhar in #17117
- feat(session): move idle maintenance to a session-owned scheduler by @andrebrait in #17136
- fix(coding-agent): render the workflowz notice for the session's eval runtimes and workpool mode by @bigHippoZz in #17152
- feat(rpc): expose native dictation to RPC hosts by @felipe-santos-aya in #17158
- feat(coding-agent): expose lsp and ast_grep on bundled scout agent by @sinhduc01 in #17151
- perf(diff): replace Rc linked list with flat arena in myers_diff by @GTanger in #17015
- feat(extensions): direct control of built-in session modes by @Shadorain in #15753
- fix(tui): close stale autocomplete, answerable ask with draft, reachable agent hub by @H4vC in #17215
New Contributors
- @ai-yang made their first contribution in #17001
- @epk made their first contribution in #17162
- @gcp made their first contribution in #17196
- @GTanger made their first contribution in #17193
- @ianderse made their first contribution in #17096
- @Delije4 made their first contribution in #17088
- @shuairongzeng made their first contribution in #17101
- @cfpperche made their first contribution in #17120
- @ianks made their first contribution in #17153
- @SAKANA-MOONLIGHT made their first contribution in #17163
- @richiestanaway made their first contribution in #17169
- @Youwenqwq made their first contribution in #17077
- @felipe-santos-aya made their first contribution in #17158
- @sinhduc01 made their first contribution in #17151
Full Changelog: v18.13.1...v18.13.2