Company

can1357 profile

Everything can1357 ships that we track: 1 AI coding tool. Last shipped 2h ago.

Tools tracked
1
Ships · 90 days
40
Last shipped
2h ago
GitHub stars
36k

Products

can1357 tools

Release history

Recent updates

TodayOct 20, 2026

Release v18.12.4

Oh My Pi v18.12.4

@oh-my-pi/pi-agent-core Fixed Enabled native compaction for supported Bedrock Claude models (#16343 by @anatoli-tsinovoy) @oh-my-pi/pi-ai Added Added opt-in reclaimAbovePct to auth.accountPolicies: sessions automatically moved to a lower-priority account…

Read full notes

@oh-my-pi/pi-agent-core

Fixed

@oh-my-pi/pi-ai

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

@oh-my-pi/pi-catalog

Added
  • Added native Inception support with Mercury 3, Mercury 2.5, and Mercury 2, live chat-model discovery, API-key login, reasoning controls, and Mercury 3 launch pricing while its catalog reports none; Mercury 3 waits up to 10 minutes for its first output, since high-effort reasoning streams nothing (#16439 by @eggpeat)
Changed
  • Changed Devin model discovery to send legacy Windsurf Enterprise keys unprefixed in one request, dropping the Windsurf-editor retry that returned a smaller model list (#13677 by @will-bogusz)
Fixed
  • Factory Droid now carries Droid's 3.5 MB inline-image budget (inline-image-byte-budget) for its hosted routes, under their 4.5 MB request limit, and the new request-body-byte-limit axis (resolveRequestBodyByteLimit) records that limit; it applies on Factory's own hosts through pi-ai's reachesBudgetedHost (#16288 by @will-bogusz)
  • DeepSeek V4.1 Flash images are now priced by DeepSeek's own billing (994 tokens for a snapcompact frame) instead of a GPT or Claude rate (2,882 to 3,136), so a 25-frame archive no longer counts about 50k tokens the provider never bills and triggers compaction early (#16418 by @will-bogusz)
  • Fixed Amazon Bedrock Kimi K3 (global./us.moonshotai.kimi-k3) offering Anthropic-style thinking budgets it ignores; it now offers low, high and max effort, defaulting to max (#13697 by @alblez)
  • Marked supported Bedrock Claude models as eligible for native compaction (#16343 by @anatoli-tsinovoy)

@oh-my-pi/pi-coding-agent

Added
  • bash tool commands now see PI_SESSION_ID and PI_SESSION_FILE, so a script can find the running session's ID and transcript path (#16442 by @johnrichardrinehart

…

YesterdayOct 19, 2026

Release v18.12.3

Oh My Pi v18.12.3

@oh-my-pi/pi-agent-core Added AgentTool gained the optional approvalCacheTargets hook, which the always-ask-cached approval mode uses to check and record per-file grants (#16049 by @Peribunt) Changed Tools with lenientArgValidation now receive unknown root…

Read full notes

@oh-my-pi/pi-agent-core

Added
  • AgentTool gained the optional approvalCacheTargets hook, which the always-ask-cached approval mode uses to check and record per-file grants (#16049 by @Peribunt)
Changed
  • Tools with lenientArgValidation now receive unknown root arguments that their closed schema would otherwise drop, so they can reject them (#16317)

@oh-my-pi/pi-ai

Added
  • Added validateToolArguments(tool, call, { keepUnknownRootKeys: true }) to keep unknown root keys that a closed schema would otherwise drop during argument repair (#16317)
Fixed
  • Fixed Claude streams that a gateway cut off before message_delta failing the turn instead of being retried (#16341 by @lz-lunzi)
  • Fixed Gemini pairing parallel same-name tool results with the wrong call when history stores them out of call order (sessions from before 18.4.2, SDK-built contexts) (#16259 by @will-bogusz)
  • Fixed Factory Droid Gemini dropping calls to tools with names over 64 characters (most MCP tools) and their results from later requests, so the model called the tool again; such names now shorten to 64 characters (#16283 by @will-bogusz)
  • Fixed Factory Droid Gemini requests failing with 400 "For schema with items, schema type should be ARRAY" when a tool parameter accepts a string or a list, as the default task tool's model field does (#16249 by @will-bogusz)
  • Fixed PI_REQ_DEBUG=1 request dumps writing your API key, bearer token and response cookies to disk in plain text: credential headers now read [redacted], as in rejected-request dumps (#16293 by @will-bogusz)
  • Fixed finalized signed reasoning disappearing from displayed thinking when no deltas streamed (#16227)

@oh-my-pi/pi-catalog

Changed
  • MiniMax MiniMax-M3.1-Flash (the launch id) now gets the always-on low–max thinking the bundled MiniMax-M3.1-Flash-Preview rows have, and omits sampling params (temperature, top_p, top_k) it rejects (#16315 by @SaladDay)
Fixed
  • Gemma 4 models on Google AI Studio (google/gemma-4-31b-it, google/gemma-4-26b-a4b-it, …) no longer fail every request with Thinking budget is not supported for this model; thinking is now toggled with thinkingLevel (on = high, off = minimal) (#16350)

@oh-my-pi/pi-coding-agent

Added
  • Added the Ask and remember approval mode (tools.approvalMode: always-ask-cached, --approval-mode always-ask-cached): it also asks before file reads, and file prompts can remember the folder or the file, for this session or across sessions, through approval-cache.db (#16049 by @Peribunt)
  • Added /forget-approvals to forget every file and folder approval Ask and remember has recorded (#16049 by @Peribunt)
  • Extension ui.approve() hosts can render the new prompt.grants choices and answer { grant, always }; hosts that ignore them keep answering once/session/deny (#16049 by @Peribunt)
  • Extension and custom tools can declare approvalCacheTargets to take part in Ask and remember grants (#16049 by @Peribunt)
  • Added proc://<id>/streams for bash jobs: it lists the command's pipes, and proc://<id>/streams/<n> shows what has crossed pipe n so far, so cmd | tail -5 can be followed live without rerunning cmd
  • Background job widgets are designed per job by the new widget model role (resolves like smol until you assign it): one request writes rules that read the job's output and its pipes (cmd | tail included), and every later update is computed locally with no further model calls or messages to the agent; a subagent gets a widget only once it says which output shows its progress, and a job with nothing worth charting gets none; turn them off with async.widgets: false
  • Running subagents now show their current step, in their own words, on the task card; the periodic completion check also asks the subagent which output shows its progress, so the job widget knows what to chart
  • The wait card shows the watched jobs as a row of tiles, each with its status, name (a subagent's in full), what it is doing, and its headline figure and live widget when it has one (a throughput chart with its target line, per-model bars, CI job status, trial progress), and a subagent's own completion estimate as a ring that turns from blue to green as it fills (hover the tile for the percentage); the HUD jobs pill shows the freshest job's headline and a mini chart, and hovering it opens a card with the running jobs as tiles; the jobs sheet shows the selected job's widget above its output, and the terminal status line appends the headline to the jobs count
Changed
  • While a subagent is focused, /model, /switch, /effort, Alt+P, Ctrl+P, and Shift+Tab change that subagent's model and thinking level (session-only) instead of telling you to return to the main session; /model and Alt+M open the session-only picker there, since role assignments configure the main session
Fixed
  • Fixed omp skill list omitting skills from a skills.customDirectories entry that starts with ~; such an entry now resolves against your home directory, matching the skill loader (#16347 by @yuzu-octopus)
  • Fixed grep treating a ;-separated list of internal URLs (e.g. artifact://44;artifact://43) as one URI and refusing to search it; every listed resource is now searched (#14091)
  • Fixed grep refusing a web URL that carries a :raw (or :conflicts) selector before the page was fetched; the selector now reaches the fetch, so :raw searches the verbatim response body (#14092)
  • Fixed browser role/<role>[name="…" exact] selectors in Chromium and Tern tabs matching nothing for many names copied from observe(); a button or link with visible text is no longer matched by its title (#16252 by @will-bogusz)
  • Fixed /tan clones with Mnemopi auto-recall re-sending the parent's recalled memories as an extra system-prompt block, which duplicated them and missed the parent's prompt cache (#16337)
  • Fixed legacy pi extensions that import contentText from pi-ai or formatSkillsForPrompt

…

Sunday, October 18Oct 18, 2026

Release v18.12.2

Oh My Pi v18.12.2

@oh-my-pi/pi-agent-core Changed The failed-tool-call correction sent to DeepSeek models now also covers chat-template tool-call tokens written out as text, not only malformed DSML (#16216 by @H4vC) Fixed Fixed Ollama chat history estimates counting stripped…

Read full notes

@oh-my-pi/pi-agent-core

Changed
  • The failed-tool-call correction sent to DeepSeek models now also covers chat-template tool-call tokens written out as text, not only malformed DSML (#16216 by @H4vC)
Fixed
  • Fixed Ollama chat history estimates counting stripped native thinking and missing foreign thinking replayed as text, which skewed compaction after model switches (#16164)

@oh-my-pi/pi-ai

Added
  • Added nativeJudgmentImageBounds(): the image bounds a native judge enforces, its wire's transport limits tightened by the catalog's model bounds
  • Added Box judgment questions (BoxQuestion/BoxAnswer, TypeSafe Jev 1.14+ direct or through OpenRouter): each names the request image it searches by image index, and comes back as that image's edges as 0–1 fractions; text, OpenAI Decisions, and Workers AI judges reject them
Fixed
  • Fixed Muse Code usage going stale whenever its 5-hour window sits idle: the idle window now reports as unused, and weekly usage carries over from the last active window until its reset (#16193 by @eggpeat)
  • Fixed DeepSeek tool calls never running when the model writes them as chat-template tokens with _ in place of ▁, a missing |, or no per-call close (e.g. <|tool_calls_begin|>…<|tool_calls_end|>): they now run as tool calls, and any that still cannot be parsed are removed from history and reported to the model as a failed call (#16216 by @H4vC)

@oh-my-pi/browser-relay

Fixed
  • Fixed a relay tab close failing when Chrome refuses it for a moment (a tab being dragged); the extension retries it (#16119 by @will-bogusz)
  • Fixed tabs created for a relay request whose connection dropped mid-create staying open, and answers to such requests going to a later connection (#16119)
  • Fixed the relay resolving an old tab id to a different tab after a browser restart; the extension now reports each browser run (#16119)

@oh-my-pi/pi-catalog

Changed
  • Seeded TypeSafe jev-1.14.0 and OpenRouter typesafe/jev-1.14, and made them the judge role defaults and TypeSafe's default model; TypeSafe discovery keeps seeded ids its alias-only /v1/models listing omits

@oh-my-pi/pi-coding-agent

Added
  • Added computer.backgroundFallback (takeover by default, or refuse): when a computer window input call has no background route, the tool reruns that one call in takeover, hands focus back to your app and says so in its result; refuse fails the call instead and also refuses the agent's own foreground requests (takeover: true, raise(), an activating apps.open, desktop input, and on macOS menus and AXOpen) (#15191 by @will-bogusz)
  • Added DeepSeek as a web search engine (web/deepseek), using DeepSeek's new Search API with your existing DEEPSEEK_API_KEY or stored deepseek credential
  • Added el.selectText(text, { prefix?, suffix?, select? }) to the macOS computer tool: it selects text (or places a caret) in a background app's text field without taking focus, moving the pointer or sending keys, so typing into that field replaces it (#15175 by @will-bogusz)
  • Added { takeover: true } to computer-use win.move, so a hover that a window refuses in the background can be retried in the foreground (#15173 by @will-bogusz)
  • Added a menu option to the computer tool's win.click, el.click, el.press and el.perform, so on macOS the call that opens a menu also chooses its item, e.g. menu: ["Add to", "Fonts"] (#15185 by @will-bogusz)
  • Added el.type(text) and el.press(chord) to the computer tool, which send text and keys to that element instead of wherever its window's focus is; on macOS and Windows nothing is sent when the element cannot be addressed without taking your focus (#15563 by @will-bogusz)
  • Added: pressing Escape during takeover input now stops computer use for the rest of the turn, and that session's later computer calls are refused, unsent, until your next message (#15564 by @will-bogusz)
  • Added the computer tool's UserIntervened error on macOS: input into an app you have used since the agent last read its window fails without sending, and the agent is told to read the window again and keep your edits (#15562 by @will-bogusz)
  • Added tui.completeScrollback: rows a growing HUD or dialog pushes off screen go straight to scrollback instead of missing from it until it shrinks (#15692 by @Ilm-Alan)
Changed
  • The computer tool and its errors no longer tell the model to retry with takeover: true, and its instructions tell it never to call raise() or apps.open(…, { activate: true }) to make input work (#15191 by @will-bogusz)
  • Computer-use window input with takeover omitted now stays in the background after computer.control.acquire, so an acquired grant no longer activates the target app or moves the user's pointer; pass takeover: true for foreground input (#15173 by @will-bogusz)
  • Pressing Escape in your own app no longer stops the computer tool's background window input unless task control is held; Escape in omp still interrupts it, and physical Escape still stops takeover input (#15176 by @will-bogusz)
  • Added Box questions to ChainJudge: they go only to Jev judges that answer them, and the box edges measure the image you passed even when it was padded to fit Jev's size bounds
  • A relay browser.open without app.target now opens its own background tab instead of adopting the visible one (after reinstalling the relay extension; older ones select it), and browser.close closes it; app.target still borrows an existing tab (#16119 by @nnnnoel and @will-bogusz)
  • Computer-use win.menu.items now needs exec approval and is rejected in read_only runs, since on macOS it makes the window key in its own application before reading its menus (#15184 by @will-bogusz)
  • The computer

…

Saturday, October 17Oct 17, 2026

Release v18.12.1

Oh My Pi v18.12.1

@oh-my-pi/pi-ai Fixed Fixed every request failing behind a TLS-inspecting proxy that refuses compressed uploads: a 400/403/415 whose body is not JSON, or the Anthropic API's "request body is not valid JSON" after a proxy drops Content-Encoding, now resends the…

Read full notes

@oh-my-pi/pi-ai

Fixed
  • Fixed every request failing behind a TLS-inspecting proxy that refuses compressed uploads: a 400/403/415 whose body is not JSON, or the Anthropic API's "request body is not valid JSON" after a proxy drops Content-Encoding, now resends the body uncompressed and stops compressing for that host (#16108 by @alphastorm)

@oh-my-pi/pi-catalog

Fixed
  • Anthropic's request-encoding-rejection now also matches the API's "request body is not valid JSON" 400, which a gzip body gets when a proxy drops its Content-Encoding header (#16108 by @alphastorm)

@oh-my-pi/pi-coding-agent

Breaking Changes
  • Removed display() from eval in both Python and JavaScript; print (and console.log in JavaScript) covers it
Added
  • Added advisor.continueSeverity (nit, concern, blocker) to choose the minimum advisor note severity that wakes the agent after it finished with a final answer; lower-severity notes stay as a card at the end of the transcript
  • Printed DataFrames/Series render as tables, large dicts/lists and objects as JSON trees, and Markdown objects as Markdown for the user, while the model sees the printed text
  • Printing a figure or image in eval attaches the image to the result
Changed
  • An advisor concern raised after the agent's final answer now continues the run by default instead of waiting at the end of the transcript; set advisor.continueSeverity to blocker for the previous behavior
Fixed
  • Fixed context-file @ imports failing to load paths containing backslash-escaped spaces (#16090)

@oh-my-pi/pi-natives

Fixed
  • Fixed native memory growing without bound, and eventually crashing the process, when files in a downloaded (WASM) grammar language such as C# were parsed repeatedly (#16067)

@oh-my-pi/pi-tui

Breaking Changes
  • numberedCode, readContentCode and nativeDiff take the file's path (path) instead of a language, and describeGroupedOutput drops its lang option: Tern picks the grammar of file contents from their path
Changed
  • Advisor notes in Tern read as a callout tinted by their worst severity: its icon and a tally (Concern, 1 blocker · 2 concerns) head the card with the advisor's name at the end, and several notes each lead with their own severity icon
Fixed
  • Fixed images rendering blank inside tmux on Kitty-capable terminals when tmux's allow-passthrough is off (the default); omp now falls back to SIXEL or the text placeholder instead of sending Kitty graphics tmux drops
  • Fixed Tern drawing tool cards' file contents (write, read, edit, grep, find, ast-grep, ast-edit) plain or in the wrong language when omp did not know the file's extension (.ptx) or mapped it to a neighbor (.cu as C++); omp now sends the file's path and Tern picks the grammar

What's Changed

Full Changelog: https://github.com/can1357/oh-my-pi/compare/v18.12.0...v18.12.1

Release v18.12.0

Oh My Pi v18.12.0

@oh-my-pi/pi-agent-core Fixed Fixed Cursor turns failing with PROVIDER_ERROR when a follow-up (a finished background job, a late diagnostic, a reminder) arrived while the previous turn was still streaming (#15821 by @robfeldmann) @oh-my-pi/pi-ai Breaking…

Read full notes

@oh-my-pi/pi-agent-core

Fixed
  • Fixed Cursor turns failing with PROVIDER_ERROR when a follow-up (a finished background job, a late diagnostic, a reminder) arrived while the previous turn was still streaming (#15821 by @robfeldmann)

@oh-my-pi/pi-ai

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

@oh-my-pi/pi-catalog

Added
  • Added the request-encodings, request-encoding-rejection, and endpoint-hosts rule axes, resolveRequestCompression(model, url), and isCatalogEndpointUrl(model, url), declaring which providers' own endpoints decode compressed request bodies: official Anthropic API (gzip), Codex backend (zstd), and GitHub Copilot's API hosts (zstd, then gzip); Moonshot's China host counts as its own endpoint (#16086 by @H4vC)
Changed
  • Bundled GPT-5.4 rows on OpenAI, Azure, OpenCode Zen, and Command Code report a 1M context window, the window the coding agent already applied at runtime; GitHub Copilot and Factory Droid keep their own windows (#16094 by @H4vC)
Fixed
  • Fixed custom providers that declare a built-in providerType (Azure, GitHub Copilot, OpenCode, ClinePass, DeepSeek, NVIDIA) missing that provider's wire quirks, such as strict Responses pairing and the ClinePass reasoning field: they now follow the same catalog rules as the built-in provider (#16093 by @H4vC)
  • Fixed OpenCode Zen bringing back its retired bundled models after a failed refresh: the retry-backoff write no longer drops the cached snapshot's retention, so the pruned catalog survives the retry window and offline launches. (#16054 by @adi-IL)
  • Fixed providers.cacheWarming never arming for Claude on Google Antigravity: Claude models there now declare Vertex Anthropic's five-minute prompt-cache lifetime; Gemini models stay unwarmed because Google's implicit cache has no fixed lifetime (#15764, #16025 by @harshaygadekar)
  • Scoped Jev image bounds to the selected models instead of applying them to unrelated native judges (#16002 by @anatoli-tsinovoy)
  • Fixed Bedrock sessions rejecting replayed tool names over 64 characters after a model switch (#15839)

@oh-my-pi/pi-coding-agent

Added
  • Added statusLine.segmentOptions.pi.showProfile: set it to false to hide the profile name next to the π brand, for example when each profile already has its own theme (#16063 by @shgew)
  • Added sharpshooter.minPromptLength (default 16, minimum 2) to control the shortest prompt Sharpshooter extracts decisions from (#16043 by @bigHippoZz)
Changed

…

Friday, October 16Oct 16, 2026

Release v18.11.3

Oh My Pi v18.11.3

@oh-my-pi/pi-agent-core Added prepareQueuedMessages receives which queue (steering or followUp) a batch came from (#16026) @oh-my-pi/pi-ai Fixed Fixed JSON Schema dereferencing rewriting literal values in const, enum, default, examples, and custom annotations,…

Read full notes

@oh-my-pi/pi-agent-core

Added
  • prepareQueuedMessages receives which queue (steering or followUp) a batch came from (#16026)

@oh-my-pi/pi-ai

Fixed
  • Fixed JSON Schema dereferencing rewriting literal values in const, enum, default, examples, and custom annotations, or treating property names as schema keywords (#15927 by @jchanghong023).
  • Fixed Anthropic requests hanging forever on Bun 1.3 when the upstream accepted the request but never sent headers: aborting the request (including the first-event timeout) now fails it, so the turn retries instead of waiting until the user interrupts it (#16010 by @ca-io-systems)
  • Fixed the auth gateway's POST /v1/chat/completions streams being dropped (terminated) after ~255 s without upstream output, e.g. while xAI generates a large tool call's arguments, which arrive only when complete; the stream now sends an SSE : keepalive comment every 15 s (#15940 by @radkawar)
  • Fixed Anthropic models with mid-conversation system messages (e.g. Claude Opus 5.5) receiving @file mention contents and hidden extension messages as a trailing system message instead of ending the request on the user's turn (#15881)

@oh-my-pi/pi-catalog

Changed
  • Renamed the built-in google-antigravity login option to "Google Antigravity (Gemini, Claude, GPT-OSS)" so it is distinguishable from similarly named third-party plugins and no longer implies support stops at Gemini 3 (#15998 by @savanne-kham).
Fixed
  • Fixed Command Code's z-ai/glm-5.3-flash failing every request with "not available on this endpoint": the catalog routes it to chat completions, the only endpoint Command Code lists for it (#15922 by @jasonharrison)
  • Fixed /handoff failing with 400 Provider returned error on OpenRouter's hosted Muse Spark 1.x and Muse Wonder models: requests no longer send a tool_choice the upstream Meta backend rejects (#15910)
  • Fixed OpenCode Zen bringing back retired bundled models from an authoritative model cache, and dropping drop-listed models such as gemini-3.7-flash when a refresh fails after an upgrade (#15770 by @adi-IL)

@oh-my-pi/pi-coding-agent

Breaking Changes
  • Extension ui.approve() hosts receive an optional session choice label and answer "once", "session", or "deny" instead of a boolean
Added
  • Added imageCountBudget to custom models and modelOverrides in models.yml, so a custom gateway can state its host's image limit instead of the default of 5; past that limit the oldest images were dropped on every new image, which rewrote the provider's prompt cache (#15002, #15969 by @aramalipoor)
  • The status line names the active profile next to the π brand (π-work), so sessions from different profiles are distinguishable at a glance; the default profile is unchanged (#15622 by @matthewrball)
  • Added opt-in prewalk.auto (off, suggest, or on): the native judge decides per task whether to arm a prewalk handoff to prewalk.autoTarget, and the next task starts back on the planning model (#16026 by @taibenvenuti)
  • Added /seance and the task seance agent: consult a saved session read-only, in place, without resuming it or copying its artifacts; pick the source and an optional model from pickers, and send follow-ups to the consultant (#15036 by @anatoli-tsinovoy)
Changed
  • Tool approval prompts list Approve, Approve <tool> for this session, and Deny again: with an empty composer, pick with the arrow keys and Enter; typing in the composer denies and steers instead, and the Deny row reads "Deny and send message" while you do
Fixed
  • Fixed the Isolate Subagents setting description implying that all tasks run isolated; each task must opt in with isolated: true (#15987).
  • Fixed read labeling re-encoded images with the display format instead of the source file's format; it now identifies both when they differ (#15890).
  • Fixed omp -p and task subagents reporting a clean finish with an earlier answer when a context overflow could not be compacted enough to retry; the overflow error is now the run's outcome (#15897 by @nhthung)
  • Fixed Cursor's Shell tool killing commands once its block_until_ms wait elapsed; the wait no longer sets the kill deadline, which comes from Cursor's hard_timeout or the bash default (#15898 by @nhthung)
  • Fixed an interrupted prompt's late setup cleanup marking the next prompt idle early, allowing overlapping submissions and releasing sleep prevention mid-turn (#15946)
  • Fixed hashline REM hiding the path-recovery warning when a nonexistent path matched an earlier-read file (#15957).
  • Fixed tool downloads (sd, sg, yt-dlp, trafilatura) failing with GitHub API error: 403 on a machine whose egress IP has spent GitHub's anonymous 60/hour budget; the release lookup now sends GITHUB_TOKEN/GH_TOKEN like omp's other GitHub API call sites (#15981 by @iacore)
  • Background local memory extraction now stops after one bounded retry budget on repeated OpenAI-compatible 429 responses instead of multiplying transport, provider, and completion retries (#15826).
  • Fixed a message-result subagent resumed by typing into its focused session leaving agent://<id> empty and never reporting its final reply to the parent (#15948)
  • Fixed read of an RSS or Atom feed showing Untitled for every item and dropping feed titles, descriptions, dates, and RSS item links (#15954)
  • Fixed read showing a binary notice instead of an HTML page when a server sends unlabeled gzip to the first request but decodable HTML to the second (#15956)
  • Fixed read returning a homepage's site-wide feed or a page's site-wide llms.txt alternate instead of the requested page (#15955).
  • Fixed ast_grep

…

Release v18.11.2

Oh My Pi v18.11.2

@oh-my-pi/pi-agent-core Added agent_start carries resumedToolCallIds when a continued run first executes the calls of an unpaired assistant tail Fixed Cancelling an ask after a background job finishes now reports the user cancellation instead of telling the…

Read full notes

@oh-my-pi/pi-agent-core

Added
  • agent_start carries resumedToolCallIds when a continued run first executes the calls of an unpaired assistant tail
Fixed
  • Cancelling an ask after a background job finishes now reports the user cancellation instead of telling the model to retry a skipped tool (#15985)

@oh-my-pi/pi-ai

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

@oh-my-pi/pi-catalog

Added
  • Added keep-bundled-names catalog attribute to preserve static model display names during discovery
  • Updated openai-codex provider configuration to prevent model name regressions during live discovery
Changed
  • GPT Image models (gpt-image-*, chatgpt-image-*) now classify as their own gpt-image family instead of gpt or chatgpt, so GPT chat-model rules no longer apply to them (#14619 by @jimhester)
Fixed
  • Fixed OpenCode Zen Gemini 4 Argon failing with an unsupported protocol; it now uses the native Gemini endpoint (#15977).

@oh-my-pi/pi-coding-agent

Added
  • Added lsp.requestTimeout setting to configure wait durations for language server diagnostics and requests
  • Added omp auth-gateway serve --clients=<file>: per-client bearer tokens, each limited to listed models and broker OAuth accounts with no fallback to other accounts or API keys, re-read while serving (#5098, #15900 by @alphastorm)
Changed
  • The lsp tool now uses lsp.requestTimeout to dynamically adjust both call deadlines and project-aware diagnostic wait times, with support for per-call overrides
  • Reduced CPU overhead during syntax checks and automatic edit repairs (#15904 by @iliaal).
  • Reduced status-line refresh overhead while subagents have long conversations (#15874 by @iliaal).
  • Agents now send todo updates alongside their next tool call instead of spending a separate model turn on them (#15402 by @will-bogusz)
  • The Shared Language Servers setting now says what it does: each connection gets its own server, and a released one is reused while another omp instance keeps the project's mux running (#14633 by @jorgoose)
  • Memories saved explicitly through the extension memory.save API are now stored as stated rather than unknown, so they rank as deliberate memories in Mnemopi recall (#13824 by @sjawhar)
Fixed
  • Fixed prewalk switching models during read-only MCP lookups through write xd:// when the server marks the tool read-only (#15994)
  • Fixed Ctrl+C printing 9;5u in the shell after force-quitting omp with a third Ctrl+C while it was still closing the session
  • Fixed Smart unexpected-stop recovery continuing finished answers, which added extra "nothing more to add" turns
  • Fixed grep searching only the first 4 MB of a file named directly, so later matches were reported as absent; the whole file is now searched, and a multiline pattern, which still reads only the first 4 MB, says so in its no-match headline (#15942)
  • Fixed browser uploadFile

…

Thursday, October 15Oct 15, 2026

Release v18.11.1

Oh My Pi v18.11.1

@oh-my-pi/pi-agent-core Added Tokenizer.countLatestTurn: counts a message as the transcript's latest assistant turn, which an Anthropic Messages replay keeps byte-for-byte (#15791 by @will-bogusz) Agent.prioritizeSteering: moves given pending steering messages…

Read full notes

@oh-my-pi/pi-agent-core

Added
  • Tokenizer.countLatestTurn: counts a message as the transcript's latest assistant turn, which an Anthropic Messages replay keeps byte-for-byte (#15791 by @will-bogusz)
  • Agent.prioritizeSteering: moves given pending steering messages ahead of older ones so one-at-a-time delivery takes them first (#15642)
Fixed
  • Fixed a Cursor tool call re-sent by the server persisting two results under one id; the re-run's result replaces the first (#15749)
  • Fixed compaction keeping more recent history than keepRecentTokens when the latest Claude turn on the Anthropic Messages API ended its tool calls on stop or length: the replay keeps that turn's signed reasoning, but the cut point counted only its visible blocks (#15791 by @will-bogusz)

@oh-my-pi/pi-ai

Added
  • Added image support for native OpenAI Decisions and Workers AI judgments, prompted vision chat, and auth-gateway System One requests; images exceeding a judgment API's documented caps (e.g. Clef's 4 images, 4 MiB each) are rejected locally (#15471 by @anatoli-tsinovoy).
  • isSurvivingAssistant in providers/transform-messages: whether an assistant turn reaches a replay, malformed tool calls dropped first, so callers outside transformMessages pick the same latest turn (#15791 by @will-bogusz)
Fixed
  • Fixed Codex-hosted image generation ignoring the requested aspect_ratio/image_size, and 3:2/2:3 requests sending no size to OpenAI image models (#15601 by @chulmin-dev)
  • Fixed Claude subagents failing to return structured results when yield arguments arrived as invalid JSON (#15605 by @farnoy)
  • Fixed turns stopping instead of retrying when a gateway reports its upstream WebSocket closed before response.completed (#15628 by @nqrwhal).
  • Fixed Claude on Google Vertex ignoring cacheRetention: "long": prompt caches now get the 1h TTL instead of expiring after 5 minutes, and the extended-cache-ttl beta (which Vertex rejects) is never sent there (#15505 by @hpost)
  • Fixed Gemini tool continuations failing on OpenAI-compatible gateways that return reasoning_signature, including restored sessions (#15678 by @Zzz141592653)
  • Fixed Cursor sessions failing every rebuilt request with PROVIDER_ERROR after the server re-sent a tool call: the call is recorded once, and histories that already repeat it replay it once with its latest result (#15749)
  • Fixed Cursor turns cut off mid-stream failing every retry with PROVIDER_ERROR until you sent a new message; the retry now starts a fresh Cursor conversation (#15830)
  • Fixed malformed image-generation inputs being forwarded to providers or reported as credential/upstream errors (#15765 by @anatoli-tsinovoy).
  • Fixed broker-backed auth-gateway processes retaining a cache entry for every distinct client session indefinitely under sustained traffic (#15841).
  • Fixed turns ending on a pinned error when a provider reports "temporarily unavailable" or finishes with an unknown, other or unspecified finish reason: these now retry automatically (#15424 by @lockwo)

@oh-my-pi/pi-catalog

Fixed
  • Enabled long prompt-cache retention (ttl: "1h") for Claude models on google-vertex (#15505 by @hpost)
  • Fixed Gemini 4 Argon on Google Vertex and the Gemini API failing every request with "Thinking budget is not supported for this model": Gemini 4 now sends thinkingLevel instead of thinkingBudget, and Argon offers only the low, medium, and high levels Google accepts (#15643 by @kevcube)
  • Fixed the Antigravity model selector offering roster rows the backend marks disabled (disabled: true, e.g. gemini-4-argon-disabled on accounts without Argon access), which answered Cloud Code Assist API error (404): Requested entity was not found.; discovery now skips them the way it already skips isInternal rows (#15684 by @CharleoYang)
  • Removed Google Antigravity's Gemini 3.5 Flash and its gemini-3-flash alias from the model list; Antigravity retired them and answers every request with a retirement notice instead of a reply (#15445 by @will-bogusz)
  • Fixed xai-oauth Grok 4.20 models (grok-4.20-0309-reasoning, -non-reasoning, grok-4.20-multi-agent-0309) advertising a 2M context window when the SuperGrok API rejects prompts over 1M; auto-compaction and context usage now work from the 1M window (#15443 by @will-bogusz)
  • Fixed trailing-dot localhost. and *.local. custom endpoints losing local-backend compatibility settings (#15798).

@oh-my-pi/pi-coding-agent

Added
  • Added image attachments to single and batch eval judge()/judge_batch() calls (local paths or embedded images); image judgments skip candidates without image support and fail explicitly instead of dropping images (#15471 by @anatoli-tsinovoy)
  • Added a job tree to /jobs, /jobs full and the jobs pill's sheet, in the terminal UI and over ACP: subagents' background jobs now appear nested under the task that runs them, with the busiest branches listed first; only your own jobs offer Cancel (#15854 by @H4vC)
  • Added ctx.ui.getEditorComponent() so extensions can wrap the active custom editor factory instead of replacing it (#8655 by @jovi-tsx)
Changed
  • Reduced memory used by bundled model catalog data in standalone and npm installs (#15876 by @iliaal).
Fixed
  • Fixed /shake and automatic shake leaving old transcript rows in native scrollback or obscuring the start of a response beside the Todo HUD (#15877).
  • Fixed write making Rust source files beginning with #![...] executable instead of preserving their permissions (#15858

…

Wednesday, October 14Oct 14, 2026

Release v18.11.0

Oh My Pi v18.11.0

@oh-my-pi/pi-agent-core Breaking Changes Removed ApprovalDetailsOptions; formatApprovalDetails takes only args again, since the compact approval prompt no longer shows tool details (#15642 by @H4vC) Added AgentTool.delegationGuidance: instructions a same-name…

Read full notes

@oh-my-pi/pi-agent-core

Breaking Changes
  • Removed ApprovalDetailsOptions; formatApprovalDetails takes only args again, 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.lastSummarizedEntryId and CompactionResult.providerReplayThroughEntryId: a remote compaction that could only fit the history before the kept tail reports the last entry its native history covers; later entries replay normally (#15712 by @H4vC)
Fixed
  • 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 400 in their text, such as an overload message (#15702 by @H4vC)
  • Fixed Anthropic fallback-credit redemption sending an extra fallback-credit-2026-06-01 beta when the refused request used a newer one (#15702 by @H4vC)
  • Fixed Anthropic fallback-credit redemptions failing when the refused turn included unsigned thinking (#15702 by @H4vC)
  • Fixed turns ending without automatic retry when a gateway forwards Go's use of closed network connection transport error; it now retries like other dropped connections (#15385)
  • Fixed Codex SSE streams failing with an abort instead of retrying when the first event stalls (#15542)
  • Fixed Codex (ChatGPT subscription) requests with reasoning disabled, such as judges, titles, commit messages, and thinking off, leaving effort to the server default; they now send the lowest supported effort, or none where the model accepts it (#15514)
  • Fixed a Codex account whose token OpenAI rejects (401/403) continuing to show its last quota as healthy; omp usage now drops the stale report and omp auth-gateway check reports the credential as failing (#15439)
  • 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_text in 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 modified after 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/messages stream 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.6b for local streaming English dictation (#15759 by @daaximus).
  • Added SambaNova Cloud (sambanova) as a provider: /login sambanova with an API key, and the live /v1/models roster 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/v1 endpoint instead of the legacy /zen/go one (#15722)
Fixed
  • Fixed OpenCode Go's deepseek-flash alias 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 the yield tool and its output schema validation while task.structured is 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

…

Tuesday, October 13Oct 13, 2026

Release v18.10.4

Oh My Pi v18.10.4

@oh-my-pi/pi-agent-core Added AgentTool.formatApprovalDetails receives ApprovalDetailsOptions; compact: true asks for untruncated bodies so a compact approval prompt can count their lines (#15550 by @H4vC) Changed Before-model-call hooks now receive the loop…

Read full notes

@oh-my-pi/pi-agent-core

Added
  • AgentTool.formatApprovalDetails receives ApprovalDetailsOptions; compact: true asks for untruncated bodies so a compact approval prompt can count their lines (#15550 by @H4vC)
Changed
  • Before-model-call hooks now receive the loop context as a second argument, and buildProviderContext receives the summarizer model (#15436 by @will-bogusz)
Fixed
  • Fixed a Claude compaction or branch summarizer receiving assistant reasoning from a snapcompact archive rendered under another model, which Claude refuses (reasoning_extraction) (#15436 by @will-bogusz)

@oh-my-pi/pi-ai

Fixed
  • Fixed Codex cybersecurity policy errors incorrectly retrying without Daybreak and disabling it for subsequent requests, while preserving retries without Daybreak when access is rejected (#15472 by @taibenvenuti)
Removed
  • Removed the toolNamespacesInfo stream option; Codex requests no longer send tool_namespaces_info turn metadata, and code_mode_tool_names/tool_namespaces_info are no longer reserved client metadata keys.

@oh-my-pi/pi-catalog

Added
  • Added Muse Code's subscription-only Muse Wonder Full and Wonder contributor tiers with the max effort, recording API-equivalent cost instead of $0: Wonder Full at Muse Wonder's $4 input / $0.20 cached / $20 output per 1M tokens, contributor tiers at the measured $1.60 / $0.08 / $8 (#15522 by @eggpeat)
  • Added the classifier-cot-extraction rule axis, set for Claude, marking models whose classifier refuses earlier reasoning quoted back into their input (#15436 by @will-bogusz)
  • Added Gemini 4 Argon pricing on Cursor ($2 input / $0.10 cached / $10 output per 1M tokens) and Google Antigravity, which now uses Google's first-party rate instead of showing $0 (#15620 by @eggpeat)
  • Added scheduled list-price changes to cost-patch, as cost-fallback already allowed: a dated effective-rates card sets the price from its date, and each request is priced at the card in force when it was made, even on models loaded before the change, on rebuilt models, and on Cursor lanes priced from a sibling's card. A malformed dated card now fails the model build instead of silently keeping the old price. getEffectiveTokenCost returns that card for price displays, and hasRecurringTariff tells these dated-only schedules apart from peak/off-peak tariffs, which alone show a status-line arrow (#15620 by @eggpeat)
Changed
  • Devin models with a long-context price tier (GPT-5.4 through 5.6 standard lanes, GPT-6 through 6.1, Gemini Pro, and Grok 4.5 through 4.7) now default to a 272K or 200K context window, where that pricing starts; run /extended-context on to use the full window at long-context rates (#14891 by @eggpeat).
  • Devin SWE-2, SWE-1.7, and GLM-5.2 fallback pricing no longer charges cache writes at the input rate, since Devin publishes no cache-write rate for them (#14891 by @eggpeat).
  • Google Antigravity now lists Gemini 4 Argon once, with selectable low, medium, and high thinking levels, instead of a separate entry per thinking tier (#15620 by @eggpeat)
  • Gemini 4 Argon on Google, Vertex, Google Antigravity, and Cursor moves to Google's $4 input / $0.20 cached / $20 output list price on 2026-12-01 (midnight US Pacific), including requests on models loaded before then, without a catalog update (#15620 by @eggpeat)
  • Devin SWE-2's promotional fallback price now ends on 2027-01-01 for requests on models loaded before then too (#15620 by @eggpeat)
Fixed
  • Fixed Devin Claude and GPT-5.6 through GPT-6 models pricing prompt-cache writes at $0; they now use Devin's published rate of 1.25x input, and Adaptive uses its input rate (#14891 by @eggpeat).
  • Fixed Devin GPT-5.4 through GPT-6.1, Gemini Pro, and Grok 4.5 through 4.7 models missing the long-context price tiers Devin publishes above 272K and 200K prompt tokens (#14891 by @eggpeat).
  • Fixed Devin Fusion pairings ignoring their lead model's rules, including its cache-write rate and long-context tier (#14891 by @eggpeat).
  • Fixed Kilo and NanoGPT models showing stale or missing prices (for example Gemini 4 Argon at $4/$20 instead of $2/$10, and many models at $0); prices now come from each gateway's live model list (#15623 by @eggpeat)
  • Fixed NanoGPT models showing their raw id as the name and no context window (disabling auto-compaction) when the bundled catalog lacked them; names, context windows and output limits now come from NanoGPT's live model list (#15623 by @eggpeat)
Removed
  • Removed the Codex toolMode model field (code_mode_only); Codex discovery no longer maps tool_mode

@oh-my-pi/pi-coding-agent

Added
  • Extensions can observe and answer the interactive plan review, including refinement feedback and save-and-quit (#14250 by @rlfleming93)
  • Added opt-in omp gc --compress (or gc.compress), which stores sessions idle for gc.compressAfterDays (default 7) with filesystem transparent compression (APFS, NTFS); they stay resumable and searchable (#15600 by @wolfiesch)
  • Extensions can reopen a dismissed plan review while the session is idle (ctx.openPlanReview()) and pick the execution tier on ctx.resolvePlanReview (input.role); plan_review_requested now reports the slider's tiers (#15552 by @Shadorain)
Changed
  • Tool approval prompts now replace the composer like ask, show one row per detail, and approve with Ctrl+Enter (or Ctrl+Q) instead of Enter (#15548 by @H4vC)
Fixed
  • Fixed late completion probes rewinding resumed conversations and stale history scans lowering parked subagent costs (#15594 by @anatoli-tsinovoy).
  • Fixed read.renderMarkdown having no effect on plain-file reads: inline read previews now render Markdown files as formatted Markdown instead of numbered source (#15007).

…

Monday, October 12Oct 12, 2026

Release v18.10.3

Oh My Pi v18.10.3

@oh-my-pi/pi-agent-core Breaking Changes Removed estimateImageContentTokens() from @oh-my-pi/pi-agent-core/image-tokens; use Tokenizer.imageTokens(size, detail), which prices with the reading model's catalog image rule (#15446 by @will-bogusz)…

Read full notes

@oh-my-pi/pi-agent-core

Breaking Changes
  • Removed estimateImageContentTokens() from @oh-my-pi/pi-agent-core/image-tokens; use Tokenizer.imageTokens(size, detail), which prices with the reading model's catalog image rule (#15446 by @will-bogusz)
  • applyShakeRegion() and applyShakeRegions() take the replacement's token count (replacementTokens); a block rewrite of an assistant turn adds the tokens it removes to elidedOutputTokens, so a replayed Claude turn's count stays lowered after a reload (#15446 by @will-bogusz)
Fixed
  • Fixed Claude context counts reading Opus 5.5 requests about 55% over their billed input: a replayed thinking turn now counts at the output size Claude billed for it, not its signature's bytes (#15446 by @will-bogusz)
  • Fixed screenshots and other non-frame images being counted at the OpenAI rate for every model instead of the reading model's own; Claude billed them about 16% higher (#15446 by @will-bogusz)
  • Fixed OpenAI Responses and Codex context estimates leaving out replayed reasoning: each turn whose encrypted reasoning actually replays now counts its reported reasoning tokens (its ciphertext when the backend reports none), and none while a cold session rebuilds it out of the request, so compaction and snapcompact sizing match billing; branch summaries no longer budget for encrypted reasoning they never send (#15447 by @will-bogusz)

@oh-my-pi/pi-ai

Breaking Changes
  • isOfficialCodexApiUrl moved from @oh-my-pi/pi-ai to @oh-my-pi/pi-catalog/wire/codex, next to CODEX_BASE_URL, so the catalog's compat resolver classifies Codex endpoints with the same check (#15434 by @will-bogusz)
Added
  • Added withoutUnverifiedThinking utility to filter reasoning capability from models when no effort is requested
  • Added reachesOfficialEndpoint(model): whether a request to the model reaches the official endpoint its compat was built for, following ANTHROPIC_BASE_URL and Foundry's FOUNDRY_BASE_URL reroutes of first-party Anthropic models (#15434 by @will-bogusz)
  • Added AssistantMessage.elidedOutputTokens, the visible output tokens a history rewrite (shake) has removed from the turn, which usage.output still counts (#15446 by @will-bogusz)
  • Exported shouldDropTruncatedThinkingOnlyAssistant from providers/transform-messages, isColdReplayableResponsesTurn from providers/openai-shared and the new openAIResponsesReplaysNativeHistory from providers/openai-responses, so local token estimates can follow which turns replay drops and whether a session replays native history (#15447 by @will-bogusz)
Fixed
  • Fixed Claude on Google Antigravity failing every turn with "image exceeds 5 MB maximum" once a large image entered the conversation; images are now downscaled to the host's limits before sending, as on the Anthropic API (#15444 by @will-bogusz)

@oh-my-pi/pi-catalog

Breaking Changes
  • resolveInlineImageByteBudget(model, officialEndpoint) and resolveImageCountBudget(model, officialEndpoint) take whether the request reaches the official endpoint instead of reading compat.officialEndpoint, which misses request-time reroutes such as ANTHROPIC_BASE_URL; pass pi-ai's reachesOfficialEndpoint(model) (#15434 by @will-bogusz)
Added
  • Added Muse Wonder (muse-wonder-1.0) to Meta and Muse Code with its minimal–max effort ladder and pricing
  • Added the thinking-unverified rule axis: on hosts whose model list carries no capability metadata (Meta, Muse Code), unrecognized models now offer an opt-in thinking ladder (ThinkingConfig.unverified) instead of none
  • Added thinking-unverified axis for offering reasoning ladders on unclassified model IDs
  • Added Muse Wonder 1.0 model definition to Meta provider
  • Added the opt-in snapcompact-image-reads axis: snapcompact images a fresh read result only for readers whose rule sets it; Claude Opus 5.5 and later opt in (#14249 by @will-bogusz)
  • Added the image-count-budget rule for how many images one request may carry (Anthropic 90, Codex 200, other hosts unchanged) and the official-image-count-budget override that applies only on the official endpoint: Anthropic 600 (100 on 200k-window Claude models), Codex 2,000 (#15434 by @will-bogusz)
  • Added a 24 MB inline-image byte budget for the Codex backend, which now counts as its official endpoint at its default URL and at paths under it such as /codex/responses (#15434 by @will-bogusz)
  • Added isOfficialCodexApiUrl to wire/codex, moved from pi-ai (#15434 by @will-bogusz)
  • Added verified to image-tokenization rules, marking the Claude 4.7+ high-res tier and the GPT-5.5 to 6.1 and gpt-6-astra rules as matching measured provider billing (#15442 by @will-bogusz)
  • Added the image-max-edge axis and resolveImageMaxEdge() for hosts that shrink images before the model reads them; Cursor's Claude and GPT models and its default (Auto) route fit 1024×1024 (#15448 by @will-bogusz)
  • Added the thinking-replay-tokens axis; Claude lines set it to output on every host, since a replayed signed thinking block bills the turn's full reasoning, not the signature's bytes (#15446 by @will-bogusz)
  • Added a KDL opt-in for sibling subagent prompt-cache sharing, enabled for Muse Code's Spark 1.3, Wonder 1.0, and Wonder Full 1.0 variants over the Responses API (#15467 by @iliaal)
Changed
  • Updated model definitions and compatibility rules for provider metadata
  • Google Antigravity, xAI and Cursor requests keep up to 60 images, 20 for Claude on Antigravity and Cursor, up from 5; this counts snapcompact frames and live screenshots together (#15449 by @will-bogusz)
  • Snapcompact sizes archives at the frame prices measured for Antigravity Gemini (a fixed 1,089 tokens), Grok 4.6 to 4.20, and Claude Sonnet 4.6's standard tier (#15449 by @will-bogusz)
Fixed
  • Applied max-image-dimension

…

Release v18.10.2

Oh My Pi v18.10.2

@oh-my-pi/pi-agent-core Added Added AgentLoopConfig.onDetachedToolUpdate: a tool's onUpdate frames that arrive after its run's event stream ended (a returned call whose background job keeps reporting) reach it instead of being dropped; Agent forwards them to…

Read full notes

@oh-my-pi/pi-agent-core

Added
  • Added AgentLoopConfig.onDetachedToolUpdate: a tool's onUpdate frames that arrive after its run's event stream ended (a returned call whose background job keeps reporting) reach it instead of being dropped; Agent forwards them to its subscribers as tool_execution_update events

@oh-my-pi/pi-ai

Added
  • Added support for CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS on the anthropic provider: when set, requests omit pre-release fields (context_management, beta tool fields such as strict and defer_loading, task budgets, structured-output format, thinking.block_binding, and Anthropic server compaction) along with their beta headers, so ANTHROPIC_BASE_URL gateways that reject them keep working (#15458 by @H4vC)

@oh-my-pi/pi-catalog

Added
  • Added the honors-claude-code-beta-kill-switch axis (compat.honorsClaudeCodeBetaKillSwitch), on for the anthropic provider, so a rule or models.yml override decides which providers honor CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS (#15458 by @H4vC)

@oh-my-pi/pi-coding-agent

Added
  • Added CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS support: set it to stop Anthropic requests sending experimental beta fields that a company ANTHROPIC_BASE_URL gateway rejects, such as the Sonnet 5.5 thinking.adaptive.block_binding 400 (#15458 by @H4vC)
  • Added the task.structured setting (default off) for structured task results: when on, the task tool accepts outputSchema/schemaMode and subagents return results through yield as before
Changed
  • Subagents spawned by the task tool now return their final message as plain text, with no yield tool, output schemas, or "Submit Result" fields; eval agent()/workpool spawns still return structured results
  • In Tern, a backgrounded bash command or eval cell keeps filling its own card with live output (In background, with a running clock) and settles it with the job's outcome, Cancelled when the job is killed; wait lists each job on one line (type, id, label, duration) instead of repeating its output
  • ACP clients now see a backgrounded call's job output stream into its tool call, which settles completed or failed with the job
Fixed
  • Fails unstructured task runs that conclude without a final message
  • Background task cards no longer stop updating once the agent ends its turn while the task is still running
  • Transparent images the model receives (small icons, oversized screenshots) keep their transparency instead of turning into a black square, and resized edges no longer pick up a dark fringe

@oh-my-pi/pi-natives

Added
  • Added in-process env, du, chmod, fold, rmdir, od, df, uptime, id, and dd shell builtins matching GNU coreutils 9.x options, output, and exit codes (chmod and id on Unix only; dd is disabled with the destructive set by PI_DISABLE_UUTILS_DESTRUCTIVE).
  • Added an in-process nl shell builtin (ported from uutils coreutils 0.8.0, matching GNU nl), with header/body/footer numbering styles including pBRE regex styles, logical-page section delimiters, -l blank-line grouping, and ln/rn/rz number formats.

@oh-my-pi/pi-tui

Added
  • Added opt-in /tree branch navigation across visible branches and nested fork depths; bind app.tree.previousBranch / app.tree.nextBranch (e.g. to Shift+Left / Shift+Right) in keybindings.yml (#12623 by @azain47).
Changed
  • The wait tool's native job rows (omp.wait.job) are a single row: badge, id and label, progress and clock, without the output preview or capture notice beneath
  • The native bash run foot reads In background with a live clock (omp.run.time without stopped) while a parked job's frames stream (details.async.state === "running", partial), instead of Running
  • Native model pickers (/model, the quick switch and the advisor's) mark providers with their logo (mark.icon: "provider:<id>", initials where the terminal has none), and every model row leads with its provider's mark
Removed
  • Removed the unused app.tree.foldOrUp / app.tree.unfoldOrDown keybinding ids, which no longer did anything.
  • Added parksAsBackground(toolName, details), asyncJobState(details), isSettledJobFrame(details) and settleWithJobFrame(component, frame, toolCallId) (chat/tool-execution): whether a returned call's card stays live for its background job's frames (task always; bash and eval under native rendering), the job state a frame reports, and settling the card with the job's last frame (a cancelled job keeps its output and seals as cancelled)
  • BashToolDetails.async.state and EvalToolDetails.async.state gain cancelled for a job killed before it finished

@oh-my-pi/pi-wire

Added
  • Added TspPickerMark.icon: an icon a picker mark draws instead of its initials when the terminal has it (provider:<id> names a model provider's logo)

What's Changed

Full Changelog: https://github.com/can1357/oh-my-pi/compare/v18.10.1...v18.10.2

Release v18.10.1

Oh My Pi v18.10.1

@oh-my-pi/pi-coding-agent Added Added a Copy button that leads the turn footer under an answer in Tern (⧉ · 2m13s · 71K tok · $0.85 this turn, in place of the clock), which copies that answer Changed Running agents and background jobs in Tern now share one…

Read full notes

@oh-my-pi/pi-coding-agent

Added
  • Added a Copy button that leads the turn footer under an answer in Tern (⧉ · 2m13s · 71K tok · $0.85 this turn, in place of the clock), which copies that answer
Changed
  • Running agents and background jobs in Tern now share one compact counter over the composer (an icon and a count each, the words on hover) instead of two "N running" pills; each count still opens its own sheet
  • In Tern, /session pin and /usage reset open the same picker sheet as the other small selectors (the active account checked, a confirm strip before a reset is spent, unusable accounts dimmed with the reason); the thinking level picker shows each level's depth as a meter, the plugin and queue mode pickers use badges (version, installed, scope, recommended) and plain-language names instead of bracketed text, and the theme picker no longer repeats "(current)" beside its check
  • In Tern, the text editor an extension opens (and the ask tool's custom answer and note) is now a sheet in the composer's place: the title over its details, the text written straight on the sheet, and Open in editor, Cancel and Submit buttons whose keys show in their tooltips instead of a keycap hint row
Fixed
  • Fixed grep on a single file showing in Tern as separate boxed snippets with no file row or syntax colors; it now looks the same as a grep over a directory

@oh-my-pi/pi-tui

Added
  • AssistantMessageComponent's native turn footer leads with a Copy icon (omp.turn.copy) and a dot instead of the clock icon; it copies the answer's text and shows when the host handles transcript actions
Changed
  • UserMessageComponent's native hover toolbar (omp.user.tools) leads with Copy and Rewind icon buttons (copy, rewind) instead of text labels, then a dot and the time, like the turn usage footer
  • ContextUsageView's native body (on terminals with meter) leads with the tokens used and the room left before auto-compaction, then one stacked bar ticked at the threshold, the breakdown as rows (omp.context.cat, .cat.free, .cat.buffer: swatch, name, tokens, share; the exact count in the row's title) and the snapcompact estimate as labelled rows (omp.context.snap); the blocks meter and legend kv are gone, and contextUsageHead no longer repeats the window size
  • AskDialogComponent's native root is omp.editor.ask (collapsed: omp.editor.ask.hidden, the countdown, the question as omp.ask.summary, Skip and Show): a chosen answer is the accent-toned row (a check also carries the check icon) instead of the highlighted one; multi-select Other… is omp.ask.other.check; the question tabs check answered questions and say their keys in the strip's title; the countdown moves from the head to the action bar beside Hide; the preview is omp.ask.preview; the Review tab leads with omp.ask.notice and lists answers (omp.ask.answers) by question name with inline code mono and no (Recommended) suffix; option descriptions run inline code mono, notes ride the row's detail as em; Submit/Next's tooltip names only Enter (and Space on a multi-select)
  • MCPAddWizard's native sheet asks one question per step: a phase strip (omp.mcpAdd.progress of omp.mcpAdd.phase, toned done/current/upcoming and neutral when no auth was needed), the question and its lead (omp.mcpAdd.title, omp.mcpAdd.tag for optional fields, omp.mcpAdd.lead), then a mono field with a placeholder and its rule or refusal (omp.mcpAdd.field, tone: "error"; omp.mcpAdd.note), choice rows with icons and mono tags (omp.mcpAdd.choices), status lines (omp.mcpAdd.status, omp.mcpAdd.checks, omp.mcpAdd.error) or the review rows (omp.mcpAdd.summary). Cancel, Back and Continue / Save server buttons run Ctrl+C, Esc and Enter instead of a key-hint strip. The connection test shows its own busy step, the OAuth client secret field is masked, and the review saves on Enter (no Yes/No choice)
  • ReportPanel's native body carries the role omp.report.body
  • HookInputComponent describes a dock sheet (omp.overlay.hook-input col) like HookEditorComponent's: the title's first line (omp.hook-input.title, the countdown as omp.hook-input.timer) over its further lines (omp.hook-input.detail), the field (omp.hook-input.field, tone: "error" while a submit was refused) with its placeholder, and Cancel / Submit buttons that run Esc / Enter; the key legend under the field is terminal-only
  • JobsSheet's native body is a master–detail split (omp.jobs.split: omp.jobs.master | omp.jobs.detail): the job list grouped Running / Recent (omp.jobs.group labels), each row a type icon tinted by status with its duration, beside the selected job's status pill, live elapsed and Cancel job (omp.jobs.status), its task title or command (omp.jobs.title / omp.jobs.command), facts (omp.jobs.facts: agent, directory, pids, exit code, artifact) and output (omp.jobs.out, omp.jobs.nooutput); the footer counts running and recent jobs (omp.jobs.summary), and no jobs shows an empty state (omp.jobs.empty). Task jobs no longer draw an agent node here
  • BtwHistoryPanel's native sheet is centered and reads like a mail reader: the questions as two-line rows (omp.btw.history, list omp.btw.list / omp.btw.list.idle while the answer has the keys) beside the selected thread (omp.btw.reader › omp.btw.thread › omp.btw.turn: omp.btw.question / omp.btw.followup, omp.btw.meta, omp.btw.answer, omp.btw.error), the follow-up field under the last answer (omp.btw.composer), and footer buttons Stop answer, Copy answer, Close and Follow up (Cancel and Send while composing) in place of the focus labels and key-hint strip; an empty history is an md sheet (omp.btw.empty)
Fixed
  • CountdownTimer's native elapsed no longer sends stopped: 0, which froze every native countdown (extension input, selector and editor prompts) at zero from the start
  • The native backend's focus now reaches a field inside an overlay/picker sheet hoisted into the layer from a dock component (the MCP add wizard, login), so that field shows the live caret and focus ring
  • MCPAddWizard keeps a refused name or URL in its field, clears a stale refusal on Back, ignores a connection test that settles after the user stepped back, and Edit OAuth settings after a failed sign-in opens the settings again instead of doing nothing

Full Changelog: https://github.com/can1357/oh-my-pi/compare/v18.10.0...v18.10.1

Release v18.10.0

Oh My Pi v18.10.0

@oh-my-pi/pi-catalog Changed Raised the default context window for openai-codex/gpt-6.1-sol and gpt-6.1-sol-wm from 272K to 500K, matching OpenAI's new Codex default; extended context still opens 922K (#15421) @oh-my-pi/pi-coding-agent Added Added /fork…

Read full notes

@oh-my-pi/pi-catalog

Changed
  • Raised the default context window for openai-codex/gpt-6.1-sol and gpt-6.1-sol-wm from 272K to 500K, matching OpenAI's new Codex default; extended context still opens 922K (#15421)

@oh-my-pi/pi-coding-agent

Added
  • Added /fork support for creating a new Tern pane while a turn is streaming, preserving the original session
  • Added omp session pack, omp session unpack and omp session moved to move a session with its artifacts to another machine and continue it there; resuming the copy left behind forks it instead of continuing it
  • Added omp auth export and omp auth import to carry model sign-ins to another machine
  • Added hiding a pending ask question without answering it: Alt+H (app.ask.hide) or the Hide button in Tern collapses the dialog to one line; the same key, Enter, or Show brings it back (#15400 by @H4vC)
Changed
  • Local IPC endpoints (daemon broker, LSP mux, IDA hosts, text prediction, omp stream, Collab discovery, local model workers) now run on a native transport: owner-only on every platform, including Windows named pipes; on Windows, daemons started by an older omp are not reused, so close older sessions after upgrading.
  • Output hidden behind an open ask dialog, command report or todo list now reaches terminal scrollback once it closes, rather than while it is still open (#15405 by @H4vC)
Fixed
  • Fixed every session loading its own copy of the local mnemopi embedding model and keeping it in memory until exit; one server per model is shared across sessions and exits after 15 idle minutes (#9908)
  • Fixed the first-use mnemopi embedding-model download never completing for sessions shorter than the download; it now finishes in the shared embedding server after the session exits (#10240)
  • Fixed RpcClient.stop() occasionally waiting forever because the agent process was never signaled.
  • Fixed blank rows opening under the input after an ask dialog, command report or todo list closed in a session that had filled the screen; the transcript now refills the screen (#15405 by @H4vC)
  • Fixed blank rows appearing between the last paragraphs of a streamed answer when the turn ended (#15405 by @H4vC)

@oh-my-pi/pi-natives

Added
  • Added IpcServer, IpcConnection, and ipcEndpoint: a local IPC transport over Unix sockets and Windows named pipes with owner-only access, single-instance binding, stale-endpoint takeover, and newline framing.
Changed
  • Optimized transport performance with task-local write coalescing and batch-based newline processing

@oh-my-pi/pi-tui

Breaking Changes
  • Removed RuntimeChildrenOptions.transient and Component.retireDisplacedTranscript: the composer now bills all chrome below the transcript at the smallest height it has rendered, so no root opts in or out (#15405 by @H4vC)
Added
  • Added the app.ask.hide keybinding (default Alt+H) and Hide/Show actions on AskDialogComponent, which collapse the dialog to a single line while its question stays pending (#15400 by @H4vC)
Changed
  • The OMP_TUI_DEBUG control socket now uses the native IPC transport: it is owner-only and no longer replaces a socket another live process is serving.
  • Transcript rows pushed aside by an open dialog, report or HUD now reach scrollback when it closes or newer output pushes them out, instead of while it is open (#15405 by @H4vC)
  • A transcript block straddling the top of the screen now sends only its off-screen rows to scrollback; the rest stays live (#15405 by @H4vC)
Fixed
  • Fixed blank rows opening under the editor after an ask or other inline dialog, command report or todo/loader HUD closed in a session that had filled the screen; the screen now refills with the transcript (#15405 by @H4vC)
  • Fixed the editor rising above blank rows when a live tool preview collapses under scrolled-off output; it now stays on the bottom row (#15405 by @H4vC)
  • Fixed blank rows opening inside a streamed answer when the working loader went away at the end of a turn (#15405 by @H4vC)
  • Fixed a split transcript block dropping punctuation-only rows it reveals after the split (such as a tool pane's rule line on expand); the seam now stops before them instead of treating them as already committed (#15420 by @H4vC)
  • Fixed a split transcript block fingerprinting measured rows instead of the bytes committed to scrollback, which could duplicate a SIXEL image prefix once its pending encode landed (#15420 by @H4vC)
  • Fixed a transcript block straddling the top of the screen losing its off-screen rows when the inline-image limit demoted its images to text in the same frame; those rows now reach scrollback as text
Removed
  • Removed Composer.pinInputToBottom(); the composer keeps the input on the bottom row by itself (#15405 by @H4vC)

@oh-my-pi/pi-utils

Added
  • Added getMnemopiEmbedRuntimeDir() for the shared mnemopi embedding server endpoints and logs.
Fixed
  • Fixed ChildProcess.kill() silently leaving the child running when the native process handle could not be resolved or used; it now signals the child directly and escalates to SIGKILL after the grace period.

What's Changed

Full Changelog: https://github.com/can1357/oh-my-pi/compare/v18.9.2...v18.10.0

Sunday, October 11Oct 11, 2026

Release v18.9.2

Oh My Pi v18.9.2

@oh-my-pi/pi-agent-core Changed Improved context caching for repeat turns, reducing redundant prompt processing and making subsequent turns faster when the system prompt is unchanged. @oh-my-pi/pi-ai Breaking Changes Renamed TypeSafeJudge to NativeJudge and…

Read full notes

@oh-my-pi/pi-agent-core

Changed
  • Improved context caching for repeat turns, reducing redundant prompt processing and making subsequent turns faster when the system prompt is unchanged.

@oh-my-pi/pi-ai

Breaking Changes
  • Renamed TypeSafeJudge to NativeJudge and TypeSafeApiError to JudgmentApiError, including their associated option types. JUDGMENT_ROUTES has been removed; use isJudgmentApi or create a judge for catalog models with createNativeJudge(model, { apiKey }).
Added
  • Added native judge support for OpenAI’s Decisions API and Cloudflare Workers AI decision models, including the openai-decisions and workers-ai-systemone APIs. The auth gateway’s System One route supports both providers.
  • Added createNativeJudge(model, { apiKey, headers, fetch }) for creating judges from catalog models with their configured request model IDs and question limits.
  • Added Cloudflare Workers AI authentication with loginCloudflareWorkersAi, storing the API token and account ID; logging in again with the same token replaces the existing credential.
  • Added automatic question batching to NativeJudge for endpoints with question limits, with up to four concurrent batches and merged answers and usage reporting. Usage from successful batches is reported through partial-usage callbacks and both session and auth-gateway usage ledgers, even if another batch fails.
Changed
  • Improved Anthropic prompt caching for long conversations, reducing memory usage while selecting cache breakpoints.
Fixed
  • Fixed Devin-routed OpenAI models returning invalid_argument on every turn after an existing session was switched from openai-codex.

@oh-my-pi/pi-catalog

Removed
  • Removed parseCloudflareAiGatewayCredential, serializeCloudflareAiGatewayCredential, and CloudflareAiGatewayCredential from @oh-my-pi/pi-catalog/wire/cloudflare-ai-gateway. Use the equivalents from @oh-my-pi/pi-catalog/wire/cloudflare instead.

@oh-my-pi/pi-coding-agent

Fixed
  • Improved responsiveness when adding assistant text after tool calls in long transcripts.
  • Fixed apply_patch handling of context-free hunks when the target text appears multiple times.
  • Fixed find filename ranking and sketch scoring with judge endpoints that limit the number of questions per request.
  • Fixed omp gc --apply leaving temporary session files after an interrupted save.
  • Fixed omp auth-gateway serve handling of OpenRouter routing variants such as :floor and :nitro.
  • Improved validation errors for computer helpers with missing or non-string text arguments by identifying the helper and argument involved.
  • Fixed /tan forks incorrectly inheriting the parent task's subagent spending while preserving token counts.
  • Fixed omp:// documentation links so they open the corresponding files in source checkouts.
  • Fixed bare model IDs in models.yml incorrectly resolving to auto-discovered Ollama, llama.cpp, or LM Studio providers.
  • Added warnings when configured Ollama, llama.cpp, or LM Studio endpoints cannot be reached, identifying the relevant environment variable.

@oh-my-pi/pi-natives

Fixed
  • Fixed stalls when highlighting Markdown tool previews containing many inline spans or backslash escapes.

@oh-my-pi/pi-tui

Added
  • Added native TSP rendering support for Tern terminal sessions running inside tmux, with automatic session detection and safe title-setting behavior.
Fixed
  • Improved responsiveness when inserting assistant messages after tool calls in long transcripts.

@oh-my-pi/pi-utils

Changed
  • Improved streaming JSON parsing performance for tool arguments containing many string values.
Fixed
  • Fixed parsing of long strings that contain closing delimiters other than double or single quotes.

What's Changed

…

Release v18.9.1

Oh My Pi v18.9.1

@oh-my-pi/pi-ai Added Added compat.supportsThinkingBindingControls for Bedrock Converse: setting it to false stops prefix-bound Claude requests from sending thinking.block_binding, the thinking-binding-controls-2026-08-01 beta and the /input_transformations…

Read full notes

@oh-my-pi/pi-ai

Added
  • Added compat.supportsThinkingBindingControls for Bedrock Converse: setting it to false stops prefix-bound Claude requests from sending thinking.block_binding, the thinking-binding-controls-2026-08-01 beta and the /input_transformations response path, for gateways or regions that reject them (#15316 by @harshaygadekar)
Fixed
  • Fixed Bedrock Claude Fable 5.1 requests with thinking off and a forced tool choice sending the forced choice next to adaptive thinking; the choice now falls back to auto (#15316 by @harshaygadekar)

@oh-my-pi/pi-catalog

Added
  • Added the supports-thinking-binding-controls axis to Bedrock Converse models (on by default) so a rule or models.yml override can turn off Claude thinking-binding controls on hosts that reject them (#15316 by @harshaygadekar)

@oh-my-pi/pi-coding-agent

Added
  • Added supportsThinkingBindingControls to Bedrock compat in models.yml, so a Bedrock gateway or region that rejects Claude thinking-binding controls can turn them off (#15316 by @harshaygadekar)

@oh-my-pi/pi-natives

Fixed
  • Fixed executable scripts without a #! line failing with "Exec format error" in the embedded shell (#15271 by @iliaal).

@oh-my-pi/pi-tui

Fixed
  • Fixed inline charts and images leaving overlapping copies over text when moved, resized, replaced, or hidden, while preserving images in scrollback.

What's Changed

Full Changelog: https://github.com/can1357/oh-my-pi/compare/v18.9.0...v18.9.1

Release v18.9.0

Oh My Pi v18.9.0

@oh-my-pi/pi-agent-core Fixed Fixed stale queue updates when queued steering is adopted, withdrawn, or added to the transcript, ensuring queue listeners consistently receive the latest state. @oh-my-pi/pi-ai Breaking Changes Removed the retainTextSignature…

Read full notes

@oh-my-pi/pi-agent-core

Fixed
  • Fixed stale queue updates when queued steering is adopted, withdrawn, or added to the transcript, ensuring queue listeners consistently receive the latest state.

@oh-my-pi/pi-ai

Breaking Changes
  • Removed the retainTextSignature option from consumeGoogleStream and streamGoogleGenAI; Google routes now consistently preserve text reply signatures.
  • Custom SessionsApi implementations must implement permits(provider, sessionId, credentialId).
Added
  • Exported matchesReplacementCredential and isSameOAuthAccount to help identify credential replacement and account ownership.
  • Added AuthStorage.sessions.permits(provider, sessionId, credentialId) for checking whether a stored account may serve a session restricted to an account pool.
  • Added judgeQuestions() for loading judge questions from JSON with inferred choice labels and answer types, plus renderQuestion() for templated instructions.
Changed
  • Devin chat turns now use the native Devin CLI sampling settings by default, while continuing to honor explicitly configured temperature, top-p, and stop sequences.
  • Added parentSessionId and minimizeEffort stream options. Branched side requests can reuse a conversation's prompt cache, and supported models can run them at their lowest effort without losing cache reuse.
  • Improved cross-host continuation for supported models so confirmed prior reasoning is preserved as reasoning context rather than exposed as <think> text in replies.
Fixed
  • Fixed Anthropic subscription quota not appearing in /usage when an OAuth token is supplied through ANTHROPIC_API_KEY.
  • Fixed custom OpenAI-compatible Responses streams truncating reasoning and incorrectly invoking custom tools with empty input.
  • Fixed Codex WebSocket prewarming so optional service tiers and model routing are handled consistently with normal requests.
  • Fixed OAuth sign-in result pages breaking or rendering injected markup when provider errors or callback values contain special characters.
  • Fixed Anthropic requests failing when tools are added to a conversation or when resumed sessions no longer include earlier tools.
  • Fixed Anthropic requests rejecting tall or oversized historical screenshots by resizing or re-encoding images to the host's limits.
  • Improved compatibility with Anthropic-compatible endpoints that reject prompt-cache options by retrying without unsupported caching features and reporting the disabled capability.
  • LiteLLM proxy logs now group requests by omp conversation instead of displaying a separate session for each request.
  • Fixed Gemini-family integrations echoing prior thinking as visible fenced thinking blocks; thinking is now restored as model reasoning across Google, Vertex, Antigravity, Gemini CLI, and Factory Droid routes.
  • Fixed Gemini-family integrations losing text reply signatures needed for subsequent requests across Google, Vertex, Antigravity, Gemini CLI, and Factory Droid routes.
  • Fixed Cursor integrations losing previously recorded reasoning, including signed and redacted reasoning, when continuing or resuming a conversation.
  • Fixed invalid auth.accountPolicies entries referring to unavailable accounts from preventing startup, account selection, or login; such entries are now skipped with a warning.
  • Fixed Factory Droid Claude turns with thinking disabled from replaying unsupported earlier thinking blocks, and aligned high-effort Sonnet 5.5 thinking behavior with the native client.
  • Fixed side requests for GPT-6 Responses and Codex models from losing prompt-cache context or applying unsupported reasoning-effort configuration changes.

@oh-my-pi/pi-catalog

Fixed
  • Fixed GLM-5.3-FlashX on Zhipu Coding Plan so bundled context, image, and reasoning-level capabilities are reported correctly.
  • Fixed OpenRouter Decisions endpoint derivation when the chat base URL has a trailing slash.
  • Fixed GPT-6.1 Sol Ultrafast usage pricing to apply OpenAI's published premium rates for the OpenAI API and Codex included usage.
  • Fixed GPT-6 Sol, GPT-6.1 Sol, and GPT-6 Luna so changing reasoning effort preserves prompt caching.

@oh-my-pi/pi-coding-agent

Added
  • Added browser target discovery and control, allowing agents to list the user's available pages and operate an already-open Tern browser block instead of opening a new view.
  • Added the ctx.annotations extension API for submitting and collecting /annotate feedback on text and diffs.
  • Added configurable Extra Context Files under /settings → Context, allowing custom instruction filenames without editing YAML.
  • Added optional composer predictions via composer.predictions, which suggest the user's next message as ghost text after each turn and support Tab or Right to accept the suggestion. Predictions use an additional model request and are included in session usage and /stats.
  • Added structured async job metadata exposing native job status and child-agent identity alongside the job ID.
  • Enhanced tui.autoGraph: smart with data-aware chart recommendations, including labels, grouping, ordering, shading, reference rows, measure direction, and suitable chart types.
  • Added retry.fallbackOn to restrict model fallback to quota errors (usage-limit) or to non-quota errors (except-usage-limit), while retaining any as the default.
  • Added omp usage reset commands to list saved Codex and Claude rate-limit resets and redeem a selected reset from the CLI, scripts, or auth-broker clients.
  • Added warnings for saved Codex and Claude resets that are nearing expiry, including affected accounts and redemption targets; interactive sessions also show a one-time conversation warning.
  • On macOS, the computer tool now keeps the display awake while operating and reports when the screen is locked or asleep.
  • Tern browser open results now indicate when a page is not currently visible, helping agents direct users to hidden picture-in-picture or omp-tab views.
Changed
  • Improved computer.window() failure messages by listing open windows grouped by application, with the requested application shown first.
  • Standalone binary updates and installers now use Stencil's build service with SHA-256 verification; recent updates use substantially smaller verified patches, and --binary --ref accepts release tags.
  • After an omp upgrade, an unused older browser relay started by omp is automatically replaced on the next browser call so relay fixes take effect without manual shutdown.
  • Saved Codex and Claude resets in non-interactive sessions are now automatically redeemed when they are about to expire, unless autoRedeem: no is configured.
  • Background Claude reset salvage now checks only accounts with eligible usage, reducing unnecessary usage-limit traffic.
  • Reasoning provenance is preserved when /btw answers are promoted or turns are moved, preventing provider summaries from being sent as model-generated reasoning.
Fixed
  • Fixed unconfigured judge roles incorrectly falling back to a Google Vertex Claude model instead of the configured tiny, smol, or default models.
  • Fixed omp --resume -p continuing stale todos instead of printing the answer and exiting.
  • Fixed /btw, IRC, and composer-prediction requests losing the conversation prompt cache on Codex and after thinking-level changes on GPT-6 models.
  • Fixed Tern browser operations on about:blank and no-op navigations hanging until timeout.
  • Fixed SDK and RPC sessions using stale MCP tool lists when servers changed during extension loading.
  • Fixed installing plugins from non-GitHub Git URLs and prevented inline credentials from being persisted in plugin metadata or lockfiles.
  • Improved recovery from repeated OpenAI Responses request timeouts during productive long-running sessions.
  • Fixed JavaScript eval syntax errors lacking source location and a useful code frame.
  • Fixed Collab sessions failing to reconnect after network interruptions or device sleep.

…

Saturday, October 10Oct 10, 2026

Release v18.8.9

Oh My Pi v18.8.9

@oh-my-pi/pi-ai Changed Updated state field rendering to trim trailing whitespace and normalize empty collection formatting for consistent prompt output @oh-my-pi/pi-coding-agent Added Added capability-driven extension terminal launches for tmux, Zellij,…

Read full notes

@oh-my-pi/pi-ai

Changed
  • Updated state field rendering to trim trailing whitespace and normalize empty collection formatting for consistent prompt output

@oh-my-pi/pi-coding-agent

Added
  • Added capability-driven extension terminal launches for tmux, Zellij, Herdr, and CMUX, with consolidated multiplexer detection, provider/shell capability feedback, and required POSIX-shell confirmation for shell-input launches; CMUX shell input preserves non-ASCII arguments and pane working directories (#13620 by @anatoli-tsinovoy).
  • Added /fork pane|window|tab to open a fork of the session in a new multiplexer pane or window while this session keeps running; bare /fork still forks in place (#13620 by @anatoli-tsinovoy).
  • Added Orca CLI-based launches for /fork pane|window|tab and ctx.ui.openTerminal(), with POSIX-shell confirmation; when Orca can only start a tab as a background terminal, the launch reports a warning instead of a visible tab (#13620 by @anatoli-tsinovoy).
Changed
  • CLI --fork now pairs tool calls the source session left unresolved with an unknown-outcome result, and /tan clones report such calls as unknown-outcome instead of aborted; forking a source whose process already exited keeps the process-exit recovery and pending-tool warning (#13620 by @anatoli-tsinovoy).
  • Table charts (tui.autoGraph) now cover before/after tables whose rows are different metrics (time, memory, counts): each row's change is drawn as a factor of its "before" value (48× less, +27%), and rows written in prose are skipped and named under the chart. A single column of scores like 12/12 is drawn as bars filling toward 100%
  • In terminals that speak the Tern Surface Protocol (Tern), the composer's bottom bar shows the git branch and its status beside the model chip when the status line has the git segment; it outlasts the other facts as the bar narrows, and clicking it opens /git (#15220 by @H4vC)
  • Table charts plot scores like 154/160 as the share of their total instead of the first number, and tables comparing two or three columns across four or more metrics now get a chart: a grid of one small panel per metric
Fixed
  • Fixed table charts failing on a table cell such as 3 constructor or 2 valueOf calls

@oh-my-pi/pi-tui

Breaking Changes
  • Removed the isInsideTmux(), isInsideZellij(), and isInsideHerdr() exports; use hasTerminalMultiplexerSession("tmux" | "zellij" | "herdr", env) instead (#13620 by @anatoli-tsinovoy)
Added
  • classifyTerminalMultiplexer() reports "orca" inside Orca terminals while isInsideTerminalMultiplexer() stays false there, so Orca keeps the direct-terminal render path; TERMINAL_MULTIPLEXER_ENV_KEYS lists every environment variable multiplexer detection reads (#13620 by @anatoli-tsinovoy)
  • Added terminalMultiplexerSessions(), terminalMultiplexerForTerm(), classifyTerminalMultiplexerModule(), and routeTerminalMultiplexerNotification(), driven by one multiplexer registry that now owns notification routing and per-multiplexer capability overrides (#13620 by @anatoli-tsinovoy)
  • Added change and progress table-chart kinds with ChartSpec.baseline and TableColumn.scores: a before/after table whose rows have their own units charts each metric as a factor of the baseline column (rows without two numbers are named in the caption), and analyzeTable reads whole-number scores (12/12, 154/160) as the percent of their total, keeping a / b pairs and lists as written
Changed
  • StatusLineComponent.describeComposerFacts() includes the configured git segment among the composer's facts (branch and status, the status.git click action, pinned so it outlasts the other facts) instead of leaving the branch to Tern's pane header (#15220 by @H4vC)
  • Small-multiple table charts with more than three panels and at most six categories draw as bands of per-metric panels with a color legend, and worthCharting counts their panels like categories
  • Table charts take the look of Apple's charts and Tern: a UI sans, hairline gridlines, rounded bars and cells, smooth lines over a soft area fill, dot legends, left-aligned category labels that never run off the edge, and axes labeled in one unit (0, 5k, 10k)
  • Line charts whose series differ 8× or more in size stack panels on their own axes instead of flattening the smaller lines, and their end labels no longer overlap
  • SVG figure series colors --c1…--c6 are an even-weight palette led by the theme accent's hue instead of syntax colors
Fixed
  • Fixed parseCell throwing on table cells such as 3 constructor or 2 valueOf calls, and reading a constructor cell as a missing value

@oh-my-pi/pi-utils

Added
  • Added hueDistance, the angular distance between two OKLCH hues

What's Changed

Full Changelog: https://github.com/can1357/oh-my-pi/compare/v18.8.8...v18.8.9

Release v18.8.8

Oh My Pi v18.8.8

@oh-my-pi/pi-agent-core Added Added Agent.setModelResolver() to fit every model an agent adopts (via setModel, starting with the current one) before it is used (#15048 by @H4vC) Added CompactionSettings.baseWindowTokens: when set, resolveThresholdTokens()…

Read full notes

@oh-my-pi/pi-agent-core

Added
  • Added Agent.setModelResolver() to fit every model an agent adopts (via setModel, starting with the current one) before it is used (#15048 by @H4vC)
  • Added CompactionSettings.baseWindowTokens: when set, resolveThresholdTokens() scales its percentage or reserve-based threshold from that base instead of the full context window (#15065 by @H4vC)
Fixed
  • Fixed OpenAI V1 remote compaction re-attaching a prior Anthropic native payload after a successful compact (#15041 by @PaleRoses)
  • Fixed resolveThresholdTokens() clamping a positive thresholdTokens to baseWindowTokens; a fixed threshold is checked against the real window, and the base only rescales the percentage and reserve policies (#15074 by @H4vC)
  • Fixed resolveThresholdTokens() clamping a fixed thresholdTokens at or past the context window to one token below it, so compaction fired only after the next request overflowed; it now clamps to the window less the reserve (#15146 by @will-bogusz)

@oh-my-pi/pi-ai

Fixed
  • Fixed OpenAI Responses and Codex tool calls running with empty {} arguments when a compatible host or proxy ends the call with an empty arguments payload after streaming the real ones (#15099 by @will-bogusz)
  • Fixed truncated Factory Droid Gemini responses ending as a hard error or a half-received tool call instead of being retried (#15103 by @will-bogusz)
  • Fixed Factory Droid Gemini ignoring an error the server reports mid-response, which hid its status and retried errors that cannot succeed (#15103 by @will-bogusz)
  • Fixed resumed OpenAI Responses sessions (xAI, Factory Droid, OpenAI and other hosts) dropping all earlier encrypted reasoning on their first request; GitHub Copilot still rebuilds history until its first response (#15148 by @will-bogusz)

@oh-my-pi/browser-relay

Fixed
  • Fixed tabs a relay client asks to open in the background being created as the selected tab (#15109 by @will-bogusz)

@oh-my-pi/pi-catalog

Added
  • Added the connection-bound-native-history rule axis for Responses hosts that reject native history items from an earlier connection, set for GitHub Copilot (#15148 by @will-bogusz)
Fixed
  • Fixed Devin's discovered models not marking the account's default model, the one Devin's own CLI starts the account on (SWE-2 High on Pro, SWE-1.6 Slow on Free); when it is an effort lane of a family, the family starts at that effort. Cursor's discovered models no longer carry that marker, so Cursor keeps its existing startup selection (#15115 by @will-bogusz)

@oh-my-pi/pi-coding-agent

Added
  • Added /jobs kill <id>|all to cancel a running background job (or every one this session owns) from the command line, even while the agent is busy (#14160 by @KanwarGill)
  • Added omp anonymize [session] [-o dir] to write a shareable copy of a session and its subagent transcripts: only an explicit allowlist of omp metadata (ids, timestamps, models, usage, built-in tool names and options) is kept; message, thinking, and tool-output text become size-annotated [redacted …] markers; tool-call paths become mock paths (/home/seg3/seg4/src/seg9.ts:10-20), shell commands keep known programs and flags, other literals such as a grep pattern become PLACEHOLDER_N, and extension or MCP payloads are redacted whole, with the same original always mapping to the same token across files (#15077 by @H4vC)
  • Added /dump anon, which writes the same anonymized session and subagent JSONL to a zip in the temp directory and copies its path (#15077 by @H4vC)
  • Added message times to /dump transcripts (assistant turns also show request duration and time to first token), and live status, last activity, pending tool calls, and the partially streamed turn to /dump all files for subagents still running, so a stuck subagent can be diagnosed from the archive (#15121 by @H4vC)
  • Added contextFiles.extra to load extra instruction files, such as AGENTS.local.md, beside the usual context file (#15147 by @Shadorain).
  • /annotate opens the note you are writing, a file or typed-prompt source, or (for local diff reviews) the current working-tree file in $VISUAL or $EDITOR with the external-editor key (Ctrl+G by default); a file source is saved back and its notes follow the edited text (#15151 by @Shadorain)
Changed
  • A /models compaction limit set past a model's standard context window now runs that model on its extended window instead of being silently clamped; the hub warns (noting long-context pricing) and saves on a second Enter, in the terminal and in Tern, and rejects limits past the model's largest window (#15048 by @H4vC)
  • A token compaction limit set in /models (or compaction.modelThresholds) is now the base omp scales with its usual policy, as if it were the model's window (85% of it by default for bases above ~109k, or compaction.thresholdPercent of it), instead of the exact point. Plain numbers saved since 18.8.5 therefore compact earlier; rewrite one as "f<tokens>" (or type f400k in the hub) to keep it an exact trigger. The /models limit field shows where the model would compact as you type (compacts at 340K · 85% of 400K base), the preview's Compacts at row says why, and the saved message repeats it (#15065 by @H4vC)
Fixed
  • Fixed /usage (or clicking the status-line cost) while the usage dashboard was already open stacking a second dashboard on top; it now focuses the open one (#15145 by @H4vC)
  • Fixed the browser tool prompt not documenting observe()'s viewportOnly and includeAll options, or that open/close/run timeouts are seconds clamped to 1–300 while waitFor* timeouts are milliseconds (#15104 by @will-bogusz)
  • Fixed browser relay pages opened in the background (browser.newPage({ background: true }) in tab.run

…

Friday, October 9Oct 9, 2026

Release v18.8.7

Oh My Pi v18.8.7

@oh-my-pi/pi-ai Added Added routing-session cleanup for OpenAI Responses and Codex while preserving shared provider fallbacks (#14334 by @iliaal). Fixed Fixed Claude Haiku 5.5 requests silently enabling adaptive thinking when reasoning is off, on native…

Read full notes

@oh-my-pi/pi-ai

Added
  • Added routing-session cleanup for OpenAI Responses and Codex while preserving shared provider fallbacks (#14334 by @iliaal).
Fixed
  • Fixed Claude Haiku 5.5 requests silently enabling adaptive thinking when reasoning is off, on native Bedrock (main and helper calls) and the Anthropic API; conversations whose earlier effort controls rule out disabled thinking fall back to lowest-effort adaptive thinking instead of failing (#14996 by @bse-ai).
  • Fixed /session pin being ignored when every stored account is quota-blocked, which routed the next request to a different exhausted account instead of the pinned one (#14997).
  • Fixed minimax-code-cn sessions staying pinned to a key whose Token Plan quota is exhausted (用量上限 429) instead of rotating to a sibling credential (#15053).

@oh-my-pi/pi-catalog

Added
  • Added built-in CoralBricks support with /login, live model discovery, per-model reasoning levels and off controls, and bundled offline fallbacks. (#14146 by @ryan-brosas)
  • Added gen:models --provider <id> to update one provider without changing other providers' catalog snapshots. (#14146 by @ryan-brosas)
Fixed
  • Fixed Claude Haiku 5.5 thinking Off to request explicitly disabled thinking on every host serving its adaptive thinking (#14996 by @bse-ai).

@oh-my-pi/pi-coding-agent

Added
  • Added automated release binary publication to build.stencil.so
  • Added OSC 7501 program status reporting: terminals and agent inboxes that support it now show whether omp is working, waiting on your answer or approval (with the question), done, or failed (with the error), without parsing the window title. Turn it off with terminal.programStatus.
  • Added title cards (icon and short code) to /rename: the title model picks one for a title you type, or for a generated title when the session has no card yet; title.icons: boring keeps renamed titles plain.
  • Grammars for less common languages (Kotlin, Swift, Ruby, PHP, Haskell, Verilog, and others) are now downloaded on first use for code summaries, block context, ast_grep, ast_edit, and TTSR rules; offline, files in those languages are skipped with a note instead of failing. PI_GRAMMARS_URL overrides the download location.
  • Added bash.gitGuard (default off) for checkouts shared by concurrent agents: the bash tool refuses git stash, git reset --hard or to another commit, and git checkout/switch/restore that would overwrite working-tree files unless a merge or rebase conflict is being resolved; unstaging stays allowed, and commands are judged as they actually run, including inside substitutions, functions, and after cd.
Changed
  • Updated write tool error message to mention local:// scratch support
  • Web search now tells the agent about its X post operators (site:x.com, from:<handle>) when you are logged in to xAI, so questions about reactions on X reach X search.
  • Reduced memory retained after merging unchanged discovered and cached models (#14252 by @iliaal).
  • The default smol model now prefers Claude Haiku 5.5 when it is available.
  • Automatic session titles now start when the agent's reply begins rather than when you submit, so a slow-thinking first reply gets a card title (icon and code) instead of a plain fallback title.
  • read file.jsonl?q=… keeps the other lines' results when a line before the last fails and shows jq's error ahead of them, instead of failing the read; anything else the query wrote to stderr, such as debug output, now leads the result too (#14659 by @will-bogusz)
  • Title card icons now picture each session's specific subject instead of a generic bug, flask, speedometer, gear, or terminal, or the project's language logo, so sessions in the same project are easier to tell apart.
  • Agents whose tool list omits write but still get it to run xd:// tools can now also write local:// files (reports, notes) outside plan mode; working-tree writes stay blocked.
  • Added worktree.onStart and worktree.onExit settings to start each session in its own worktree and clean it up on exit (#14908 by @gitpushoriginmaster)
  • Added speech.speed and tts.localSpeed settings (0.5–2.5, default 1) to speed up or slow down local Kokoro speech for live vocalization and the tts tool / omp say, plus an omp say --speed flag; ACP voice clients find both settings and their presets in speech.models.list (#5868)
  • omp update and the startup update notice leave an omp installed by another app (Tern) to that app instead of replacing its files.
  • The startup update notice no longer appears when omp runs from a source checkout.
Fixed
  • Reduced memory growth after one-shot side requests without interrupting ongoing conversations (#14334 by @iliaal).
  • Fixed sessions staying untitled when you interrupted the first reply to send a queued steer message.
  • Fixed browser downloads saving into another tab's downloads folder, and tab.waitForDownload() saving into the system Downloads folder once another tab closed; each tab in a Chromium omp launched or spawned now saves into its own, iframe downloads included. In those browsers a download no tab tracks (started by a page omp did not open, or finishing after its tab closed) now keeps Chromium's GUID file name instead of its suggested name; connected and relay browsers keep real file names (#14544 by @will-bogusz)
  • Fixed browser calls in relay mode failing with "The browser relay … is out of date" after an omp upgrade until the old relay was killed by hand; omp now restarts a relay it started itself under an older version (#14416 by @will-bogusz)
  • Fixed /rename without a title dropping the session's title card (icon and short code) (#14980)
  • Fixed title cards showing the emoji instead of the Nerd Font icon when the model misremembered the icon's name: dashes for underscores (nf-md-text-box), the wrong icon set (nf-md-spinner for nf-fa-spinner), or reordered, missing, or extra words (nf-md-test for nf-md-test_tube).
  • Fixed omp update ignoring the update.channel setting: canary users were checked against stable releases, and --canary/--stable were never remembered.
  • Fixed interrupting a reply to send a queued steer message briefly showing omp as idle (title, progress, working indicator) before the steer ran; RPC and SDK clients also no longer see a final agent_end for that interrupt.
  • Fixed browser tab recordings and video frame/contact-sheet extraction creating omp-browser-recording-* and omp-video-* scratch directories in your working directory instead of the system temp directory.

…

Directory

Other companies