@oh-my-pi/pi-agent-core
Fixed
- Fixed Codex remote compaction requests failing for region-pinned enterprise ChatGPT workspaces when requests egress from a different region.
@oh-my-pi/pi-ai
Added
- Added Codex Responses support for Code Mode, preserving tool modes and passing tool namespace metadata during sessions.
Fixed
- Fixed OpenAI Codex requests failing with HTTP 401 data residency errors on enterprise ChatGPT workspaces when connecting from a different region via VPN or proxy.
- Fixed concurrent xAI OAuth token refreshes revoking shared credentials across multiple processes.
- Fixed Amazon Bedrock Converse multi-turn conversations failing on models like Amazon Nova due to unsigned reasoning content in replayed turns.
- Fixed Antigravity OAuth login handling for project discovery and free-tier onboarding against Cloud Code Assist endpoints.
- Fixed provider-detected OAuth access token expiration terminating active turns instead of automatically refreshing credentials and replaying the request.
- Fixed compatibility issues with OpenAI-compatible servers (such as NInfer and vLLM) rejecting
reasoning_effortinsidechat_template_kwargs. - Fixed Google Cloud Code Assist and Antigravity rejecting MCP tool schemas with unsupported annotations (
x-mcp-header,deprecated,readOnly,writeOnly,$comment). - Fixed Cursor provider issues with native file edit streaming (
editToolCall) and ensuring always-apply system rules are properly preserved. - Fixed Cursor HTTP/2 requests ignoring standard proxy environment variables (
HTTP_PROXY,HTTPS_PROXY,ALL_PROXY,NO_PROXY).
@oh-my-pi/pi-catalog
Added
- Added helper functions and constants for reading enterprise ChatGPT workspace data-residency regions from Codex OAuth access tokens and forwarding the residency header to Codex backend endpoints.
Changed
- Preserved API-advertised
tool_modemetadata (such ascode_mode_onlyfor GPT-5.6 Code Mode models) on Codex catalog models and types (#9069). - Added an optional
tokenizerfamily field across bundled, discovered, and custom catalog models (claude-v3/v47/v5, Qwen 3.5+, DeepSeek V3/V4/R1, Kimi K2/K3, and GLM-5+), which can also be explicitly overridden in model configuration. - Updated subscription Codex GPT-5.6 Sol, Terra, and Luna models to include first-party
cost.longContextpricing tiers for token inputs exceeding 272K tokens.
Fixed
- Fixed Vercel AI Gateway Muse Spark 1.2 Contributor requests failing with HTTP 400 errors by capping advertised output allowances to the model's 131K limit.
- Fixed LiteLLM model discovery to route OpenAI models through the Responses API for reasoning summaries in thinking blocks (#9085).
- Fixed OpenCode Console Go and Zen Responses providers rejecting forced tool choices by automatically downgrading forced or named tool selections to
auto. - Fixed OpenCode Go Muse Spark 1.2 and Muse Spark 1.2 Contributor models failing during tool calls or missing reasoning effort levels, ensuring they correctly route to the Responses API with full thinking, context, and multimodal support (#8957).
- Improved OpenCode gateway model discovery to automatically infer the Responses API route for unlisted models from sibling gateways and billing base variants.
- Fixed Cursor GPT-5.6 (Luna, Sol, and Terra) model discovery creating duplicate rows for each thinking tier by collapsing tiers into unified models with configurable reasoning effort (#9025).
- Fixed Google Gemini CLI model discovery failing with
403 PERMISSION_DENIEDby directing catalog refresh requests to the appropriate Antigravity discovery endpoints (#8885).
@oh-my-pi/pi-coding-agent
Added
- Added
PERSONALITY.mdsupport:~/.omp/agent/PERSONALITY.md(profile/XDG-aware agent dir) replaces the system prompt's personality block text;personality: nonestill omits the block (#8528) - Sloppy edits now support inline replacements with
⟪old│new⟫syntax (⟪old│⟫for deletions and⟪│new⟫for insertions), alongside automatic recovery for common formatting mistakes without needing a retry. - Sloppy edits now recover operations that mix
⟪old│new⟫inline replacements with a»REWRITE instead of failing the payload: a redundant REWRITE is dropped, a diverging one is applied as the final text, and a note explains the interpretation. - Expanded archive support in
readandwritetools:readcan now inspect and extract members from.rar,.7z,.iso,.cab,.deb,.rpm,.cpio,.ar/.a,.lzh,.arj, compressed tar files (.tar.bz2,.tar.xz,.tar.zst), package formats (.whl,.ipa,.xpi,.vsix,.nupkg,.cbz,.cbr),.asararchives, and single-file compressed streams;writecan create.tar.zstand update.asararchives. - Added Code Mode for Codex
code_mode_onlymodels viaproviders.openai-codex.codeMode(off/on/auto), demoting non-essential tools into an eval bridge with generated TypeScript definitions. - MCP tool names longer than 64 characters are now automatically truncated with a deterministic hash suffix to comply with strict provider validators.
- Marketplace-installed plugins with manifest settings can now be configured through
omp plugin configand Settings → Plugins. - Configured discovery providers with
authHeadernow preserve cached models across application restarts. - Added repeat read warning hints when identical file content is read multiple times.
- Explicit DAP adapters can now attach without a PID or port when
attachDefaultsprovide the target arguments. - Added
isProjectTrusted()compatibility shim toExtensionContextfor extensions targeting upstream per-directory trust gates.
Changed
- Added
compaction.asyncEnabled(default: on) to speculatively summarize context in the background before hitting threshold limits, avoiding blocking summarization pauses. - Replaced
compaction.strategyandcompaction.remoteEnabledwith an orderedcompaction.methodOrderpreference list. - Handoff maintenance (
/handoffand automatic handoff compaction) now commits generated summaries directly to the active session instead of starting a new session. - Added
extendedContextsetting (/settings→ Context → General, default: on) to optionally clamp models with premium long-context pricing tiers (such as OpenAI GPT-5.6 Sol/Terra/Luna) to standard-pricing token limits before compaction triggers. - Token counting and token estimations are now dynamically scoped to each specific model tokenizer rather than using a single process-global tokenizer.
omp cleanseand/cleansenow feature a live interactive status board displaying active checkers, repair subagents, tool metrics, and token/cost totals in real time.- Eval-bridge nested
tool.<name>()calls now enforce ACP permission gates and tool allowlists identically to direct tool calls. - Added
tokenizeroption to custom models andmodelOverridesto allow overriding the local tokenizer family for proxied model endpoints. - Added
qwenTemplateReasoningEffortto themodels.ymlcompatschema to configure or disable reasoning effort flags for strict local inference servers. - Settings menus now support click-to-toggle and drag-to-reorder for list items, as well as warning indicators and risk notes on sensitive options such as External Thinking.
- Supervised process completion notices now render as compact single-line entries.
- The todo HUD header now displays a consolidated progress bar showing task completion across all stages.
/settingsrows can now carry a risk note: a warning glyph on the row plus a warning-colored line above the description.External Thinking(externalThinking,--external-thinking) is the first user — providers have flagged the request shape it produces as abuse, up to account-level enforcement, so both the settings entry and--helpnow say so.
Fixed
- Fixed regional HTTP 401 data-residency errors during Codex chat, web search, and image generation requests by passing token residency metadata on requests.
- Fixed macOS SSH ControlMaster socket creation failures caused by
sun_pathlength limits when using named profiles. - Fixed an issue where Nix-packaged builds failed to load on-demand native addons (
onnxruntime-node/sherpa-onnx) due to missing shared C++ runtime library paths. - Fixed external editor spawning (Ctrl+G, plan review,
/todo edit) failing to attach to visible terminals for editors likeemacsclient. - Fixed
omp --resumespinning at 100% CPU when new session entries arrived during initial transcript rendering. - Fixed session resume hints and fatal exit messages omitting the active
--profileargument. - Fixed MCP OAuth authorization requests failing on pre-registered clients with restricted scopes by using RFC 9728
scopes_supported. - Fixed isolated task subagents causing out-of-memory crashes on repositories with large uncommitted binary files by pre-sizing diffs and enforcing snapshot limits.
- Fixed LM Studio and lazy-loaded local models retaining uninitialized context lengths by re-probing loaded context lengths after initial inference.
- Fixed project-scoped Claude Code marketplace plugins incorrectly loading into sessions in other projects.
- Fixed configured advisors backed by discoverable providers remaining inactive on initial session startup until manually toggled.
- Fixed resolving
--model @<role>failing for roles backed by discovery providers like oMLX, Ollama, and llama-swap. - Fixed retry fallback chains stopping prematurely when encountering nested fallback configurations, and fixed session role priority during fallback chain selection.
- Fixed cancelled prompts disappearing upon abort during turn setup, properly restoring user text and attachments to the input editor.
- Fixed built-in shell utilities (
grep,rg,diff,find,timeout,top,date,head,tail,stat,truncate,kill) across numerous POSIX/GNU/BSD compatibility edge cases and early-pipeline SIGPIPE handling. - Fixed Cursor sessions missing standard string-replacement edit tooling after server tool injection.
- Fixed
hub waitduplicating frozen rows into native scrollback during viewport overflow. - Fixed dark-theme contrast issues on markdown code-fence headers.
- Fixed prompt guidance and descriptions for Task tools and SSH usage.
- ACP editor clients that support elicitation forms (Zed) can now use
ask, so the agent can pose single-choice, multi-select, and free-text questions inline instead of guessing. /retryand/handoffnow work over ACP, so editor clients (Zed) list them and can run them instead of sending the text to the model.- Added
qwenTemplateReasoningEffortto themodels.ymlcompatschema, so the auto-enabled Qwen 3.8+ template effort dialect (chat_template_kwargs.reasoning_effort) can be switched off per provider/model for strict local servers that reject unknownchat_template_kwargs. - Extensions can provide a normalized
usageprovider throughpi.registerProvider(). Its reports now flow through AuthStorage caching, history, and usage displays, and the override is removed when the extension provider is unregistered.
@oh-my-pi/pi-natives
Changed
bun run build:nativenow builds through the local cargo/napi-rs backend by default, with Bazel available as an opt-in viaOMP_NATIVE_BUILD_BACKEND=bazelor extra Bazel arguments after--.
@oh-my-pi/snapcompact
Added
- Restored
providerFrameBudget()to allow callers to size archives according to the maximum frame budget the provider will send.
Fixed
- Fixed an issue where character-based truncation could split inline base64 data URLs into corrupted payloads that were rejected by OpenAI-compatible providers. Data URLs are now replaced atomically with placeholders before truncation, and previously affected archives are healed during re-compaction.
@oh-my-pi/pi-tui
Added
- Added optional
getNativeScrollbackLiveRegionPinnedStart()hook to allow nested transcripts to pin a later dashboard without shifting the earliest live seam.
@oh-my-pi/pi-utils
Added
- New unified archive API
@oh-my-pi/pi-utils/ar, providing anopenArchive/ArchiveReaderinterface across formats (including ZIP/ZIP64, tar with gz/bz2/xz/zst compression, ASAR, RAR 4/5, 7z, ISO 9660, CAB, cpio, RPM, Unix ar, Debian packages, LZH, ARJ, and single-stream compressed files) with lazy ranged reads for local files or HTTP range requests viahttpByteSource, size limits, symlink-safe extraction, and deterministic archive creation for zip, tar, tar.gz, tar.zst, and asar.
What's Changed
- fix(task): bound isolation baseline capture to avoid host OOM by @roboomp in #8992
- fix(retry): reach a fallback model's own chain instead of burning the budget on it by @STRML in #9000
- fix(providers): refresh LM Studio runtime context after JIT load by @roboomp in #9002
- fix(extensions): expose project trust to improve extension compatibility by @CallumWayve in #9007
- fix(advisor): activate enabled advisor after model discovery settles by @roboomp in #9014
- fix(ai): strip MCP x-mcp-header annotation from Google/CCA schema by @roboomp in #9017
- fix(cli): include active profile in session resume hint by @roboomp in #9020
- fix(catalog): collapse cursor gpt-5.6 effort siblings by @roboomp in #9026
- fix(ai): retry provider-requested OAuth refresh by @usr-bin-roygbiv in #9038
- feat(acp): expose the ask tool through elicitation forms by @joseotaviorf in #9042
- fix(discovery): isolate Claude project plugins by @roboomp in #9044
- fix(tools): correct SSH guidance tool names by @MikeeI in #9045
- fix(coding-agent): clarify task spawn-policy defaults by @MikeeI in #9046
- fix(coding-agent): correct task overlap guidance by @MikeeI in #9047
- fix(catalog): correct gemini cli discovery endpoint by @roboomp in #9051
- fix(pi-builtins): accept pgrep -q on linux by @szavadsky in #9055
- fix(natives): cover prompt-or-granted desktop permission state by @szavadsky in #9056
- fix(cursor): honor standard proxy env vars on the HTTP/2 run path by @roboomp in #9059
- fix(catalog): disable forced tool choice for OpenCode Responses by @bchap1n in #9060
- fix: cap snapcompact frames at the provider image budget by @Thytu in #9061
- fix(snapcompact): elide inline base64 data URLs before truncation by @oshinop in #9066
- fix(ssh): bound control-path under sun_path for macOS profiles by @roboomp in #9072
- fix(coding-agent): restore inherit stdio for external editor by @roboomp in #9079
- feat(acp): expose /retry and /handoff over ACP by @joseotaviorf in #9081
- fix(catalog): route LiteLLM OpenAI models through Responses by @jbkkd in #9085
- fix(ai): never resend unsigned Bedrock reasoning content on replay by @acomito in #9086
- fix(nix): preload libstdc++ so runtime-downloaded addons load on NixOS by @lz37 in #9091
- fix(auth): stop concurrent xAI OAuth refresh replay by @roboomp in #9093
- docs(context-files): document disabling a single context file by @Honza-Jelinek in #9097
- fix(mcp): prefer RFC 9728 resource scopes over auth-server catalogue by @roboomp in #9100
- fix(tui): bound the resume transcript replay restart loop to stop 100% CPU livelock on --resume by @Mustaqeem66 in #9101
- fix(dap): support preattached GDB remote adapters by @CoffeeImpliesCode in #9107
- fix(plugins): expose marketplace plugin settings by @roboomp in #9109
- fix(catalog): cap Vercel Muse Spark contributor output tokens by @jnyross in #9115
- fix(models): restore auth headers for discovery cache by @roboomp in #9117
- fix(theme): make markdown code fence borders legible on dark themes by @Mustaqeem66 in #9118
- fix(tui): stop hub wait from smearing job rows into scrollback by @shentry in #9121
- fix(nix): give dlopen'd ONNX addons a libstdc++ path by @labi-le in #9127
- fix(ai/providers): declare Codex workspace data residency from token claims by @DusKing1 in #9128
- fix(lsp): hard wall-clock bound on per-server diagnostics pipeline (edit tool hang) by @Mustaqeem66 in #9129
- fix(mcp): cap minted tool names at 64 chars by @roboomp in #9131
- fix: heal Qwen XML tool-call markup by @jzupnick in #8945
- fix(ai): execute Cursor native StrReplace editToolCall by @eggpeat in #8946
- fix(coding-agent): preserve shell operators after internal URLs by @sundbp in #8959
- fix(advisor): defer in-progress non-blocker advice instead of dropping it by @barthazian in #8960
- fix(tui): stop scrollback row loss across mux height-only resizes by @ephraimduncan in #8961
- fix(sdk): refresh discoverable providers for deferred role aliases by @roboomp in #8972
- fix(coding-agent): stop shared-role yaml order stealing retry fallback by @atacolak in #8984
- fix(ai): strip deprecated/readOnly/writeOnly/$comment annotation keywords from CCA/Google tool schemas by @daviddatuX25 in #8994
- fix(ai): forward OMP system prompts on Cursor requestContext.rules by @atacolak in #8997
- fix(catalog): recover opencode-go muse-spark thinking levels by @Unravl in #8999
- feat(coding-agent): support extension usage providers by @CallumWayve in #9006
- fix(ci): fetch crates before the offline cargo-deny check by @svperfecta in #9156
New Contributors
- @CallumWayve made their first contribution in #9007
- @bchap1n made their first contribution in #9060
- @oshinop made their first contribution in #9066
- @jbkkd made their first contribution in #9085
- @acomito made their first contribution in #9086
- @lz37 made their first contribution in #9091
- @Honza-Jelinek made their first contribution in #9097
- @CoffeeImpliesCode made their first contribution in #9107
- @jnyross made their first contribution in #9115
- @shentry made their first contribution in #9121
- @labi-le made their first contribution in #9127
- @DusKing1 made their first contribution in #9128
- @jzupnick made their first contribution in #8945
- @barthazian made their first contribution in #8960
- @daviddatuX25 made their first contribution in #8994
Full Changelog: v17.4.0...v17.4.1