New Features
- Nix flake —
nix run github:earendil-works/pi/stableruns the latest release, andnix profile add github:earendil-works/pi/stableinstalls it. See Install pi. - Project overrides for MCP servers —
.pi/mcp.jsonand/mcpcan enable, disable, or change the exposure of a user-level server for one project. See Configure servers. - MCP Client ID Metadata Documents —
oauth.clientRegistration: "cimd"lets authorization servers allow pi by its document URL instead of dynamic registration. See Authenticate with OAuth. - Tool renderers for any tool —
pi.registerToolRenderer()draws calls to tools that are not registered yet, such as MCP tools in resumed sessions. See Tool rendering. - Cloudflare Clef classifiers —
@cf/cloudflare/clefand@cf/cloudflare/clef-flashare usable from codemode scripts and extensions. See Use classifier models.
Added
- Added a copy key (
app.message.copy, defaultctrl+x) to OAuth sign-in screens in/login,/mcp, and/mcp login, which copies the sign-in URL when the browser cannot be opened or the wrapped link cannot be selected. - Added
oauth.clientRegistration: "cimd"for MCP servers, which identifies pi with its Client ID Metadata Document on pi.dev instead of dynamic client registration, so authorization servers can allow pi by URL (#10302) - Added project overrides for user-level MCP servers: a
.pi/mcp.jsonentry withoutcommandorurlsets onlyenabled,exposure, andtoolExposureof the user-level server, and/mcpcan enable or disable a server for the current project (#10277) - Added Cloudflare's Clef and Clef Flash classifier models to
cloudflare-workers-ai, usable from codemode scripts and extensions (#10316 by @ndisidore, #10322 by @RealAlexandreAI) - Added
pi.registerToolRenderer(), which chooses how calls to a tool are drawn, including tools that are not registered (#10285) - Added a Nix flake for macOS and Linux:
nix run github:earendil-works/pi/stableruns the latest release, andnix profile add github:earendil-works/pi/stableinstalls it. See Install pi (#9137)
Changed
pi updateon global npm installations now recommends migrating to the managed installation from the pi.dev installer, which pins all dependencies.- Anthropic tools added or redefined mid-conversation are now defined inline in the conversation, so redefining a tool under the same name keeps the prompt cache instead of resending the full tool list.
Fixed
- Fixed installations resolving vulnerable
brace-expansion5.0.9 by pinningbrace-expansion5.0.12 as a direct dependency (GHSA-q2hr-2g5m-vwhr, GHSA-qhr7-859c-m2p7, GHSA-6j4f-fj2g-mc7p) (#10288) - Fixed a trailing comma in
--modelsadding an extra model to the model cycle (#10334) - Fixed a
codemodescript that prints in a loop crashing pi by running out of memory: a script fails once its output passes 16 Mi characters or 100000 items (#10283) - Fixed JPEG, GIF, and WebP images rendered by extensions through
Imagenot appearing in Kitty, Ghostty, WezTerm, and Warp (#10292) - Fixed MCP tool calls in resumed sessions and HTML exports rendering fully expanded until their server connected, or for good if it never did (#10285)
- Fixed fullscreen Kitty images collapsing to a one-row strip after scrolling in WezTerm (#10319)
- Fixed "Selected model is at capacity" provider errors ending the turn instead of being retried (#10278)
- Fixed Cloudflare AI Gateway Claude models failing with a 404 by using dashed model IDs (
claude-opus-5-5instead ofclaude-opus-5.5) - Fixed Sign in with ChatGPT continuing when its callback port is taken by another login, which made the browser show "OAuth state mismatch"; it now fails with a port-in-use error (#10265)
- Fixed Amazon Bedrock OpenAI models costing requests above 272k input tokens at the short-context rate; Bedrock models now include the pricing tiers listed on models.dev (#10326)
- Fixed Amazon Bedrock Claude requests failing with "Invalid
signatureinthinkingblock" after the system prompt or tools changed (#10324) - Fixed Together DeepSeek V4 Pro losing its thinking level controls after Together renamed it to
deepseek-ai/DeepSeek-V4-Pro-0813(#10336 by @cv) - Fixed the default NVIDIA model pointing at
nvidia/nemotron-3-super-120b-a12b, which NVIDIA no longer serves; the default is nownvidia/nemotron-3-ultra-550b-a55b
Removed
- Removed
npm-shrinkwrap.jsonfrom the published package. npm installations no longer pin transitive dependencies, and library consumers can now override them. Use the pi.dev installer for pinned installations (#5653)