Aquí hi ha 90 versions de pi, des de 27 de març del 2026 fins a l’actual, 1.4.0. Cadascuna enllaça amb els instal·ladors del mateix desenvolupador.
| Versió | Data | Mida | Fitxers |
|---|---|---|---|
| 1.4.0Darrera versió | 21 d’octubre del 2026 | — | 64 bits ZIPARM64 ZIP Notes de la versió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: 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_WORKERS raises 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.json schema, listing all provider, model, model override, and compatibility fields (#10790)
- Codemode models.classify() now accepts images for TypeSafe's Jev and Cloudflare's Clef models on typesafe, cloudflare-workers-ai, and OpenRouter, and lists Clef Omni and Jev 1.14 on Workers AI.
- Provider-level compat in models.json now also applies to classifier models, with the System One fields imageInput and sendImageOptInHeader for proxies that serve another service's classifiers. Extension classifier models accept compat too.
- Added MiniMax-M3.1-Flash to the minimax and minimax-cn providers, 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_headers handlers no longer see the OpenRouter, NVIDIA NIM, and OpenCode attribution headers; returning null for one still removes it. Cloudflare requests send pi's detailed User-Agent instead of pi-coding-agent, as do GitHub release checks for tool downloads, and OpenCode requests send x-opencode-client whenever attribution is enabled, not only with a session.
- generateSummary() and generateSummaryWithUsage() now ignore their reserveTokens parameter. Summary requests use the model's output limit instead.
- Changed the default GitHub Copilot model from gpt-5.4, which Copilot retired, to gpt-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-pro for the xiaomi and Xiaomi Token Plan providers, since mimo-v2.5-pro left the catalog.
- Grok 4.3 and Grok 4.5 on the xai provider now offer the xhigh thinking 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.reserveTokens only controls when compaction starts (#9512, #9075).
- Fixed models.schema.json missing descriptions for provider and model fields, so editors showed no hints for them (#10790)
- Fixed pi update failing with "Managed install marker is missing or invalid" when managed-install.json starts 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/editor dialogs and inline custom() 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 |
| 1.3.0 | 15 d’octubre del 2026 | — | 64 bits ZIPARM64 ZIP Notes de la versióNew Features
- Choose where /share uploads: sessionShareDestination selects auto, gist, or radius. See Sessions and context and Export or share a session.
- Cache-preserving thinking level changes on OpenAI GPT-6: changing the thinking level mid-session with an API key keeps the prompt cache.
- Kimi Code over Chat Completions: tools added mid-conversation no longer invalidate the prompt cache. models.json base URL overrides must now include /v1. See Providers.
- Clean model switching: thinking from a previous model is dropped instead of being shown to the new model as text.
- Resumed sessions keep their active tools: --tools +name/-name applies on top of them. See Tools.
Added
- Changing the thinking level mid-session on OpenAI GPT-6 models (API key) now keeps the prompt cache (#10853)
- Added the sessionShareDestination setting to choose automatic, GitHub gist, or Radius uploads for /share (#10870 by @vegarsti)
Changed
- Changed the kimi-coding provider to use OpenAI Chat Completions at https://api.kimi.com/coding/v1, the protocol used by the official Kimi Code client. K3, K3-256K, and Kimi For Coding now accept tools added mid-conversation without invalidating the prompt cache. models.json overrides of the kimi-coding base URL must now include /v1 (#10720)
- Changed model switching to drop thinking blocks from earlier assistant messages produced by a different model, instead of sending them as plain text. The new model previously saw the old model's reasoning as part of its replies and could start writing its own reasoning into the visible answer (#10995)
Fixed
- Pinned internal Pi dependencies to exact release versions to prevent fresh installs from mixing incompatible packages (#10865)
- Fixed resumed sessions dropping tools activated during the session. Resume now restores the session's active tools, with --tools +name/-name entries applied to them, unless --tools with tool names, --no-tools, or --no-builtin-tools selects tools explicitly (#10785)
- Fixed stopping a codemode script or reaching its deadline waiting for a non-interruptible built-in to return on Bun (#10748)
- Fixed repeated codemode timeouts or aborts accumulating surviving workers; admission now limits live workers to two across sessions, counting cancelled workers until actual exit (#10748)
- Fixed --model choosing a provider by catalog order when several providers offer the match; Pi now prefers the provider with credentials and otherwise reports the ambiguity. --models and enabledModels add a model for each provider that offers it and warn about the ambiguity (#10160)
- Fixed read line-range labels for numeric-string or null arguments in the TUI, session tree, HTML exports, and examples (#9887)
- Fixed the Nix flake build failing when a provider switched APIs: the model catalog pin is now refreshed from the newest published catalog when its model API groups differ, and releases pin the newest catalog and build with it before tagging (#10985)
- Fixed the Nix package putting its Node.js first on PATH, which made bash tool shells use Pi's Node instead of the user's node/npm. Pi's Node is now only a fallback (#10519)
- Fixed prompt templates dropping empty quoted arguments ("" or ''), which shifted later positional arguments and prevented positional defaults from applying (#10867)
- Fixed the Nix package build failing in its install check because it still expected chord and esbuild, which Pi no longer depends on
- Fixed tool-call argument parsing dropping fields when a string contains an invalid \u escape such as \usepackage (#10868)
- Fixed Anthropic and Bedrock Claude requests failing with a 400 when an error tool result contains images; the images are now sent after the tool results of the turn, so the model still sees them (#10794)
- Fixed OpenCode Go Gemini models failing with a 404 by moving OpenCode Zen and OpenCode Go to the opencode.ai/inference endpoints, and added Google Generative AI support to the OpenCode Go provider
- Fixed OpenCode Go MiniMa |
| 1.2.0 | 12 d’octubre del 2026 | — | 64 bits ZIPARM64 ZIP Notes de la versióNew Features
- Per-key OpenRouter model lists: with an OpenRouter key, Pi lists only the models that key may use, with the key's context size, max output, and prices, including regional endpoints set in models.json. See OpenRouter.
- Published configuration schemas: add $schema to settings.json, models.json, keybindings, and themes for editor validation and completion. See Settings, Models, Keybindings, and Themes.
- Clipboard copies over remote sessions: PI_CLIPBOARD_OSC52=1 sends copied text to a remote client's clipboard when Pi cannot detect the remote session, such as a multiplexer attached from another machine. See Pi Process Configuration.
- Codemode improvements: tool declarations show input constraints such as integer, minimum/maximum, and default, and codemode rows show elapsed and total time. See Codemode.
- before_agent_start for extension-triggered runs: runs started by pi.sendMessage(..., { triggerTurn: true }) go through the same setup as prompts. See Events and concurrency.
Breaking Changes
- Published generated configuration schemas for models, settings, keybindings, and themes at https://pi.dev/schemas/*.schema.json. The theme schema moved to https://pi.dev/schemas/theme.schema.json; themes loaded during startup now receive the same schema validation as later reloads. Update theme $schema references, define reusable colors under vars, and remove unsupported metadata (#9880, #10751 by @christianklotz)
- Changed before_agent_start to also fire for runs started by pi.sendMessage(..., { triggerTurn: true }) while idle. BeforeAgentStartEvent is now a union on messageType: "user" events carry prompt and images, and "custom" events carry the starting message and no prompt. Messages returned by handlers are added to both kinds of run, and pending deliverAs: "nextTurn" messages are delivered with the custom-message run. Handlers that should act only on user prompts must check event.messageType === "user" (#10267, #5581, #10739 by @davidbrai)
- Changed the session to count as busy while a run starts, including during before_agent_start handlers: ctx.isIdle() is false, pi.sendMessage() queues into the starting run instead of starting a second run that failed with "Agent is already processing", pi.sendUserMessage() requires deliverAs, and an abort requested meanwhile aborts the run once it starts (#10739 by @davidbrai)
- Changed pi mcp list --json to report resources: true for servers that offer resources instead of resources and resourceTemplates counts; Pi no longer lists resources when connecting (#10526)
Added
- Added reachesTools to tool definitions, so tools that reach other tools (such as codemode and tool_search) declare which tools a call may reach; the MCP extension uses it to wait for the servers a call needs and to decide whether a replacement codemode or tool_search tool can reach MCP tools
- Added aliases to tool namespaces; codemode's describeNamespace() and the namespace option of searchTools() match them, and MCP namespaces use the server name
- Added per-key OpenRouter model lists: with an OpenRouter key, Pi lists only the chat models that key may use, with the key's context size, max output, and prices, including guardrails and regional endpoints set as the base URL in models.json. The list is saved and used offline (#10353, #10672 by @davidbrai)
- Added PI_CLIPBOARD_OSC52=1 to send copied text to the terminal with OSC 52 after the local clipboard write, so copies reach a remote client's clipboard when Pi cannot detect the remote session, such as multiplexer attaches from another machine or remote IDE daemons (#10826, #10835, #10114)
- Added elapsed time while a codemode script runs and its total time once finished to the codemode tool row, like bash rows (#10708)
Changed
- Changed the showHardwareCursor setting to use only the terminal cursor instead of also drawing Pi's reverse-video cursor
- Changed codemode tool declarations to show input constraints such as integer, minimum/maximum, length, patter |
| 1.1.0 | 7 d’octubre del 2026 | — | 64 bits ZIPARM64 ZIP Notes de la versióNew Features
- Program status reporting: terminals and agent dashboards that support OSC 7501 see whether Pi is working, blocked on a dialog or login, done, or failed. See Program status.
- Claude Haiku 5.5: anthropic/claude-haiku-5-5, with adaptive thinking up to xhigh/max effort.
- Adjust default tools with +name/-name: --tools entries like pi -t +codemode,-write change the default selection instead of replacing it. See Tools.
- GPT-6 Luna and image classification: OpenAI's GPT-6 Luna is available as a classifier model through the Decisions API, and codemode's models.classify() accepts images for classifiers that support them. See Use classifier models.
- Native llama.cpp decision models: Julia-1, Laya, Kev, lev, and OpenJev served by llama.cpp 0.6.0 or later run natively as classifiers through /v1/systemone. See Classification.
Added
- Added +name and -name entries to --tools, which change the default tool selection instead of replacing it, for example pi -t +codemode
- Added durationMs to the tool render context and to tool_execution_end extension events: the recorded execution time of a final tool result (#10549)
- Added outputPad to the tool render context (#10557 by @rwachtler)
- Added OpenAI's GPT-6 Luna as a classifier model through the Decisions API, available with OPENAI_API_KEY (see Use classifier models)
- Added images to codemode's models.classify() context, so classifiers that accept images, such as GPT-6 Luna, can judge them
- Added program status reporting with OSC 7501: terminals and agent dashboards that support it see whether Pi is working, blocked on a dialog or login, done, or failed. PI_PROGRAM_STATUS=1|0 overrides detection (see Terminal setup) (#10607)
- Added aborted to agent_settled session, extension, and JSON events, so integrations can tell a cancelled run from a finished one (#10607)
- Added Claude Haiku 5.5 (anthropic/claude-haiku-5-5), with adaptive thinking up to xhigh/max effort and prompt caching on Bedrock
- Added native llama.cpp decision models: Julia-1, Laya, Kev, lev, and OpenJev served by llama.cpp 0.6.0 or later are listed only as classifiers through /v1/systemone instead of as chat models (see Classification) (#10382)
Changed
- Changed outputPad to also apply to ! command output, tool output, and summary blocks (#9946, #10557 by @rwachtler)
- Changed pi mcp login --timeout to limit the whole sign-in, including requests to the authorization server, instead of only the wait for the browser (#10565)
Fixed
- Fixed bash and PowerShell results losing Took after reloading a session, and the live Took including wall-clock steps; both now show the recorded execution time (#10549)
- Fixed managed installs keeping every old release; pi update now keeps only the new release and the one it updated from (#10392, #10511 by @davidbrai)
- Fixed standalone binaries loading .env, .env.local, and .env.development from the launch directory into Pi's environment (#10473)
- Fixed !! command headers losing their dim color once output arrives (#10557 by @rwachtler)
- Fixed the codemode description not marking searchTools(), describeTool(), and describeNamespace() as async, which led models to serialize the unawaited promise as {} (#10555)
- Fixed codemode output items running together, so models could not tell where one text() or console.log() output ended and the next began. With several text items, each now starts with a ==> text N/M <== line, and console calls follow the other output in one <console_output> block with one line per call
- Fixed /mcp waiting for all servers to connect before opening; the manager now updates live and remains usable while enabling, reconnecting, or disabling servers (#10562)
- Fixed images being dropped as "could not be resized" when running under node --watch on Node 24.19+ and 26.x, where Node posts its own messages on the image resize worker channel (#10527)
- Fixed clipboard paste doing nothing in Termux, and failed copies there omitting the Termux:API install hint (#1039 |
| 1.0.4 | 5 d’octubre del 2026 | — | 64 bits ZIPARM64 ZIP Notes de la versióNew Features
- Tool patterns and --no-mcp: --tools and --exclude-tools accept * patterns, for example --tools read,codemode,'mcp__radius__*' keeps only one MCP server's tools. --tools now keeps MCP tools unless an entry starts with mcp__, and --no-mcp turns off MCP for one run. See Tools and MCP tools.
- Codemode persists images: tools.read() on an image file now gives back an image block that image() can show. See Call tools.
Added
- Added * patterns to --tools and --exclude-tools, for example --tools read,codemode,'mcp__radius__*'
- Added --no-mcp to disable the built-in MCP support for one run
Fixed
- Fixed syntax highlighting losing colors after the first line of multiline strings and comments in fenced code blocks (#10143)
- Fixed codemode scripts not receiving images from read: tools.read() now resolves to an image block for image files, which image() shows (#10251)
- Fixed MCP OAuth sign-in failing with invalid_redirect_uri on servers with OpenID Connect client registration, such as mcp.modem.dev: pi now registers as a native client (#10493)
- Fixed --tools removing MCP tools, which left pi --tools codemode without any MCP servers. --tools now keeps MCP tools unless an entry starts with mcp__
- Fixed MCP session shutdown returning while a server was still connecting, leaving its transport open until the server answered or timed out (#10249)
- Fixed system prompt rules and the skills hint naming tools hidden by prepareLoadout. Hidden tools are left out of the rules, the skills hint names no tool when the file reader is hidden, and codemode shows each tool's prompt guidelines with its declaration; ToolLoadout gains getPromptGuidelines() (#10343)
- Fixed Bedrock requests that fail with The pending stream has been canceled after a stalled HTTP/2 connection not being retried automatically (#10379)
- Fixed codemode scripts that patch built-ins (for example Array.prototype.toJSON = ...) crashing pi and leaving the tool call unsettled. Built-ins are now frozen before the script runs, so such patches have no effect (#10444) |
| 1.0.3 | 5 d’octubre del 2026 | — | 64 bits ZIPARM64 ZIP Notes de la versióNew Features
- Azure Foundry Chat Completions — The azure provider (renamed from azure-openai-responses) now also serves Foundry Chat Completions deployments, starting with azure/deepseek-v4-pro. See Azure OpenAI.
- Codemode images saved to files — image() also writes each image to a temp file and names the path in the result, so later turns can copy or move generated images. See Generate images.
Breaking Changes
- Renamed the Azure provider from azure-openai-responses to azure. Rename the provider key in auth.json (or run /login again), in models.json, and in settings.json (defaultProvider, enabledModels patterns, and modelThinkingLevels keys). Sessions that used the old provider fall back to another model when resumed, and their prompt cache is not reused. The AZURE_OPENAI_* environment variables are unchanged (#9714 by @jsanter27)
Added
- Added Azure Foundry Chat Completions deployments, starting with azure/deepseek-v4-pro (#9645, #9714 by @jsanter27)
Changed
- Codemode image() now also saves each image to a temp file and names the path in the result, so later turns can copy or move generated images (#10310)
- Output files (full text of truncated tool output, binary MCP resources, codemode images) are now readable only by the user
- Home/End now always move the editor cursor to the line start/end; fullscreen transcript top/bottom moved to Ctrl+Home/Ctrl+End, which no longer move the editor cursor (#10314)
Fixed
- Fixed subscription logins such as Sign in with ChatGPT failing with refresh_token_invalidated after a request was cancelled during an OAuth token refresh
- Fixed codemode failing for the rest of a session after a pnpm global update removed the running install, and added a restart hint when errors occur after pi was updated or removed on disk (#10439)
- Fixed interactive sessions reporting a read EIO or setRawMode EIO crash (and asking to run /bug) when the terminal went away, e.g. after closing the window or resuming a suspended pi in a closed terminal |
| 1.0.2 | 4 d’octubre del 2026 | — | 64 bits ZIPARM64 ZIP Notes de la versióNew Features
- Sampling by thinking level — samplingParamsByThinkingLevel in models.json sets sampling parameters such as temperature and top_p for each thinking level on OpenAI-compatible APIs. See Configure sampling by thinking level.
Added
- Added samplingParamsByThinkingLevel to models.json for per-thinking-level sampling parameter overrides on OpenAI-compatible APIs. See Configure sampling by thinking level (#9776 by @mrexodia) |
| 1.0.1 | 3 d’octubre del 2026 | — | 64 bits ZIPARM64 ZIP Notes de la versióNew Features
- Nix flake — nix run github:earendil-works/pi/stable runs the latest release, and nix profile add github:earendil-works/pi/stable installs it. See Install pi.
- Project overrides for MCP servers — .pi/mcp.json and /mcp can 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/clef and @cf/cloudflare/clef-flash are usable from codemode scripts and extensions. See Use classifier models.
Added
- Added a copy key (app.message.copy, default ctrl+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.json entry without command or url sets only enabled, exposure, and toolExposure of the user-level server, and /mcp can 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/stable runs the latest release, and nix profile add github:earendil-works/pi/stable installs it. See Install pi (#9137)
Changed
- pi update on 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-expansion 5.0.9 by pinning brace-expansion 5.0.12 as a direct dependency (GHSA-q2hr-2g5m-vwhr, GHSA-qhr7-859c-m2p7, GHSA-6j4f-fj2g-mc7p) (#10288)
- Fixed a trailing comma in --models adding an extra model to the model cycle (#10334)
- Fixed a codemode script 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 Image not 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-5 instead of claude-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 signature in thinking block" after the system prompt or tools changed (#10324)
- Fixed Together |
| 1.0.0 | 1 d’octubre del 2026 | — | 64 bits ZIPARM64 ZIP Notes de la versióNew Features
- Fullscreen by default — The TUI now runs fullscreen. Set tuiMode to "regular" to keep the terminal's normal scrollback. See Terminal and display.
- Leaner codemode — About 40% fewer prompt tokens, and errors that tell the model how to recover. See Codemode.
- Image generation in codemode — Scripts call models.generateImages() with the session's credentials. See Generate images and Use image models.
- Radius in /login — Sign in with Radius and set up its MCP server in one step. See Radius.
- Anthropic copy code login — Sign in when the browser runs on another machine. See Authenticate interactively.
- MCP OAuth hardening — oauth.authServerMetadataUrl, RFC 9207 iss checks, credentials per server, and step-up sign-in that keeps granted scopes. See Authenticate with OAuth.
- Header-only quiet startup — quietStartup: "header" keeps the version and key hints and hides the rest. See Terminal and display.
Added
- Added an oauth.authServerMetadataUrl setting for MCP servers that advertise a wrong OAuth authorization server or none. Pi uses the configured metadata document instead of discovery (#10172).
- Added quietStartup: "header", which keeps the startup header with version and key hints but hides the model scope line and loaded-resource listing.
- Added models.generateImages() to codemode scripts. It runs image models such as OpenRouter's with the session's credentials and returns base64 image blocks that image() attaches to the result; usage counts toward the session cost like models.classify(). Extensions can call ctx.modelRegistry.generateImages(). See Use image models.
- Added a copy code login method to Anthropic /login for headless setups where the browser runs on another machine (#10194 by @lucasmeijer).
Changed
- Changed the default TUI mode to fullscreen. Set tuiMode to "regular" or pass --tui-mode regular to keep the terminal's normal scrollback.
- /login now offers "Sign in with Radius" at the top level, as the last option, with its status. After a Radius sign-in, /login offers to configure the Radius MCP server in the global mcp.json with "auth": { "provider": "radius" } and reloads. Cancelling a login returns to the menu it was started from.
- The provider docs page is renamed to Providers, its "Cloud Providers" section is now "Provider Specific Config", and it documents Radius first.
- MCP OAuth credentials are now stored per server name and URL, so MCP servers with the same URL can sign in with different accounts. Credentials stored by URL alone move to the first server that uses them (#10252).
- Codemode costs far fewer prompt tokens: with the default tools and codemode active, a GPT-5.6 request shrinks from about 5,300 to 3,300 tokens. The codemode description lists the script globals in one line each and points to the new Codemode reference for the models API, which the model reads when it needs it. Declared tools say in one line how scripts call them and what the call resolves to, instead of repeating their full declaration, and the system prompt's codemode guidance and MCP server section are shorter.
- Codemode errors now say how to recover: reading a tool or models member that does not exist names the close matches (tools.Bash suggests tools.bash), models.classify() and models.generateImages() reject malformed arguments with the expected shape, an unknown model points to models.getAvailableOfType(), an oversized store() value explains what the store is for, and a script that generates images without showing them gets a note. Scripts that probed for a tool with typeof tools.name must use "name" in tools.
- /login and /logout now label providers without credentials as "not configured" instead of "unconfigured".
- OAuth browser pages now show the color Pi logo.
Fixed
- Fixed MCP OAuth sign-in accepting an authorization response whose iss parameter names another authorization server; the code is now rejected before it is exchanged (RFC 9207).
- Fixed MCP OAuth sign-in failing with Invalid scope when |
| 0.99.2 | 30 de setembre del 2026 | — | 64 bits ZIPARM64 ZIP Notes de la versióNew Features
- MCP servers stay out of the way: servers with the default codemode exposure are no longer listed in the codemode description and no longer block the first prompt. They appear in a short system prompt section, and scripts find their tools with searchTools() and describeNamespace(). See Control tool exposure.
- More MCP authentication options: oauth.clientName for servers that only accept known OAuth clients, and "auth": { "provider": "<provider>" } to authenticate HTTP servers with a provider's /login token. See Authenticate with OAuth.
- Anthropic workload identity federation from the Anthropic SDK environment variables. See Use an API key from the environment.
- /reload enables tools newly added to the defaultTools setting. See Tools.
Added
- Added a description field for MCP servers (pi mcp add --description), shown with the server in the system prompt and used to rank its tools in tool search, and a describeNamespace(name) codemode helper that returns a namespace's instructions and tool names. describeNamespace() and searchTools() accept a namespace as mcp__dev-radius, mcp__dev_radius, dev-radius, or dev_radius.
- Added an oauth.clientName setting for MCP servers (pi mcp add --oauth-client-name) to change the client name sent during OAuth client registration, for servers that only accept known clients (#10226).
- Added "auth": { "provider": "<provider>" } for HTTP MCP servers to send a provider's current /login token as the bearer token instead of using MCP OAuth. The token is read on every request, so provider refreshes apply. Only allowed in the global mcp.json and from extensions, and requires https except on loopback hosts.
- Added Anthropic workload identity federation from the ANTHROPIC_FEDERATION_RULE_ID, ANTHROPIC_ORGANIZATION_ID, and ANTHROPIC_IDENTITY_TOKEN_FILE environment variables (see Providers) (#10177, #10242 by @philfreo).
- /reload now enables tools newly added to the defaultTools setting. Tools removed from it stay enabled, tools turned off during the session stay off unless newly added, and --tools, --no-tools, and --no-builtin-tools still override the setting (#10245).
Changed
- MCP servers with the default codemode exposure no longer appear in the codemode description; scripts find them with searchTools(). codemode-deferred is now an alias for codemode. Use direct exposure for tools the model should see without searching (#10212).
- The codemode description no longer includes deferred tools, tool counts, or MCP server instructions, so it no longer changes when MCP servers connect or change their tools. The tool_search description no longer lists the servers whose tools it can load, for the same reason. Servers are listed instead in an mcp_servers system prompt section with a one-line summary, updated at the start of each prompt; a changed section is appended to the conversation. Scripts read server instructions with describeNamespace() (#10212).
- The first prompt no longer waits for MCP servers without direct tools. They connect in the background and are waited for when a codemode script names them, a script searches tools, or tool_search runs (#10212).
Fixed
- Fixed new sessions intermittently ignoring the saved default model, or warning that no models are available, when it belongs to an extension-registered native provider with a stored credential (#9962, #10190 by @davidbrai).
- Fixed the /mcp sign-in URL not being clickable when it wraps across lines, by emitting it as a terminal hyperlink with a Cmd/Ctrl+click to open line like /login (#10186).
- Fixed codemode image() accepting malformed base64 data or unsupported image types, which persisted an invalid image block that made every later provider request fail with HTTP 400 (#10215).
- Fixed codemode failing to start its script worker from the standalone Windows executable (#10204).
- Fixed prompt submission slowing down with session length, because resolving the session's model selection looked up the model catalog once per assist |
| 0.99.1 | 29 de setembre del 2026 | — | 64 bits ZIPARM64 ZIP Notes de la versióNew Features
- GPT-6.1 Sol — Available on OpenAI, Azure OpenAI, and OpenAI Codex, and now the default OpenAI Codex model. See Select a model.
Added
- Added GPT-6.1 Sol (gpt-6.1-sol) to the OpenAI, Azure OpenAI Responses, and OpenAI Codex providers.
Changed
- Changed the default OpenAI Codex model to GPT-6.1 Sol (gpt-6.1-sol).
Fixed
- Fixed /login with OpenAI failing in the bundled release with a missing openai-chatgpt.js module error. |
| 0.87.1 | 22 de setembre del 2026 | — | 64 bits ZIPARM64 ZIP Notes de la versióNew Features
- Latest frontier models — Use Claude Opus 5.5, GPT-6 Sol, and GPT-6 Luna through supported providers, including GitHub Copilot. See Choose a Model.
- Grok 4.7 by default for xAI — New xAI sessions now default to Grok 4.7. See Provider Authentication.
Added
- Added inherited Claude Opus 5.5, GPT-6 Sol, and GPT-6 Luna support for GitHub Copilot.
- Added inherited GPT-6 Sol and GPT-6 Luna support for OpenAI API keys and OpenAI Codex subscriptions.
- Added inherited Claude Opus 5.5 support for Anthropic with adaptive thinking and a 1M context window.
Changed
- Changed the default xAI model to Grok 4.7.
Fixed
- Fixed split-turn compaction summaries being refused by Claude Fable 5.1 by clearly separating the conversation and using continuation-oriented instructions (#9908 by @davidbrai).
- Fixed missing or invalid --mode values being silently ignored instead of reporting an error and exiting with a nonzero status (#9045).
- Fixed inherited image-only user messages being rejected by some OpenAI-compatible providers because they included an empty text part (#9797).
- Fixed inherited Anthropic OAuth requests reporting an outdated Claude Code version. |
| 0.87.0 | 21 de setembre del 2026 | — | 64 bits ZIPARM64 ZIP Notes de la versióNew Features
- Canonical session context and extension boundaries — Edit model context without rewriting history and add actionable lifecycle hooks. See ContextEditEntry and extension events.
- Full-transcript context extensions — Use context_with_system for per-request system-message transformations. See context_with_system.
- Per-model image input limits — Configure cache-safe image resizing per model for attachments, read, and tool-result images. See Image Input Limits.
Breaking Changes
- Removed the inherited shouldStopAfterTurn agent option. Use finishTurn and return { action: "end" } instead. finishTurn runs before turn_end but applies the decision afterward, and it also receives error and aborted responses; migrate normal-response predicates by returning undefined for those hard exits. See the @earendil-works/pi-agent-core changelog for a complete before-and-after example.
- Added ContextEditEntry to the exported SessionEntry union. TypeScript consumers with exhaustive entry switches must handle context_edit; use replacement: null for omission and a content replacement otherwise.
- Made SessionManager canonical for AgentSession provider context. Assigning session.agent.state.messages no longer replaces future request history; restore with SessionManager.inMemory(cwd, { id }, entries), navigate with session.navigateTree(), or append through session.sessionManager and call session.refreshContext().
- Expanded TurnEndEvent with required boundary fields and added AgentBeforeSettleEvent to the exported ExtensionEvent union. Consumers constructing events or exhaustively switching on ExtensionEvent must handle the new shapes. ExtensionRunner.emit() no longer accepts turn_end; host integrations dispatch actionable boundaries with emitBoundary(baseEvent, buildContext).
- Deferred runs requested from agent_settled handlers until all settled handlers finish. Handlers still observe ctx.isIdle() === true, but no longer see a reentrant agent_start during the same notification dispatch.
Added
- Added append-only model-context edits. For example, sessionManager.appendContextEdit(entryId, null) omits one message from future provider context without changing raw history, usage, or UI history.
- Added actionable turn_end and agent_before_settle extension boundaries. Return { entries: [...event.entries, draft], continue: true } to persist structural entries in order and ensure one next provider request without changing steering or follow-up scheduling.
- Added retain-none compaction input: sessionManager.appendCompaction(summary, null, tokensBefore) stores the compaction's own ID as its kept boundary.
- Added the context_with_system extension event, which runs after context handlers on the full transcript including system messages and sends its result verbatim. See context_with_system.
- Added per-model image resize profiles through inputLimits.images.resize in models.json, applied to file attachments, image reads, and tool-result images (#9631).
Fixed
- Fixed string context-edit replacements producing invalid assistant and tool-result message content instead of text blocks.
- Fixed context-invisible boundary metadata and replacement edits causing newly appended or replaced input to be summarized before its first provider request.
- Fixed edited-context accounting both discarding valid assistant usage captured after the latest context edit and reusing that usage after a later compaction made it stale.
- Fixed selected error retries and final length/overflow recovery retaining abandoned model attempts in future provider context; post-run recovery omissions are now persisted without hiding raw transcript history or changing queue scheduling.
- Fixed context handlers that filter or slice messages dropping the prompt and tool declarations, which after extension-driven compaction left requests without built-in tools or made Codex emit raw tool-call text. Handlers no longer see system messages; Pi restores the prompt and tool state after they ru |
| 0.86.1 | 20 de setembre del 2026 | — | 64 bits ZIPARM64 ZIP Notes de la versióNew Features
- Meta Muse provider — Sign in with Meta using /login meta or use META_API_KEY to access Muse Spark models. See Meta (Muse subscription).
Added
- Added Meta (Muse subscription) login via /login meta with automatic Model API key refresh, plus META_API_KEY support (#9096 by @xl0).
Changed
- Enabled Node's persistent compile cache before loading the bundled CLI runtime, reducing repeat launch time.
Fixed
- Fixed /bug descriptions dropping line breaks from pasted diagnostics.
- Fixed /bug hints appearing for user cancellations and retryable provider failures such as service unavailability.
- Fixed clipboard copy failing in containers and WSL without WSLg by restoring the OSC 52 fallback when no display is available, and added a verified Windows clipboard backend for WSL (#9688).
- Fixed inherited z.ai Prompt too long errors not being recognized as context overflow (#9805).
- Fixed inherited Cerebras models advertising unsupported strict tool schemas, which caused HTTP 400 errors when strict and non-strict tools were mixed (#9804 by @EdenGottlieb). |
| 0.86.0 | 19 de setembre del 2026 | — | 64 bits ZIPARM64 ZIP |
| 0.85.1 | 5 de setembre del 2026 | — | 64 bits ZIPARM64 ZIP Notes de la versióNew Features
- GPT-6 Astra — Available through OpenAI API keys and OpenAI Codex subscriptions. See API Keys and OpenAI Codex.
Added
- Added GPT-6 Astra for OpenAI API keys and OpenAI Codex subscriptions.
- Added five-times-faster mouse wheel scrolling while holding Alt in fullscreen mode (#9166 by @xl0).
Fixed
- Fixed configurable save keybindings in the model and thinking selectors (#9149 by @rwachtler).
- Fixed SDK import failures caused by unintentionally publishing internal experimental code and dependencies in 0.85.0. The experimental client and experimental/plugin subpaths and server/client commands are now source-only through pi-test.sh; the supported local SDK and stdio RPC API are unchanged (#9132).
- Fixed mouse hover changing selection and recentering autocomplete and settings lists, causing clicks to target a different item.
- Fixed long prompt-cache requests for GPT-5.6+ Responses models to use prompt_cache_options.ttl: "30m" instead of prompt_cache_retention: "24h". |
| 0.85.0 | 4 de setembre del 2026 | — | 64 bits ZIPARM64 ZIP Notes de la versióNew Features
- Persistent Claude thinking effort — Supported Anthropic transports preserve per-turn effort and recover safely from signed-thinking mismatches. See Model Configuration.
- Fullscreen transcript controls — Jump to the latest message from a scrolled transcript and use the embedded working indicator. See TUI Fullscreen Viewport.
- Restorable in-memory sessions — Resume externally stored session entries through the SDK. See Session Management.
Added
- Added SessionManager.inMemory() support for restoring externally managed session entries (#8980 by @y-nk).
- Added inherited OpenAI-compatible vllmPriority and supportsMaxOutputTokens model settings for vLLM scheduler priority and OpenAI Responses output-token limits (#9004 by @AppleDannyClegg, #8941 by @scturtle).
- Added inherited LaTeX rendering for relational algebra join symbols (#9050 by @haoqixu).
- Added a clickable "Jump to latest message" label with the tui.altScreen.bottom shortcut to the fullscreen transcript while it is scrolled up (#9080 by @rwachtler).
Changed
- Moved the streaming working indicator into the default editor border and matched its default spinner and label to the thinking-level border color. Custom editors retain the standalone indicator unless they opt in to embedding it (#8799 by @cristinaponcela).
- Reduced inherited fullscreen transcript search latency on large transcripts by caching unchanged search results, indexing ASCII runs, and limiting highlight work to visible matches (#8800 by @cristinaponcela).
Fixed
- Fixed managed fd and ripgrep downloads on Linux musl systems (#9070 by @Charlie0113-T).
- Removed the unavailable inherited Grok Build 0.1 model from /model (#9093 by @Jaaneek).
- Fixed inherited provider streams emitting incompatible event sequences and custom tool-call deltas.
- Restored the @earendil-works/pi-coding-agent/client compatibility entry point.
- Fixed the inherited Qwen Token Plan Individual catalog to include Qwen3.8 Flash (#9021).
- Fixed inherited OpenAI Codex SSE parsing to process terminal events that are not followed by a blank line (#9047).
- Fixed inherited GitHub Copilot Claude Fable 5 requests so selected reasoning levels are sent (#8961).
- Fixed inherited Baseten GLM-5.2 models incorrectly advertising image input support (#8293 by @Panoplos).
- Fixed skills being unavailable when Bash is the only enabled tool (#8552 by @xl0).
- Fixed concurrent session shares overwriting one another (#8613 by @wutongyuonce).
- Fixed image orientation detection skipping EXIF data after non-EXIF APP1 segments (#8616 by @wutongyuonce).
- Fixed imported sessions overwriting an existing session with the same filename (#8985 by @wutongyuonce).
- Fixed session forks losing their compaction boundary (#8990 by @acmerfight).
- Fixed in-memory session forks before an active turn settled (#8937 by @acmerfight).
- Fixed inherited Fireworks GLM models using the wrong API adapter.
- Fixed inherited NO_PROXY matching for root domains and subdomains (#8737 by @MeiSiristhebest).
- Fixed bash, edit, find, grep, ls, read, and write tools ignoring ctx.cwd (#8627 by @vmizg).
- Fixed inherited terminal startup under restricted seccomp policies that reject the SIGWINCH self-signal (#8898 by @bartlomiejkida).
- Fixed inherited Zed terminal image capability detection (#8828 by @Perlence).
- Fixed drag selection continuing over the fullscreen editor.
- Fixed managed fd and ripgrep downloads requiring the GitHub Releases API (#8708 by @Terminator666666).
- Fixed branch summaries failing when reasoning consumes the previous 2048-token output cap (#8845).
- Fixed the write tool reporting UTF-16 code-unit counts as byte counts by removing the misleading count (#8979).
- Fixed proxied plain-HTTP provider requests hanging after a tool call by tunneling them with CONNECT (#8134).
- Fixed RPC abort reporting success without cancelling an in-progress manual compaction (#8920). |
| 0.84.4 | 28 d’agost del 2026 | — | 64 bits ZIPARM64 ZIP Notes de la versióNew Features
- Terminal capability overrides — Override detected terminal hyperlink, image, and truecolor support. See Capability Overrides.
- Extension UI prompt events — Integrations can distinguish active agent work from time spent waiting for ctx.ui prompts. See Extension UI prompt events.
- RPC queue clearing — Retrieve and clear queued steering and follow-up messages with clear_queue. See RPC clear_queue.
- Fullscreen selection copy controls — Disable automatic selection copying in fullscreen mode and use Ctrl+X to copy the active selection. See UI & Display.
- DeepSeek V4 Flash Vision (experimental) — Use the vision-capable model through the built-in DeepSeek provider. See API Keys.
Added
- Added ui_prompt_start and ui_prompt_end extension events so host integrations can distinguish active agent work from waiting on user-facing ctx.ui prompts (#8355 by @cristinaponcela).
- Added detectSupportedImageMimeTypeFromFile() to the public library exports (#8600 by @xl0).
- Added inherited experimental vision-capable deepseek-v4-flash-vision-exp model support.
- Added transcript usage notices for compaction and branch summaries when cache miss notices are enabled.
- Added RPC clear_queue to retrieve and remove queued steering and follow-up messages (#8432).
- Added environment variables and advanced settings for overriding auto-detected terminal hyperlink, image, and truecolor capabilities (#8665).
- Added fullscreenCopyOnSelect to disable automatic fullscreen selection copy; when disabled, Ctrl+X copies the active text selection before falling back to the last assistant message, while /tree still copies the selected message (#7720).
Fixed
- Fixed toggling thinking visibility clearing partial output from running Bash tools (#8611).
- Fixed Windows shell aborts crashing Pi when taskkill.exe is unavailable on PATH (#6596).
- Fixed resumed sessions corrupting the next appended entry when their JSONL file lacks a trailing newline (#8345).
- Fixed extension messages sent with triggerTurn: false while the agent is running being inserted between a tool call and its result, which made providers that validate message order reject the replayed history. They are now appended once the turn's tool results are in (#8537).
- Fixed compaction and branch summaries forcing toolChoice: "none" (#8649, #8638).
- Fixed large tool results crossing the auto-compaction threshold being sent to the provider before compaction. Pi now compacts between tool execution and the next assistant response in the same run, and restores interactive progress when that run resumes (#6879).
- Fixed Google Vertex requests failing with HttpsProxyAgent is not a constructor when the bundled Node.js runtime uses an HTTP(S) proxy (#8610).
- Fixed saving a default model from a non-empty model scope so it remains available in that scope.
- Fixed inherited @ file autocomplete ranking to prefer direct and shallower matches over similarly ranked nested paths (#8669).
- Fixed inherited OpenAI-compatible streams serializing thinking signatures repeatedly during streaming (#8671).
- Fixed inherited main-screen rendering crashing when image-heavy output exceeded V8's string length limit (#8028).
- Fixed inherited fullscreen double-click word selection splitting paths and kebab-case tokens on / and - (#8676).
- Fixed inherited Cloudflare AI Gateway catalogs omitting supported workers-ai/* passthrough models.
- Fixed inherited OpenAI-compatible reasoning replay to merge consecutive streamed text and summary reasoning_details deltas.
- Fixed inherited OpenRouter reasoning controls so reasoning-mandatory models do not receive effort: "none" (#8614 by @davidbrai).
- Fixed inherited OpenAI-compatible Chat Completions ignoring an explicitly requested toolChoice when no tools are defined.
- Fixed inherited fragmented Mistral tool calls splitting when continuation chunks omit the tool-call ID (#8387). |
| 0.84.3 | 24 d’agost del 2026 | — | 64 bits ZIPARM64 ZIP Notes de la versióNew Features
- PowerShell tool — Use optional native PowerShell command execution on Windows. See PowerShell Tool.
- Safer managed updates — Stage, verify, and atomically activate updates for installer-managed installations. See Install and Manage.
- Model and thinking controls — Select thinking levels with /thinking, search defaults, keep selections session-scoped, and persist them explicitly with Ctrl+S. See Models and Thinking.
Breaking Changes
- Renamed the inherited GoogleThinkingLevel type to GoogleApiThinkingLevel and added ResolvedGoogleThinkingLevel for normalized adapter levels.
Added
- Added an optional powershell tool for Windows, configurable through defaultTools and the SDK. See PowerShell Tool.
- Added a /thinking selector and searchable default choices to the model and thinking selectors; Ctrl+S saves the selected model as the global default. See Models and Thinking.
- Added optional routing session IDs to exported compaction summary helpers so callers can preserve provider routing without enabling prompt cache writes.
- Added transcript usage notices for compaction and branch summaries when cache miss notices are enabled.
- Added session_compact_failed extension events so compaction failures and aborts expose their reason, retry state, source, and error message to handlers (#8175).
- Added inherited provider-neutral toolChoice support to simple stream requests.
- Added inherited automatic Anthropic server-side refusal fallback for supported first-party models, including returned-model usage pricing (#8017).
- Added inherited configurable OpenAI-compatible thinking-token budget fields for vLLM, Qwen/SGLang, and llama.cpp servers. See OpenAI Compatibility (#8275 by @bnsd55).
- Added inherited China-specific ZAI Coding Plan models, including GLM-4.6V vision support and API-equivalent usage cost estimates (#8220).
- Added inherited deepseek-v4-pro-0813 support to the Qwen Token Plan Individual catalog (#8194).
Changed
- Changed experimental installer-managed installations so pi update stages, verifies, and atomically activates the selected release in place. See Install and Manage.
- Changed inherited built-in xAI models to use the Responses API with encrypted reasoning replay and made Grok 4.6 the default xAI model (#8124 by @Jaaneek).
- Changed inherited Anthropic, Azure OpenAI, Google, Mistral, and OpenAI adapters to send Pi's default User-Agent unless overridden (#8305).
- Changed Windows and WSL keybinding defaults to avoid terminal-reserved shortcuts for image paste, model cycling, editor undo, fullscreen transcript navigation and search, and message queueing (#8372).
- Changed Bun release archives to ship the native clipboard binary only inside the wrapper package, removing a duplicate platform package from each archive.
- Changed package resource glob expansion to use Node.js's built-in implementation with deterministic visible-path matching, reducing the installed runtime dependency tree.
- Changed the bundled Node.js runtime to load jiti only when importing an extension and Babel only when uncached source needs transformation, reducing CLI startup time and bundle size.
- Changed syntax highlighting to initialize only twenty common languages eagerly and defer the remaining grammars until after the initial TUI render, reducing CLI startup time.
- Changed the Node.js CLI and RPC entrypoints to load a bundled runtime, reducing startup filesystem reads while keeping the public library and legacy module paths on the modular runtime for normal dependency identity.
- Changed session sharing to render clickable terminal links, display only the canonical Radius artifact URL, and include the current system prompt and active tool definitions in Radius session shares.
Fixed
- Fixed failed extension factories leaving event subscriptions, provider registrations, and default flag state active (#8424 by @acmerfight).
- Fixed models.json typings omitting the documented OpenAI-compatible compat.supportsFinishReason provider |
| 0.84.2 | 14 d’agost del 2026 | — | 64 bits ZIPARM64 ZIP Notes de la versióNew Features
- Fullscreen transcript search — Search and navigate matches in fullscreen mode. See TUI Fullscreen Viewport.
- Configurable default tools — Choose startup built-in tools globally or per project. See Tools.
- Configurable fullscreen exit output — Print the transcript or only a resume hint on exit. See Interactive Mode.
Added
- Added fullscreen transcript search with Ctrl+Shift+F, incremental match highlighting, configurable search match theme colors, and next/previous navigation with Enter/Ctrl+G and Shift+Enter/Ctrl+Shift+G.
- Added experimental strict JSON-schema constrained sampling for the default read, bash, edit, and write tools under PI_EXPERIMENTAL=1.
- Added a fullscreen exit output setting to choose between printing the final transcript and only a session resume hint.
- Added the defaultTools setting for configuring the initial built-in tool selection globally or per project.
- Added --use-theme <name[/name]> to choose an initial per-run interactive theme without changing saved settings (#7722 by @rwachtler).
- Added expandPromptTemplates to extension pi.sendUserMessage() options for explicitly dispatching commands and expanding skills and prompt templates. See pi.sendUserMessage() (#7857 by @mrexodia).
- Added inherited createGatewayBindingFetch() for routing Cloudflare AI Gateway requests through a Workers AI binding without an API token (#7901 by @Maximo-Guk).
- Added inherited AssistantMessage.endTurn to preserve OpenAI Codex's terminal end_turn signal for diagnostics (#7766).
- Added inherited unbound single-line transcript scrolling actions for fullscreen mode. See TUI Fullscreen Viewport (#7903 by @midastruth).
Changed
- Changed inherited Kimi Coding requests to use pi's runtime User-Agent header.
- Replaced the inherited Mistral SDK transport with a native Chat Completions HTTP stream, eliminating its generated client and schema runtime overhead.
- Documented the generic AI_AGENT=pi process marker and how it differs from PI_CODING_AGENT=true (#7747).
- Changed inherited OpenAI Responses deferred tool loading to prefer message-anchored additional_tools where supported while retaining tool-search and top-level fallbacks (#7709).
- Reduced inherited fullscreen rendering allocation churn by painting full-width layout rows directly instead of recompositing them on every frame.
Fixed
- Fixed managed-tool downloads delaying TUI startup and hiding diagnostics in fullscreen mode by mounting the TUI first and showing download progress and warnings inside it.
- Fixed opening a model selector immediately after startup cancelling and restarting the in-progress model catalog refresh.
- Fixed inherited GitHub Copilot login triggering API rate limits while enabling model policies by limiting concurrent policy updates (#6187).
- Fixed fullscreen transcript search snapping back to the current match during manual scrolling and fragmented mouse input leaking into the search query.
- Fixed inherited required LaTeX arguments starting on a new line being parsed as empty (#7760).
- Updated the transitive nanoid development dependency to address a denial-of-service vulnerability.
- Fixed fallback rendering for extension tool results to collapse long output and honor tool expansion (#7979).
- Fixed JSON and RPC message_update events dropping cumulative usage during streaming. See JSON Event Mode and RPC message_update (#7982 by @christianklotz).
- Fixed pi.sendMessage(..., { triggerTurn: false }) steering an active run instead of only recording the custom message (#8022 by @cristinaponcela).
- Fixed the defaultTools setting dropping extension and SDK custom tools when selecting built-in defaults.
- Fixed the subagent example rejecting YAML array syntax for the tools frontmatter field (#7598 by @alexsavio).
- Fixed the subagent example dropping parent session model, thinking, and tool configuration (#7897 by @virtuald).
- Fixed custom system prompts concatenating the current working directory with later appended prompt con |
| 0.84.1 | 7 d’agost del 2026 | — | 64 bits ZIP Notes de la versióNew Features
- Qwen Token Plan Individual — Use the built-in provider for models documented for Individual subscriptions. See API Keys.
- Authentication readiness checks — Use pi auth check to verify provider or model credentials, optionally emitting the resolved credential.
- Improved fullscreen interaction — Select words and paragraphs with multiple clicks and configure half-page transcript scrolling. See TUI Fullscreen Viewport.
- Terminating blocked tool calls — Extension tool_call handlers can stop all-terminating batches without another model call. See Tool Events.
Added
- Added Qwen Token Plan Individual as a built-in provider with its documented subscription model catalog and the shared international QWEN_TOKEN_PLAN_API_KEY. See API Keys (#7659 by @arasovic).
- Added pi auth check provider/model auth preflight with optional credential output (#7152).
- Added terminate support to blocked extension tool_call events so all-terminating batches can skip the automatic follow-up model call. See Tool Events (#7715 by @muyiyr).
- Added inherited double-click word and whitespace selection, granularity-aware drag selection, and triple-click paragraph selection in fullscreen mode (#7725, #7733 by @volsa).
- Added inherited unbound half-page transcript scrolling actions for fullscreen mode. See TUI Fullscreen Viewport (#7735).
Changed
- Softened the bash tool's PI_* environment guideline in an attempt to reduce unnecessary inspection commands (#7128).
- Reduced worst-case automatic terminal theme detection delay from 200 ms to 100 ms by probing color-scheme and background support concurrently.
Fixed
- Fixed Bun standalone binaries crashing on startup when the cwd contains a bunfig.toml with preload by compiling with --no-compile-autoload-bunfig (#7685 by @geril07).
- Fixed extension TUI method wrappers recursing indefinitely when delegating to the original method (#7731).
- Fixed right-click not pasting clipboard text in fullscreen mode on Windows.
- Fixed inherited Agent.reset() clearing transcript and runtime state during active runs; it now rejects until the agent is idle (#7717 by @wesleyzhangwq).
- Fixed inherited LaTeX relation, multiplication, and named-operator spacing, and matrix composition with stacked fractions, operator limits, and adjacent matrices.
- Reduced inherited fullscreen mouse event volume under tmux, Zellij, and GNU Screen by using button-motion tracking instead of all-motion tracking. |
| 0.84.0 | 6 d’agost del 2026 | — | 64 bits ZIP |
| 0.83.0 | 29 de juliol del 2026 | — | 64 bits ZIP Notes de la versióNew Features
- Credential export for external clients — pi auth print-api-key and pi auth print-bearer-token export configured credentials with automatic OAuth refresh and minimum-validity enforcement.
- Headless OpenRouter sign-in — Complete /login over SSH by pasting the redirect URL or authorization code when the loopback callback is unavailable. See OpenRouter.
- Claude Opus 5 on GitHub Copilot — Use Claude Opus 5 through GitHub Copilot with adaptive thinking and a 1M context window. See GitHub Copilot.
Breaking Changes
- Upgraded bundled TypeBox aliases to 1.3.7, removing deprecated APIs including Type.Base, Type.Awaited, Type.Promise, Type.AsyncIterator, Type.Iterator, Type.Options, and Value.Mutate, while fixing compiled validation of nullable array tool arguments. Extensions using removed APIs must migrate to supported TypeBox APIs. See Package Dependencies (#7243 by @petrroll).
Added
- Added pi auth print-api-key and pi auth print-bearer-token commands for exporting configured credentials to external clients, including automatic OAuth refresh and configurable minimum token validity (#7168).
- Exposed the session's resolved model scope as ctx.scopedModels to extensions. See Extension Context (#7191 by @pungggi, #7215).
- Added inherited per-request fetch injection for supported text and image provider transports.
- Added the inherited "pending" stop reason for partial streaming messages. See Custom Provider Stream Pattern (#7151 by @lucasmeijer).
- Added inherited raw provider stop reasons across Google, Anthropic, Amazon Bedrock, Mistral, and OpenAI streams; unmapped terminal reasons now surface as provider errors instead of successful stops (#7272).
- Added manual redirect URL and authorization-code entry to OpenRouter login for remote and headless environments. See OpenRouter (#7114 by @rgarcia).
- Added inherited Claude Opus 5 support for GitHub Copilot with adaptive thinking and a 1M context window. See GitHub Copilot (#7158 by @jay-aye-see-kay).
Changed
- Changed inherited OAuth credential resolution to refresh tokens with less than five minutes of validity remaining instead of waiting until expiration (#7168).
Fixed
- Added a status line when the tool output expansion is toggled (#7180).
- Fixed file-backed SYSTEM.md and APPEND_SYSTEM.md prompts being omitted from the interactive startup context listing. See System Prompt Files (#7096).
- Fixed context files loading twice when a linked Git worktree is nested under its main repository. See Context Files (#7221 by @arajkumar).
- Fixed llama.cpp streamed responses reporting zero token usage and leaving session context accounting empty. See llama.cpp (#7258 by @SteveImmanuel).
- Fixed session replacement and committed tree navigation during an active response to abort and persist the outgoing turn instead of leaving dangling tool calls. See Sessions (#7022 by @tmustier).
- Fixed failed Git package installs leaving partial directories that blocked clean retries. See Install and Manage (#7210 by @haoqixu).
- Fixed the /model selector retaining a stale selection while filtering instead of highlighting the top match (#7211 by @christianbasch).
- Fixed direct RPC bash commands bypassing extension user_bash handlers. See User Bash Events (#7214).
- Fixed skills, prompts, and themes losing package source metadata after extensions reload resources. See Resource Events (#6968).
- Fixed cancellation of concurrently running user bash commands so every active command is aborted (#7103 by @yzhg1983).
- Fixed duplicate messages appearing when extensions switch sessions during interactive startup (#7110 by @yzhg1983).
- Fixed inherited Qwen Token Plan reasoning models to send their service-specific thinking controls and supported reasoning-effort levels (#6951, #6998).
- Fixed inherited Z.AI output limits being sent through an unsupported parameter. See Providers (#7174 by @HyeokjaeLee).
- Fixed explicitly configured Amazon Bedrock profiles being overridden by ambient AWS access k |
| 0.82.1 | 25 de juliol del 2026 | — | 64 bits ZIP Notes de la versióNew Features
- Claude Opus 5 — Available on Anthropic and Amazon Bedrock with adaptive thinking (including xhigh), inference profiles, and prompt caching. See Providers.
- Anthropic gateway bearer auth — ANTHROPIC_AUTH_TOKEN authenticates against Anthropic-compatible gateways that require Authorization: Bearer, including compaction and branch summaries. See Environment Variables or Auth File.
- Faster, more resilient model catalogs — pi.dev catalogs revalidate with If-None-Match so unchanged providers answer with an empty 304, and llama.cpp models stay listed across restarts. See llama.cpp.
Added
- Exposed the outputPad setting to custom message renderers. See Extensions (#7045 by @xl0).
- Added inherited ANTHROPIC_AUTH_TOKEN bearer authentication for Anthropic-compatible gateways. See Providers (#5871).
- Added inherited Claude Opus 5 support for Anthropic and Amazon Bedrock with adaptive thinking, inference profiles, prompt caching, and preserved AWS validation messages (#7081 by @unexge, #7083 by @davidbrai).
Changed
- Changed pi.dev model catalog refreshes to revalidate with If-None-Match, so unchanged provider catalogs answer with an empty 304 instead of a full download.
- Changed inherited Radius OAuth device authorization, token exchange, and refresh requests to use the configured gateway directly.
- Changed inherited model loading errors to append the underlying cause, so auth failures such as OAuth refresh failed for openai-codex report the provider response instead of a bare wrapper message.
Fixed
- Fixed compaction and branch summaries for providers whose authentication resolves entirely to request headers (#5871)
- Fixed unavailable scoped models being hidden from /models, allowing them to be removed without editing settings manually (#6949, #7032 by @christianklotz).
- Fixed startup context file discovery to skip directories that match context file names such as AGENTS.md, which produced EISDIR warnings (#7106 by @mrexodia).
- Fixed the llama.cpp extension to persist its model catalog, so llama.cpp models stay listed before the first successful refresh. See llama.cpp (#7072 by @davidbrai). |
| 0.82.0 | 24 de juliol del 2026 | — | 64 bits ZIP Notes de la versióNew Features
- Constrained tool sampling — Tools can prefer or require strict JSON Schema sampling or use OpenAI Lark/regex grammars, with model capability metadata preventing unsupported requests. See Constrained Sampling for Tools.
- OpenRouter and Kimi Code sign-in — Use /login to authorize OpenRouter or a Kimi Code subscription without manually configuring API keys. See OpenRouter.
- Session-aware, streaming bash integrations — Bash tools receive current session/model metadata, while direct RPC bash commands stream correlated output. See Bash Tool Session Environment and RPC bash events.
Added
- Added inherited Tool.constrainedSampling with strict JSON Schema (prefer/require) and OpenAI Lark/regex grammar variants across OpenAI, Anthropic, Amazon Bedrock, Google Gemini, and Mistral. See Constrained Sampling for Tools.
- Added inherited supportsGrammarTools and supportsStrictTools compatibility flags, expanded supportsStrictMode coverage, and generated model capability metadata to gate constrained sampling.
- Added inherited Kimi Code subscription OAuth login for the Kimi For Coding provider, including device authorization and automatic token refresh (#6935 by @zaycruz).
- Added inherited OpenRouter OAuth PKCE login through /login, minting a user-controlled API key. See OpenRouter (#6927 by @rsaryev).
- Exposed PI_SESSION_ID, PI_SESSION_FILE, PI_PROVIDER, PI_MODEL, and PI_REASONING_LEVEL to commands run by built-in and factory-created bash tools. See Bash Tool Session Environment.
- Added streaming bash_execution_update events for direct RPC bash commands, correlated with request IDs. See RPC bash events (#6971 by @ananthakumaran).
Changed
- Changed inherited generated model catalogs to expose only provider-verified reasoning effort levels from models.dev (#6928 by @davidbrai).
Fixed
- Fixed inherited DNS lookup failures such as getaddrinfo, ENOTFOUND, and EAI_AGAIN to trigger automatic assistant retries (#6946 by @christianklotz).
- Fixed inherited OpenRouter Anthropic cache breakpoints to advance through tool results and enabled cache control for ~anthropic/*-latest aliases (#6941 by @mteam88).
- Fixed inherited OpenAI Codex WebSocket sessions to retry once without a missing previous-response continuation after previous_response_not_found errors (#6955 by @davidbrai).
- Fixed TUI debug and crash logs to respect custom agent directories instead of always writing under ~/.pi/agent (#6958 by @davidbrai).
- Fixed slow Ctrl+G external-editor startup when the system temporary directory contains many entries (#6903 by @christianklotz).
- Fixed startup resource display to preserve relative paths for sibling npm extensions loaded by a package (#6964 by @davidbrai).
- Fixed compaction and branch-summary requests to use fresh routing session IDs with prompt caching disabled where supported (#6618 by @tmustier).
- Fixed explicit self-updates when PI_SKIP_VERSION_CHECK is set (#6977).
- Fixed scoped model IDs containing brackets to resolve as literal exact matches before glob matching (#6210).
- Fixed inherited OpenAI and Anthropic provider retry waits to honor abort signals and configured delay limits (#6980 by @petrroll).
- Fixed fresh installs from preferring bundled model catalogs over newer remote catalogs because package file mtimes were newer (#7016 by @davidbrai).
- Fixed inherited editor scroll indicators overflowing narrow terminals (#7015 by @christianklotz).
- Fixed llama.cpp models to use the loaded context window as their output token limit instead of capping it at 16K (#7034 by @christianklotz).
- Fixed release source archives to include the generated provider model data used to build standalone binaries.
- Updated the packaged protobufjs dependency to 7.6.5 to address GHSA-j3f2-48v5-ccww (#7005).
- Fixed /copy on Wayland to fall back to X11 or OSC 52 when wl-copy fails (#7009 by @rkfshakti).
- Fixed /model to reload updated models.json configuration when opening the model picker (#6999). |
| 0.81.1 | 21 de juliol del 2026 | — | 64 bits ZIP Notes de la versióNew Features
- Verifiable release source archives — GitHub releases now include deterministic, checksummed source archives with instructions for rebuilding standalone binaries. See Building standalone binaries from release source.
- Resilient compaction and branch summaries — Transient provider failures now follow the configured retry policy, with retry lifecycle events available to interactive, JSON, RPC, and SDK consumers. See Compaction & Branch Summarization and RPC retry events.
Added
- Added deterministic, checksummed source archives to GitHub releases with documented standalone binary rebuild instructions (#6913 by @christianklotz).
Fixed
- Fixed compaction and branch summarization to retry transient provider failures using the configured retry policy, with retry lifecycle events exposed to interactive, JSON, RPC, and SDK consumers (#6901 by @davidbrai).
- Fixed interactive startup waiting for background model catalog refresh while computing the footer provider count.
- Restored the default stream fallback for extensions using the pre-0.81 agent-core API (#6915).
- Fixed inherited Kimi K3 models from Moonshot AI and Moonshot AI China to use the OpenAI thinking format and expose reasoning effort support. |
| 0.81.0 | 21 de juliol del 2026 | — | 64 bits ZIP Notes de la versióNew Features
- Local llama.cpp model management — Connect to a llama.cpp router, search and download Hugging Face models, and explicitly load or unload models with live progress. See llama.cpp.
- Full provider extensions — Extensions can register complete pi-ai providers with authentication, model refresh, filtering, and custom streaming. See Register New Provider.
- Qwen Token Plan providers — Use the built-in international and China subscription providers with regional endpoints and API-key authentication. See API Keys.
- Expanded usage accounting — Tool, compaction, and branch-summary usage is persisted and included in session totals. See Compaction & Branch Summarization.
Added
- Added Qwen Token Plan and Qwen Token Plan China to built-in provider setup, default model resolution, and provider documentation (#6858 by @QuintinShaw).
- Added the get_available_thinking_levels RPC command and RpcClient.getAvailableThinkingLevels() method (#6865 by @cristinaponcela).
- Exported message and tool execution lifecycle event types from the package root (#6772 by @davidbrai).
- Added built-in llama.cpp router support with /login connection setup and /llama Hugging Face model search and downloads, explicit loading, unloading, and live progress. See llama.cpp.
- Added extension registration for complete pi-ai providers, including native authentication, model refresh, filtering, and streaming behavior.
- Added usage accounting for tools, compaction, and branch summaries in persisted sessions, footer totals, and session statistics (#6671 by @davidbrai).
Fixed
- Updated the packaged brace-expansion dependency to 5.0.7 (#6896 by @davidbrai).
- Fixed persisted remote model catalogs from overriding newer bundled catalogs after an upgrade.
- Fixed inherited stored API-key credentials to apply their provider-scoped env values, including Amazon Bedrock profiles (#6864 by @cristinaponcela).
- Fixed inherited OpenAI-compatible cross-provider replay to keep tool call IDs unique when multiple calls share a provider call ID (#6854 by @cristinaponcela).
- Fixed inherited Kimi K3 thinking levels to expose low, high, and max, and normalized the k2p7 alias to kimi-for-coding.
- Fixed inherited OpenCode Go models routed through the OpenAI Responses API.
- Fixed inherited pi-ai package metadata to avoid repeated consumer lockfile changes (#6812 by @jmfederico).
- Fixed inherited terminal shutdown to clear the editor's inverted software cursor before restoring the hardware cursor (#6790 by @dam9000).
- Fixed inherited ANSI-aware text wrapping to recognize CRLF and CR line endings while preserving styles (#6764 by @xz-dev).
- Fixed inherited editor paste registry corruption after deleting and undoing paste markers, preventing literal or mismatched paste markers in submitted prompts (#6844).
- Fixed sessionless OpenAI Codex WebSocket requests to use UUIDv7 request IDs (#6834 by @xl0).
- Fixed inherited GPT-5.6 Codex models to default to the 272K context window, avoiding automatic long-context pricing (#6853 by @aadishv).
- Fixed messages queued during compaction to preserve steering and follow-up delivery behavior (#6730 by @dannote).
- Fixed read tool errors being syntax-highlighted as if they were file contents (#6731 by @dannote).
- Fixed llama.cpp router download progress updates and removed redundant wording from model action confirmations.
- Moved automatic model catalog network refresh out of startup initialization and into the running interactive and RPC modes.
- Fixed persisted sessions being read and parsed twice when opened, reducing startup latency for large sessions (#6793).
- Fixed prompt-template defaults for all arguments (${@:-default} and ${ARGUMENTS:-default}) (#6695).
- Fixed obsolete custom UI, custom tool, and custom editor examples in the extension documentation (#6735).
- Fixed Kimi Coding sessions to show API-equivalent implied costs with the subscription indicator.
- Fixed OpenAI Responses early stream endings to trigger automatic re |
| 0.80.10 | 16 de juliol del 2026 | — | 64 bits ZIP Notes de la versióNew Features
- Kimi Coding thinking compatibility — Kimi Coding models now use adaptive thinking correctly; K3 exposes its supported max level and supports replaying empty-signature thinking blocks. See Kimi For Coding setup and Model Options.
Fixed
- Fixed inherited Kimi Coding requests to use Anthropic adaptive thinking effort without token budgets, and enabled empty thinking signatures for K3 and kimi-for-coding.
- Fixed inherited Kimi K3 pricing metadata for Moonshot AI and Moonshot AI China.
- Fixed inherited Kimi Coding K3 thinking-level metadata to expose only the supported max level (#6737).
- Fixed inherited catalog generation restoring xAI models removed in 0.80.9 (#6736). |
| 0.80.9 | 16 de juliol del 2026 | — | 64 bits ZIP Notes de la versióNew Features
- Kimi K3 and deferred tool loading — Use Kimi K3 across built-in providers, including progressive extension tool activation through Kimi’s native protocol. See Dynamic Tool Loading, OpenAI Compatibility, and the kimi-deferred-tools.ts example.
Added
- Added inherited Kimi K3 support for Kimi Coding, Moonshot AI, Moonshot AI China, OpenRouter, and Vercel AI Gateway.
- Added Kimi deferred tool loading for extension-driven tool activation. See Dynamic Tool Loading, OpenAI Compatibility, and the kimi-deferred-tools.ts example.
Changed
- Changed xAI login to use a prefilled device-authorization link labeled “Sign in with SuperGrok or X Premium,” and changed the default xAI model to Grok 4.5 (#6734 by @Jaaneek).
Fixed
- Fixed inherited Kimi K3 output limits for Vercel AI Gateway and OpenRouter models.
- Fixed cloning or forking a session before its first assistant response to explain that the session must be saved first.
Removed
- Removed Grok 3, Grok 3 Fast, Grok 4.20 variants, and Grok Code Fast 1 from the built-in xAI model catalog (#6734 by @Jaaneek). |
| 0.80.8 | 16 de juliol del 2026 | — | 64 bits ZIP Notes de la versióNew Features
- Unified model runtime and provider authentication — ModelRuntime centralizes model configuration, provider-owned /login, and dynamic provider catalogs. See Providers.
- Live model catalog refresh — /model refreshes configured providers in the background, and pi update --models forces an immediate refresh. See Install and Manage.
- xAI device-code OAuth and Grok 4.5 Responses support — Sign in to xAI with a device code and use Grok 4.5 with low, medium, or high thinking. See xAI.
Breaking Changes
- Replaced the SDK's CreateAgentSessionOptions.authStorage and modelRegistry options with the async modelRuntime option. AuthStorage and its storage backends are no longer exported; use ModelRuntime (or a custom pi-ai CredentialStore), or readStoredCredential() for one-off reads of auth.json.
- Removed redundant ModelRuntime.getAll(), find(), getSnapshot(), and getAuthOptions() projections. Use the pi-ai Models methods getModels(), getModel(), getProviders(), and checkAuth() directly.
- Replaced SDK request-auth assembly through ModelRegistry.getApiKeyAndHeaders() with ModelRuntime.getAuth(). Passing a provider ID returns provider-scoped auth; passing a model also resolves built-in, models.json, and extension model headers.
- Changed extension-facing ModelRegistry.refresh() from synchronous void to Promise<void> because models.json loading is asynchronous. Extensions must await it before making synchronous registry reads.
- Moved canonical dynamic catalog refresh to async ModelRuntime.refresh()/pi-ai Models.refresh(). Legacy extension OAuth modifyModels remains supported as a synchronous compatibility projection after credential initialization.
Added
- Added ModelRuntime as the canonical async SDK and internal model/auth facade while preserving the synchronous extension-facing ModelRegistry API. ModelRuntime.create() accepts any pi-ai CredentialStore through its credentials option.
- Added provider-owned /login discovery directly from registered pi-ai providers, including ambient auth status and informational links.
- Added file-backed dynamic catalogs in models-store.json, per-provider pi.dev catalog overlays, and Radius gateway support including offline migration from legacy credential-cached catalogs.
- Added extension provider refreshModels(context) support for dynamic model discovery with optional provider-controlled persistence.
- Added pi update --models to force an immediate model catalog refresh without updating pi or extensions.
- Added inherited xAI device-code OAuth login and Grok 4.5 OpenAI Responses support, with low, medium, and high thinking levels (#6651 by @Jaaneek).
Changed
- Changed ModelRuntime to compose built-in providers, immutable models.json configuration, and extension overlays through ad-hoc pi-ai provider methods.
- Changed ModelRuntime to own final request assembly: getAuth(model) includes configured model headers, stream methods resolve auth once, and before_provider_headers runs as the Models-only header transform before provider dispatch.
- Changed /model to render the current model snapshot immediately, refresh configured providers in the background, and update the open selector with partial results or timeout errors.
Fixed
- Fixed configured-provider catalog refresh to parse pi.dev's model-ID keyed responses, throttle checks to once per four hours, send the versioned pi user agent, treat unimplemented routes as unavailable overlays, and show concise refresh status in /model.
- Fixed adjacent assistant thinking blocks to render as one thinking section.
- Fixed inherited OpenAI Codex session IDs longer than 64 characters to meet the API limit (#6630).
- Fixed inherited terminal output to normalize tab characters consistently (#6697 by @xz-dev).
- Fixed the Windows terminal title after checking npm packages (#6629).
- Fixed Bun standalone binaries to bundle OAuth adapters for interactive logins. |
| 0.80.7 | 14 de juliol del 2026 | — | 64 bits ZIP Notes de la versióBreaking Changes
- Removed the openai-responses compat.sendSessionIdHeader flag from models.json. Session-affinity behavior is now controlled by compat.sessionAffinityFormat ("openai", "openai-nosession", or "openrouter"). Replace sendSessionIdHeader: false with sessionAffinityFormat: "openai-nosession" (#6496 by @petrroll).
New Features
- Cache-friendly dynamic tool loading - Extensions can add tools during execution while supported Anthropic and OpenAI Responses models preserve prompt-cache prefixes. See Dynamic Tool Loading.
- Message copy shortcut - Ctrl+X copies the last assistant message in the transcript or the selected message in /tree, making older and branched messages directly copyable. See Display and Message Queue.
- Fable 5 xhigh and max thinking - Native xhigh and max thinking levels are available across generated provider catalogs. See Model Options.
Added
- Added cache-friendly dynamic tool loading for extension tools activated by tool results. Supported Anthropic and OpenAI Responses models load definitions where they become available, preserving the cached prompt prefix. See Dynamic Tool Loading (#6474).
- Added inherited native xhigh and max thinking levels for Claude Fable 5 across all generated provider catalogs (#6490 by @davidbrai).
- Added Ctrl+X to copy the last assistant message, or the selected message in /tree.
- Added inherited toolChoice support for OpenAI and Codex Responses, including required and named tool selection (#6588 by @xl0).
Fixed
- Fixed inherited OpenRouter model context windows to use the top provider's actual context length (#6481 by @davidbrai).
- Fixed inherited OpenRouter OpenAI-compatible session IDs to use the x-session-id header instead of OpenAI-specific session-affinity fields (#6496 by @petrroll).
- Fixed Ctrl+V to paste clipboard text when the pasteboard does not contain an image.
- Fixed /login amazon-bedrock to prompt for and save a Bedrock API key instead of only displaying ambient AWS credential setup instructions.
- Fixed inherited Amazon Bedrock ambient AWS credentials to keep using SigV4 authentication, including for custom model IDs (#6532 by @ribelo).
- Fixed inherited Cloudflare Workers AI and AI Gateway authentication to use ambient account and gateway IDs when stored credentials contain only an API key (#6292 by @markphelps).
- Fixed inherited legacy terminal decoding for Alt+symbol key combinations such as Alt+, and Alt+. (#6523 by @ribelo).
- Fixed the GitHub Copilot mai-code-1-flash-picker model to route through the /responses endpoint (#6544 by @petrroll).
- Fixed branch summaries to work with providers that use ambient authentication instead of API keys (#6595 by @davidbrai).
- Fixed inherited Amazon Bedrock errors to report unhandled provider stop reasons instead of only An unknown error occurred (#6598 by @davidbrai).
- Fixed npm package removal when installed packages have conflicting peer dependencies (#6604 by @davidbrai).
- Fixed inherited Azure OpenAI Responses reasoning replay when encrypted_content appears only in the terminal response event (#6608 by @davidbrai).
- Fixed inherited Anthropic-compatible proxies that omit usage from message_delta events (#6611 by @davidbrai).
- Fixed inherited OpenCode OpenAI Responses models to omit the unsupported session-id header while preserving other cache-affinity data (#6645 by @davidbrai).
- Fixed system prompt cache invalidation across dates by removing the current date from the default prompt (#6621). |
| 0.80.6 | 9 de juliol del 2026 | — | 64 bits ZIP Notes de la versióNew Features
- max thinking level - New opt-in thinking level above xhigh, natively supported on GPT-5.6 and adaptive Claude models, available across CLI (--thinking max), SDK, RPC, and model selection. Custom themes can define thinkingMax. See CLI Reference.
- Input-based pricing tiers - Request-wide input-token pricing tiers for accurate long-context cost accounting (e.g. GPT-5.4/5.5/5.6 long-context rates), also configurable for custom models in models.json and modelOverrides. See Model Configuration.
Added
- Added the opt-in max thinking level across CLI, SDK, RPC, model selection, and themes. Custom themes can define thinkingMax; existing themes fall back to thinkingXhigh.
- Added request-wide input-token pricing tiers to custom model costs in models.json, modelOverrides, and extension-registered providers.
- Added ~ (home directory) expansion for the shellPath setting (#6470 by @aaronkyriesenbach).
Fixed
- Fixed inherited post-compaction output-token budgeting to ignore stale assistant usage from before the compaction boundary (#6464).
- Fixed inherited GPT-5.4 and GPT-5.5 long-context cost accounting while retaining the intentional 272K default context limit for models that require an explicit override.
- Fixed inherited GPT-5.6 metadata to keep direct OpenAI requests in the 272K short-context tier while exposing the Codex backend's 372K context window with long-context pricing, and removed the nonexistent bare gpt-5.6 alias.
- Fixed inherited Anthropic message conversion to preserve thinking blocks with empty thinking text but a valid signature instead of dropping them, avoiding thinking-block errors on newer Claude models (#6457 by @davidbrai). |
| 0.80.5 | 9 de juliol del 2026 | — | 64 bits ZIP Notes de la versióRelease 0.80.5 |
| 0.80.3 | 30 de juny del 2026 | — | 64 bits ZIP Notes de la versióNew Features
- Anthropic Claude Sonnet 5 support - Claude Sonnet 5 is available through inherited Anthropic-compatible and Bedrock provider catalogs with adaptive thinking enabled. See Providers and Model Options.
- Configurable output spacing - outputPad controls horizontal padding for user messages, assistant messages, and thinking blocks. See Settings.
- External editor configuration - externalEditor lets Ctrl+G use a configured editor before $VISUAL/$EDITOR fallbacks. See Settings and Keybindings.
- Richer RPC session tree access - RPC clients can inspect session entries and tree snapshots with get_entries and get_tree. See get_entries and get_tree.
- Extension session metadata updates - Extensions can observe session name changes through session_info_changed. See session_info_changed.
- Modern Azure Foundry endpoint support - Azure OpenAI Responses provider setup supports current Microsoft Foundry endpoint URLs. See Azure OpenAI.
Added
- Added inherited Anthropic Claude Sonnet 5 model support.
- Added get_entries and get_tree RPC commands for reading session entries and tree snapshots over RPC (#6078 by @geraschenko).
- Added a package ./rpc-entry export for launching Pi directly in RPC mode.
- Added session-name change events for extensions (#6175 by @xl0).
- Added inherited Azure OpenAI Responses support for modern Microsoft Foundry endpoint URLs (#6004 by @gukoff).
- Added inherited Usage.reasoning token counts for providers that report reasoning/thinking token usage (#6057).
- Added an externalEditor settings.json override for Ctrl+G external editor commands, with default fallbacks to Notepad on Windows and nano elsewhere (#6122).
- Added an outputPad setting for user message, assistant message, and thinking horizontal padding (#6168).
Changed
- Changed the default OpenAI model to gpt-5.5.
- Changed inherited OpenAI Codex Responses SSE response-header waits to use the configured HTTP timeout instead of the previous fixed 20 second timeout, reducing false timeouts on slow connections (#4945).
Fixed
- Fixed inherited Claude Sonnet 5 metadata to use adaptive thinking payloads for Anthropic-compatible and Bedrock requests.
- Fixed inherited generated Xiaomi MiMo model pricing to match current pay-as-you-go pricing from models.dev (#6138).
- Fixed inherited provider HTTP errors to include response bodies instead of opaque SDK messages (#5832 by @stephanmck).
- Fixed inherited streamSimple() max-token caps so providers that count input and output against one context window do not reject long requests (#5595).
- Fixed inherited OpenAI Responses streams to preserve reasoning replay state when output items finish out of order (#6009).
- Fixed inherited Z.AI preserved thinking requests to send thinking.clear_thinking: false when thinking is enabled, allowing replayed reasoning_content to participate in provider caching (#6083).
- Fixed pre-prompt compaction to stop after compaction instead of continuing immediately (#6074 by @yzhg1983).
- Fixed resource notifications to stay before messages when resuming sessions (#6048 by @haoqixu).
- Fixed startup benchmark timing output to print after TUI shutdown, preserve extension timings, and drain terminal-query replies before stopping benchmark mode (#6030 by @xl0, #6063 by @xl0).
- Fixed extension tool changes to apply before the next provider request in the same agent run without dropping before_agent_start system-prompt overrides (#6162).
- Fixed a crash when undici emits an internal client error while terminating a mid-stream HTTP response (#6133).
- Fixed the compaction event regression test to cover status indicator cleanup and keep CI passing.
- Fixed interactive status indicators so ending work, retry, compaction, or branch-summary indicators no longer shrink the TUI when clear-on-shrink is enabled (#6026).
- Fixed --session and SessionManager.open() to reject non-empty invalid session files without overwriting them (#6002).
- Fixed user-message transcript rendering to keep vis |
| 0.80.2 | 23 de juny del 2026 | — | 64 bits ZIP Notes de la versióChanged
- Changed inherited pi-ai ApiKeyCredential to use the auth.json-compatible discriminator type: "api_key" and provider-scoped env values instead of type: "api-key" and metadata.
- Renamed the inherited agent-core public harness shell execution options type from ExecutionEnvExecOptions to ShellExecOptions.
Fixed
- Fixed inherited Anthropic-compatible custom models to use explicit compatibility metadata instead of provider-name heuristics for session-affinity headers and unsupported tool-field omissions.
- Fixed inherited request-scoped apiKey and env values to participate in provider auth resolution, so providers such as Cloudflare can derive request-specific base URLs from explicit call options (#6021).
- Restored inherited temporary legacy per-API stream aliases such as streamSimpleOpenAICompletions on the pi-ai compat entrypoint (#6016, #6017).
- Restored inherited runtime detectCompat fallback in openai-completions for models without explicit compat metadata (#6020). |
| 0.80.1 | 23 de juny del 2026 | — | 64 bits ZIP Notes de la versióFixed
- Fixed inherited Amazon Bedrock scoped AWS_PROFILE endpoint resolution for built-in inference profile endpoints.
- Fixed inherited Fireworks Anthropic-compatible requests to apply session-affinity and unsupported tool-field defaults for custom Fireworks models.
- Fixed inherited Together MiniMax M2.7 metadata to avoid unsupported Together reasoning toggles. |
| 0.80.0 | 23 de juny del 2026 | — | 64 bits ZIP Notes de la versióChanged
- Added Ctrl+J as a default newline keybinding alongside Shift+Enter.
- Renamed the displayed zai provider label to ZAI Coding Plan (Global) for clarity (#5965).
- pi-ai's old global API (stream/complete/completeSimple, getModel/getModels/getProviders, registerApiProvider, getEnvApiKey, ...) moved off the @earendil-works/pi-ai root entrypoint to @earendil-works/pi-ai/compat. Extensions are not affected at runtime: the extension loader resolves the pi-ai root to the compat entrypoint (a strict superset), so existing extensions keep working unchanged. Extension sources that typecheck against pi-ai's published types should switch those imports to @earendil-works/pi-ai/compat (or migrate to the new createModels()/provider-factory API). The compat entrypoint and the loader alias will be removed in a future release with a migration guide.
Fixed
- Fixed session names to normalize newline characters before storing or displaying labels (#5999 by @haoqixu).
- Fixed the session selector to order threaded session trees by the latest activity anywhere in each subtree (#5784 by @Perlence).
- Fixed extension-related crash and startup-failure reporting to suggest restarting with pi -ne.
- Fixed inherited OpenAI Responses streams to fail before missing terminal events and fixed context usage and compaction estimates to ignore malformed all-zero assistant usage after truncated responses (#5526 by @dmmulroy).
- Fixed inherited OpenAI Codex Responses WebSocket sessions to reconnect once when OpenAI's connection limit is reached before output starts (#5973).
- Fixed inherited Amazon Bedrock endpoint resolution to honor scoped AWS_PROFILE values.
- Fixed inherited Cloudflare providers to require account/gateway configuration and route built-in compat calls through provider auth.
- Fixed provider-scoped auth environment values to reach inherited Models/ImagesModels API calls and compat API-key injection.
- Fixed inherited OpenCode Go GLM-5.2 metadata to expose xhigh reasoning and send the provider's max reasoning effort (#5967).
- Fixed pi --resume to load user package themes and resolve automatic light/dark theme settings.
- Fixed models.json custom providers so stored credentials can satisfy auth without a redundant provider-level apiKey (#5953).
Removed
- Removed inherited selective-provider @earendil-works/pi-ai/base and @earendil-works/pi-agent-core/base entrypoints; use the root packages with explicit Models provider factories instead. |
| 0.79.10 | 22 de juny del 2026 | — | 64 bits ZIP Notes de la versióNew Features
- Extension compaction event context - Extension session_before_compact and session_compact events now include reason and willRetry, so extensions can distinguish manual /compact, threshold auto-compaction, and overflow retry flows. See session_before_compact / session_compact and Custom Summarization via Extensions.
- Safer update flow - pi update installs the exact checked Pi version, and update notices show the changelog URL, making upgrades more predictable. See Install and Manage.
Added
- Added reason and willRetry metadata to extension session_before_compact and session_compact events so extensions can distinguish manual, threshold, and overflow compaction flows (#5962 by @PizzaMarinara).
Fixed
- Fixed the find tool to respect nested git repository boundaries when parent .gitignore rules ignore the nested repo (#5960).
- Fixed the usage docs slash command table to include /trust and /import (#5959).
- Fixed inherited OpenAI-compatible streaming to preserve encrypted reasoning_details that arrive before matching tool call deltas (#5114).
- Fixed broken TUI documentation links to the plan-mode extension example (#5957).
- Fixed transient extension UI and session-start messages emitted during session replacement or reload so they remain visible, and kept reload input blocked until reload completes (#5943).
- Fixed the plan-mode example to preserve active custom tools, skip the action prompt when no plan is found, and queue refinement/execution follow-ups correctly from agent_end (#5940).
- Fixed pi update to install the exact version returned by the Pi update check, make --force reinstall that checked version, fail instead of falling back to an unversioned reinstall when no version is available, and report both the old and updated versions.
- Fixed update notifications to display the actual changelog URL as the hyperlink text. |
| 0.79.9 | 20 de juny del 2026 | — | 64 bits ZIP Notes de la versióNew Features
- Chat-template thinking compatibility - OpenAI-compatible custom providers can map Pi thinking levels into chat_template_kwargs, enabling vLLM/Hugging Face chat-template models such as DeepSeek to use provider-native thinking controls. See Custom Provider API Types and OpenAI Compatibility.
- GLM-5.2 provider improvements - GLM-5.2 now has corrected Fireworks OpenAI-compatible routing and OpenRouter xhigh thinking support, improving /model behavior and high-effort reasoning for GLM-5.2 users. See Model Options.
Added
- Added inherited configurable chat-template thinking support for OpenAI-compatible providers that use chat_template_kwargs, such as DeepSeek models behind vLLM (#5673).
Fixed
- Fixed inherited Fireworks GLM-5.2 metadata to use the OpenAI-compatible Chat Completions endpoint with reasoning_effort support (#5923).
- Fixed same-directory session switches to reuse imported extension modules while preserving fresh extension instances and lifecycle events (#5905).
- Fixed deep session branches taking quadratic time to build context or branch paths (#5909).
- Fixed inherited OpenRouter GLM-5.2 metadata to expose xhigh reasoning and send OpenRouter's native xhigh effort (#5770).
- Fixed inherited Markdown streaming code fence rendering so partial closing fences no longer make code blocks shrink or flicker while content streams (#5846 by @xl0).
- Fixed fuzzy edit matches to preserve untouched line blocks instead of rewriting the whole file through normalized content (#5899).
- Fixed bash commands through legacy WSL bash.exe to pass scripts over stdin so shell variables expand in the target bash (#5893).
- Fixed /model to hide GitHub Copilot models that are unavailable to the authenticated account (#5897).
- Fixed /model selector search to rank exact provider-prefixed matches before proxy-provider model ID matches (#5892). |
| 0.79.8 | 19 de juny del 2026 | — | 64 bits ZIP Notes de la versióNew Features
- Selective provider base entry points - SDK users can pair @earendil-works/pi-ai/base and @earendil-works/pi-agent-core/base with explicit provider registration to keep bundled applications from including unused provider transports. See pi-ai Base Entry Point and pi-agent-core Base Entry Point.
- Mistral prompt caching - Mistral sessions now use provider-side prompt caching with session affinity and cached-token usage/cost accounting. See API Keys and Environment Variables.
- Post-compaction token estimates - Compact results and compaction events now include estimated post-compaction token counts so clients can show the approximate context reduction. See RPC compact and compaction events.
- OpenRouter Fusion alias - openrouter/fusion is available as a built-in OpenRouter model alias. See API Keys.
Added
- Added inherited @earendil-works/pi-ai/base and @earendil-works/pi-agent-core/base entry points for selective provider registration in bundled applications (#5348 by @FredKSchott).
- Added inherited Mistral prompt caching using the pi session ID as prompt_cache_key, including cached-token usage and cost accounting (#5854).
- Added estimated post-compaction token counts to compact results and compaction events (#5877).
- Added the inherited OpenRouter Fusion alias as openrouter/fusion (#5866 by @dannote).
Fixed
- Updated vulnerable runtime dependencies, including undici and the packaged protobufjs transitive dependency.
- Fixed compaction to refuse sessions with no eligible messages instead of producing empty summaries (#4811).
- Fixed successful overflow-triggered auto-compaction to avoid retrying completed assistant responses (#5720). |
| 0.79.7 | 18 de juny del 2026 | — | 64 bits ZIP Notes de la versióNew Features
- Automatic theme mode - /settings can choose separate light and dark themes and follow terminal color-scheme changes. See Selecting a Theme.
- Self-only updates by default - pi update now updates pi only, with pi update --all for updating pi and packages together. See Install and Manage.
- Extension API helpers - extensions can use CONFIG_DIR_NAME for project config paths and import edit diff helpers for edit-style diffs. See ctx.cwd and SDK Exports.
- Warp inline images - Warp terminals now get inline image rendering through Kitty graphics detection. See Image.
Added
- Added automatic theme mode so /settings can use separate light and dark themes and follow terminal color-scheme changes (#5874).
- Added inherited Warp terminal image capability detection so inline images render through Warp's Kitty graphics support (#5841 by @dodiego).
- Exported CONFIG_DIR_NAME from the coding-agent public API so extensions can resolve project config paths without hardcoding .pi (#5869 by @xl0).
- Exported edit diff helpers (generateDiffString, generateUnifiedPatch, and EditDiffResult) from the public API for extensions that need edit-style diffs (#5756 by @xl0).
Changed
- Changed bare pi update to update only pi, added pi update --all for updating pi and extensions together, and clarified extension update prompts.
- Reserved / in theme names for automatic light/dark theme settings.
- Updated extension docs, examples, runtime help, trust prompts, and config labels to use the configured project config directory instead of hardcoded .pi paths.
Fixed
- Fixed RPC unknown-command errors to include the request id so clients do not hang waiting for a response (#5868).
- Fixed /model autocomplete and model selection searches to match provider/model queries regardless of whether the provider or model token is typed first.
- Fixed the tree navigator to horizontally pan deep entries so the selected item remains readable (#5830). |
| 0.79.6 | 16 de juny del 2026 | — | 64 bits ZIP Notes de la versióFixed
- Fixed HTTP dispatcher configuration to preserve a caller's deliberate fetch override instead of reinstalling the undici global fetch over it.
- Fixed inherited OpenCode Go DeepSeek V4 thinking-off requests to send the provider's thinking: { type: "disabled" } compatibility parameter. |
| 0.79.5 | 16 de juny del 2026 | — | 64 bits ZIP Notes de la versióNew Features
- Provider-scoped API key environments - auth.json API key entries can now include env overrides for provider-specific Cloudflare, Azure OpenAI, Google Vertex, Amazon Bedrock, cache retention, and proxy settings without changing the project shell. See Auth File.
- Global HTTP proxy setting - Configure httpProxy once in global settings to apply HTTP_PROXY and HTTPS_PROXY to Pi-managed HTTP clients. See Network.
- Vercel AI Gateway attribution - Vercel AI Gateway requests now include Pi attribution headers by default. See API Keys.
Added
- Added Vercel AI Gateway request attribution headers (http-referer and x-title) for Vercel AI Gateway models (#5798 by @rwachtler).
- Added an xp footer marker when experimental features are enabled.
- Added a global httpProxy setting that applies as HTTP_PROXY and HTTPS_PROXY for Pi-managed HTTP clients (#5790).
- Added auth.json API key env values so provider-specific environment overrides can be scoped to Pi and propagated to inherited provider configuration (#5728).
Changed
- Updated the vendored Markdown parser used by HTML session exports to marked 18.0.5.
Fixed
- Fixed inherited OpenAI Responses streaming to tolerate null message content from OpenAI-compatible servers before tool calls (#5819).
- Fixed inherited OpenCode DeepSeek V4 thinking requests to avoid sending both thinking and reasoning_effort (#5818).
- Fixed device-code login to stop opening the browser automatically.
- Fixed inherited editor Cursor Up handling so non-empty drafts jump to the start of the line before browsing input history (#5789 by @4h9fbZ).
- Fixed inherited Z.AI GLM-5.2 thinking requests to send reasoning_effort with the provider's high/max effort mapping (#5770).
- Fixed successful pi update on Windows to exit naturally instead of calling process.exit(0), avoiding a Node.js/libuv assertion after version-check network requests (#5805).
- Fixed inherited Google and google-vertex Gemini model metadata to map latest aliases to the current models, add Gemini 3.5 Flash for Vertex, correct Gemini 2.5 Flash Vertex cache pricing, and remove shut-down Vertex preview models (#5761).
- Fixed the session selector to stay open and show the all-sessions empty state when both current-folder and all-scope session lists are empty (#5747).
- Fixed inherited Moonshot AI China model metadata to include Kimi K2.7 Code, and omitted unsupported thinking-off payloads for Kimi K2.7 Code models (#5760). |
| 0.79.4 | 15 de juny del 2026 | — | 64 bits ZIP Notes de la versióNew Features
- Automatic first-run theme selection - pi detects the terminal background on first run and defaults to the dark or light theme. See Selecting a Theme.
- Standalone binary integrity checksums - GitHub release assets now include SHA256SUMS files for verifying standalone binary downloads. See Quickstart Install.
Added
- Added SHA256SUMS integrity files to standalone binary GitHub release assets (#5739).
- Added first-run interactive theme detection from the terminal background (#5385 by @vegarsti).
Fixed
- Fixed bash tool output collection to keep draining stdout/stderr after the child exits while descendants still write, avoiding truncated late output (#5753 by @Mearman).
- Fixed /tree help rendering to show compact wrapped controls instead of truncating them on narrow terminals (#5055).
- Fixed SIGTERM/SIGHUP interactive shutdown to keep signal handlers installed until terminal cleanup completes, preventing signal-exit from re-sending the signal and leaving the terminal in raw/Kitty keyboard mode (#5724).
- Fixed extensions documentation to clarify that pi.getActiveTools() returns active tool names while pi.getAllTools() returns tool metadata (#5729).
- Fixed question and questionnaire extension examples to wrap long prompt, option, and help text instead of truncating it (#5708 by @xl0).
- Fixed package commands such as pi list, pi install, and pi update to terminate after completing even if an extension leaves background handles open (#5687).
- Fixed pi update for pnpm global installs whose configured global-bin-dir no longer matches the active pnpm home (#5689).
- Fixed npm package specs that use ranges or tags (for example @^1.2.7) so installed package resources still load instead of being treated as mismatched exact pins (#5695).
- Fixed inherited Anthropic 1-hour prompt-cache write cost accounting to price 1-hour cache writes at 2x input instead of the 5-minute cache-write rate (#5738 by @theBucky).
- Fixed inherited GitHub Copilot Claude adaptive-thinking effort metadata to match manually checked Copilot model capabilities (#4637).
- Fixed inherited OpenCode/OpenCode Go completion model metadata to omit long-retention cache fields for routes that reject prompt_cache_retention (#5702).
- Fixed inherited overlay compositing over CJK wide characters so borders stay aligned when an overlay starts inside a full-width cell (#5297).
- Fixed inherited WezTerm inline Kitty image rendering during full redraw fallbacks so image padding rows are reserved before the placement is drawn without regressing tall-image placement (#5618, #4415).
- Fixed custom provider config so plain uppercase API key and header values remain literals instead of being treated as legacy environment references; use explicit $ENV_VAR syntax for environment variables (#5661). |
| 0.79.3 | 13 de juny del 2026 | — | 64 bits ZIP Notes de la versióFixed
- Fixed inherited OpenAI GPT-5.4/GPT-5.5 and OpenAI Codex GPT-5.4/GPT-5.4 mini/GPT-5.5 context window metadata to use the observed 272k-token Codex backend limit, avoiding a billing hazard from prompts above Codex's accepted limit (reported by @trethore). |
| 0.79.2 | 12 de juny del 2026 | — | 64 bits ZIP Notes de la versióNew Features
- Clearer Bedrock validation guidance - Amazon Bedrock data retention validation errors now link to AWS data retention documentation. See Amazon Bedrock.
Added
- Added an experimental first-time setup flow behind PI_EXPERIMENTAL=1 that asks for a dark/light theme choice (preselecting the detected appearance) and opt-in analytics data sharing on first launch with the default agent directory; opting in stores a trackingId in settings.json (#5587 by @vegarsti).
- Added AWS data retention documentation links to inherited Amazon Bedrock unsupported data retention mode validation errors (#5561 by @unexge).
Fixed
- Fixed project trust detection to ignore global ~/.pi/agent state when running from $HOME, and made pi update use only saved or explicit project trust without prompting (#5619).
- Fixed experimental first-time setup to skip forked sessions instead of rerunning the setup prompts (#5627 by @vegarsti).
- Fixed inherited OpenAI-compatible context overflow detection for parenthesized maximum context length (N) errors (#5677).
- Fixed inherited OpenAI GPT-5.4/GPT-5.5 and OpenAI Codex GPT-5.4/GPT-5.4 mini/GPT-5.5 context window metadata to match current OpenAI limits (#5644).
- Fixed inherited Anthropic refusal stops to preserve provider stop_details explanations in error messages (#5666 by @rwachtler).
- Increased the inherited OpenAI Codex Responses SSE response-header timeout to 20 seconds to reduce false-positive stalls while retaining the bounded wait introduced for zero-event hangs (#4945).
- Fixed inherited Claude Fable 5 thinking-off requests to omit Anthropic's unsupported thinking.type: "disabled" payload (#5567 by @tmustier).
- Fixed inherited late tool progress callbacks after tool settlement to be ignored instead of emitting stale tool_execution_update events (#5573).
- Fixed inherited user-message transcript rendering so standalone + messages no longer render as - (#5657).
- Fixed inherited slash-separated fuzzy queries so provider/model completions remain matchable after insertion.
- Fixed inherited WezTerm inline Kitty image rendering so reserved row clears do not erase all but the top strip of tool image previews (#5618).
- Fixed inherited editor wrapping for CJK text to break at character boundaries instead of leaving large trailing gaps (#5585 by @haoqixu).
- Fixed inherited loose Markdown list rendering to preserve blank-line separation between list items (#5562 by @Perlence).
- Fixed --model resolution for authenticated custom model IDs whose slash prefix matches an unauthenticated built-in provider (#5643).
- Fixed /fork to keep session parent chains connected when the forked path contains labels (#5669).
- Fixed /share and /export HTML exports to use the active fallback theme when the configured custom theme no longer exists (#5596).
- Fixed custom fallback model IDs with :<thinking> suffixes to preserve the requested thinking level when the provider template model does not advertise reasoning (#5560 by @haoqixu). |
| 0.79.1 | 9 de juny del 2026 | — | 64 bits ZIP Notes de la versióNew Features
- Claude Fable 5 - Claude Fable 5 is now available on the Anthropic and Amazon Bedrock providers, with adaptive thinking and xhigh effort support.
- Prompt template defaults - Prompt templates can use default positional arguments such as ${1:-7} for optional values. See Prompt Template Arguments.
- Configurable project trust defaults - defaultProjectTrust lets users choose whether unresolved project trust asks, always trusts, or never trusts by default, and extensions can inspect effective trust decisions. See Project Trust and ctx.isProjectTrusted().
- Natural extension autocomplete triggers - Extension autocomplete providers can declare trigger characters such as # or $ so suggestions open without slash-command prefixes. See Autocomplete Providers.
Added
- Added default-value expansion for prompt template positional arguments, e.g. ${1:-7} (#5553 by @dannote).
- Added areExperimentalFeaturesEnabled feature guard to allow users to opt in to early features (#5547 by @vegarsti).
- Added ctx.isProjectTrusted() for extensions to observe the effective project trust decision, including temporary trust decisions (#5523).
- Added a global defaultProjectTrust setting to choose whether unresolved project trust asks, always trusts, or never trusts by default.
- Added extension autocomplete trigger character support for ctx.ui.addAutocompleteProvider() wrappers (#4703).
- Added Claude Fable 5 model support inherited from @earendil-works/pi-ai for the Anthropic and Amazon Bedrock providers, with adaptive thinking and xhigh effort support.
Fixed
- Fixed inherited Amazon Bedrock inference profile ARN region resolution to prefer the ARN's embedded region over AWS_REGION (#5527 by @AJM10565).
- Fixed inherited IME hardware cursor positioning while slash-command autocomplete is visible (#5283 by @smoosex).
- Fixed inherited z.ai thinking-off requests to send the provider's thinking: { type: "disabled" } compatibility parameter (#5330).
- Fixed inherited OpenCode completions model metadata to send explicit maxTokens as max_tokens (#5331).
- Fixed inherited Moonshot Kimi thinking-off requests to send the provider's thinking: { type: "disabled" } compatibility parameter (#5531).
- Fixed inherited Azure OpenAI Responses requests to disable server-side response storage (#5530).
- Fixed inherited Azure GPT-5.4 and GPT-5.5 context window metadata to 1,050,000 tokens, matching Azure Foundry deployments instead of OpenAI's 272k limit (#5559).
- Fixed inherited OpenAI and Azure GPT-5 Pro maxTokens metadata to 128,000, correcting an upstream value that duplicated the input sub-limit as the output limit (#5559).
- Fixed inherited prompt history navigation to restore the current draft when returning from history browsing (#5494).
- Fixed inherited wrapping for mixed Latin and CJK text so unspaced CJK runs can break at grapheme boundaries without leaving large trailing gaps (#5495).
- Fixed extension OAuth login prompts to keep previous submitted prompt rows stable instead of mirroring the active input value (#5433).
- Fixed /reload to apply updated steeringMode and followUpMode settings to the current session (#5377).
- Fixed invalid models.json syntax to skip startup config migrations and report the normal file-path-aware models error instead of a raw JSON parse stack trace (#5418).
- Fixed GitHub release notes and interactive changelog links to resolve package-relative documentation URLs correctly (#5516).
- Fixed CLI help and version output, including plain redirected --help/--version output and simplified list/config help text.
- Fixed /new from ephemeral sessions to keep the new session ephemeral instead of persisting it by default (#5045).
- Clarified custom model docs that name and modelOverrides.name do not replace model IDs in the footer or primary model lists (#4841). |
| 0.79.0 | 8 de juny del 2026 | — | 64 bits ZIP Notes de la versióNew Features
- Project trust for local inputs - Pi now asks before loading project-local settings, resources, instructions, and packages, with saved decisions and --approve / --no-approve controls for non-interactive modes. See Project Trust.
- Extension-controlled trust decisions - Global and CLI extensions can handle project_trust, decide, remember, or defer project trust before project-local resources load. See project_trust.
- Cache-hit visibility in the footer - The interactive footer now shows the latest prompt cache hit rate (CH). See Interactive Mode.
- Richer SDK and RPC extension surfaces - Public exports now include RPC extension UI request/response types and package asset path helpers. See Extension UI Protocol and SDK Exports.
Added
- Added a project_trust extension event so global and CLI extensions can decide or defer project trust during startup and runtime cwd switches.
- Added project trust gating for project-local settings, resources, instructions, and packages (#5332).
- Added the latest prompt cache hit rate to the interactive footer.
- Exported RPC extension UI request and response types from the public API (#5455).
- Exported coding-agent package asset path helpers from the public API (#5415).
Fixed
- Fixed package exports by removing the stale ./hooks subpath that pointed at non-existent build output.
- Fixed inherited TUI rendering to clear stale lines when content shrinks to zero.
- Fixed inherited autocomplete suggestions to refresh after editor cursor movement (#5499 by @Roman-Galeev).
- Fixed /reload to persist project trust when an implicitly trusted session creates a project .pi directory.
- Fixed project trust input discovery to traverse parent directories portably.
- Fixed inherited intermittent Shift+Enter handling by making Kitty keyboard protocol fallback response-driven instead of timeout-driven (#5188).
- Fixed the compaction summarization system prompt to use neutral AI assistant wording for non-coding agents (#5401).
- Fixed models.json schema support and inherited OpenAI Responses custom-provider handling for compat.supportsDeveloperRole: false (#5456).
- Fixed inherited prompt history navigation to place the cursor at the start when browsing upward and at the end when browsing downward (#5454).
- Fixed tmux setup documentation to require tmux 3.5 for extended-keys-format csi-u and document the tmux 3.2-3.4 fallback (#5432).
- Fixed inherited OpenRouter routing preferences on OpenAI-compatible custom providers to work when the custom provider base URL does not point directly at OpenRouter (#5347).
- Fixed built-in tool expand hints to style closing parentheses consistently (#5359).
- Fixed skill-wrapped prompts to insert spacing between skill instructions and the user message (#5371 by @Perlence). |
| 0.78.1 | 4 de juny del 2026 | — | 64 bits ZIP Notes de la versióNew Features
- More built-in provider coverage - Added Ant Ling and NVIDIA NIM provider setup, plus MiniMax-M3 support for the direct MiniMax providers. See Providers.
- Richer extension context - Extensions can use ctx.mode and ctx.getSystemPromptOptions() to adapt behavior across TUI, RPC, JSON, and print modes and inspect base system prompt inputs. See Extensions.
Added
- Added containerization documentation and a Gondolin extension example for routing built-in tools into a local micro-VM.
- Added Ant Ling provider selection and setup documentation.
- Added MiniMax-M3 model support inherited from @earendil-works/pi-ai for the minimax and minimax-cn direct providers (#5313).
- Added NVIDIA NIM provider selection, setup documentation, and direct NIM request attribution headers.
- Added ctx.mode to extension contexts so extensions can distinguish TUI, RPC, JSON, and print mode.
- Added ctx.getSystemPromptOptions() for extension commands to inspect the current base system prompt inputs (#5306 by @xl0).
Fixed
- Fixed temporary extension package installs to use a private ~/.pi/agent/tmp/extensions directory with 0700 permissions instead of os.tmpdir()/pi-extensions.
- Fixed git package source handling to reject unsafe host/path components and keep managed clone paths inside install roots.
- Fixed stored XSS in HTML session exports by sanitizing Markdown link and image URLs with a scheme allow-list after stripping control characters.
- Fixed SDK embedding in bundled Node apps failing with ENOENT when package.json is not present next to the bundle entrypoint. The package metadata reader now gracefully handles missing package.json by using defaults, enabling createAgentSession() without requiring package-adjacent files at runtime (#5226).
- Fixed HTTP timeout setting not being respected for non-Codex providers (e.g., llama.cpp via OpenAI-compatible API). The httpIdleTimeoutMs setting (set via /settings HTTP timeout) now applies as the default SDK request timeout for all providers that support it, not just OpenAI Codex Responses. Disabling the timeout (HTTP timeout = false) now correctly disables SDK timeouts for all supported providers by sending a maximum int32 value (effectively infinite) instead of 0, since SDKs treat timeout=0 as an immediate timeout (#5294).
- Fixed inherited Amazon Bedrock requests to replace blank required user/tool-result text with a placeholder and skip blank replay text blocks (#4975).
- Fixed inherited Anthropic Claude Opus 4.7+ requests to suppress deprecated temperature parameters (#5251 by @yzhg1983).
- Fixed inherited OpenAI GPT-5.5 generated metadata to omit unsupported minimal thinking (#5243).
- Fixed inherited OpenRouter Kimi K2.6 thinking replay and developer-role instruction handling (#5309).
- Fixed inherited OpenRouter reasoning instruction requests to preserve the system role when required (#5221 by @PriNova).
- Fixed inherited overlay focus restoration so non-capturing overlays remain interactive after UI rerenders and explicit focus release (#5235 by @nicobailon).
- Fixed inherited tab width accounting in column slicing and overlay compositing so tab-containing output cannot exceed the terminal width (#5218).
- Fixed opening and listing very large JSONL session files by reading session entries line-by-line instead of materializing the full file as one string (#5231).
- Fixed the footer branch display in WSL /mnt/... repositories to refresh after branch changes (#5264 by @psoukie).
- Fixed renderShell: "self" tool renderers that emit no component lines leaving a blank chat row (#5299).
- Restored inherited NVIDIA Qwen 3.5 122B NIM model support. |
| 0.78.0 | 29 de maig del 2026 | — | 64 bits ZIP Notes de la versióNew Features
- Named startup sessions - --name / -n sets the session display name before startup across interactive, print, JSON, and RPC modes. See Naming Sessions and Session Options.
- Clickable file tool paths - built-in file tool titles render OSC 8 file:// hyperlinks when the terminal supports them, including supported tmux clients.
Added
- Exported convertToPng for extension authors (#5167 by @xl0).
- Exported parseArgs and type Args for extension authors (#5202 by @xl0).
- Added --name / -n to set the session display name at startup (#5153).
- Added a resume command hint when exiting interactive sessions (#5176 by @yzhg1983).
- Added OSC 8 file:// hyperlinks to file paths shown in built-in file tool titles (#5189 by @mpazik).
- Added custom Amazon Bedrock request header support inherited from @earendil-works/pi-ai (#5178 by @stephanmck).
Fixed
- Clarified the WezTerm/WSL IME hardware cursor docs to state that cursor visibility remains opt-in (#5200).
- Fixed the GitLab Duo custom provider example to use adaptive thinking for Claude models, expose xhigh thinking, and include newer verified model IDs (#5201).
- Fixed Bun release archive creation to install and copy the matching @mariozechner/clipboard base package and native sidecars (#5184).
- Fixed early interactive input typed before the prompt loop starts so it is buffered instead of dropped (#5195 by @yzhg1983).
- Fixed OpenRouter Moonshot Kimi K2.6 requests to use system instead of unsupported developer messages (#5159).
- Fixed OpenCode Go Kimi K2.6 thinking requests to send thinking objects instead of invalid string values, and fixed OpenCode Zen Grok Build thinking requests to omit unsupported reasoning_effort (#5169).
- Fixed OpenAI Codex Responses SSE streams to abort response body reads after terminal events.
- Fixed OpenCode Kimi K2.6 generated metadata to use Anthropic-style thinking metadata instead of invalid reasoning-effort parameters.
- Fixed OSC 8 hyperlinks to pass through tmux when the client supports them (#5189 by @mpazik).
- Fixed ANSI text wrapping to avoid stack overflows on very long wrapped lines (#5185). |
| 0.77.0 | 28 de maig del 2026 | — | 64 bits ZIP Notes de la versióNew Features
- Claude Opus 4.8 support - Adds Anthropic Claude Opus 4.8 metadata and updates Opus adaptive-thinking coverage.
- Selective tool disablement - --exclude-tools / -xt disables specific built-in, extension, or custom tools while leaving the rest available. See Tool Options.
- Headless Codex subscription login - /login can use device-code auth for ChatGPT Plus/Pro Codex subscriptions. See Subscriptions and OpenAI Codex.
- Streaming-aware extension input - extensions can distinguish idle prompts, mid-stream steers, and queued follow-ups with InputEvent.streamingBehavior. See Input Events.
Added
- Added --exclude-tools / -xt to disable specific built-in, extension, or custom tools while leaving the rest available (#5109).
- Added OpenAI Codex subscription device-code login as a selectable headless alternative while keeping browser login as the default (#4911 by @vegarsti).
- Added streamingBehavior to extension input events so extensions can distinguish idle prompts from mid-stream steers and queued follow-ups (#5107 by @DanielThomas).
- Added Claude Opus 4.8 model metadata for Anthropic and updated Opus adaptive-thinking coverage to use it.
Fixed
- Fixed startup timing output so readPipedStdin no longer includes createAgentSessionRuntime work (#4829).
- Fixed OpenRouter DeepSeek V4 xhigh reasoning metadata to preserve OpenRouter's native effort instead of sending DeepSeek's max effort (#4801).
- Fixed custom session directories so current-folder resume/continue lookups stay scoped to the active cwd while all-session listings cover the custom directory.
- Fixed SIGTERM/SIGHUP exits to run extension session_shutdown cleanup and restore the terminal: signal-triggered shutdown now emits session_shutdown before any terminal writes, and SIGHUP no longer hard-exits, so extension resources (e.g. sockets) are released even when the terminal is gone (#5080).
- Fixed keyboard protocol negotiation to ignore mismatched or delayed terminal responses, avoiding false Kitty keyboard protocol detection (#5091 by @mitsuhiko).
- Fixed Windows startup crashes under MSYS2 ucrt64 Node.js by updating the native clipboard addon to napi-rs 3.x (#5028).
- Fixed API key and header config resolution to treat plain strings as literals, support $ENV_VAR / ${ENV_VAR} interpolation and $! bang escaping, and require explicit env syntax for config files, avoiding Windows case-insensitive env matches corrupting literal keys (#5095).
- Fixed session disposal to abort in-flight agent, compaction, branch summary, retry, and bash work (#5029 by @TerminallyChilI).
- Fixed pi.getAllTools() to expose each tool's promptGuidelines for extensions that need per-tool guideline attribution (#4879).
- Fixed OpenAI Codex Responses replay after switching from Anthropic extended-thinking sessions by generating unique fallback message item IDs for converted thinking/text blocks (#5148).
- Fixed Anthropic-compatible replay for providers that return empty thinking signatures by adding an opt-in allowEmptySignature compatibility flag (#4464).
- Fixed OpenAI and OpenRouter GPT-5.5 Pro thinking level metadata to expose only supported medium, high, and xhigh efforts.
- Fixed OpenCode Go Kimi K2.6 thinking-off requests to send thinking: "none" (#5078).
- Fixed Xiaomi Token Plan model metadata to omit unsupported mimo-v2-flash variants (#5075).
- Fixed follow-up messages queued by agent_end extension handlers to drain before the agent becomes idle (#5115 by @DanielThomas).
- Fixed extension input events to report streamingBehavior only for prompts actually queued during streaming (#5107 by @DanielThomas).
- Fixed system prompt tool-selection guidance to avoid preferring unavailable file exploration tools (#5132).
- Fixed fenced diff code blocks and other highlight.js scopes to keep theme-aware syntax colors after the cli-highlight replacement (#5092). |
| 0.76.0 | 27 de maig del 2026 | — | 64 bits ZIP Notes de la versióNew Features
- Explicit session IDs for automation - --session-id <id> lets scripts create or resume an exact project-local session. See Sessions.
- RPC bash output can stay out of model context - RPC clients can pass excludeFromContext to bash for commands whose output should not be sent with the next prompt. See RPC mode.
- More predictable provider retries and timeouts - Codex WebSocket/SSE waits are bounded, and retry.provider.maxRetries controls provider retries instead of hidden SDK defaults. See Retry settings.
- Better terminal editing across environments - Apple Terminal Shift+Enter, Windows/JetBrains capability detection, and Unicode-aware word navigation improve interactive editing. See Terminal setup and Keybindings.
Added
- Added --session-id to let CLI callers use an exact project-local session ID, creating it if missing (#4874).
- Added excludeFromContext flag to the bash RPC command for parity with the internal executeBash API (#5039).
Fixed
- Fixed user message transcript rendering to preserve user-authored ordered-list markers (#5013).
- Fixed self-update commands to bypass npm, pnpm, and Bun minimum release age gates for explicit pi update runs (#4929).
- Fixed context token estimates to count user image attachments consistently with tool result images (#4983).
- Fixed httpIdleTimeoutMs to apply to OpenAI Codex Responses WebSocket idle waits, added websocketConnectTimeoutMs for bounded WebSocket connect waits, and added a 10s Codex SSE response-header timeout (#4945).
- Fixed RpcClient to reject pending requests and consume stdin pipe errors when the child process exits unexpectedly (#4764).
- Fixed managed npm extension updates to avoid package managers installing or resolving pi host packages as peer dependencies (#4907).
- Fixed RPC mode raw stdout writes to retry transient backpressure errors and flush queued protocol output during shutdown (#4897).
- Fixed OpenAI Codex Responses cache-affinity headers to send session-id instead of proxy-incompatible session_id (#4967).
- Fixed openai-codex/gpt-5.3-codex-spark model metadata to use its 128k context window (#4969).
- Fixed OpenRouter/Poolside context overflow detection for maximum allowed input length errors (#4943).
- Fixed provider retry controls so retry.provider.maxRetries is honored, SDK retries default to 0, and quota/billing 429s are not retried behind Pi's retry handling (#4991 by @mitsuhiko).
- Fixed Apple Terminal Shift+Enter by detecting local macOS modifier state when Terminal.app sends plain Return.
- Fixed Windows Terminal capability detection to enable OSC 8 hyperlinks, preserving clickable long URLs across wrapped lines (#4923).
- Fixed JetBrains terminal capability detection to enable truecolor while disabling unsupported OSC 8 hyperlinks (#5037 by @Perlence).
- Fixed editor and input word navigation/deletion to use Unicode word boundaries while preserving ASCII punctuation boundaries (#5022 by @haoqixu, #5067 by @haoqixu, #5068 by @haoqixu). |
| 0.75.5 | 23 de maig del 2026 | — | 64 bits ZIP Notes de la versióNew Features
- Cleaner read tool output - Collapsed read tool cards now show only the read line by default, while Ctrl+O still expands the full file content.
- Faster file tools on Windows - Built-in file tools now use async filesystem operations during streaming, and image resizes run off the main TUI thread in a worker.
- More reliable package updates - pi update and git package installs now reconcile pinned git refs and keep package settings intact. See Packages.
- Custom Anthropic-compatible adaptive thinking - Custom provider model configs can opt into adaptive-thinking Claude behavior with compat.forceAdaptiveThinking. See Custom providers and Models.
Added
- Added compat.forceAdaptiveThinking support to custom Anthropic-compatible model configuration docs and validation (#4797 by @mbazso).
- Added a standard unified patch to edit tool result details for SDK consumers (#4821).
Changed
- Changed collapsed read tool cards to show only the read line until expanded (#4916).
- Replaced the inherited optional koffi dependency for Windows VT input with a tiny vendored native helper, reducing install size while preserving Shift+Tab handling (#4480).
- Changed the root development install documentation to use npm install --ignore-scripts (#4868).
Fixed
- Fixed pi update to reconcile git-pinned packages to their configured ref (#4869).
- Fixed package/resource path handling for Windows and glob/pattern resolution (#4873 by @mitsuhiko).
- Fixed config pattern matching to resolve patterns from the correct base directory (#4898 by @haoqixu).
- Fixed theme pickers to list themes by their content name instead of file stem (#4830 by @Perlence).
- Fixed OpenCode Zen/Go requests to send per-session OpenCode routing headers (#4847).
- Fixed Amazon Bedrock provider loading under strict package managers by inheriting the declared @smithy/node-http-handler dependency from @earendil-works/pi-ai (#4842).
- Fixed inherited Amazon Bedrock Claude requests to send the model output token cap by default, avoiding Bedrock's 4096-token default truncation (#4848).
- Fixed exported session HTML to escape quote characters in attribute values (#4832).
- Fixed GitHub Copilot device-code login to keep opening the verification URL in browser-capable environments while ignoring browser launch failures for headless use (#4788 by @vegarsti).
- Fixed git package installs to reconcile existing checkouts to the requested ref and update package settings without losing filters (#4870).
- Published a 0.74.2 rescue release that tells Node 20 users to upgrade Node before updating to newer Pi versions (#4876).
- Fixed final bash tool cards to avoid rendering duplicate full-output truncation paths (#4819).
- Fixed bash tool truncation line counts to ignore the trailing newline as an extra output line (#4818).
- Fixed footer home-directory abbreviation to avoid shortening sibling paths that only share the same prefix (#4878).
- Fixed macOS Bun release binaries to resolve the native clipboard sidecar so Ctrl+V image paste can load @mariozechner/clipboard (#4307).
- Fixed coding-agent tools to avoid synchronous filesystem operations during streaming and moved image resizing off the main TUI thread (#4756 by @mitsuhiko). |
| 0.75.4 | 20 de maig del 2026 | — | 64 bits ZIP Notes de la versióNew Features
- Hardened npm install and release path - Pi now ships the CLI with a generated shrinkwrap for transitive dependencies, blocks accidental lockfile changes, verifies dependency pinning and lifecycle-script allowlists in checks, disables lifecycle scripts for self-update and local release installs where supported, and smoke-tests isolated npm and Bun installs before release. See Supply-chain hardening.
Added
- Added interactive update notes after pi update runs, so users can see the installed version's changelog before continuing (#4724 by @mitsuhiko).
- Exported image resize utilities from the package root for SDK consumers (#4775 by @xl0).
Changed
- Changed source syntax to avoid TypeScript constructs that require JavaScript emit, keeping core sources compatible with Node.js strip-only TypeScript checks.
- Removed web UI workspace references from the CLI package and dropped the package-level development watch script.
- Published npm installs now include an npm-shrinkwrap.json to lock transitive dependencies for the CLI package.
- Improved terminal theme detection for light/dark and truecolor handling.
- Changed self-update package-manager commands to disable lifecycle scripts during reinstall.
Fixed
- Fixed the system prompt to tell models to resolve pi docs and examples under the absolute package paths before reading topic-specific relative references (#4752).
- Fixed extension ctx.abort() during tool-call preflight to stop later confirmations and restore queued interactive input like Escape (#4276).
- Fixed AgentSession retry, compaction, and event settlement to use the awaited agent lifecycle instead of a separate event queue, and added willRetry to agent_end session events.
- Fixed forked session runtime state to keep the active session id aligned with the fork target (#4799 by @Perlence).
- Fixed the subagent extension's parallel mode to return useful per-task output and failed-task diagnostics to the parent model instead of 100-character previews (#4710).
- Fixed Windows local bash execution to hide helper console windows when launched from background SDK processes (#4699).
- Fixed managed npm extension folders to set cloud-sync ignore metadata where supported (#4763).
- Fixed HTTP idle timeout configuration so long-running provider streams can avoid premature idle disconnects (#4759 by @mitsuhiko).
- Fixed default system prompt boundaries to use explicit XML tags for clearer file separation (#4709 by @herrnel).
- Fixed HTML share/export sidebar clicks for shared tool entries to scroll to the rendered tool call (#4664 by @yzhg1983).
- Fixed theme palettes to set explicit text colors and avoid terminal-default color drift.
- Fixed truecolor detection to align terminal image rendering and interactive theme decisions.
- Fixed loader indicator startup inherited from @earendil-works/pi-tui so initialization cannot run before frames are available.
- Fixed OpenAI-compatible default output token requests inherited from @earendil-works/pi-ai to avoid reserving impossible context windows on servers such as vLLM (#4675).
- Fixed OpenAI prompt cache keys inherited from @earendil-works/pi-ai to stay within the 64-character provider limit (#4720).
- Fixed Windows npm-family package commands for fnm-managed Node.js installs that expose both extensionless Unix scripts and .cmd shims (#4793). |
| 0.75.3 | 18 de maig del 2026 | — | 64 bits ZIP Notes de la versióFixed
- Fixed undici 8 HTTP/2 destroyed-session races crashing the Node CLI by preserving the previous HTTP/1.1-only fetch dispatcher behavior (#4681). |
| 0.75.1 | 18 de maig del 2026 | — | 64 bits ZIP Notes de la versióFixed
- Fixed config selectors to scale their visible row count to terminal height (#4243 by @samjonester).
- Fixed Anthropic-compatible API-key requests to ignore unrelated ANTHROPIC_AUTH_TOKEN environment values, avoiding invalid bearer credentials for providers such as Xiaomi MiMo inherited from @earendil-works/pi-ai (#4342).
- Fixed Amazon Bedrock message conversion to skip unknown content blocks instead of failing the stream, inherited from @earendil-works/pi-ai (#4223).
- Fixed Azure OpenAI Responses and OpenAI Responses error formatting to prefix HTTP status codes onto errorMessage, so transient 5xx and 429 errors are correctly matched by the agent-level auto-retry classifier inherited from @earendil-works/pi-ai (#4232).
- Fixed OpenCode Go Kimi reasoning replay by normalizing streamed reasoning fields back to reasoning_content for OpenCode Go only, inherited from @earendil-works/pi-ai (#4251).
- Fixed Xiaomi MiMo model metadata to use the OpenAI-compatible endpoints and openai-completions API, restoring multi-turn thinking/tool-call sessions inherited from @earendil-works/pi-ai (#4505).
- Fixed JSON parse failures for compressed fetch responses under Node 26.0 by installing undici fetch globals alongside pi's global dispatcher (#4650, #4652, #4653).
- Fixed npm-family package commands on Windows to avoid shell argument splitting when install prefixes contain spaces (#4623).
Removed
- Removed non-working OpenAI Codex fast model variants inherited from @earendil-works/pi-ai. |
| 0.75.0 | 17 de maig del 2026 | — | 64 bits ZIP Notes de la versióBreaking Changes
- Raised the minimum supported Node.js version to 22.19.0.
Fixed
- Fixed compaction summary calls to use custom agent stream functions, preserving proxy-backed LLM routing (#4484).
- Fixed system prompt and context file boundaries to use explicit XML tags instead of Markdown headings, reducing inconsistent boundary ingestion by models (#4541 by @herrnel).
- Fixed OpenAI Codex generated model metadata to use the current upstream model list inherited from @earendil-works/pi-ai (#4603 by @mattiacerutti).
- Fixed GitHub Copilot GPT model thinking metadata inherited from @earendil-works/pi-ai to map unsupported minimal thinking to low (#4622 by @mattiacerutti).
- Fixed user-scoped npm pi packages to install under ~/.pi/agent/npm/ instead of npm's global package root, avoiding permission errors with system-managed Node installs (#4587).
- Fixed Mistral requests failing after the global fetch proxy/timeout workaround by removing the custom fetch override and using undici 8 dispatcher support instead (#4619).
- Fixed default output token requests for models whose advertised output limit is effectively their full context window, avoiding impossible provider requests inherited from @earendil-works/pi-ai (#4614). |
| 0.74.1 | 16 de maig del 2026 | — | 64 bits ZIP Notes de la versióNew Features
- Image generation support - Added image generation APIs, generated image model metadata, and built-in OpenRouter image generation support inherited from @earendil-works/pi-ai.
- Together AI provider - Added Together AI as a built-in provider with /login API-key auth, default model resolution, and setup docs. See README.md#providers--models and docs/providers.md.
- Windows ARM64 standalone binaries - Added standalone release artifacts for Windows ARM64.
- Improved terminal and markdown rendering - Added markdown list indentation, task-list checkbox rendering, large markdown robustness, and inline image placement fixes inherited from @earendil-works/pi-tui.
Added
- Added image generation support from @earendil-works/pi-ai, including image generation APIs, image model metadata, and built-in OpenRouter image generation support (#3887 by @cristinaponcela).
- Added Together AI to built-in provider setup, /login API-key auth, and default model resolution (#3624 by @Nutlope).
- Added Windows ARM64 standalone binary release artifacts (#4458 by @brianmichel).
Fixed
- Fixed Node 26 OpenAI-compatible streams timing out after five idle minutes by routing global fetch through pi's undici dispatcher (#4519).
- Fixed pnpm global package installs by resolving the global package root from pnpm's layout.
- Fixed macOS clipboard access errors under sandboxed pasteboard denial so they do not abort the process (#4492).
- Fixed the scoped model startup hint to show the configured model-cycle keybinding (#4508).
- Fixed resource path display to disambiguate package/resource names that collide across package locations.
- Fixed fd auto-download on macOS x86_64 by pinning the last release that ships an Intel macOS binary (#4559).
- Fixed skill diagnostics to stop warning when a skill name differs from its parent directory (#4534).
- Fixed prompt template argument parsing to split unquoted multiline input on newlines (#4553).
- Fixed --resume session listing to cap in-flight session metadata loads and avoid OOM on large session histories (#4583).
- Fixed interactive error messages to render with trailing spacing so reload errors do not run into resource listings (#4510).
- Fixed .agents package provenance metadata to survive package-manager scans.
- Fixed nested code fences in the Termux setup documentation so the example AGENTS.md renders correctly (#4503).
- Fixed tool output expansion while extension confirmation dialogs are focused (#4429).
- Fixed auto-retry for Anthropic streams that end before message_stop (#4433).
- Fixed compaction summary calls to clamp requested output tokens to model limits.
- Fixed uncaught interactive-mode exceptions to restore the terminal before exiting (#4426 by @ofa1).
- Fixed ANSI stripping to match strip-ansi behavior after dependency removal.
- Fixed UUIDv7 sequence generation shared by session IDs after dependency removal.
- Fixed OpenRouter cached-token usage accounting, Fireworks caching compatibility, and OpenAI Codex WebSocket proxy handling inherited from @earendil-works/pi-ai.
- Fixed markdown list wrapping, task-list checkboxes, large markdown rendering, WezTerm Kitty keyboard escape handling, and short-viewport inline image placement inherited from @earendil-works/pi-tui.
- Fixed theme sharing across package scopes so extensions do not crash with Theme not initialized (#4333).
- Fixed keybinding hints to show Option instead of Alt on macOS (#4289).
- Fixed the interactive update notification to render the changelog as an OSC 8 hyperlink when the terminal supports hyperlinks (#4280). |
| 0.74.0 | 7 de maig del 2026 | — | 64 bits ZIP Notes de la versióChanged
- Updated repository links and package references for the move to earendil-works/pi-mono and @earendil-works/* package scopes. |
| 0.73.1 | 7 de maig del 2026 | — | 64 bits ZIP Notes de la versióNew Features
- Self-update support for the npm scope migration: pi update --self now supports the upcoming package rename from @mariozechner/pi-coding-agent to @earendil-works/pi-coding-agent. After the new package is published, existing global installs can update through the normal self-update flow; pi will uninstall the old global package and install the package name returned by the version check endpoint.
- Interactive OAuth login selection: OAuth providers can now present multiple login choices in /login, enabling provider-specific interactive authentication flows. See Providers.
- JSONC-style models.json parsing: models.json now allows comments and trailing commas, making custom provider and model configuration easier to maintain. See Providers and Custom Providers.
Added
- Added interactive login selection support so OAuth providers can present multiple login choices (#4190 by @mitsuhiko).
Changed
- Changed pi update --self to honor the active package name returned by the Pi version check endpoint, defaulting to the current package when omitted and uninstalling the old global package before installing a renamed package.
- Changed extension loading to use upstream jiti 2.7 instead of the @mariozechner/jiti fork (#4244 by @pi0).
- Changed models.json parsing to allow comments and trailing commas (#4162 by @julien-c).
Fixed
- Fixed pi -p treating prompts that start with YAML frontmatter as extension flags instead of user messages (#4163).
- Fixed pending tool results not updating in the live TUI after toggling thinking block visibility while the tool is running (#4167).
- Fixed /copy reporting success on Linux without writing the clipboard on Wayland-only compositors (Hyprland, Niri, ...) by skipping the X11-only native addon on Linux and routing through wl-copy/xclip/xsel instead (#4177).
- Fixed HTML session exports to strip skill wrapper XML from rendered user messages (#4234 by @aliou).
- Fixed OpenAI-compatible chat completion streams that interleave content and tool-call deltas in the same choice.
- Fixed OpenAI Codex OAuth refresh failures writing directly to stderr while the TUI is active (#4141).
- Fixed OpenAI Codex Responses requests to send a non-empty system prompt (#4184).
- Fixed Kimi For Coding model resolution for the Kimi K2 P6 alias (#4218).
- Fixed Kitty inline image redraws to stay within TUI-owned terminal regions and avoid writing below the active viewport.
- Fixed Kitty inline image rendering by letting the terminal allocate image ids and bounding parsed image ids to valid values.
- Fixed inline image capability detection to disable inline images in cmux terminals. |
| 0.73.0 | 4 de maig del 2026 | — | 64 bits ZIP Notes de la versióNew Features
- Xiaomi MiMo API billing and regional Token Plan providers - xiaomi now uses API billing, with separate xiaomi-token-plan-{cn,ams,sgp} providers. See docs/providers.md#api-keys and README.md#providers--models. (#4112 by @Phoen1xCode)
- Incremental bash output streaming - Bash tool output now appears while commands run instead of only after completion. (#4145)
- Compact read rendering - Interactive read output for Pi docs, context files, and skills is collapsed by default and shows selected line ranges.
Breaking Changes
- Switched the built-in xiaomi provider from Token Plan AMS to Xiaomi's API billing endpoint, and renamed its /login display from "Xiaomi MiMo Token Plan" to "Xiaomi MiMo". XIAOMI_API_KEY now refers to the API billing key from platform.xiaomimimo.com. Users on Token Plan should switch to the appropriate xiaomi-token-plan-* provider and set the corresponding env var (#4112 by @Phoen1xCode).
Added
- Added three Xiaomi MiMo Token Plan regional providers visible in /login: xiaomi-token-plan-cn (XIAOMI_TOKEN_PLAN_CN_API_KEY), xiaomi-token-plan-ams (XIAOMI_TOKEN_PLAN_AMS_API_KEY), xiaomi-token-plan-sgp (XIAOMI_TOKEN_PLAN_SGP_API_KEY). Each defaults to mimo-v2.5-pro (#4112 by @Phoen1xCode).
Changed
- Changed read tool rendering to collapse Pi documentation, AGENTS/CLAUDE context files, and SKILL.md contents by default in interactive output.
Fixed
- Fixed generated OpenAI-compatible model metadata for Qwen 3.5/3.6 and MiniMax M2.7, so those models work through the built-in provider catalog (#4110 by @jsynowiec).
- Fixed Bedrock Claude Opus 4.7 xhigh thinking requests by preserving the provider's native effort value.
- Fixed OpenAI Codex WebSocket transport to fall back to SSE when setup fails before streaming starts, and surface transport diagnostics in the assistant message (#4133).
- Fixed OpenAI Codex WebSocket transport keeping --print and JSON mode processes alive after the response by closing cached WebSocket sessions during session shutdown (#4103).
- Fixed compact read tool calls to render directly and include selected line ranges in interactive output.
- Fixed interactive sessions to exit when terminal input is lost instead of continuing in a broken state.
- Fixed bash tool output to stream incrementally while commands run instead of waiting for command completion (#4145).
- Fixed selector and autocomplete fuzzy ranking to prioritize exact matches. |
| 0.72.1 | 2 de maig del 2026 | — | 64 bits ZIP |
| 0.72.0 | 1 de maig del 2026 | — | 64 bits ZIP Notes de la versióNew Features
- Xiaomi MiMo Token Plan provider - New Anthropic-compatible provider with XIAOMI_API_KEY auth, default model (mimo-v2.5-pro), and /login display. See docs/providers.md. (#4005 by @Phoen1xCode).
- Model thinking level metadata - Models can now declare which thinking levels they support via thinkingLevelMap, replacing the old reasoningEffortMap. See docs/models.md#thinking-level-map and docs/custom-provider.md. (#3208).
- Custom provider base URL overrides - pi.registerProvider() now respects per-model baseUrl settings. See docs/custom-provider.md. (#4063).
- Post-turn stop callback - Agent loop can now exit gracefully after a completed turn via shouldStopAfterTurn. See packages/agent/README.md.
- Self-update detection fix - pi now correctly identifies and applies available updates. (#3942, #3980, #3922).
Breaking Changes
- Replaced compat.reasoningEffortMap in models.json and pi.registerProvider() model definitions with model-level thinkingLevelMap (#3208). Migration: move old mappings from compat.reasoningEffortMap to thinkingLevelMap. Use string values for provider-specific thinking values and null for unsupported pi levels that should be hidden and skipped by cycling. See docs/models.md#thinking-level-map and docs/custom-provider.md.
Added
- Added Xiaomi MiMo Token Plan provider support with XIAOMI_API_KEY, default model resolution, /login display support, and provider documentation (#4005 by @Phoen1xCode).
- Added model-level thinkingLevelMap support in models.json and pi.registerProvider(), allowing models to expose only the thinking levels they actually support (#3208).
- Added shouldStopAfterTurn agent loop callback for post-turn stop control, inherited from @mariozechner/pi-agent-core. See packages/agent/README.md.
Fixed
- Fixed pi.registerProvider() to honor per-model baseUrl overrides (#4063).
- Fixed self-update detection so pi correctly identifies when a newer version is available and applies updates (#3942, #3980, #3922). |
| 0.71.1 | 1 de maig del 2026 | — | 64 bits ZIP Notes de la versióAdded
- Added websocket-cached to the transport setting options for the OpenAI Codex provider used with ChatGPT subscription auth. This keeps the same WebSocket open for a session and, after the first request, sends only the new conversation items instead of resending the full chat history when possible. |
| 0.71.0 | 30 d’abril del 2026 | — | 64 bits ZIP Notes de la versióBreaking Changes
- Removed built-in Google Gemini CLI and Google Antigravity support. Existing configurations using those providers must switch to another supported provider.
New Features
- Cloudflare AI Gateway provider support with CLOUDFLARE_API_KEY/CLOUDFLARE_ACCOUNT_ID/CLOUDFLARE_GATEWAY_ID, default model resolution, and /login display. See docs/providers.md#cloudflare-ai-gateway. (#3856 by @mchenco).
- Moonshot AI provider support with MOONSHOT_API_KEY, default model resolution, and /login display.
- Mistral Medium 3.5 built-in model support. See docs/providers.md#api-keys. (#4009 by @technocidal).
- Extension APIs can replace finalized message_end messages, wrap custom editor factories via ctx.ui.getEditorComponent(), and observe thinking level changes. See docs/extensions.md#message_start--message_update--message_end, docs/extensions.md#widgets-status-and-footer, and docs/extensions.md#thinking_level_select.
- PI_CODING_AGENT_SESSION_DIR configures session storage from the environment. See docs/usage.md#environment-variables.
Added
- Added Cloudflare AI Gateway as a built-in provider with CLOUDFLARE_API_KEY/CLOUDFLARE_ACCOUNT_ID/CLOUDFLARE_GATEWAY_ID setup, default model resolution, /login display support, and provider documentation (#3856 by @mchenco).
- Added Moonshot AI as a built-in provider with MOONSHOT_API_KEY setup, default model resolution, and /login display support.
- Added Mistral Medium 3.5 built-in model support via @mariozechner/pi-ai (#4009 by @technocidal).
- Added routed OpenAI-compatible response model metadata in assistant messages, so providers such as OpenRouter can expose the concrete model used (#3968 by @purrgrammer).
- Added PI_CODING_AGENT_SESSION_DIR as an environment equivalent to --session-dir (#4027).
- Added message_end extension result support for replacing finalized messages, enabling extensions to override assistant usage cost (#3982).
- Added top-level name support to pi.registerProvider() so extension-registered providers can show a friendly name in /login (#3956).
- Added ctx.ui.getEditorComponent() so extensions can wrap the currently configured custom editor factory (#3935).
- Added a thinking_level_select extension event for observing thinking level changes (#3888).
Fixed
- Fixed WSL clipboard image paste by passing the PowerShell save path directly instead of through a custom environment variable (#2469).
- Fixed Google Vertex Gemini 3 tool call replay for unsigned tool calls (#4032).
- Fixed blocked edit tool results rendering the rejection reason twice after interactive extension confirmation (#3830).
- Fixed extension-triggered thinking level changes refreshing the interactive editor border immediately (#3888).
- Fixed the coding-agent README See Also link to point at @mariozechner/pi-agent-core (#4023).
- Fixed grep and find tool argument injection for flag-like search patterns (#4018).
- Fixed PowerShell shell command output on Windows by only spawning detached processes on Unix (#4013 by @picasso250).
- Fixed Bun package manager node_modules discovery when npmCommand is configured to use Bun (#3998 by @thirtythreeforty).
- Fixed edit and edit-preview access failures to report filesystem errors correctly (#3955 by @rwachtler).
- Fixed ProcessTerminal sizing to use COLUMNS and LINES before falling back to 80x24 (#4004).
- Updated @anthropic-ai/sdk to clear GHSA-p7fg-763f-g4gf audit findings (#3992).
- Updated @mariozechner/clipboard to an attested release so package managers with trust policies do not reject installs (#3946).
- Fixed project context discovery to load AGENTS.MD files in addition to AGENTS.md (#3949).
- Fixed /handoff to use compacted session context instead of pre-compaction raw messages (#3945).
- Fixed DeepSeek V4 Flash xhigh thinking support so requests map to DeepSeek's max reasoning effort (#3944).
- Fixed Anthropic streams that end before message_stop to be treated as errors instead of successful partial responses (#3936).
- Fixed generated OpenAI-comp |
| 0.70.6 | 28 d’abril del 2026 | — | 64 bits ZIP Notes de la versióNew Features
- Cloudflare Workers AI provider support with CLOUDFLARE_API_KEY/CLOUDFLARE_ACCOUNT_ID setup. See docs/providers.md#api-keys. (#3851 by @mchenco)
- Pi update checks now use pi.dev and identify Pi with a pi/<version> user agent. See docs/packages.md. (#3877 by @mitsuhiko)
Added
- Added Cloudflare Workers AI as a built-in provider with CLOUDFLARE_API_KEY/CLOUDFLARE_ACCOUNT_ID setup, default model resolution, /login support, and provider documentation (#3851 by @mchenco).
Changed
- Changed Pi version checks to identify Pi with a pi/<version> user agent (#3877 by @mitsuhiko).
Fixed
- Fixed config selector scroll indicators to show item counts instead of line counts (#3820 by @aliou).
- Fixed exported HTML to escape embedded image data and session metadata, preventing crafted session content from injecting markup (#3819 by @justinpbarnett, #3883 by @justinpbarnett).
- Fixed Bun-based package manager startup by locating global node_modules relative to Bun's install layout (#3861 by @thirtythreeforty).
- Fixed Bedrock inference profile capability checks by normalizing profile ARNs to the underlying model name.
- Fixed file discovery to fall back to fdfind when fd is unavailable.
- Fixed pi update to skip self-update reinstalls when the installed version is already current (#3853).
- Fixed Cloudflare Workers AI attribution headers to honor the install telemetry setting.
- Fixed pi update --self detection and execution for Windows package-manager shim installs, including symlinked global package roots, and print the manual fallback command when self-update fails (#3857). |
| 0.70.5 | 27 d’abril del 2026 | — | 64 bits ZIP Notes de la versióFixed
- Fixed HTML export preserving ANSI-renderer trailing padding as extra blank wrapped lines. |
| 0.70.3 | 27 d’abril del 2026 | — | 64 bits ZIP Notes de la versióNew Features
- pi update can now update pi itself in addition to installed pi packages. See docs/packages.md. (#3680 by @mitsuhiko)
- Azure Cognitive Services endpoint support for Azure OpenAI Responses deployments. See docs/providers.md#api-keys. (#3799 by @marcbloech)
- Suppressible Anthropic extra-usage billing warning via warnings.anthropicExtraUsage in /settings. See docs/settings.md. (#3808)
- Extension-controlled working row visibility via ctx.ui.setWorkingVisible(), allowing extensions to hide the built-in loader row and render custom working state. See docs/extensions.md and examples/extensions/border-status-editor.ts. (#3674)
Added
- Added pi update support for updating pi itself in addition to installed pi packages (#3680 by @mitsuhiko).
- Added Azure Cognitive Services endpoint support for Azure OpenAI Responses base URLs (#3799 by @marcbloech).
- Added warnings.anthropicExtraUsage and a /settings warnings submenu to suppress the Anthropic extra usage billing warning (#3808)
- Added ctx.ui.setWorkingVisible() so extensions can hide the built-in interactive working loader row without reserving layout space, plus a border-status editor example that moves working state into a custom editor border (#3674)
Fixed
- Fixed duplicate printable characters from Kitty keyboard protocol CSI-u plus raw character input on layouts such as Italian (#3780).
- Fixed API-key environment discovery and Bun startup to fall back to /proc/self/environ when Bun's sandbox leaves process.env empty (#3801 by @mdsjip).
- Fixed Bun sandboxed package-manager commands when process.env is empty (#3807 by @mdsjip).
- Fixed symlinked packages, resources, skills, and sessions being duplicated in selectors and loaders (#3818 by @aliou).
- Fixed Bedrock prompt-caching and adaptive-thinking capability checks for inference profile ARNs (#3527 by @anirudhmarc).
- Fixed OpenAI Codex Responses default verbosity to low when no verbosity is specified.
- Stopped sending empty tools arrays to providers that reject them when tools are disabled (#3650 by @HQidea).
- Fixed Anthropic SSE parsing to ignore unknown proxy events such as OpenAI-style done terminators (#3708).
- Fixed provider registration with override-only models.json entries to preserve built-in model lists (#3651).
- Fixed /login to show auth supplied by models.json provider definitions.
- Fixed HTML export whitespace around extension-rendered tool output and expandable output hints.
- Fixed bash executor temp output streams leaking file descriptors when output was truncated by line count (#3786)
- Fixed extension pi.setSessionName() updates to refresh the interactive terminal title immediately (#3686)
- Fixed /tree cancellation via session_before_tree leaving the session stuck in compaction state (#3688)
- Fixed Escape interrupt handling when extensions hide the built-in working loader row (#3674)
- Fixed coding-agent test expectations for current default models and missing-auth guidance.
- Fixed long local-LLM SSE streams aborting at 5 minutes with UND_ERR_BODY_TIMEOUT by disabling undici bodyTimeout/headersTimeout on the global dispatcher; provider SDKs continue to enforce their own deadlines via retry.provider.timeoutMs (#3715) |
| 0.70.2 | 24 d’abril del 2026 | — | 64 bits ZIP Notes de la versióFixed
- Fixed provider retry/timeout forwarding to omit undefined provider request controls, avoiding downstream SDK validation errors such as timeout must be an integer when retry.provider.timeoutMs is not configured (#3627) |
| 0.70.1 | 24 d’abril del 2026 | — | 64 bits ZIP Notes de la versióNew Features
- DeepSeek provider support with V4 Flash/Pro models and DEEPSEEK_API_KEY authentication. See README.md#providers--models and docs/providers.md#api-keys.
- Provider request timeout/retry controls via retry.provider.{timeoutMs,maxRetries,maxRetryDelayMs}, useful for long-running local inference and provider SDK retry behavior. See docs/settings.md#retry. (#3627)
Added
- Added DeepSeek to built-in provider setup, default model resolution, and provider documentation.
Fixed
- Fixed /copy to avoid unbounded OSC 52 writes and clipboard races that could break terminal rendering or panic the native clipboard addon (#3639)
- Fixed extension flag docs to show pi.getFlag() using registered flag names without the CLI -- prefix (#3614)
- Fixed provider retry/timeout settings wiring by adding retry.provider.{timeoutMs,maxRetries,maxRetryDelayMs}, migrating legacy retry.maxDelayMs, and forwarding provider controls into streamSimple request options (#3627)
- Fixed Windows git package installs to bypass cmd.exe for native git commands, so install paths containing spaces no longer break pi install git:... with fatal: Too many arguments (#3642)
- Fixed DeepSeek V4 session replay 400 errors by sending DeepSeek-compatible thinking controls and replayed assistant reasoning_content fields (#3636)
- Fixed GPT-5.5 generated context window metadata to use the observed 272k limit.
- Fixed CSI-u Ctrl+letter decoding inside bracketed paste, so pasted modified-key escape sequences no longer become literal editor text (#3623 by @Exrun94) |
| 0.70.0 | 23 d’abril del 2026 | — | 64 bits ZIP Notes de la versióNew Features
- Searchable auth provider login flow: the /login provider selector now supports fuzzy search/filtering, making it faster to find providers when many are configured. See docs/providers.md. (#3572 by @mitsuhiko)
- GPT-5.5 Codex support: openai-codex/gpt-5.5 is available as a model option, including xhigh reasoning support and corrected priority-tier pricing.
- Terminal progress indicators are now opt-in: OSC 9;4 progress reporting during streaming/compaction is off by default and can be toggled via terminal.showTerminalProgress in /settings (#3588)
- --no-builtin-tools / createAgentSession({ noTools: "builtin" }) now correctly disables only built-in tools while keeping extension tools active. See docs/extensions.md and README.md (#3592)
Breaking Changes
- Disabled OSC 9;4 terminal progress indicators by default. Set terminal.showTerminalProgress to true in /settings to re-enable (#3588)
Added
- Added searchable auth provider login flow with fuzzy filtering in the provider selector (#3572 by @mitsuhiko)
- Added GPT-5.5 Codex model
- Added auth source labels in /login so provider entries can show when auth comes from --api-key, an environment variable, or custom provider fallback without exposing secrets.
Changed
- Updated default model selection across providers to current recommended models.
- Improved stale extension context errors after session replacement or reload to tell extension authors to avoid captured pi/command ctx and use withSession for post-replacement work.
Fixed
- Fixed /model selector cancellation to request render instead of incorrectly triggering login selector.
- Changed login, OAuth, and extension selectors for more consistent styling.
- Added Amazon Bedrock setup guidance to /login and updated /model copy to refer to configured providers instead of only API keys.
- Improved no-model and missing-auth warnings to point users to /login for OAuth or API key setup.
- Fixed /quit shutdown ordering to stop the TUI before extension UI teardown can repaint, preserving the final rendered frame while still emitting session_shutdown before process exit.
- Fixed SettingsManager.inMemory() initial settings being lost after reloads triggered by SDK resource loading (#3616)
- Fixed models.json provider compatibility to accept compat.supportsLongCacheRetention, allowing proxies to opt out of long-retention cache fields when needed while long retention is enabled by default when requested (#3543)
- Fixed --thinking xhigh for openai-codex gpt-5.5 so it is no longer downgraded to high.
- Fixed git package installs with custom npmCommand values such as pnpm by avoiding npm-specific production flags in that compatibility path (#3604)
- Fixed first user messages rendering without spacing after existing notices such as compaction summaries or status messages (#3613)
- Fixed the handoff extension example to use the replacement-session context after creating a new session, avoiding stale ctx errors when it installs the generated prompt (#3606)
- Fixed session replacement and /quit teardown ordering to run host-owned extension UI cleanup synchronously after session_shutdown handlers complete but before invalidating the old extension context, preventing stale extension UI from rendering against a disposed session (#3597 by @vegarsti)
- Fixed crash on /quit when an extension registers a custom footer whose render() accesses ctx, by tearing down extension-provided UI before invalidating the extension runner during shutdown (#3595)
- Fixed auto-retry to treat Bedrock/Smithy HTTP/2 transport failures like http2 request did not get a response as transient errors, so the agent retries automatically instead of waiting for a manual nudge (#3594)
- Fixed the CLI/SDK tool-selection split so --no-builtin-tools and createAgentSession({ noTools: "builtin" }) disable only built-in default tools while keeping extension/custom tools enabled, instead of falling through to the same "disable everything" path as --no-tools (#3592)
- Fixed r |
| 0.69.0 | 22 d’abril del 2026 | — | 64 bits ZIP Notes de la versióNew Features
- TypeBox 1.x migration for extensions and SDK integrations, including TypeBox-native tool argument validation that now works in eval-restricted runtimes such as Cloudflare Workers. See docs/extensions.md and docs/sdk.md.
- Stacked extension autocomplete providers via ctx.ui.addAutocompleteProvider(...), allowing extensions to layer custom completion logic on top of built-in slash and path completion. See docs/extensions.md#autocomplete-providers and examples/extensions/github-issue-autocomplete.ts.
- Terminating tool results via terminate: true, allowing custom tools to end on a final tool call without paying for an automatic follow-up LLM turn. See docs/extensions.md and examples/extensions/structured-output.ts.
- OSC 9;4 terminal progress indicators during agent streaming and compaction for supporting terminals.
Breaking Changes
- Migrated first-party coding-agent code, SDK/examples/docs, and package metadata from @sinclair/typebox 0.34.x to typebox 1.x. New extensions, SDK integrations, and pi packages should depend on and import from typebox. Legacy extension loading still aliases the root @sinclair/typebox package, but @sinclair/typebox/compiler is no longer shimmed. This migration also picks up the new @mariozechner/pi-ai TypeBox-native validator path, so tool argument validation now works in eval-restricted runtimes such as Cloudflare Workers instead of being skipped (#3112)
- Session-replacement commands now invalidate captured pre-replacement session-bound extension objects after ctx.newSession(), ctx.fork(), and ctx.switchSession(). Old pi and command ctx references now throw instead of silently targeting the replaced session. Migration: if code needs to keep working in the replacement session after one of those calls, pass withSession to that same method and do the post-switch work there. In practice, move post-switch pi.sendUserMessage(), pi.sendMessage(), and command-ctx/session-manager access into withSession, and use only the ReplacedSessionContext passed to that callback for session-bound operations. Footguns: withSession runs after the old extension instance has already received session_shutdown, old cleanup may already have invalidated captured state, captured old pi / old command ctx are stale, and previously extracted raw objects such as const sm = ctx.sessionManager remain the caller's responsibility and must not be reused after the switch.
Added
- Added support for terminating tool results via terminate: true, allowing custom tools to end the current tool batch without an automatic follow-up LLM call, plus a structured-output.ts extension example and extension docs showing the pattern (#3525)
- Added OSC 9;4 terminal progress indicators during agent streaming and compaction, so terminals like iTerm2, WezTerm, Windows Terminal, and Kitty show activity in their tab bar
- Added ctx.ui.addAutocompleteProvider(...) for stacking extension autocomplete providers on top of the built-in slash/path provider, plus a github-issue-autocomplete.ts example and extension docs (#2983)
Fixed
- Fixed exported session HTML to sanitize markdown link URLs before rendering them into anchor tags, blocking javascript:-style payloads while preserving safe links in shared/exported sessions (#3532)
- Fixed ctx.getSystemPrompt() inside before_agent_start to reflect chained system-prompt changes made by earlier before_agent_start handlers, and clarified the extension docs around provider-payload rewrites and what ctx.getSystemPrompt() does and does not report (#3539)
- Fixed built-in google-gemini-cli model lists and selector entries to include gemini-3.1-flash-lite-preview, so Cloud Code Assist users no longer need manual --model fallback selection to use it (#3545)
- Fixed extension session-replacement flows so ctx.newSession(), ctx.fork(), ctx.switchSession(), and imported-session replacements fully rebind before post-switch work runs, added withSession replacement callbacks with fresh ReplacedSessionContext helpers, |
| 0.68.1 | 22 d’abril del 2026 | — | 64 bits ZIP Notes de la versióNew Features
- Fireworks provider support with built-in models and FIREWORKS_API_KEY auth. See README.md#providers--models and docs/providers.md.
- Configurable inline tool image width via terminal.imageWidthCells in /settings. See docs/settings.md#terminal--images.
Added
- Added built-in Fireworks provider support, including FIREWORKS_API_KEY setup/docs and the default Fireworks model accounts/fireworks/models/kimi-k2p6 (#3519)
Fixed
- Fixed interactive inline tool images to honor configurable terminal.imageWidthCells via /settings, so tool-output images are no longer hard-capped to 60 terminal cells (#3508)
- Fixed sessionDir in settings.json to expand ~, so portable session-directory settings no longer require a shell wrapper (#3514)
- Fixed parallel tool-call rows to leave the pending state as soon as each tool is finalized, while still appending persisted tool results in assistant source order (#3503)
- Fixed exported session markdown to render Markdown while showing HTML-like message content such as <file name="...">...</file> verbatim, so shared sessions match the TUI instead of letting the browser interpret message text (#3484)
- Fixed exported session HTML to render grep and find output through their existing TUI renderers and ls output through a native template renderer, avoiding missing formatting and spacing artifacts in shared sessions (#3491 by @aliou)
- Fixed @ autocomplete fuzzy search to follow symlinked directories and include symlinked paths in results (#3507)
- Fixed proxied agent streams to preserve the proxy-safe serializable subset of stream options, including session, transport, retry-delay, metadata, header, cache-retention, and thinking-budget settings (#3512)
- Hardened Anthropic streaming against malformed tool-call JSON by owning SSE parsing with defensive JSON repair, replacing the deprecated fine-grained-tool-streaming beta header with per-tool eager_input_streaming, and updating stale test model references (#3175)
- Fixed Bedrock runtime endpoint resolution to stop pinning built-in regional endpoints over AWS_REGION / AWS_PROFILE, restoring us.* and eu.* inference profile support after v0.68.0 while preserving custom VPC/proxy endpoint overrides (#3481, #3485, #3486, #3487, #3488) |
| 0.68.0 | 20 d’abril del 2026 | — | 64 bits ZIP Notes de la versióNew Features
- Configurable streaming working indicator for extensions via ctx.ui.setWorkingIndicator(), including animated, static, and hidden indicators. See docs/tui.md#working-indicator, docs/extensions.md, and examples/extensions/working-indicator.ts.
- before_agent_start now exposes systemPromptOptions (BuildSystemPromptOptions) so extensions can inspect the structured system-prompt inputs without re-discovering resources. See docs/extensions.md#before_agent_start and examples/extensions/prompt-customizer.ts.
- Configurable keybindings for scoped model selector actions and session-tree filter actions. See docs/keybindings.md.
- /clone duplicates the current active branch into a new session, while extensions can choose whether to fork before or at an entry via ctx.fork(..., { position }). See README.md, docs/extensions.md, and docs/session.md.
Breaking Changes
- Changed SDK and CLI tool selection from cwd-bound built-in tool instances to tool-name allowlists. createAgentSession({ tools }) now expects string[] names such as "read" and "bash" instead of Tool[], --tools now allowlists built-in, extension, and custom tools by name, and --no-tools now disables all tools by default rather than only built-ins. Migrate SDK code from tools: [readTool, bashTool] to tools: ["read", "bash"] (#2835, #3452)
- Removed prebuilt cwd-bound tool and tool-definition exports from @mariozechner/pi-coding-agent, including readTool, bashTool, editTool, writeTool, grepTool, findTool, lsTool, readOnlyTools, codingTools, and the corresponding *ToolDefinition values. Use the explicit factory exports instead, for example createReadTool(cwd), createBashTool(cwd), createCodingTools(cwd), and createReadToolDefinition(cwd) (#3452)
- Removed ambient process.cwd() / default agent-dir fallback behavior from public resource helpers. DefaultResourceLoader, loadProjectContextFiles(), and loadSkills() now require explicit cwd/agent-dir style inputs, and exported system-prompt option types now require an explicit cwd. Pass the session or project cwd explicitly instead of relying on process-global defaults (#3452)
Added
- Added extension support for customizing the interactive streaming working indicator via ctx.ui.setWorkingIndicator(), including custom animated frames, static indicators, hidden indicators, a new working-indicator.ts example extension, and updated extension/TUI/RPC docs (#3413)
- Added systemPromptOptions (BuildSystemPromptOptions) to before_agent_start extension events, so extensions can inspect the structured inputs used to build the current system prompt (#3473 by @dljsjr)
- Added /clone to duplicate the current active branch into a new session, while keeping /fork focused on forking from a previous user message (#2962)
- Added ctx.fork() support for position: "before" | "at" so extensions and integrations can branch before a user message or duplicate the current point in the conversation; the interactive clone/fork UX builds on that runtime support (#3431 by @mitsuhiko)
- Added configurable keybinding ids for scoped model selector actions and tree filter actions, so those interactive shortcuts can be remapped in keybindings.json (#3343 by @mpazik)
- Added PI_OAUTH_CALLBACK_HOST support for built-in OAuth login flows, allowing local callback servers used by pi auth to bind to a custom interface instead of hardcoded 127.0.0.1 (#3409 by @Michaelliv)
- Added reason and targetSessionFile metadata to session_shutdown extension events, so extensions can distinguish quit, reload, new-session, resume, and fork teardown paths (#2863)
Changed
- Changed pi update to batch npm package updates per scope and run git package updates with bounded parallelism, reducing multi-package update time while preserving skip behavior for pinned and already-current packages (#2980)
- Changed Bedrock session requests to omit maxTokens when model token limits are unknown and to omit temperature when unset, letting Bedrock use provider defaults and avoid unnecessary TPM q |
| 0.67.68 | 17 d’abril del 2026 | — | 64 bits ZIP |
| 0.67.67 | 17 d’abril del 2026 | — | 64 bits ZIP Notes de la versióNew Features
- Bedrock sessions can now authenticate with AWS_BEARER_TOKEN_BEDROCK, enabling Converse API access without local SigV4 credentials. See docs/providers.md#amazon-bedrock.
Added
- Added Bedrock bearer-token authentication support via AWS_BEARER_TOKEN_BEDROCK, enabling coding-agent sessions to use Bedrock Converse without local SigV4 credentials (#3125 by @wirjo)
Fixed
- Fixed /scoped-models Alt+Up/Down to stay a no-op in the implicit all enabled state instead of materializing a full explicit enabled-model list and marking the selector dirty (#3331)
- Fixed Mistral Small 4 default thinking requests to use the model's supported reasoning control, avoiding 400 errors when starting sessions on mistral-small-2603 and mistral-small-latest (#3338)
- Fixed Qwen chat-template thinking replay to preserve prior thinking across turns, so affected OpenAI-compatible models keep multi-turn tool-call arguments instead of degrading to empty {} payloads (#3325)
- Fixed exported HTML transcripts so text selection no longer triggers click-based expand/collapse toggles (#3332 by @xu0o0)
- Fixed flaky git package update notifications by waiting for captured git command stdio to fully drain before comparing local and remote commit SHAs (#3027)
- Fixed system prompt dates to use a stable YYYY-MM-DD format instead of locale-dependent output, keeping prompts deterministic across runtimes and locales (#2814)
- Fixed auto-retry transient error detection to treat Network connection lost. as retryable, so dropped provider connections retry instead of terminating the agent (#3317)
- Fixed compact interactive extension startup summaries to disambiguate package extensions and repeated local index.ts entries by using package-aware labels and the minimal parent path needed to make local entries unique (#3308)
- Fixed git package dependency installation to use production installs (npm install --omit=dev) during both install and update flows, so extension runtime dependencies must come from dependencies and not devDependencies (#3009)
- Fixed tool_result / afterToolCall extension handling for error results by forwarding details and isError overrides through AgentSession instead of dropping them when isError was already true (#3051)
- Fixed missing root exports for RpcClient and RPC protocol types from @mariozechner/pi-coding-agent, so ESM consumers can import them from the main package entrypoint (#3275)
- Fixed OpenAI Codex service-tier cost accounting to trust the explicitly requested tier when the API echoes the default tier in responses, keeping session cost displays aligned with the selected tier (#3307 by @markusylisiurunen)
- Fixed parallel tool-call finalization to convert afterToolCall hook throws into error tool results instead of aborting the remaining tool batch (#3084)
- Fixed Bun binary asset path resolution to honor PI_PACKAGE_DIR for built-in themes, HTML export templates, and interactive bundled assets (#3074)
- Fixed user-message turn spacing in interactive mode by restoring an inter-message spacer before user turns (except the first user message), preventing assistant and user blocks from rendering flush together.
- Fixed interactive /import handling to support quoted JSONL paths with spaces, route missing JSONL files through the non-fatal SessionImportFileNotFoundError path, and document the importFromJsonl() exceptions (SessionImportFileNotFoundError, MissingSessionCwdError). |
| 0.67.6 | 16 d’abril del 2026 | — | 64 bits ZIP Notes de la versióNew Features
- Prompt templates support an argument-hint frontmatter field that renders before the description in the / autocomplete dropdown, using <angle> for required and [square] for optional arguments. See docs/prompt-templates.md#argument-hints.
- New after_provider_response extension hook lets extensions inspect provider HTTP status codes and headers immediately after each response is received and before stream consumption begins. See docs/extensions.md.
- Compact interactive startup header with a comma-separated view of loaded AGENTS.md files, prompt templates, skills, and extensions. Press Ctrl+O to toggle the expanded listing.
- Markdown links in assistant output now render as OSC 8 hyperlinks on terminals that advertise support; unknown terminals and tmux/screen default to plain text so URLs are never silently dropped.
Added
- Added argument-hint frontmatter field for prompt templates, displayed before the description in the autocomplete dropdown (#2780 by @andresvi94)
- Added after_provider_response extension hook so extensions can inspect provider HTTP status codes and headers after each provider response is received and before stream consumption begins (#3128)
- Added OSC 8 hyperlink rendering for markdown links when the terminal advertises support (#3248 by @ofa1)
Changed
- Changed interactive startup header to a compact, comma-separated view of loaded AGENTS.md files, prompt templates, skills, and extensions, with Ctrl+O to toggle the expanded listing (#3267)
- Tightened hyperlink capability detection to default hyperlinks: false for unknown terminals and force it off under tmux/screen (including nested sessions), preventing markdown link URLs from disappearing on terminals that silently swallow OSC 8 sequences (#3248)
Fixed
- Fixed --verbose startup output to begin with expanded startup help and loaded resource listings after the compact startup header change (#3147)
- Fixed find tool returning no results for path-based glob patterns such as src/**/*.spec.ts or some/parent/child/** by switching fd into full-path mode and normalizing the pattern when it contains a / (#3302)
- Fixed find tool applying nested .gitignore rules across sibling directories (e.g. rules from a/.gitignore hiding matching files under b/) by dropping the manual --ignore-file collection and delegating to fd's hierarchical .gitignore handling via --no-require-git (#3303)
- Fixed OpenAI Responses prompt caching for non-api.openai.com base URLs (OpenAI-compatible proxies such as litellm, theclawbay) by sending the session_id and x-client-request-id cache-affinity headers unconditionally when a sessionId is provided, matching the official Codex CLI behavior (#3264 by @vegarsti)
- Fixed the preset example extension to snapshot the active model, thinking level, and tool set on the first preset application and restore that state when cycling back to (none), instead of falling back to a hardcoded default tool list (#3272 by @stembi) |
| 0.67.5 | 16 d’abril del 2026 | — | 64 bits ZIP Notes de la versióFixed
- Fixed Opus 4.7 adaptive thinking configuration across Anthropic and Bedrock providers by recognizing Opus 4.7 adaptive-thinking support and mapping xhigh reasoning to provider-supported effort values (#3286 by @markusylisiurunen)
- Fixed Zellij Shift+Enter regressions by reverting the Zellij-specific Kitty keyboard query bypass and restoring the previous keyboard negotiation behavior (#3259) |
| 0.67.4 | 16 d’abril del 2026 | — | 64 bits ZIP Notes de la versióNew Features
- --no-context-files (-nc) disables automatic AGENTS.md / CLAUDE.md discovery when you need a clean run without project context injection. See README.md#context-files.
- loadProjectContextFiles() is now exported as a standalone utility for extensions and SDK-style integrations that need to inspect the same context-file resolution order used by the CLI. See README.md#context-files.
- New after_provider_response extension hook lets extensions inspect provider HTTP status codes and headers immediately after response creation and before stream consumption. See docs/extensions.md.
Added
- Added --no-context-files (-nc) to disable AGENTS.md and CLAUDE.md context file discovery and loading (#3253)
- Exported loadProjectContextFiles() as a standalone utility so extensions can discover project context files without instantiating a full DefaultResourceLoader (#3142)
- Added after_provider_response extension hook so extensions can inspect provider HTTP status codes and headers after each provider response is received and before stream consumption begins (#3128)
Changed
- Added claude-opus-4-7 model for Anthropic.
- Changed Anthropic prompt caching to add a cache_control breakpoint on the last tool definition, so tool schemas can be cached independently from transcript updates while preserving existing cache retention behavior (#3260)
Fixed
- Fixed markdown strikethrough parsing in interactive rendering and HTML export to require strict double-tilde delimiters (~~text~~) with non-whitespace boundaries.
- Fixed shutdown handling to kill tracked detached bash tool child processes on exit signals, preventing orphaned background processes.
- Fixed flaky edit-tool-no-full-redraw TUI tests by waiting for asynchronous preview and preflight error rendering instead of relying on fixed render ticks.
- Fixed kimi-coding default model selection to use kimi-for-coding instead of kimi-k2-thinking (#3242)
- Fixed ctrl+z on native Windows to avoid crashing interactive mode, disable the default suspend binding there, and show a status message when suspend is invoked manually (#3191)
- Fixed find tool cancellation and responsiveness on broad searches by making .gitignore discovery and fd execution fully abort-aware and non-blocking (#3148)
- Fixed grep broad-search stalls when context=0 by formatting match lines from ripgrep JSON output instead of doing synchronous per-match file reads (#3205) |
| 0.67.3 | 15 d’abril del 2026 | — | 64 bits ZIP Notes de la versióNew Features
- renderShell: "self" for custom and built-in tool renderers so tools can own their outer shell instead of the default boxed shell. Useful for stable large previews such as edit diffs. See docs/extensions.md#custom-rendering.
- Interactive auto-retry status now shows a live countdown during backoff instead of a static retry delay message.
Added
- Added renderShell: "self" for custom and built-in tool renderers so tools can own their outer shell instead of using the default boxed shell. This is useful for stable large previews such as edit diffs (#3134)
Fixed
- Fixed edit diff previews to stay visible during edit permission dialogs and session replay without reintroducing large-result redraw flicker (#3134)
- Fixed /reload to render a static reload status box instead of an animated spinner, avoiding redraw instability during interactive reloads.
- Fixed the plan-mode example extension to allow eza in the read-only bash allowlist instead of the deprecated exa command (#3240 by @rwachtler)
- Fixed google-vertex API key resolution to treat gcp-vertex-credentials as an Application Default Credentials marker instead of a literal API key, so marker-based setups correctly fall back to ADC (#3221 by @deepkilo)
- Fixed RPC prompt to wait for prompt preflight success before emitting its single authoritative response, while still treating handled and queued prompts as success (#3049)
- Fixed Alt keybindings inside Zellij by skipping the Kitty keyboard protocol query there and enabling xterm modifyOtherKeys mode 2 directly (#3163)
- Fixed /scoped-models reordering to propagate into the /model scoped tab, preserving the user-defined scoped model order instead of re-sorting it (#3217)
- Fixed session_shutdown to fire on SIGHUP and SIGTERM in interactive, print, and RPC modes so extensions can run shutdown cleanup on those signal-driven exits (#3212)
- Fixed screenshot path parsing to handle lower case am/pm in macOS screenshot filenames (#3194 by @jay-aye-see-kay)
- Fixed interactive auto-retry status updates to show a live countdown during backoff instead of a static retry delay message (#3187) |
| 0.67.2 | 14 d’abril del 2026 | — | 64 bits ZIP Notes de la versióNew Features
- Support for multiple --append-system-prompt flags, each value is appended to the system prompt separated by double newlines. See README.md#other-options.
- Support for passing inline extension factories to main() for embedded integrations and custom entrypoints.
- Interactive keybinding support for Kitty super-modified shortcuts such as super+k, super+enter, and ctrl+super+k. See docs/keybindings.md.
Added
- Added support for multiple --append-system-prompt flags, each value is appended to the system prompt separated by double newlines (#3171 by @aliou)
- Added interactive keybinding support for Kitty super-modified shortcuts such as super+k, super+enter, and ctrl+super+k (#3111 by @sudosubin)
- Added support for passing inline extension factories to main() for embedded integrations and custom entrypoints (#3099 by @pmateusz)
Fixed
- Fixed direct OpenAI Responses and Codex SSE requests to align prompt_cache_key, session_id, and x-client-request-id values with the same session-derived identifier, improving prompt cache affinity for append-only sessions (#3018 by @steipete)
- Fixed streaming-only partialJson scratch buffers leaking into persisted OpenAI Responses tool calls, which could corrupt follow-up payloads on resumed conversations.
- Fixed Ctrl+Alt letter key matching in tmux by falling through from legacy ESC-prefixed handling to CSI-u and xterm modifyOtherKeys parsing when the legacy form does not match (#2989 by @kaofelix)
- Fixed the shipped subagent example to avoid leaking Bun virtual filesystem script paths into subagent prompts (#3002 by @nathyong)
- Fixed bordered loaders to stop their animation timer when disposed, preventing stale loader updates after teardown. |
| 0.67.1 | 13 d’abril del 2026 | — | 64 bits ZIP Notes de la versióTelemetry
Interactive mode now sends a lightweight anonymous install/update telemetry ping to https://pi.dev/install?version=x.y.z after it writes lastChangelogVersion in settings.json.
Why this exists:
- Pi needs a reliable per-version usage signal to understand whether releases are being adopted and to help justify funding continued development.
- npm download counts are not a reliable proxy for actual Pi usage.
How it works:
- It only runs in interactive mode.
- It does not run in RPC mode, print mode, JSON mode, or SDK mode.
- On a fresh interactive install, Pi writes lastChangelogVersion, then sends the ping.
- On later interactive startups, if the local changelog contains entries newer than the previously stored lastChangelogVersion, Pi writes the new lastChangelogVersion, then sends the ping.
- The request is fire-and-forget. Startup does not wait for it, and any errors are ignored.
What data is collected:
- Only the Pi version in the request path, for example https://pi.dev/install?version=0.67.1.
- The server stores only aggregate per-version counters such as { "0.67.1": 3 }.
- It does not store IP addresses, client identifiers, prompts, paths, models, auth state, or any other per-user data. It literally only increments a counter for that version.
How to disable it:
- /settings → disable Install telemetry
- settings.json → set enableInstallTelemetry to false
- PI_OFFLINE=1
- PI_TELEMETRY=0
New Features
- Full openRouterRouting support in models.json, including fallbacks, parameter requirements, data collection, ZDR, ignore lists, quantizations, provider sorting, max price, and preferred throughput and latency constraints. See docs/models.md.
- PI_CODING_AGENT=true environment variable set at startup so subprocesses can detect they are running inside the coding agent.
Added
- Added full openRouterRouting field support in models.json, including fallbacks, parameter requirements, data collection, ZDR, ignore lists, quantizations, provider sorting, max price, and preferred throughput and latency constraints (#2904 by @zmberber)
- Set PI_CODING_AGENT=true environment variable at startup so sub-processes can detect they are running inside the coding agent (#2868)
Fixed
- Fixed interactive changelog rendering for the telemetry notes by moving the section under a ### Telemetry heading, so startup shows the full release notes instead of only the version header.
- Updated antigravity-image-gen.ts example extension to use User-Agent version 1.21.9 (#2901 by @aadishv)
- Bumped default Antigravity User-Agent version to 1.21.9 (#2901 by @aadishv)
- Fixed Gemma 4 thinking level mapping to route between MINIMAL and HIGH, and map Pi reasoning levels to the model's supported thinking levels (#2903 by @aadishv)
- Fixed Gemini 2.5 Flash Lite minimal thinking budget to use the model's supported 512-token minimum instead of the regular Flash 128-token minimum, avoiding invalid thinking budget errors (#2861 by @JasonOA888)
- Fixed OpenAI Codex Responses requests to forward configured serviceTier values, restoring service-tier selection for Codex sessions (#2996 by @markusylisiurunen)
- Fixed Container.render() stack overflow on long sessions by replacing Array.push(...spread) with a loop-based push, preventing RangeError: Maximum call stack size exceeded when child output exceeds the V8 call stack argument limit (#2651)
- Fixed editor sticky-column tracking around paste markers so vertical cursor navigation restores the column from before the cursor entered a paste marker instead of jumping inside or past pasted content (#3092 by @Perlence)
- Fixed queued messages typed during /tree branch summarization to flush automatically after navigation completes, so they no longer remain stuck in the steering queue (#3091 by @Perlence) |
| 0.66.1 | 8 d’abril del 2026 | — | 64 bits ZIP Notes de la versióChanged
- Changed the Earendil announcement from an automatic startup notice to the hidden /dementedelves slash command. |
| 0.66.0 | 8 d’abril del 2026 | — | 64 bits ZIP Notes de la versióNew Features
- Earendil startup announcement with bundled inline image rendering and a linked blog post for April 8 and 9, 2026.
- Interactive Anthropic subscription auth warning when Anthropic subscription auth is active, clarifying that Anthropic third-party usage draws from extra usage and is billed per token.
Fixed
- Fixed bare readline import to use node:readline prefix for Deno compatibility (#2885 by @milosv-vtool)
- Fixed auto-retry to treat stream failures like request ended without sending any chunks as transient errors (#2892)
- Fixed interactive startup notices to render after the initial resource listing, and added a bundled Earendil startup announcement with inline image rendering for April 8 and 9, 2026. Moved the blog link above the image to avoid overlap with terminal image rendering.
- Fixed interactive mode to warn when Anthropic subscription auth is active, so users know Anthropic third-party usage draws from extra usage and is billed per token. |
| 0.65.2 | 6 d’abril del 2026 | — | 64 bits ZIP |
| 0.65.1 | 5 d’abril del 2026 | — | 64 bits ZIP Notes de la versióFixed
- Fixed bash output truncation by line count to always persist full output to a temp file, preventing data loss when output exceeds 2000 lines but stays under the byte threshold (#2852)
- RpcClient now forwards subprocess stderr to parent process in real-time (#2805)
- Theme file watcher now handles async fs.watch error events instead of crashing the process (#2791)
- Fixed stored session cwd handling so resuming or importing a session whose original working directory no longer exists now prompts interactive users to continue in the current cwd, while non-interactive modes fail with a clear error.
- Fixed resource collision precedence so project and user skills, prompt templates, and themes override package resources consistently, and CLI-provided paths take precedence over discovered resources (#2781)
- Fixed OpenAI-compatible completions streaming usage accounting to preserve prompt_tokens_details.cache_write_tokens and normalize OpenRouter cached_tokens, preventing incorrect cache read/write token and cost reporting in pi (#2802)
- Fixed CLI extension paths like git:gist.github.com/... being incorrectly resolved against cwd instead of being passed through to the package manager (#2845 by @aliou)
- Fixed piped stdin runs with --mode json to preserve JSONL output instead of falling back to plain text (#2848 by @aliou)
- Fixed interactive command docs to stop listing removed /exit as a supported quit command (#2850) |
| 0.65.0 | 3 d’abril del 2026 | — | 64 bits ZIP Notes de la versióNew Features
- Session runtime API: createAgentSessionRuntime() and AgentSessionRuntime provide a closure-based runtime that recreates cwd-bound services and session config on every session switch. Startup, /new, /resume, /fork, and import all use the same creation path. See docs/sdk.md and examples/sdk/13-session-runtime.ts.
- Label timestamps in /tree: Toggle timestamps on tree entries with Shift+T, with smart date formatting and timestamp preservation through branching (#2691 by @w-winter)
- defineTool() helper: Create standalone custom tool definitions with full TypeScript parameter type inference, no manual casts needed (#2746). See docs/extensions.md.
- Unified diagnostics: Arg parsing, service creation, session option resolution, and resource loading all return structured diagnostics (info/warning/error) instead of logging or exiting. The app layer decides presentation and exit behavior.
Breaking Changes
- Removed extension post-transition events session_switch and session_fork. Use session_start with event.reason ("startup" | "reload" | "new" | "resume" | "fork"). For "new", "resume", and "fork", session_start includes previousSessionFile.
- Removed session-replacement methods from AgentSession. Use AgentSessionRuntime for newSession(), switchSession(), fork(), and importFromJsonl(). Cross-cwd session replacement rebuilds all cwd-bound runtime state and replaces the live AgentSession instance.
- Removed session_directory from extension and settings APIs.
- Unknown single-dash CLI flags (e.g. -s) now produce an error instead of being silently ignored.
Migration: Extensions
Before:
pi.on("session_switch", async (event, ctx) => { ... });
pi.on("session_fork", async (_event, ctx) => { ... });
After:
pi.on("session_start", async (event, ctx) => {
// event.reason: "startup" | "reload" | "new" | "resume" | "fork"
// event.previousSessionFile: set for "new", "resume", "fork"
});
Migration: SDK session replacement
Before:
await session.newSession();
await session.switchSession("/path/to/session.jsonl");
After:
import {
type CreateAgentSessionRuntimeFactory,
createAgentSessionFromServices,
createAgentSessionRuntime,
createAgentSessionServices,
getAgentDir,
SessionManager,
} from "@mariozechner/pi-coding-agent";
const createRuntime: CreateAgentSessionRuntimeFactory = async ({ cwd, sessionManager, sessionStartEvent }) => {
const services = await createAgentSessionServices({ cwd });
return {
...(await createAgentSessionFromServices({ services, sessionManager, sessionStartEvent })),
services,
diagnostics: services.diagnostics,
};
};
const runtime = await createAgentSessionRuntime(createRuntime, {
cwd: process.cwd(),
agentDir: getAgentDir(),
sessionManager: SessionManager.create(process.cwd()),
});
await runtime.newSession();
await runtime.switchSession("/path/to/session.jsonl");
await runtime.fork("entry-id");
// After replacement, runtime.session is the new live session.
// Rebind any session-local subscriptions or extension bindings.
Added
- Added createAgentSessionRuntime() and AgentSessionRuntime for runtime-backed session replacement. The runtime takes a CreateAgentSessionRuntimeFactory closure that closes over process-global fixed inputs and recreates cwd-bound services and session config for each effective cwd. Startup and later /new, /resume, /fork, import all use the same factory.
- Added unified diagnostics model (info/warning/error) for arg parsing, service creation, session option resolution, and resource loading. Creation logic no longer logs or exits. The app layer decides presentation and exit behavior.
- Added error diagnostics for missing explicit CLI resource paths (-e, --skill, --prompt-template, --theme)
- Added defineTool() so standalone and array-based custom tool definitions keep inferred parameter types without manual casts (#2746)
- Added label timestamps to the session tree with a Shift+T toggle in /tree, smart date formatting, and timestamp preservation through branching (#2691 by @w-winter)
Fixed
- Fi |
| 0.64.0 | 29 de març del 2026 | — | 64 bits ZIP Notes de la versióNew Features
- Extensions and SDK callers can attach a prepareArguments hook to any tool definition, letting them normalize or migrate raw model arguments before schema validation. The built-in edit tool uses this to transparently support sessions created with the old single-edit schema. See docs/extensions.md
- Extensions can customize the collapsed thinking block label via ctx.ui.setHiddenThinkingLabel(). See examples/extensions/hidden-thinking-label.ts (#2673)
Breaking Changes
- ModelRegistry no longer has a public constructor. SDK callers and tests must use ModelRegistry.create(authStorage, modelsJsonPath?) for file-backed registries or ModelRegistry.inMemory(authStorage) for built-in-only registries. Direct new ModelRegistry(...) calls no longer compile.
Added
- Added ToolDefinition.prepareArguments hook to prepare raw tool call arguments before schema validation, enabling compatibility shims for resumed sessions with outdated tool schemas
- Built-in edit tool now uses prepareArguments to silently fold legacy top-level oldText/newText into edits[] when resuming old sessions
- Added ctx.ui.setHiddenThinkingLabel() so extensions can customize the collapsed thinking label in interactive mode, with a no-op in RPC mode and a runnable example extension in examples/extensions/hidden-thinking-label.ts (#2673)
Fixed
- Fixed extension-queued user messages to refresh the interactive pending-message list so messages submitted while a turn is active are no longer silently dropped (#2674 by @mrexodia)
- Fixed monorepo tsconfig.json path mappings to resolve @mariozechner/pi-ai subpath exports to source files in development checkouts (#2625 by @ferologics)
- Fixed TUI cell size response handling to consume only exact CSI 6 ; height ; width t replies, so bare Escape is no longer swallowed while waiting for terminal image metadata (#2661)
- Fixed Kitty keyboard protocol keypad functional keys to normalize to logical digits, symbols, and navigation keys, so numpad input in terminals such as iTerm2 no longer inserts Private Use Area gibberish or gets ignored (#2650) |
| 0.63.2 | 29 de març del 2026 | — | 64 bits ZIP Notes de la versióNew Features
- Extension handlers can now use ctx.signal to forward cancellation into nested model calls, fetch(), and other abort-aware work. See docs/extensions.md#ctxsignal (#2660)
- Built-in edit tool input now uses edits[] as the only replacement shape, reducing invalid tool calls caused by mixed single-edit and multi-edit schemas (#2639)
- Large multi-edit results no longer trigger full-screen redraws in the interactive TUI when the final diff is rendered (#2664)
Added
- Added ctx.signal to ExtensionContext and wired it to the active agent turn so extension handlers can forward cancellation into nested model calls, fetch(), and other abort-aware work (#2660)
Fixed
- Fixed built-in edit tool input to use edits[] as the only replacement shape, eliminating the mixed single-edit and multi-edit modes that caused repeated invalid tool calls and retries (#2639)
- Fixed edit tool TUI rendering to defer large multi-edit diffs to the settled result, avoiding full-screen redraws when the tool completes (#2664) |
| 0.63.1 | 27 de març del 2026 | — | 64 bits ZIP Notes de la versióAdded
- Added gemini-3.1-pro-preview-customtools model availability for the google-vertex provider (#2610 by @gordonhwc)
Fixed
- Documented tool_call input mutation as supported extension API behavior, clarified that post-mutation inputs are not re-validated, and added regression coverage for executing mutated tool arguments (#2611)
- Fixed repeated compactions dropping messages that were kept by an earlier compaction by re-summarizing from the previous kept boundary and recalculating tokensBefore from the rebuilt session context (#2608)
- Fixed interactive compaction UI updates so ctx.compact() rebuilds the chat through unified compaction events, manual compaction no longer duplicates the summary block, and the trigger-compact example only fires when context usage crosses its threshold (#2617)
- Fixed interactive compaction completion to append a synthetic compaction summary after rebuilding the chat so the latest compaction remains visible at the bottom
- Fixed skill discovery to stop recursing once a directory contains SKILL.md, and to ignore root *.md files in .agents/skills while keeping root markdown skill files supported in ~/.pi/agent/skills, .pi/skills, and package skills/ directories (#2603)
- Fixed edit tool diff rendering for multi-edit operations with large unchanged gaps so distant edits collapse intermediate context instead of dumping the full unchanged middle block
- Fixed edit tool error rendering to avoid repeating the same exact-match failure in both the preview and result blocks
- Fixed auto-compaction overflow recovery for Ollama models when the backend returns explicit prompt too long; exceeded max context length ... errors instead of silently truncating input (#2626)
- Fixed built-in tool overrides that reuse built-in parameter schemas to still honor custom renderCall and renderResult renderers in the interactive TUI, restoring the minimal-mode example (#2595) |