Release notes
Pi v1.5.1
New Features
- Shell login and logout: use
pi auth login <provider>andpi auth logout <provider>without starting a session, with API-key and no-browser sign-in options. See Credential commands. - Idle prompt cache warming: eligible caches now stay warm for up to 30 minutes between runs when a refresh is expected to pay for itself. See
cacheWarming. - Anthropic message threads: requests send only new messages while the server continues the conversation, with full-request fallback when earlier context changes. See Anthropic compatibility.
- Richer Mermaid diagrams: pie charts, author-defined styles, clickable labels on supported terminals, and diagrams in expanded branch and compaction summaries. See Display settings and Markdown transformers.
- GitHub Copilot classifiers: call Microsoft-Decision-1 through codemode
models.classify()for typed decisions and probabilities. See Use classifier models. - Package update summaries:
pi update --extensionsreports each package's npm version or git commit change and distinguishes unchanged, skipped, and warned updates. See Update Pi or packages.
Breaking Changes
- Custom
GrepOperations.readFilecallbacks are no longer called for context lines. The field remains accepted as optional and deprecated so existing integrations still compile. The grep tool now takes context lines from ripgrep and no longer reads matched files itself. To search a remote system, override grep'sexecute(); see Remote Execution (#9276) - OpenAI-compatible models no longer send
"tools": []when all tools are disabled in a session that has used tools; the field is omitted. This fixes 400 errors (tools must not be an empty array) from vLLM 0.20+, also behind LiteLLM. If your proxy requirestoolsonce the history has tool calls, such as older LiteLLM versions in front of Anthropic, setcompat.requiresToolsWithToolHistory: truefor that model inmodels.json(#11843)
Added
pi updatenow lists each updated package with its npm version or git commit change, for examplenpm:foo 1.2.0 -> 1.3.0, and printsPackages are already up to datewhen nothing changed. When nothing changed but an update printed a warning, for example because npm left the old version installed after resolving stale registry metadata, it printsNo packages were updated, see the warnings aboveinstead; in offline mode it printsSkipped package updates (offline mode).PackageManager.update()reports each changed package as a newresultprogress event whosemessageholds that line (#11707, #11711)- Anthropic sessions now use message threads: each request sends only the new messages and the server continues from the previous reply, falling back to the full request when the conversation changed (for example after compaction or a tool list change). On by default for the
anthropicprovider onapi.anthropic.com; setcompat.supportsMessageThreadsinmodels.jsonto enable it for gateways that forward thethreadfield, or to turn it off. Cache warming does not touch the session's thread (#11545) pi.registerMarkdownTransformer()takes an optional{ messageTypes }that selects the Markdown surfaces a transformer runs on. Besides user, assistant, and thinking Markdown, transformers can now opt intocustom(custom messages and skill blocks),summary(branch and compaction summaries), andchangelog(What's New,/changelog, the Extension Updates notice, and the Update Available note). Without options a transformer runs on user, assistant, and thinking Markdown as before. The built-in Mermaid renderer now also draws diagrams in expanded branch and compaction summariespi auth login <provider>logs in to a provider from the shell without starting a session, for examplepi auth login radius. It signs in with an account in the browser and exits;--api-keysaves an API key instead, and--no-browseruses device code or copy-code sign-in instead. Logging in to Radius also configures the Radius MCP server.pi auth logout <provider>removes the stored credentials, like/logoutctx.ui.custom()overlays now honor theblockedoption: pi reports blocked program status (OSC 7501) from when the overlay is shown until it callsdone(), also while it is hidden withsetHidden(). Closing one overlay keeps other open questions blocked (#11816)- Added the
qwen-token-plan-individual-cnprovider for Qwen Token Plan Individual on the China endpoint, usingQWEN_TOKEN_PLAN_CN_API_KEY(#7989 by @bigoldcat123) - Added Microsoft-Decision-1 classifier support through GitHub Copilot, including codemode
models.classify()(#11679 by @Marvae) - Added
compat.promptCacheKeyMode("auto","enabled", or"disabled") to enable prompt cache keys for compatible proxies or omit them for endpoints that reject them. Set it inmodels.jsonwhen using pi (#9442 by @dannote) - Added
compat.requiresNonNullAssistantContentfor OpenAI-compatible endpoints that require an empty string instead ofnullin assistant messages containing only tool calls. Set it inmodels.jsonwhen using pi (#8118 by @gaoyk19) - Added syntax highlighting for Dart, Nix, Groovy, and Gradle files in read and write views (#11643)
- Added GLM 5.3 to the Qwen Token Plan Individual model allowlist (#11658)
- Added Claude Fable 5.2 (
claude-fable-5-2) to theanthropicprovider ($8/$40 per million input/output tokens, 1M context, 128K output). Like Fable 5.1 it uses per-message effort and mid-conversation system messages; requests its safety classifiers refuse before any output are answered by Claude Opus 5 through server-side fallback and billed at Opus 5's price. Claude Fable 5.2 and Mythos 5.2 on other providers, such as OpenRouter'santhropic/claude-fable-5.2, get the same per-message effort support
Changed
- The default model for the
anthropicprovider is now Claude Opus 5.5 (claude-opus-5-5) instead of Claude Opus 4.8 - Default models moved to newer models at the same or a lower price:
amazon-bedrockClaude Opus 5.5,azureGPT-6.1 Sol,google
…