Release · Pi · earendil-works

Pi v1.5.1

What's new in Pi v1.5.1, released Nov 9, 2026 (). Newer: v1.5.2 (Nov 10, 2026)

Release notes

Pi v1.5.1

New Features
  • Shell login and logout: use pi auth login <provider> and pi 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 --extensions reports 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.readFile callbacks 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's execute(); 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 requires tools once the history has tool calls, such as older LiteLLM versions in front of Anthropic, set compat.requiresToolsWithToolHistory: true for that model in models.json (#11843)
Added
  • pi update now lists each updated package with its npm version or git commit change, for example npm:foo 1.2.0 -> 1.3.0, and prints Packages are already up to date when 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 prints No packages were updated, see the warnings above instead; in offline mode it prints Skipped package updates (offline mode). PackageManager.update() reports each changed package as a new result progress event whose message holds 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 anthropic provider on api.anthropic.com; set compat.supportsMessageThreads in models.json to enable it for gateways that forward the thread field, 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 into custom (custom messages and skill blocks), summary (branch and compaction summaries), and changelog (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 summaries
  • pi auth login <provider> logs in to a provider from the shell without starting a session, for example pi auth login radius. It signs in with an account in the browser and exits; --api-key saves an API key instead, and --no-browser uses 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 /logout
  • ctx.ui.custom() overlays now honor the blocked option: pi reports blocked program status (OSC 7501) from when the overlay is shown until it calls done(), also while it is hidden with setHidden(). Closing one overlay keeps other open questions blocked (#11816)
  • Added the qwen-token-plan-individual-cn provider for Qwen Token Plan Individual on the China endpoint, using QWEN_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 in models.json when using pi (#9442 by @dannote)
  • Added compat.requiresNonNullAssistantContent for OpenAI-compatible endpoints that require an empty string instead of null in assistant messages containing only tool calls. Set it in models.json when 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 the anthropic provider ($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's anthropic/claude-fable-5.2, get the same per-message effort support
Changed
  • The default model for the anthropic provider 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-bedrock Claude Opus 5.5, azure GPT-6.1 Sol, google

…