Pi v1.4.0
New Features Image input for classifiers: codemode models.classify() accepts images for TypeSafe's Jev and Cloudflare's Clef models on typesafe, cloudflare-workers-ai, and OpenRouter. See Use classifier models and Codemode. Models Configuration reference:…
Read full notes
New Features
- Image input for classifiers: codemode
models.classify()acceptsimagesfor TypeSafe's Jev and Cloudflare's Clef models ontypesafe,cloudflare-workers-ai, and OpenRouter. See Use classifier models and Codemode. - Models Configuration reference: every provider, model, model override, and compatibility field of
models.json, generated from its schema. See Models Configuration. - Summaries without a fixed output cap: compaction and branch summaries use the model's output limit, so long reasoning no longer makes them fail. See Compaction.
- Codemode waits for a free worker: parallel scripts and in-process subagents queue instead of failing, and
PI_CODEMODE_MAX_WORKERSraises the limit. See Codemode limits. - Rex terminal support: OSC 8 hyperlinks, truecolor, and inline images.
Added
- Added a Models Configuration reference generated from the
models.jsonschema, listing all provider, model, model override, and compatibility fields (#10790) - Codemode
models.classify()now acceptsimagesfor TypeSafe's Jev and Cloudflare's Clef models ontypesafe,cloudflare-workers-ai, and OpenRouter, and lists Clef Omni and Jev 1.14 on Workers AI. - Provider-level
compatinmodels.jsonnow also applies to classifier models, with the System One fieldsimageInputandsendImageOptInHeaderfor proxies that serve another service's classifiers. Extension classifier models acceptcompattoo. - Added
MiniMax-M3.1-Flashto theminimaxandminimax-cnproviders, with thinking levels low through max (#11121) - Added support for the Rex terminal: OSC 8 hyperlinks, truecolor, and inline images (#11131, #11150 by @petrroll, #11183 by @nihaals)
Changed
- Provider attribution headers now come from pi-ai's client identity. Extensions'
before_provider_headershandlers no longer see the OpenRouter, NVIDIA NIM, and OpenCode attribution headers; returningnullfor one still removes it. Cloudflare requests send pi's detailedUser-Agentinstead ofpi-coding-agent, as do GitHub release checks for tool downloads, and OpenCode requests sendx-opencode-clientwhenever attribution is enabled, not only with a session. generateSummary()andgenerateSummaryWithUsage()now ignore theirreserveTokensparameter. Summary requests use the model's output limit instead.- Changed the default GitHub Copilot model from
gpt-5.4, which Copilot retired, togpt-6.1-sol. - Changed the default NVIDIA model to
nvidia/nemotron-3.5-super-vl-120b-a12b(#10910 by @cv) - Changed the default Xiaomi model to
mimo-v2.6-profor thexiaomiand Xiaomi Token Plan providers, sincemimo-v2.5-proleft the catalog. - Grok 4.3 and Grok 4.5 on the
xaiprovider now offer thexhighthinking level. - Sign in with ChatGPT: ChatGPT Business workspace usage-limit errors are not retried and tell the user to ask their workspace admin to increase the limit.
Fixed
- Fixed compaction and branch summaries failing with "generation hit the token cap" when reasoning used most of the fixed summary output limit. Summaries now use the model's output limit, and
compaction.reserveTokensonly controls when compaction starts (#9512, #9075). - Fixed
models.schema.jsonmissing descriptions for provider and model fields, so editors showed no hints for them (#10790) - Fixed
pi updatefailing with "Managed install marker is missing or invalid" whenmanaged-install.jsonstarts with a UTF-8 BOM, which Windows PowerShell 5.1 adds when it rewrites the file. - Fixed HTML export showing literal asterisks for Markdown bold and italic next to CJK punctuation (#3353, #10154)
- Fixed the terminal staying in mouse-tracking, focus-reporting, Kitty keyboard, and alternate-screen modes when pi exits without its normal terminal teardown, which flooded the shell prompt with escape sequences (#11170)
- Fixed concurrent extension
select/confirm/input/editordialogs and inlinecustom()components in interactive mode: a second dialog replaced the first and the first promise never settled; closing the visible dialog now shows the previous one again (#11166, #9909) - Fixed pasting in the shell hanging after copying text in pi and suspending it with Ctrl+Z on Linux: the background
wl-copy/xclip/xselprocess that keeps serving the clipboard was suspended along with pi (#11179) - Fixed codemode scripts failing immediately when both codemode workers are busy, for example with parallel codemode calls or in-process subagents. Scripts now wait up to 60 seconds for a free worker, and
PI_CODEMODE_MAX_WORKERSraises the limit of two workers (#11184) - Fixed extensions failing to load when importing
@earendil-works/pi-ai/models(e.g. forclampThinkingLevel) by exposing the subpath through the extension loader aliases and virtual modules (#11156) - Fixed
mcp.jsonfiles that start with a UTF-8 BOM failing to parse, which skipped all their MCP servers and madepi mcp add/pi mcp removefail (#11191) - Fixed
/compact <instructions>ignoring the instructions when summarizing the start of a turn that compaction splits. When the split turn was the only new content since the last compaction, the instructions were ignored entirely (#11058) - Fixed resumed sessions and
/treenavigation leaving extension tools inactive when the branch recorded its tools before they were registered, such as tools from extensions installed after the session started. Extension tools the branch never added or removed are now active unless they are registered withdefaultActive: false(#11062, #11075) - Fixed sessions breaking after recovery from a response cut off at the output limit: the truncated tool call was omitted but its tool results were kept, so providers rejected every later request (#11227, #11233 by @petrroll)
- Fixed the
grep
…