@oh-my-pi/pi-agent-core
Breaking Changes
- Removed
ApprovalDetailsOptions;formatApprovalDetailstakes onlyargsagain, since the compact approval prompt no longer shows tool details (#15642 by @H4vC)
Added
AgentTool.delegationGuidance: instructions a same-name extension replacement inherits in its description when it delegates to the native tool (#15477 by @iliaal)CompactionPreparation.lastSummarizedEntryIdandCompactionResult.providerReplayThroughEntryId: a remote compaction that could only fit the history before the kept tail reports the last entry its native history covers; later entries replay normally (#15712 by @H4vC)
Fixed
- Fixed native (OpenAI/Codex) remote compaction refusing or truncating sessions that fit the window: its preflight counted the JSON-escaped request, inflating quote-, backslash- and newline-heavy tool output such as disassembly by ~10–20%; it now counts text as the model reads it (#15712 by @H4vC)
- Fixed OpenAI V1/V2 remote compaction failing outright when the history, kept tail included, exceeds the context window (a large final response or tool output after the last check); it retries on the history before the kept tail (#15712 by @H4vC)
- Fixed fitted output caps overflowing the context window on strict hosts (llama.cpp-family) after turns with many parallel tool results; chat-template framing is now charged per locally counted message (#15699)
- Fixed leaked DeepSeek DSML markup reaching saved history from reasoning blocks and from turns that also made a valid tool call (#15485)
@oh-my-pi/pi-ai
Fixed
- Fixed parallel tool calls failing with "Tool call arguments are not valid JSON" on some OpenAI-compatible gateways, such as Gemini (#15682 by @Zzz141592653)
- Fixed Anthropic fallback-credit redemption losing its credit on errors that only mention
400in their text, such as an overload message (#15702 by @H4vC) - Fixed Anthropic fallback-credit redemption sending an extra
fallback-credit-2026-06-01beta when the refused request used a newer one (#15702 by @H4vC) - Fixed Anthropic fallback-credit redemptions failing when the refused turn included unsigned thinking (#15702 by @H4vC)
- Fixed turns ending without automatic retry when a gateway forwards Go's
use of closed network connectiontransport error; it now retries like other dropped connections (#15385) - Fixed Codex SSE streams failing with an abort instead of retrying when the first event stalls (#15542)
- Fixed Codex (ChatGPT subscription) requests with reasoning disabled, such as judges, titles, commit messages, and thinking
off, leaving effort to the server default; they now send the lowest supported effort, ornonewhere the model accepts it (#15514) - Fixed a Codex account whose token OpenAI rejects (401/403) continuing to show its last quota as healthy;
omp usagenow drops the stale report andomp auth-gateway checkreports the credential as failing (#15439) - Fixed usage reports being served indefinitely while their provider keeps failing; the last successful report is now shown for at most 24 hours after it was fetched (#15439)
- Fixed Responses requests 400ing (DeepSeek: "The
reasoning_textin the thinking mode must be passed back to the API") after a tool call whose arguments were invalid JSON: the call is now replayed with its parse diagnostic instead of being dropped and leaving a trailing[Orphan tool result]note (#15568) - Fixed DeepSeek on OpenAI-compatible gateways leaving doubled-pipe DSML markup (
</||DSML||parameter>) in assistant text and reasoning (#15485) - Fixed sessions failing every request with
400 … thinking or redacted_thinking blocks in the latest assistant message cannot be modifiedafter a response fell back to another model mid-turn (e.g. through a gateway that opts into Anthropic server-side fallback); the turn now replays one model's reasoning, and a session already stuck on such a turn recovers by dropping that turn's reasoning and retrying (#15654 by @abilliontokens) - Fixed
omp auth-gateway's Anthropic/v1/messagesstream misnumbering content blocks after a redacted reasoning block, which misrouted every later delta in index-addressed clients (#15654 by @abilliontokens)
@oh-my-pi/pi-catalog
Added
- Added
local/nemotron-streaming-en-0.6bfor local streaming English dictation (#15759 by @daaximus). - Added SambaNova Cloud (
sambanova) as a provider:/login sambanovawith an API key, and the live/v1/modelsroster with its prices, reasoning models, and Gemma 4 image input (#14986 by @rjuez00)
Changed
- OpenCode Go requests now go to the current
https://opencode.ai/inference/go/v1endpoint instead of the legacy/zen/goone (#15722)
Fixed
- Fixed OpenCode Go's
deepseek-flashalias showing $0, unknown limits, and no reasoning instead of the V4.1 Flash rate card and capabilities (#15357) - Fixed OpenCode Go's Gemini 4 Argon Contributor failing with an unsupported protocol and thinking level; it now uses the native Gemini endpoint (#15722)
@oh-my-pi/pi-coding-agent
Added
- Added a microphone button beside Send in Tern: click to record, click Stop to finish, then review and submit the transcription yourself. Clicking while it says Starting… cancels a slow first model load (#15759 by @daaximus).
- Added local Nemotron streaming dictation: words appear while you speak, and the microphone waits for the recognizer to be ready before recording (#15759 by @daaximus).
- Added agent frontmatter
structured: true: that agent's task spawns keep theyieldtool and itsoutputschema validation whiletask.structuredis off (#15717 by @alphastorm) - The composer stays usable while a tool approval is pending: sending a message denies the call and steers the turn with it, so the agent knows why it was denied (#15642 by @H4vC)
- Session entries record which omp build wrote them, so a transcript shows whether a fix was live even in a session left open across an upgrade: the version, plus commit, branch, and uncommitted-diff hash when run from a source checkout, and
OMP_BUILD_LABELwhen set./sessionlists the builds that wrote the session (#15680 by @will-bogusz)
Changed
- The in-composer tool approval prompt summarizes the command, path, or content to one row so the composer keeps its room;
Ctrl+Oshows them in full (#15642 by @H4vC) - Background task guidance now lives in the Task tool description (and in same-name extension replacements that delegate to Task) instead of being repeated in every spawn acknowledgment (#15477 by @iliaal)
- The Auto-Promote Context and Retry Model Fallback settings now state that they are independent; turn off Retry Model Fallback (
retry.modelFallback) to stopretry.fallbackChainsmodel switches (#15636)
Fixed
- Fixed browser
tab.click("text/…")timing out when the match was below the fold or the tab was in the background (#14864 by @alnaggar-dev, #15496 by @will-bogusz) - Fixed browser clicks the page never received, such as on a disabled control or inside an
inertsubtree, reporting success; the call now fails saying the browser did not deliver the click (#15496 by @will-bogusz) tab.ariaSnapshot()no longer prints the value of a password field; it shows one bullet per character, astab.observe()and the screen do, so a typed or browser-autofilled password stays out of the model's context (#15502 by @will-bogusz)- Fixed project discovery loading plugins,
SYSTEM.md, rules, context files, and skills from a.ompat a shared temporary root (/tmp,/var/tmp, the temp dir) above an unanchored working directory, or, whenHOMEis overridden, from another account's~/.ompoutside the working directory's git repository (#15719 by @alphastorm) - Fixed browser
tab.text()andtab.html()(and the same calls on a frame) throwing when called without a selector; they now read the page body on Chrome, Tern and cmux (#15599 by @will-bogusz) - Fixed skill-description compression re-sending the same smol-model requests every session for a skill whose compressed answer was rejected (over 12 words or 160 characters) or cut off at the token limit; that model is no longer asked again for that skill (a newly selected smol model is), and compressions still running at exit get up to 4 seconds to save (#13291, #15720 by @alphastorm)
- Fixed the macOS
computertool keeping the display awake for the rest of the session after a native call hung; the call's timeout or closing the session now lets it sleep (#15414 by @will-bogusz) - Fixed an agent definition whose
toolsvalue names no tool (tools: "", a number, a list without strings) getting every default built-in tool; it now gets none, liketools: [](#15718 by @alphastorm) - Fixed
page.waitForNetworkIdlein a browserruntiming out on a request an earlierrunstarted (#15495 by @alnaggar-dev and @will-bogusz) - Fixed a tab that a relay page opens over its own CDP session (
Target.createTarget) landing in a separate Chrome window withnewWindow, under an id omp could not attach to, activate or close; it now opens as a relay tab in that page's browser (#15494 by @alnaggar-dev and @will-bogusz) - Fixed an Anthropic refusal fallback redeeming its fallback credit with an outdated system prompt and tools after switching models; it now sends a fresh request (#15702 by @H4vC)
- Fixed OpenAI/Codex auto-compaction failing with "Remote compaction input exceeds the context window" after a turn's final response pushed history past the window; native compaction now compacts the history before the kept recent turns, which stay in context as-is (#15712 by @H4vC)
- Fixed
omp commit,/git, and other agent commits skipping the signature when Git'scommit.gpgsignis enabled; they now sign with the configured key, and a signing failure leaves HEAD unchanged (#14810) - Fixed rejected
taskcalls appearing successful to SDK hosts instead of reporting a tool error (#15573) - Fixed
readclaiming regenerated images were identical when their pixels changed at the same path (#15668) - Fixed SDK embedders leaking every disposed
AgentSessionthat owned its MCP manager, so long-lived processes that create and dispose many sessions grew memory without bound (#15386) - Fixed retry model fallback stopping at a fallback model whose provider is outside a subagent's
task.agentAccountPoolspool; that model is now skipped and the next fallback model is tried (#15423) - Fixed the system prompt's
## MCP Server Instructionssection following MCP connection order, so a server connecting late or reconnecting no longer reorders it and rewrites the prompt cache; servers are now listed by name (#15705) - Fixed
readreporting an HTTP 204 No Content response as a failed fetch; it now returns an empty successful read (#15667) - Fixed
/mcp reauthfailing withCould not discover OAuth endpointswhen a server's 401 challenge is a bareBearer resource_metadata="…"; the advertised protected-resource metadata URL is now used (#15690) - Fixed extension
agent_endevents reporting a background-job wait as a scheduled continuation; they now carryawaitingAsyncWork: truealongsidewillContinue(#15348) - Fixed auto-compaction waiting out provider retry delays longer than
retry.maxDelayMs(e.g. a 16-hourretry-after); it now tries the next configured method or reports the failure (#15311) - Fixed
read skill://<name>for a name no loaded skill owns hanging for the rest of the turn while an MCP server was still connecting or reconnecting; it now reportsUnknown skillafter at most 5 seconds (#15648) - Fixed
/newignoring "Start in Plan Mode" (plan.defaultOnStartup): the new session now starts in plan mode like the first one (#15627) - Fixed Cursor models' Read on an image file returning the file's raw bytes as text; Read now loads the image, and Cursor's text-only Read frame gets a short image note instead of the bytes (#15630)
- Fixed Mermaid diagrams showing
<,>,&, and#quot;literally inside labels instead of<,>,&, and"(#15619) - Fixed background job results already consumed by an eval
agent()handle'swait()being re-injected as oneasync-resultfollow-up when the cell ran past the 5-minute job retention window (#15625) - Fixed
/tanmissing the parent's prompt cache: it advertised the parent'sxd://tools as top-level tools and droppedask, so its tool list no longer matched (#15578) - Fixed forks and reloaded sessions missing the prompt cache after a compaction in a session with
evalhistory (#15695) - Fixed compiled-binary extensions importing
@oh-my-pi/pi-tuisubpaths such asterminal-capabilities,chat/svg-figureortheme/indexloading a second copy from their ownnode_modulesinstead of sharing the host's terminal, theme and figure state (#15659) - Fixed marketplace plugins that keep their version in
.claude-plugin/plugin.jsonnever being reported byomp plugin upgradeor auto-updated; for plugins shipped inside the marketplace,plugin.json's version now also takes precedence over the catalog entry's, as in Claude Code (#15585) - Fixed a steer (queued user or peer message) waiting behind a
bashservice's readiness wait (name+ready) for up toready.timeout; the call now returns early with the service still starting, inspectable viaproc://<name>(#15653) - Fixed
omp install/omp plugin install,upgrade,uninstallanddoctor --fixfailing withExecutable not found in $PATH: "bun"for npm and Git plugins on machines without Bun installed, such as standalone-binary installs (#15480) - Fixed
/plugins enableand/plugins disablein the TUI not refreshing skills, commands, task agents and MCP servers until a reload, and rejecting npm plugins (#15383) - Fixed local memory injection and
learnusing theSettingsdirectory instead of the session's project directory, so SDK hosts sharing oneSettingsacross projects injected another project's lessons and never the project's consolidated summary; sharpshooter memory follows the session directory too (#15375) - Fixed ACP bash approvals ignoring
bash.patterns, and an earlier "Always allow" letting critical commands such asrm -rf /run without a prompt (#15473) - Fixed hashline edits silently dropping the tail of a line that
readorgrephad cut at the column limit; such an edit is now refused until a:rawread shows the full line (#15649) - Fixed isolated tasks failing on linked worktrees with initialized recursive submodules and leaving updated submodule pins unreachable after cleanup (#15457)
- Fixed
/tanmissing the parent's prompt cache by advertisingxd://tools top-level and omittingask(#15578).
@oh-my-pi/pi-mnemopi
Fixed
- Fixed polyphonic recall ranking unrelated memories above relevant ones when the query shared only a common word such as "that" with an extracted fact subject (#15512).
@oh-my-pi/pi-natives
Fixed
- Fixed macOS
setValueon native text fields in background apps such as Contacts, Reminders, Calendar, Font Book and System Settings returning success for text the app showed but never stored: it now enters the text the waywin.typedoes, and a mismatch names what the field reads (#15293 by @will-bogusz) - Fixed a macOS desktop session keeping the display awake for the rest of the process after a native request hung; the request's timeout or
close()now releases it (#15414 by @will-bogusz) - Fixed the macOS
computertool sometimes reading an empty page on its first read of a Chrome window, and leaving Electron apps it read in screen-reader mode until they quit (#15604 by @will-bogusz) - Fixed macOS
press()on a scrolled-out row in a Mac Catalyst app reporting success while nothing happened: the element is asked to scroll into view first (#15607 by @will-bogusz) - Fixed shell builtins on Windows resolving drive-relative paths (
C:,C:name) against the agent process's start directory instead of the shell's working directory, which letcd /c/Temp/x && rm -rf C:delete the start directory;rmnow also refuses a bare drive operand like.(#15511) - Fixed
renderMermaidAsciiprinting character references in labels verbatim: HTML entities (<,&,<,<) and Mermaid entity codes (#quot;,#60;) now render as the characters they name (#15619) - Fixed
readandwhile readhanging on process-substitution input (#15501) - Fixed standalone binaries extracting unused native addon variants on first launch (#15462)
- Fixed Git diffs failing when staged or committed changes update a submodule pin (#15457)
@oh-my-pi/omp-stats
Fixed
- Providers → Subscription windows no longer mixes Codex 5-hour and 7-day quotas across plans: Team and weekly-only (ProLite) accounts now share the 7-day row, the 5-hour row counts only accounts that have one, and labels no longer flip with whichever account reported last (#15664)
@oh-my-pi/pi-tui
Added
- Added native composer microphone controls with visible starting, recording and transcription states; a start still loading its model can be cancelled, and Enter and Send wait while dictation is recording or transcribing into the draft (#15759 by @daaximus).
ApprovalDialogComponenttakes adraftoption that routes typing to the composer beneath it, so a message can be written while a tool call waits (#15642 by @H4vC)ApprovalDialogComponenttakes afullPromptoption that the expand key (app.tools.expand) or a Details button swaps in for the summarized prompt; it replaceswrapDetails(#15642 by @H4vC)
Fixed
- SVG fences in CRLF or CR-only assistant Markdown now render as figures instead of source code (#15663).
- Fixed clipboard-image and image-path pastes being dropped while the composer draft is edited beneath an ask or approval dialog (#15642 by @H4vC)
- Fixed inline images inside tmux assuming Kitty graphics from the pane's
TERM; the attached client is identified from tmux's terminal-type reply or itsTERM(e.g.xterm-kitty), and unrecognized clients go to the SIXEL probe (#15524). - Fixed ```svg fences rendering as their source code instead of a drawing when no theme was installed yet, e.g. in an extension rendering a message that opens with the fence (#15660)
- Fixed pastes inside tmux 3.5a and older submitting line by line after another program turned bracketed paste off on the pane; omp now re-enables it on the next render or keypress (#15596)
- Fixed assistant replies containing a table (on image-capable terminals with table charts on) publishing still-streaming rows to native scrollback, which froze the block's append-only retirement and could leave overwritten reply rows in scrollback (#15693)
- Fixed streamed thinking publishing a line to native scrollback just before a code fence or
<!-- -->sentinel split across deltas rewrote it with the prose-fold ellipsis (#15693) - Fixed streamed assistant text or thinking containing a tab stopping all later rows of the reply from retiring into native scrollback until the turn ended (#15693)
- Fixed wrapped lines in Write, Read, Edit, Todo, Ask and LSP tool cards losing their alignment under line numbers, tree connectors, and option or code rails (#15677)
- Fixed SIXEL images leaving their previous raster on screen, drawn again over itself, when the transcript moves them within the viewport (#15657)
What's Changed
- perf(task): move async task guidance into tool descriptions by @iliaal in #15477
- feat(coding-agent): steer from the composer during tool approval, drop duplicated call details by @H4vC in #15642
- fix(coding-agent): open targets a relay page session creates in that page's browser by @will-bogusz in #15494
- feat(coding-agent): record which omp build wrote each session entry by @will-bogusz in #15680
- fix(coding-agent): keep puppeteer's own tab page listeners across browser runs by @will-bogusz in #15495
- fix(natives): open a scrolled-out row when pressing it in a macOS Catalyst app by @will-bogusz in #15607
- fix(natives): wait for a Chromium window's web content on the first macOS computer read by @will-bogusz in #15604
- fix(natives): release the macOS display-awake hold when a native call hangs by @will-bogusz in #15414
- fix(coding-agent): read the page body when browser text() or html() gets no selector by @will-bogusz in #15599
- fix(coding-agent): mask password values in browser ARIA snapshots by @will-bogusz in #15502
- fix(natives): write macOS setValue text the way win.type does by @will-bogusz in #15293
- fix(ai): isolate parallel tool calls when chunks reuse stream index by @Zzz141592653 in #15682
- fix(ai,coding-agent): address post-merge review of Anthropic fallback credit by @H4vC in #15702
- fix(agent,coding-agent): misscount fixes for oai tokenizer by @H4vC in #15712
- fix(browser): scroll text-query click targets into view by @will-bogusz in #15496
- fix(discovery): stop project walks at temporary roots and foreign user config roots by @alphastorm in #15719
- fix(skills): cache unusable descriptions and drain writes on exit by @alphastorm in #15720
- feat(task): let agents keep structured results via frontmatter by @alphastorm in #15717
- fix(agents): fail closed for malformed tool declarations by @alphastorm in #15718
- fix(tui): stopped assuming kitty graphics for unknown tmux clients by @roboomp in #15534
- fix(catalog): restored OpenCode Go Flash alias metadata by @roboomp in #15361
- fix(vcs): respect configured commit signing by @roboomp in #14813
- fix(task): marked refused calls as errors by @roboomp in #15576
- fix(ai): retried go closed-network-connection transport errors by @roboomp in #15389
- docs: separated context promotion from retry model fallback by @roboomp in #15639
- fix(tui): handled CRLF and CR-only SVG fences by @roboomp in #15669
- fix(tui): initialized the theme before svg figures read it by @roboomp in #15673
- fix(read): included image data in repeat-read fingerprint by @roboomp in #15672
- fix(mnemopi): skipped stopwords in fact voice subject matching by @roboomp in #15518
- fix(ai): repaired codex sse watchdog retry signal by @roboomp in #15545
- fix(sdk): cancelled mcp-notification-cleanup postmortem on dispose by @roboomp in #15388
- fix(coding-agent): skipped pool-blocked candidates in retry fallback walk by @roboomp in #15430
- fix(mcp): rendered server instructions in name order by @roboomp in #15710
- fix(read): handled bodyless HTTP 204 responses by @roboomp in #15674
- fix(mcp): kept bare bearer resource_metadata challenges unredacted by @roboomp in #15694
- fix(extensions): forward background-wait reason in agent_end by @roboomp in #15349
- fix(stats): grouped codex usage windows by recorded window across plans by @roboomp in #15670
- fix(pi-vfs): resolved windows drive-relative paths against shell cwd by @roboomp in #15515
- fix(tui): reasserted bracketed paste inside tmux without decrqm reply by @roboomp in #15597
- fix(compaction): skipped long provider retry waits by @roboomp in #15313
- feat(catalog): add SambaNova Cloud as a provider by @rjuez00 in #14986
- fix(agent): charged chat-template framing per locally counted message by @roboomp in #15700
- fix(ai): honored disableReasoning on the codex responses route by @roboomp in #15533
- fix(coding-agent): bounded unknown skill:// wait on connecting mcp servers by @roboomp in #15650
- fix(coding-agent): applied plan.defaultOnStartup to sessions started by /new by @roboomp in #15631
- fix(cursor): returned images instead of raw bytes from read frames by @roboomp in #15635
- fix(natives): decoded character references in mermaid labels by @roboomp in #15621
- fix(async): kept consumed results suppressed past retention while parked by @roboomp in #15626
- fix(shell): unblocked read on process substitution by @roboomp in #15509
- fix(lsp): kept deferred diagnostics alive for formatted writes by @roboomp in #15380
- fix(tan): preserve the parent's advertised tool roster by @roboomp in #15583
- fix(session): preserve eval context across compacted forks by @roboomp in #15696
- fix(extensions): served pi-tui subpaths from host in compiled binaries by @roboomp in #15665
- fix(tui): published only settled rows of streaming tables and thinking by @roboomp in #15697
- fix(coding-agent): resolved marketplace plugin versions from plugin.json by @roboomp in #15587
- fix(catalog): route OpenCode Go Argon through native Gemini by @roboomp in #15724
- fix(natives): extracted only selected addon on startup by @roboomp in #15465
- fix(ai): purged codex usage on 401 and capped last-good retention by @roboomp in #15441
- fix(catalog): kept cached endpoint overrides in additive catalogs by @roboomp in #15558
- fix(tui): preserve hanging prefixes in tool cards by @roboomp in #15679
- fix(coding-agent): ended service readiness waits on a queued steer by @roboomp in #15656
- fix(stats): probed dashboard port without routing through http proxy by @roboomp in #15617
- fix(ai): replayed unparsable responses tool-call arguments as diagnostics by @roboomp in #15571
- fix(ai): replayed responses tool calls missing from native items by @roboomp in #15581
- fix(dsml): strip doubled-pipe residue from committed turns by @roboomp in #15486
- fix(plugins): ran plugin installs through the embedded bun by @roboomp in #15482
- fix(plugins): refreshed TUI toggles and supported npm plugins by @roboomp in #15387
- fix(memories): scoped memory injection and learn to the session cwd by @roboomp in #15381
- fix(acp): honored bash approval patterns before permission requests by @roboomp in #15474
- fix(edit): prevented column-cut edits from dropping tails by @roboomp in #15651
- fix(tui): erased a sixel block's rows before repainting it by @roboomp in #15658
- feat(stt): add click-to-dictate and local streaming recognition by @daaximus in #15759
- fix(task): detached recursive submodule git state by @roboomp in #15459
- fix(ai): replay one model's reasoning after a mid-turn Anthropic fallback by @abilliontokens in #15654
New Contributors
- @Zzz141592653 made their first contribution in #15682
- @rjuez00 made their first contribution in #14986
Full Changelog: v18.10.4...v18.11.0