<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Pi — The AI Toolchain</title>
    <link>https://aitoolchain.io/tools/pi</link>
    <description>New releases and features in Pi, tracked by The AI Toolchain.</description>
    <language>en</language>
    <lastBuildDate>Fri, 28 Aug 2026 22:08:23 GMT</lastBuildDate>
    <atom:link href="https://aitoolchain.io/tools/pi/rss.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Pi v0.84.4</title>
      <link>https://github.com/earendil-works/pi/releases/tag/v0.84.4</link>
      <guid isPermaLink="true">https://github.com/earendil-works/pi/releases/tag/v0.84.4</guid>
      <pubDate>Fri, 28 Aug 2026 22:08:23 GMT</pubDate>
      <description>Pi v0.84.4 adds terminal capability overrides, RPC `clear_queue`, `fullscreenCopyOnSelect`, extension UI prompt events, and DeepSeek vision model support.
• Adds `fullscreenCopyOnSelect` setting to disable automatic selection copying in fullscreen mode; when disabled, `Ctrl+X` copies the active text selection before falling back to the last assistant message.
• Adds RPC `clear_queue` command to retrieve and remove queued steering and follow-up messages from the RPC queue.
• Adds environment variables and advanced settings for overriding auto-detected terminal hyperlink, image, and truecolor capabilities.
• Adds `ui_prompt_start` and `ui_prompt_end` extension events so host integrations can distinguish active agent work from time spent waiting on user-facing `ctx.ui` prompts.
• Adds detectSupportedImageMimeTypeFromFile() to the public library exports.
• Adds experimental `deepseek-v4-flash-vision-exp` vision-capable model through the built-in DeepSeek provider.
• Adds transcript usage notices for compaction and branch summaries when cache miss notices are enabled.</description>
    </item>
    <item>
      <title>Pi v0.84.3</title>
      <link>https://github.com/earendil-works/pi/releases/tag/v0.84.3</link>
      <guid isPermaLink="true">https://github.com/earendil-works/pi/releases/tag/v0.84.3</guid>
      <pubDate>Mon, 24 Aug 2026 11:09:57 GMT</pubDate>
      <description>Pi v0.84.3 adds a native PowerShell tool for Windows, a `/thinking` selector with Ctrl+S persistence, and atomic staged updates via `pi update`.
• Adds an optional `powershell` tool for Windows, configurable through `defaultTools` and the SDK, enabling native PowerShell command execution from the agent.
• Adds a `/thinking` selector for choosing thinking levels interactively, with searchable default choices; `Ctrl+S` persists the selected model as the global default instead of only session-scoping it.
• Changes `pi update` to stage, verify, and atomically activate the selected release for installer-managed installations, replacing the previous in-place swap.
• Adds `session_compact_failed` extension events that expose compaction failure reason, retry state, source, and error message to handlers.
• Adds optional routing session IDs to compaction summary helpers so callers can preserve provider routing without enabling prompt cache writes.
• Adds transcript usage notices for compaction and branch summaries when cache miss notices are enabled.
• Adds configurable OpenAI-compatible thinking-token budget fields for vLLM, Qwen/SGLang, and llama.cpp servers.
• Adds provider-neutral `toolChoice` support to simple stream requests.
• Adds automatic Anthropic server-side refusal fallback for supported first-party models, including returned-model usage pricing.
• Adds China-specific ZAI Coding Plan models including GLM-4.6V vision support and API-equivalent usage cost estimates.
• Adds `deepseek-v4-pro-0813` support to the Qwen Token Plan Individual catalog.
• Changes built-in xAI models to use the Responses API with encrypted reasoning replay and makes Grok 4.6 the default xAI model.
• Supports `--` as an end-of-options delimiter so dash-prefixed prompts are not parsed as flags.
Breaking changes:
• The `GoogleThinkingLevel` type is renamed to `GoogleApiThinkingLevel`; any code referencing `GoogleThinkingLevel` will break on upgrade.</description>
    </item>
    <item>
      <title>Pi v0.84.2</title>
      <link>https://github.com/earendil-works/pi/releases/tag/v0.84.2</link>
      <guid isPermaLink="true">https://github.com/earendil-works/pi/releases/tag/v0.84.2</guid>
      <pubDate>Fri, 14 Aug 2026 10:14:32 GMT</pubDate>
      <description>Pi v0.84.2 adds fullscreen transcript search, configurable default tools, a per-run theme flag, and new extension/gateway APIs.
• Adds `--use-theme &lt;name[/name]&gt;` flag to choose a per-run interactive theme without changing saved settings.
• Adds `defaultTools` setting for configuring the initial built-in tool selection globally or per project.
• Adds `expandPromptTemplates` option to the extension pi.sendUserMessage() API for explicitly dispatching commands and expanding skills and prompt templates.
• Adds createGatewayBindingFetch() for routing Cloudflare AI Gateway requests through a Workers AI binding without an API token.
• Adds `AssistantMessage.endTurn` field to preserve OpenAI Codex&apos;s terminal `end_turn` signal for diagnostics.
• Adds `PI_EXPERIMENTAL=1` environment variable to enable experimental strict JSON-schema constrained sampling for the default `read`, `bash`, `edit`, and `write` tools.
• Adds `PI_TUI_ESC_TIMEOUT` environment variable to tune Escape-input timeout for high-latency terminals (e.g. over SSH).
• Adds fullscreen transcript search with `Ctrl+Shift+F`, incremental match highlighting, configurable search match theme colors, and next/previous navigation via `Enter`/`Ctrl+G` and `Shift+Enter`/`Ctrl+Shift+G`.
• Adds a fullscreen exit output setting to choose between printing the final transcript and printing only a session resume hint.
• Adds unbound single-line transcript scrolling actions for fullscreen mode.
• Documents the `AI_AGENT=pi` process marker and how it differs from `PI_CODING_AGENT=true`.</description>
    </item>
    <item>
      <title>Pi v0.84.2</title>
      <link>https://github.com/earendil-works/pi/releases/tag/v0.84.2</link>
      <guid isPermaLink="true">https://github.com/earendil-works/pi/releases/tag/v0.84.2</guid>
      <pubDate>Fri, 14 Aug 2026 10:14:32 GMT</pubDate>
      <description>Pi v0.84.2 adds fullscreen transcript search, configurable default tools, a new --use-theme flag, and Cloudflare AI Gateway binding support.
• Adds `--use-theme &lt;name[/name]&gt;` CLI flag to select a per-run interactive theme without changing saved settings.
• Adds `defaultTools` setting for configuring the initial built-in tool selection globally or per project.
• Adds `expandPromptTemplates` option to extension pi.sendUserMessage() for explicitly dispatching commands and expanding skills and prompt templates.
• Adds createGatewayBindingFetch() for routing Cloudflare AI Gateway requests through a Workers AI binding without an API token.
• Adds `AssistantMessage.endTurn` to preserve OpenAI Codex&apos;s terminal `end_turn` signal for diagnostics.
• Adds `PI_EXPERIMENTAL=1` to enable experimental strict JSON-schema constrained sampling for the default `read`, `bash`, `edit`, and `write` tools.
• Adds `PI_TUI_ESC_TIMEOUT` environment variable to tune Escape input timeout for high-latency terminals (e.g. over SSH).
• Adds fullscreen transcript search triggered by `Ctrl+Shift+F`, with incremental match highlighting, configurable search match theme colors, and next/previous navigation via `Enter`/`Ctrl+G` and `Shift+Enter`/`Ctrl+Shift+G`.
• Adds a fullscreen exit output setting to choose between printing the final transcript and showing only a session resume hint.
• Adds unbound single-line transcript scrolling actions for fullscreen mode.</description>
    </item>
    <item>
      <title>Pi v0.84.1</title>
      <link>https://github.com/earendil-works/pi/releases/tag/v0.84.1</link>
      <guid isPermaLink="true">https://github.com/earendil-works/pi/releases/tag/v0.84.1</guid>
      <pubDate>Fri, 07 Aug 2026 06:07:00 GMT</pubDate>
      <description>Pi v0.84.1 adds `pi auth check` for credential preflight, Qwen Token Plan Individual provider, and extension `terminate` support for tool call batches.
• Adds `pi auth check` subcommand to verify provider or model credentials before a run, with optional output of the resolved credential.
• Adds Qwen Token Plan Individual as a built-in provider, using the shared international `QWEN_TOKEN_PLAN_API_KEY` environment variable and its documented subscription model catalog.
• Adds `terminate` support to blocked extension `tool_call` event handlers, allowing all-terminating batches to skip the automatic follow-up model call.
• Adds half-page transcript scrolling actions (unbound keybindings) for the TUI fullscreen viewport.
• Adds word/whitespace double-click selection, granularity-aware drag selection, and triple-click paragraph selection in fullscreen mode.</description>
    </item>
    <item>
      <title>Pi v0.84.1</title>
      <link>https://github.com/earendil-works/pi/releases/tag/v0.84.1</link>
      <guid isPermaLink="true">https://github.com/earendil-works/pi/releases/tag/v0.84.1</guid>
      <pubDate>Fri, 07 Aug 2026 06:07:00 GMT</pubDate>
      <description>Pi v0.84.1 adds `pi auth check` for credential preflight, Qwen Token Plan Individual provider, and `terminate` support for blocked tool call events.
• Adds `pi auth check` subcommand to verify provider or model credentials before a run, with optional output of the resolved credential.
• Adds Qwen Token Plan Individual as a built-in provider, using the shared international `QWEN_TOKEN_PLAN_API_KEY` environment variable and its documented subscription model catalog.
• Adds `terminate` support to blocked extension `tool_call` event handlers, allowing all-terminating batches to skip the automatic follow-up model call.
• Adds double-click word selection, granularity-aware drag selection, and triple-click paragraph selection in fullscreen TUI mode.
• Adds unbound half-page transcript scrolling actions for fullscreen TUI mode, configurable via keybindings.</description>
    </item>
    <item>
      <title>Pi v0.84.0</title>
      <link>https://github.com/earendil-works/pi/releases/tag/v0.84.0</link>
      <guid isPermaLink="true">https://github.com/earendil-works/pi/releases/tag/v0.84.0</guid>
      <pubDate>Thu, 06 Aug 2026 11:07:05 GMT</pubDate>
      <description>Pi v0.84.0 adds fullscreen TUI, Mermaid/LaTeX rendering, per-directory context overrides, Baseten provider, and custom sampling params.
• Adds `--tui-mode fullscreen` CLI flag and `/settings` toggle for fullscreen TUI mode with a sticky editor, independently scrollable transcript, and draggable scrollbar configurable via `auto`, `always`, or `hidden` modes.
• Adds `AGENTS.override.md` per-directory context file that replaces `AGENTS.md` or `CLAUDE.md` in the same directory while preserving context from parent directories.
• Adds arbitrary OpenAI-compatible model sampling parameters via `samplingParams` in `models.json`, model overrides, extension providers, and stream options.
• Adds opt-in vLLM `thinking_token_budget` support for OpenAI-compatible models, reserving output tokens for the final answer.
• Adds built-in Baseten provider support authenticated via `BASETEN_API_KEY` environment variable, with `zai-org/GLM-5.2` as the default model.
• Adds `AI_AGENT=pi` to CLI and RPC child-process environments for generic agent attribution.
• Adds support for OpenAI-compatible streams that omit `finish_reason`, using `compat.supportsFinishReason` to infer normal and tool-use stops.
• Adds chainable pi.registerMarkdownTransformer() hooks for display-only transformation of user and assistant Markdown.
• Adds configurable Mermaid diagram rendering as themed Unicode in interactive transcripts, including optional rendering while streaming.
• Adds terminal-friendly Unicode rendering for LaTeX expressions in Markdown transcripts.
• Adds opt-in `Ctrl+P`/`Ctrl+N` prompt history navigation in the TUI editor.
• Adds experimental remote-session client APIs: the transport-neutral `PiClient`, CBOR protocol, Unix-socket transport, and `@earendil-works/pi-coding-agent/client` `RemoteSession` controller with transcript reducers.
• Adds vendor-neutral telemetry contracts with agent-owned typed AI-request and harness schemas, composed span starters, and callback helpers.
• Adds structured Amazon Bedrock failure diagnostics including HTTP status, modeled error code, and AWS request ID.
• Adds `CredentialSynchronizationError` for credential changes that commit successfully but fail to synchronize local model state.
Breaking changes:
• The `ModelsStreamTransforms` interface is renamed to `ModelsRequestTransforms`; extensions referencing the old name will break.
• JSON and RPC `message_update` events now emit only `assistantMessageEvent` deltas; the cumulative `message` and `assistantMessageEvent.partial` fields are removed. Clients must assemble deltas between `message_start` and `message_end`.
• ModelRegistry.getApiKeyAndHeaders() now returns `ProviderHeaders` with `string | null` values; extensions that inspect returned headers must handle `null`.
• ModelRegistry.refresh() now accepts `ModelsRefreshOptions` and returns `ModelsRefreshResult` instead of discarding cancellation and provider errors.
• ModelRuntime.setRuntimeApiKey() now accepts auth cancellation options instead of catalog refresh options; call refresh({ providers: [providerId], signal }) separately when remote freshness is required.
• Config-form extension OAuth refreshToken(credentials, signal) callbacks are now required to accept and honor a concrete abort signal.
• Dynamic provider refresh context store access is replaced with the read-only `context.stored` snapshot and generation-checked context.publish() transaction; handwritten Provider.refreshModels() implementations must be migrated.
• The legacy JSONL and in-memory repository APIs are removed; use pi-agent-core&apos;s v4 `JsonlSessionRepo` or `InMemorySessionRepo` implementing the new `SessionRepo` contract.
• Custom harness file-system implementations must now provide FileSystem.renameFile() with same-filesystem replacement semantics.
• `RemoteSession.sessions` no longer exposes runtime phase, model, thinking, attachment, or lock state; this information is now only available from acquired `SessionSnapshot` values.
• The v2 session and `AgentHarness` API experimental subpaths are removed; use pi-agent-core&apos;s default export instead.
• The `Session`, `SessionStorage`, and `SessionRepo` APIs are replaced with v4 lane-based versions including durable operation records, global facts, shared sequence numbers, and tree-scoped lane views.</description>
    </item>
    <item>
      <title>Pi v0.84.0</title>
      <link>https://github.com/earendil-works/pi/releases/tag/v0.84.0</link>
      <guid isPermaLink="true">https://github.com/earendil-works/pi/releases/tag/v0.84.0</guid>
      <pubDate>Thu, 06 Aug 2026 11:07:05 GMT</pubDate>
      <description>Pi v0.84.0 adds fullscreen TUI, Mermaid/LaTeX rendering, per-directory context overrides, custom sampling params, and a Baseten provider.
• Adds `--tui-mode fullscreen` CLI flag and `/settings` toggle to switch between regular and fullscreen TUI modes at runtime, with a sticky editor/footer dock and independently scrollable transcript.
• Adds configurable transcript scrollbar in fullscreen mode with `auto`, `always`, and `hidden` modes via `/settings`; `always` reserves the rightmost column.
• Adds per-directory `AGENTS.override.md` context files that replace `AGENTS.md` or `CLAUDE.md` in the same directory while preserving context from other directories.
• Adds arbitrary OpenAI-compatible sampling parameters through `samplingParams` in `models.json`, model overrides, extension providers, and stream options.
• Adds opt-in vLLM `thinking_token_budget` support for OpenAI-compatible models, reserving output tokens for the final answer.
• Adds built-in Baseten provider with `BASETEN_API_KEY` authentication and `zai-org/GLM-5.2` as the default model.
• Adds `AI_AGENT=pi` to CLI and RPC child-process environments for generic agent attribution.
• Adds `compat.supportsFinishReason` setting for OpenAI-compatible streams that omit `finish_reason`, inferring normal and tool-use stops when the stream ends.
• Adds optional `scrollbarThumb` theme color for fullscreen scrollbar thumbs, falling back to `selectedBg`.
• Adds opt-in `Ctrl+P`/`Ctrl+N` prompt history navigation with explicit history bindings that take precedence over application shortcuts while the editor is focused.
• Adds chainable pi.registerMarkdownTransformer() extension hooks for display-only transformation of user and assistant Markdown.
• Adds experimental remote-session client APIs: transport-neutral `PiClient`, CBOR protocol, Unix-socket transport, and `@earendil-works/pi-coding-agent/client` `RemoteSession` controller with transcript reducers.
• Adds configurable themed Unicode rendering for Mermaid diagrams in interactive messages, including optional rendering while streaming.
• Adds terminal-friendly Unicode rendering for LaTeX expressions in Markdown.
• Adds structured Amazon Bedrock failure diagnostics including HTTP status, modeled error code, and AWS request ID.
• Adds vendor-neutral telemetry contracts with agent-owned typed AI-request and harness schemas, composed span starters, and callback helpers.
• Adds `CredentialSynchronizationError` for credential changes that commit successfully but fail to synchronize local model state.
• Adds page scrolling and marked-message navigation shortcuts to fullscreen mode.
• Adds stacked transient notifications in fullscreen mode.
Breaking changes:
• The `ModelsStreamTransforms` interface is renamed to `ModelsRequestTransforms`; extensions referencing `ModelsStreamTransforms` must update to `ModelsRequestTransforms`.
• JSON and RPC `message_update` events now emit only `assistantMessageEvent` deltas; the cumulative `message` and `assistantMessageEvent.partial` fields are removed. Clients must assemble deltas between `message_start` and `message_end`.
• ModelRegistry.getApiKeyAndHeaders() now returns `ProviderHeaders` with `string | null` values; extensions that inspect returned headers must handle `null`, and those forwarding headers to pi-ai streams should pass `null` through unchanged.
• ModelRegistry.refresh() now accepts `ModelsRefreshOptions` and returns `ModelsRefreshResult` instead of discarding cancellation and provider errors.
• ModelRuntime.setRuntimeApiKey() now accepts auth cancellation options instead of catalog refresh options; call refresh({ providers: [providerId], signal }) separately when remote freshness is required.
• Config-form extension OAuth refreshToken(credentials, signal) callbacks must now accept and honor a concrete abort signal.
• Dynamic provider refresh context store access is replaced with the read-only `context.stored` snapshot and generation-checked context.publish() transaction. Handwritten Provider.refreshModels() implementations must migrate from context.store.read()/context.store.write() to `context.stored` and context.publish({ persist: ... }).
• The pi-agent-core harness session model is replaced with the v4 lane-based `Session`, `SessionStorage`, and `SessionRepo` APIs; legacy JSONL and in-memory repository APIs are removed. Use `JsonlSessionRepo` or `InMemorySessionRepo` implementing the new `SessionRepo` contract.
• The v2 session and `AgentHarness` API experimental subpaths are removed; they are now promoted to pi-agent-core&apos;s default export.
• Custom harness file-system implementations must now provide FileSystem.renameFile() with same-filesystem replacement semantics.
• `RemoteSession.sessions` no longer exposes runtime phase, model, thinking, attachment, or lock state (previously available as list summaries); that data is now available only from acquired `SessionSnapshot` values via the durable `SessionMetadata` API.</description>
    </item>
    <item>
      <title>Pi v0.83.0</title>
      <link>https://github.com/earendil-works/pi/releases/tag/v0.83.0</link>
      <guid isPermaLink="true">https://github.com/earendil-works/pi/releases/tag/v0.83.0</guid>
      <pubDate>Wed, 29 Jul 2026 22:30:33 GMT</pubDate>
      <description>Pi v0.83.0 adds credential export commands, headless OpenRouter sign-in, and Claude Opus 5 on GitHub Copilot.
• Adds `pi auth print-api-key` and `pi auth print-bearer-token` commands to export configured credentials to external clients, with automatic OAuth refresh and minimum-validity enforcement.
• Adds support for manual redirect URL and authorization-code entry during `pi auth` login on OpenRouter, enabling headless and SSH-remote sign-in when the loopback callback is unavailable.
• Adds the `&apos;pending&apos;` stop reason for partial streaming messages in the custom provider stream pattern.
• Adds per-request `fetch` injection for supported text and image provider transports.
• Adds Claude Opus 5 support via GitHub Copilot with adaptive thinking and a 1M context window.
Breaking changes:
• TypeBox aliases upgraded to 1.3.7, removing `Type.Base`, `Type.Awaited`, `Type.Promise`, `Type.AsyncIterator`, `Type.Iterator`, `Type.Options`, and `Value.Mutate`; extensions using these APIs must migrate to supported TypeBox APIs.</description>
    </item>
    <item>
      <title>Pi v0.83.0</title>
      <link>https://github.com/earendil-works/pi/releases/tag/v0.83.0</link>
      <guid isPermaLink="true">https://github.com/earendil-works/pi/releases/tag/v0.83.0</guid>
      <pubDate>Wed, 29 Jul 2026 22:30:33 GMT</pubDate>
      <description>Pi v0.83.0 adds credential export commands, headless OpenRouter login, and Claude Opus 5 on GitHub Copilot.
• Adds `pi auth print-api-key` and `pi auth print-bearer-token` commands to export configured credentials to external clients, with automatic OAuth refresh and minimum-validity enforcement.
• Adds manual redirect URL and authorization-code entry to OpenRouter login via `/login` for remote and headless (SSH) environments where the loopback callback is unavailable.
• Adds Claude Opus 5 support through GitHub Copilot with adaptive thinking and a 1M context window.
• Adds inherited per-request `fetch` injection for supported text and image provider transports.
• Adds the `&quot;pending&quot;` stop reason for partial streaming messages in the custom provider stream pattern.
Breaking changes:
• TypeBox aliases upgraded to 1.3.7 removes deprecated APIs `Type.Base`, `Type.Awaited`, `Type.Promise`, `Type.AsyncIterator`, `Type.Iterator`, `Type.Options`, and `Value.Mutate` — extensions using any of these must migrate to supported TypeBox APIs.</description>
    </item>
    <item>
      <title>Pi v0.82.1</title>
      <link>https://github.com/earendil-works/pi/releases/tag/v0.82.1</link>
      <guid isPermaLink="true">https://github.com/earendil-works/pi/releases/tag/v0.82.1</guid>
      <pubDate>Sat, 25 Jul 2026 12:47:23 GMT</pubDate>
      <description>Pi v0.82.1 adds Claude Opus 5 on Anthropic and Bedrock, bearer auth via `ANTHROPIC_AUTH_TOKEN`, and faster model catalog refreshes.
• Adds `ANTHROPIC_AUTH_TOKEN` environment variable for bearer auth (`Authorization: Bearer`) against Anthropic-compatible gateways, covering compaction and branch summaries.
• Exposes the `outputPad` setting to custom message renderers in extensions.
• Adds Claude Opus 5 support on Anthropic and Amazon Bedrock with adaptive thinking (including `xhigh` level), inference profiles, and prompt caching.
• pi.dev model catalogs now revalidate using `If-None-Match`, so unchanged providers return a `304` instead of a full download.</description>
    </item>
    <item>
      <title>Pi v0.82.1</title>
      <link>https://github.com/earendil-works/pi/releases/tag/v0.82.1</link>
      <guid isPermaLink="true">https://github.com/earendil-works/pi/releases/tag/v0.82.1</guid>
      <pubDate>Sat, 25 Jul 2026 12:47:23 GMT</pubDate>
      <description>Pi v0.82.1 adds Claude Opus 5 on Anthropic and Bedrock, ANTHROPIC_AUTH_TOKEN bearer auth for compatible gateways, and faster model catalog revalidation.
• Adds `ANTHROPIC_AUTH_TOKEN` environment variable to authenticate against Anthropic-compatible gateways using `Authorization: Bearer`, including compaction and branch summaries.
• Adds Claude Opus 5 support on Anthropic and Amazon Bedrock with adaptive thinking (including `xhigh` level), inference profiles, and prompt caching.
• Exposes the `outputPad` setting to custom message renderers in extensions.
• Pi.dev model catalogs now revalidate using `If-None-Match`, so unchanged provider catalogs return an empty `304` response instead of a full download.
• llama.cpp models now persist across restarts, staying listed in the catalog before the first successful refresh.</description>
    </item>
    <item>
      <title>Pi v0.82.0</title>
      <link>https://github.com/earendil-works/pi/releases/tag/v0.82.0</link>
      <guid isPermaLink="true">https://github.com/earendil-works/pi/releases/tag/v0.82.0</guid>
      <pubDate>Fri, 24 Jul 2026 06:12:16 GMT</pubDate>
      <description>Pi v0.82.0 adds constrained tool sampling, OAuth login for OpenRouter and Kimi Code, and session-aware streaming bash integrations.
• Adds `Tool.constrainedSampling` with `prefer`/`require` modes for strict JSON Schema sampling and OpenAI Lark/regex grammar variants, gated by `supportsStrictTools` and `supportsGrammarTools` capability flags, across OpenAI, Anthropic, Amazon Bedrock, Google Gemini, and Mistral.
• Exposes `PI_SESSION_ID`, `PI_SESSION_FILE`, `PI_PROVIDER`, `PI_MODEL`, and `PI_REASONING_LEVEL` as environment variables to commands run by built-in and factory-created bash tools.
• Adds streaming `bash_execution_update` RPC events for direct RPC bash commands, correlated with request IDs.
• Adds OpenRouter OAuth PKCE login via `/login`, minting a user-controlled API key without manual configuration.
• Adds Kimi Code subscription OAuth login for the Kimi For Coding provider via `/login`, including device authorization and automatic token refresh.</description>
    </item>
    <item>
      <title>Pi v0.82.0</title>
      <link>https://github.com/earendil-works/pi/releases/tag/v0.82.0</link>
      <guid isPermaLink="true">https://github.com/earendil-works/pi/releases/tag/v0.82.0</guid>
      <pubDate>Fri, 24 Jul 2026 06:12:16 GMT</pubDate>
      <description>Pi v0.82.0 adds constrained tool sampling, OAuth login for OpenRouter and Kimi Code, and session-aware streaming bash integrations.
• Exposes `PI_SESSION_ID`, `PI_SESSION_FILE`, `PI_PROVIDER`, `PI_MODEL`, and `PI_REASONING_LEVEL` environment variables to commands run by built-in and factory-created bash tools, enabling scripts to introspect the active session and model.
• Adds streaming `bash_execution_update` RPC events for direct RPC bash commands, correlated with request IDs, so callers can consume incremental output as it arrives.
• Adds `Tool.constrainedSampling` with `prefer`/`require` strict JSON Schema modes and OpenAI Lark/regex grammar variants, supported across OpenAI, Anthropic, Amazon Bedrock, Google Gemini, and Mistral.
• Adds `supportsGrammarTools` and `supportsStrictTools` model capability flags to gate constrained sampling and prevent unsupported requests.
• Adds OAuth PKCE login for OpenRouter via `/login`, minting a user-controlled API key without manual key configuration.
• Adds Kimi Code subscription OAuth login for the Kimi For Coding provider via `/login`, including device authorization and automatic token refresh.</description>
    </item>
    <item>
      <title>Pi v0.81.1</title>
      <link>https://github.com/earendil-works/pi/releases/tag/v0.81.1</link>
      <guid isPermaLink="true">https://github.com/earendil-works/pi/releases/tag/v0.81.1</guid>
      <pubDate>Tue, 21 Jul 2026 16:45:17 GMT</pubDate>
      <description>Pi v0.81.1 adds verifiable release source archives and exposes retry lifecycle events for compaction across all consumer types.
• Exposes retry lifecycle events — `summarization_retry_scheduled`, `summarization_retry_attempt_start`, and `summarization_retry_finished` — to interactive, JSON, RPC, and SDK consumers when compaction or branch summarization retries transient provider failures.
• Adds deterministic, checksummed source archives to GitHub releases with documented instructions for rebuilding standalone binaries.</description>
    </item>
    <item>
      <title>Pi v0.81.1</title>
      <link>https://github.com/earendil-works/pi/releases/tag/v0.81.1</link>
      <guid isPermaLink="true">https://github.com/earendil-works/pi/releases/tag/v0.81.1</guid>
      <pubDate>Tue, 21 Jul 2026 16:45:17 GMT</pubDate>
      <description>Pi v0.81.1 adds checksummed source archives for reproducible binary builds and retry lifecycle events for compaction and branch summarization.
• Adds `./scripts/build-binaries.sh` with `--offline-model-data`, `--platform`, `--out`, `--skip-install`, and `--skip-deps` flags for rebuilding standalone binaries from release source archives.
• GitHub releases now include versioned source archives (`pi-&lt;release-version&gt;-source.tar.gz`) covered by a `SHA256SUMS` file, enabling deterministic, checksummed reproduction of official binaries.
• Exposes retry lifecycle events (`summarization_retry_scheduled`, `summarization_retry_attempt_start`, `summarization_retry_finished`) for compaction and branch summarization to interactive, JSON, RPC, and SDK consumers.</description>
    </item>
    <item>
      <title>Pi v0.81.0</title>
      <link>https://github.com/earendil-works/pi/releases/tag/v0.81.0</link>
      <guid isPermaLink="true">https://github.com/earendil-works/pi/releases/tag/v0.81.0</guid>
      <pubDate>Tue, 21 Jul 2026 13:34:03 GMT</pubDate>
      <description>Pi v0.81.0 adds local llama.cpp model management, full provider extensions, Qwen Token Plan support, and expanded usage accounting.
• Adds `/login` command for llama.cpp router connection setup and `/llama` subcommand for Hugging Face model search, download, explicit load, unload, and live progress tracking.
• Adds `get_available_thinking_levels` RPC command and RpcClient.getAvailableThinkingLevels() method for querying model thinking-level options.
• Adds full provider extension registration, allowing extensions to supply complete pi-ai providers with native authentication, model refresh, filtering, and custom streaming behavior.
• Adds Qwen Token Plan and Qwen Token Plan China as built-in providers with regional endpoints and API-key authentication.
• Exports message and tool execution lifecycle event types from the package root for downstream consumers.
• Expands usage accounting to persist and include tool, compaction, and branch-summary usage in session totals, footer totals, and session statistics.</description>
    </item>
    <item>
      <title>Pi v0.81.0</title>
      <link>https://github.com/earendil-works/pi/releases/tag/v0.81.0</link>
      <guid isPermaLink="true">https://github.com/earendil-works/pi/releases/tag/v0.81.0</guid>
      <pubDate>Tue, 21 Jul 2026 13:34:03 GMT</pubDate>
      <description>Pi v0.81.0 adds local llama.cpp model management, full provider extensions, Qwen Token Plan providers, and expanded usage accounting.
• Adds built-in llama.cpp router support with `/login` for connection setup and `/llama` for Hugging Face model search, download, explicit load/unload, and live progress.
• Adds `get_available_thinking_levels` RPC command and RpcClient.getAvailableThinkingLevels() method for querying supported thinking levels at runtime.
• Adds extension registration for complete pi-ai providers, including native authentication, model refresh, filtering, and custom streaming behavior.
• Adds Qwen Token Plan and Qwen Token Plan China as built-in providers with regional endpoints and API-key authentication.
• Exports message and tool execution lifecycle event types from the package root.
• Persists and includes tool, compaction, and branch-summary usage in session totals, footer, and session statistics.</description>
    </item>
    <item>
      <title>Pi v0.80.10</title>
      <link>https://github.com/earendil-works/pi/releases/tag/v0.80.10</link>
      <guid isPermaLink="true">https://github.com/earendil-works/pi/releases/tag/v0.80.10</guid>
      <pubDate>Thu, 16 Jul 2026 22:05:11 GMT</pubDate>
      <description>Pi v0.80.10 adds Kimi Coding adaptive thinking support with `max` level and empty-signature thinking block replay for K3.
• Kimi Coding models now use adaptive thinking correctly; K3 exposes its supported `max` thinking level and supports replaying empty-signature thinking blocks.</description>
    </item>
    <item>
      <title>Pi v0.80.9</title>
      <link>https://github.com/earendil-works/pi/releases/tag/v0.80.9</link>
      <guid isPermaLink="true">https://github.com/earendil-works/pi/releases/tag/v0.80.9</guid>
      <pubDate>Thu, 16 Jul 2026 17:23:36 GMT</pubDate>
      <description>Pi v0.80.9 adds Kimi K3 support across built-in providers with deferred tool loading via Kimi&apos;s native protocol.
• Adds `kimi-deferred-tools.ts` example demonstrating extension-driven deferred tool activation through Kimi&apos;s native protocol for progressive tool loading.
• Adds Kimi K3 model support across Kimi Coding, Moonshot AI, Moonshot AI China, OpenRouter, and Vercel AI Gateway providers.
• Changes default xAI model to Grok 4.5 with a prefilled device-authorization link labeled &apos;Sign in with SuperGrok or X Premium&apos;.
Breaking changes:
• Grok 3, Grok 3 Fast, Grok 4.20 variants, and Grok Code Fast 1 are removed from the built-in xAI model catalog — any configuration referencing these models will break on upgrade.</description>
    </item>
    <item>
      <title>Pi v0.80.8</title>
      <link>https://github.com/earendil-works/pi/releases/tag/v0.80.8</link>
      <guid isPermaLink="true">https://github.com/earendil-works/pi/releases/tag/v0.80.8</guid>
      <pubDate>Thu, 16 Jul 2026 14:40:41 GMT</pubDate>
      <description>Pi v0.80.8 adds unified model auth via ModelRuntime, `pi update --models`, and xAI Grok 4.5 with device-code OAuth.
• Adds `pi update --models` CLI flag to force an immediate model catalog refresh without updating pi or extensions.
• Adds `ModelRuntime` as the canonical async SDK facade; ModelRuntime.create() accepts any pi-ai `CredentialStore` via its `credentials` option, and ModelRuntime.getAuth() handles provider-scoped and model-scoped request auth assembly.
• Adds `/login` discovery directly from registered pi-ai providers, exposing ambient auth status and informational links per provider.
• Adds file-backed dynamic model catalogs stored in `models-store.json`, with per-provider pi.dev catalog overlays and Radius gateway support.
• Adds refreshModels(context) hook for extensions to perform dynamic model discovery with optional provider-controlled persistence.
• Adds xAI device-code OAuth login and Grok 4.5 OpenAI Responses support, with `low`, `medium`, and `high` thinking levels.
• Updates `/model` to render the current model snapshot immediately and refresh configured providers in the background, surfacing partial results or timeout errors in the open selector.
Breaking changes:
• `CreateAgentSessionOptions.authStorage` and `modelRegistry` options are replaced by the async `modelRuntime` option; `AuthStorage` and its storage backends are no longer exported — use `ModelRuntime`, a custom pi-ai `CredentialStore`, or readStoredCredential() for one-off reads of `auth.json`.
• ModelRuntime.getAll(), find(), getSnapshot(), and getAuthOptions() are removed; use the pi-ai `Models` methods getModels(), getModel(), getProviders(), and checkAuth() directly.
• Request-auth assembly via ModelRegistry.getApiKeyAndHeaders() is replaced by ModelRuntime.getAuth(); passing a provider ID returns provider-scoped auth, passing a model also resolves built-in, `models.json`, and extension model headers.
• ModelRegistry.refresh() changed from synchronous `void` to `Promise&lt;void&gt;`; extensions must `await` it before making synchronous registry reads.</description>
    </item>
    <item>
      <title>Pi v0.80.7</title>
      <link>https://github.com/earendil-works/pi/releases/tag/v0.80.7</link>
      <guid isPermaLink="true">https://github.com/earendil-works/pi/releases/tag/v0.80.7</guid>
      <pubDate>Tue, 14 Jul 2026 16:41:53 GMT</pubDate>
      <description>Pi v0.80.7 adds cache-friendly dynamic tool loading, Fable 5 xhigh/max thinking, Ctrl+X message copy, and toolChoice for OpenAI/Codex Responses.
• Adds cache-friendly dynamic tool loading: extensions can inject tools during execution while Anthropic and OpenAI Responses models preserve prompt-cache prefixes.
• Adds `Ctrl+X` shortcut to copy the last assistant message or the selected message in `/tree`, enabling direct copying of branched and historical messages.
• Adds native `xhigh` and `max` thinking levels for Claude Fable 5 across all generated provider catalogs.
• Adds `toolChoice` support (including required and named tool selection) for OpenAI and Codex Responses providers.
Breaking changes:
• The `compat.sendSessionIdHeader` flag has been removed from `models.json` for `openai-responses`. Replace `sendSessionIdHeader: false` with `sessionAffinityFormat: &quot;openai-nosession&quot;` (other values: `&quot;openai&quot;`, `&quot;openrouter&quot;`).</description>
    </item>
    <item>
      <title>Pi v0.80.6</title>
      <link>https://github.com/earendil-works/pi/releases/tag/v0.80.6</link>
      <guid isPermaLink="true">https://github.com/earendil-works/pi/releases/tag/v0.80.6</guid>
      <pubDate>Thu, 09 Jul 2026 23:22:08 GMT</pubDate>
      <description>Pi v0.80.6 adds a `max` thinking level above `xhigh` and input-based pricing tiers for accurate long-context cost accounting.
• Adds `max` thinking level (above `xhigh`) for GPT-5.6 and adaptive Claude models, available via `--thinking max` in the CLI, SDK, RPC, and model selection; custom themes can define `thinkingMax`.
• Adds request-wide input-token pricing tiers for accurate long-context cost accounting (e.g. GPT-5.4/5.5/5.6 rates), configurable for custom models via `models.json` and `modelOverrides`.
• Supports `~` (home directory) expansion for the `shellPath` setting.</description>
    </item>
    <item>
      <title>Pi v0.80.3</title>
      <link>https://github.com/earendil-works/pi/releases/tag/v0.80.3</link>
      <guid isPermaLink="true">https://github.com/earendil-works/pi/releases/tag/v0.80.3</guid>
      <pubDate>Tue, 30 Jun 2026 20:34:32 GMT</pubDate>
      <description>Pi v0.80.3 adds Claude Sonnet 5, Azure Foundry endpoints, RPC session inspection, and new UI/editor settings.
• Adds Claude Sonnet 5 support via Anthropic-compatible and Bedrock provider catalogs with adaptive thinking enabled.
• Adds `get_entries` and `get_tree` RPC commands for inspecting session entries and tree snapshots over RPC.
• Adds a `./rpc-entry` package export for launching Pi directly in RPC mode.
• Adds `session_info_changed` extension event so extensions can observe session name changes.
• Adds Azure OpenAI Responses provider support for modern Microsoft Foundry endpoint URLs.
• Adds `Usage.reasoning` token counts for providers that report reasoning/thinking token usage.
• Adds `externalEditor` setting to configure the editor invoked by Ctrl+G before `$VISUAL`/`$EDITOR` fallbacks.
• Adds `outputPad` setting to control horizontal padding for user messages, assistant messages, and thinking blocks.
• Changes the default OpenAI model to `gpt-5.5`.</description>
    </item>
    <item>
      <title>Pi v0.80.0</title>
      <link>https://github.com/earendil-works/pi/releases/tag/v0.80.0</link>
      <guid isPermaLink="true">https://github.com/earendil-works/pi/releases/tag/v0.80.0</guid>
      <pubDate>Tue, 23 Jun 2026 17:32:23 GMT</pubDate>
      <description>Pi v0.80.0 adds Ctrl+J as a newline shortcut and restructures the pi-ai extension API around a new provider-factory model.
• Adds `Ctrl+J` as a default newline keybinding alongside `Shift+Enter`.
• Renames the `zai` provider label to &apos;ZAI Coding Plan (Global)&apos; for clarity in the provider list.
Breaking changes:
• The `@earendil-works/pi-ai/base` and `@earendil-works/pi-agent-core/base` entrypoints have been removed; use the root packages with explicit `Models` provider factories instead.
• The pi-ai global API (`stream`/`complete`/`completeSimple`, `getModel`/`getModels`/`getProviders`, `registerApiProvider`, `getEnvApiKey`, …) has moved off the `@earendil-works/pi-ai` root entrypoint to `@earendil-works/pi-ai/compat`; extension sources that typecheck against pi-ai&apos;s published types must switch those imports to `@earendil-works/pi-ai/compat` or migrate to the new createModels()/provider-factory API (the compat entrypoint and loader alias will be removed in a future release).</description>
    </item>
    <item>
      <title>Pi v0.79.10</title>
      <link>https://github.com/earendil-works/pi/releases/tag/v0.79.10</link>
      <guid isPermaLink="true">https://github.com/earendil-works/pi/releases/tag/v0.79.10</guid>
      <pubDate>Mon, 22 Jun 2026 09:16:23 GMT</pubDate>
      <description>Pi v0.79.10 adds compaction event context for extensions and a more predictable `pi update` flow.
• Adds `reason` and `willRetry` fields to `session_before_compact` and `session_compact` extension events, letting extensions distinguish manual `/compact`, threshold auto-compaction, and overflow retry flows.
• Enhances `pi update` to install the exact checked Pi version and display the changelog URL in update notices for more predictable upgrades.</description>
    </item>
    <item>
      <title>Pi v0.79.9</title>
      <link>https://github.com/earendil-works/pi/releases/tag/v0.79.9</link>
      <guid isPermaLink="true">https://github.com/earendil-works/pi/releases/tag/v0.79.9</guid>
      <pubDate>Sat, 20 Jun 2026 20:17:09 GMT</pubDate>
      <description>Pi v0.79.9 adds chat-template thinking support for vLLM/Hugging Face models like DeepSeek via OpenAI-compatible providers.
• Supports `chat_template_kwargs`-based thinking controls for OpenAI-compatible custom providers, enabling vLLM/Hugging Face chat-template models (e.g. DeepSeek) to use provider-native thinking levels.</description>
    </item>
    <item>
      <title>Pi v0.79.8</title>
      <link>https://github.com/earendil-works/pi/releases/tag/v0.79.8</link>
      <guid isPermaLink="true">https://github.com/earendil-works/pi/releases/tag/v0.79.8</guid>
      <pubDate>Fri, 19 Jun 2026 07:55:20 GMT</pubDate>
      <description>Pi v0.79.8 adds Mistral prompt caching, OpenRouter Fusion alias, post-compaction token estimates, and selective provider bundling.
• Supports Mistral provider-side prompt caching using the Pi session ID as `prompt_cache_key`, with cached-token usage and cost accounting.
• Adds `openrouter/fusion` as a built-in OpenRouter model alias.
• Adds estimated post-compaction token counts to compact results and compaction events so clients can display approximate context reduction.
• Adds `@earendil-works/pi-ai/base` and `@earendil-works/pi-agent-core/base` entry points enabling SDK users to register only the provider transports they need, reducing bundle size.</description>
    </item>
    <item>
      <title>Pi v0.79.7</title>
      <link>https://github.com/earendil-works/pi/releases/tag/v0.79.7</link>
      <guid isPermaLink="true">https://github.com/earendil-works/pi/releases/tag/v0.79.7</guid>
      <pubDate>Thu, 18 Jun 2026 16:23:49 GMT</pubDate>
      <description>Pi v0.79.7 adds automatic light/dark theme switching, Warp inline images, and new extension API helpers.
• Adds automatic theme mode in `/settings` — choose separate light and dark themes that follow terminal color-scheme changes in real time.
• Adds `pi update --all` flag; bare `pi update` now updates pi only, separating pi updates from extension updates.
• Adds inline image rendering for Warp terminal users via Kitty graphics detection.
• Exports edit diff helpers (`generateDiffString`, `generateUnifiedPatch`, `EditDiffResult`) from the public API for extensions that need edit-style diffs.
Breaking changes:
• Bare `pi update` now updates pi only; previously it updated pi and extensions together. Scripts or workflows expecting `pi update` to also update extensions must switch to `pi update --all`.
• `/` is now reserved in theme names for automatic light/dark theme settings; any existing theme name containing `/` may conflict with the new automatic mode.</description>
    </item>
    <item>
      <title>Pi v0.79.5</title>
      <link>https://github.com/earendil-works/pi/releases/tag/v0.79.5</link>
      <guid isPermaLink="true">https://github.com/earendil-works/pi/releases/tag/v0.79.5</guid>
      <pubDate>Tue, 16 Jun 2026 17:56:13 GMT</pubDate>
      <description>Pi v0.79.5 adds provider-scoped API key env overrides, a global HTTP proxy setting, and Vercel AI Gateway attribution headers.
• Adds provider-scoped `env` overrides in `auth.json` API key entries for Cloudflare, Azure OpenAI, Google Vertex, Amazon Bedrock, cache retention, and proxy settings — scoped to Pi without touching the project shell.
• Adds a global `httpProxy` setting that propagates `HTTP_PROXY` and `HTTPS_PROXY` to all Pi-managed HTTP clients.
• Adds `http-referer` and `x-title` attribution headers to Vercel AI Gateway requests by default.
• Adds an `xp` footer marker in the UI when experimental features are enabled.</description>
    </item>
    <item>
      <title>Pi v0.79.4</title>
      <link>https://github.com/earendil-works/pi/releases/tag/v0.79.4</link>
      <guid isPermaLink="true">https://github.com/earendil-works/pi/releases/tag/v0.79.4</guid>
      <pubDate>Mon, 15 Jun 2026 08:30:02 GMT</pubDate>
      <description>Pi v0.79.4 adds automatic dark/light theme detection on first run and SHA256 checksums for standalone binary verification.
• Adds automatic first-run theme selection: pi detects the terminal background and defaults to the `dark` or `light` theme.
• Adds `SHA256SUMS` integrity files to GitHub release assets for verifying standalone binary downloads.</description>
    </item>
    <item>
      <title>Pi v0.79.2</title>
      <link>https://github.com/earendil-works/pi/releases/tag/v0.79.2</link>
      <guid isPermaLink="true">https://github.com/earendil-works/pi/releases/tag/v0.79.2</guid>
      <pubDate>Fri, 12 Jun 2026 22:27:01 GMT</pubDate>
      <description>Pi v0.79.2 adds an experimental first-time setup flow with theme selection and opt-in analytics behind PI_EXPERIMENTAL=1.
• Adds experimental first-time setup flow (enabled via `PI_EXPERIMENTAL=1`) that prompts for dark/light theme choice and opt-in analytics, storing a `trackingId` in `settings.json`.</description>
    </item>
    <item>
      <title>Pi v0.79.1</title>
      <link>https://github.com/earendil-works/pi/releases/tag/v0.79.1</link>
      <guid isPermaLink="true">https://github.com/earendil-works/pi/releases/tag/v0.79.1</guid>
      <pubDate>Tue, 09 Jun 2026 21:16:30 GMT</pubDate>
      <description>Pi v0.79.1 adds Claude Fable 5 support, prompt template defaults, configurable project trust, and extension autocomplete triggers.
• Adds Claude Fable 5 model support on Anthropic and Amazon Bedrock providers, including adaptive thinking and `xhigh` effort.
• Supports default positional arguments in prompt templates, e.g. `${1:-7}` for optional values.
• New global `defaultProjectTrust` setting controls whether unresolved project trust asks, always trusts, or never trusts by default.
• Extensions can now inspect effective trust decisions via ctx.isProjectTrusted(), including temporary trust.
• Extension autocomplete providers can declare trigger characters (e.g. `#` or `$`) to surface suggestions without slash-command prefixes.
• Adds `areExperimentalFeaturesEnabled` feature guard for users to opt in to early features.</description>
    </item>
    <item>
      <title>Pi v0.79.0</title>
      <link>https://github.com/earendil-works/pi/releases/tag/v0.79.0</link>
      <guid isPermaLink="true">https://github.com/earendil-works/pi/releases/tag/v0.79.0</guid>
      <pubDate>Mon, 08 Jun 2026 15:17:33 GMT</pubDate>
      <description>Pi v0.79.0 adds project trust gating with --approve controls, extension-driven trust decisions, and cache-hit visibility in the footer.
• Adds project trust gating: Pi now prompts before loading project-local settings, resources, instructions, and packages, with `--approve` / `--no-approve` flags for non-interactive automation.
• Adds `project_trust` extension event so global and CLI extensions can decide, remember, or defer trust decisions before project-local resources load.
• Adds prompt cache hit rate (`CH`) display to the interactive footer for real-time cache visibility.
• Exports RPC extension UI request/response types and coding-agent package asset path helpers from the public SDK API.</description>
    </item>
    <item>
      <title>Pi v0.78.1</title>
      <link>https://github.com/earendil-works/pi/releases/tag/v0.78.1</link>
      <guid isPermaLink="true">https://github.com/earendil-works/pi/releases/tag/v0.78.1</guid>
      <pubDate>Thu, 04 Jun 2026 16:33:13 GMT</pubDate>
      <description>Pi v0.78.1 adds Ant Ling, NVIDIA NIM, and MiniMax-M3 provider support plus richer extension context APIs.
• Adds Ant Ling provider selection and setup support.
• Adds NVIDIA NIM provider selection, setup, and direct NIM request attribution headers.
• Adds MiniMax-M3 model support for the `minimax` and `minimax-cn` direct providers.
• Adds `ctx.mode` to extension contexts so extensions can distinguish TUI, RPC, JSON, and print modes.
• Adds ctx.getSystemPromptOptions() for extension commands to inspect current base system prompt inputs.
• Adds containerization documentation and a Gondolin extension example for routing built-in tools into a local micro-VM.</description>
    </item>
    <item>
      <title>Pi v0.78.0</title>
      <link>https://github.com/earendil-works/pi/releases/tag/v0.78.0</link>
      <guid isPermaLink="true">https://github.com/earendil-works/pi/releases/tag/v0.78.0</guid>
      <pubDate>Fri, 29 May 2026 23:49:12 GMT</pubDate>
      <description>Pi v0.78.0 adds named sessions, clickable file paths, custom Bedrock headers, and new extension APIs.
• Adds `--name` / `-n` flag to set a session display name at startup across interactive, print, JSON, and RPC modes.
• Adds OSC 8 `file://` hyperlinks to file paths in built-in file tool titles, including tmux clients that support them.
• Adds custom Amazon Bedrock request header support.
• Exports `convertToPng` for extension authors.
• Exports `parseArgs` and type `Args` for extension authors.
• Shows a resume command hint when exiting interactive sessions.</description>
    </item>
    <item>
      <title>Pi v0.77.0</title>
      <link>https://github.com/earendil-works/pi/releases/tag/v0.77.0</link>
      <guid isPermaLink="true">https://github.com/earendil-works/pi/releases/tag/v0.77.0</guid>
      <pubDate>Thu, 28 May 2026 22:21:08 GMT</pubDate>
      <description>Pi v0.77.0 adds selective tool disablement, headless Codex device-code login, streaming-aware extension input, and Claude Opus 4.8 support.
• Adds `--exclude-tools` / `-xt` flag to disable specific built-in, extension, or custom tools while keeping all others active.
• Adds device-code auth for headless ChatGPT Plus/Pro Codex subscription login via `/login`.
• Adds `InputEvent.streamingBehavior` so extensions can distinguish idle prompts, mid-stream steers, and queued follow-ups.
• Adds Claude Opus 4.8 model metadata and updated adaptive-thinking coverage for Anthropic.</description>
    </item>
    <item>
      <title>Pi v0.76.0</title>
      <link>https://github.com/earendil-works/pi/releases/tag/v0.76.0</link>
      <guid isPermaLink="true">https://github.com/earendil-works/pi/releases/tag/v0.76.0</guid>
      <pubDate>Wed, 27 May 2026 20:05:38 GMT</pubDate>
      <description>Pi v0.76.0 adds explicit session IDs for automation, RPC bash context exclusion, and configurable provider retry limits.
• Adds `--session-id &lt;id&gt;` flag to create or resume an exact project-local session, enabling deterministic session management in scripts and automation.
• Adds `excludeFromContext` flag to the RPC `bash` command so shell output can be kept out of the model&apos;s next prompt context.
• Introduces `retry.provider.maxRetries` setting to give explicit control over provider-level retries instead of relying on hidden SDK defaults.</description>
    </item>
    <item>
      <title>Pi v0.75.5</title>
      <link>https://github.com/earendil-works/pi/releases/tag/v0.75.5</link>
      <guid isPermaLink="true">https://github.com/earendil-works/pi/releases/tag/v0.75.5</guid>
      <pubDate>Sat, 23 May 2026 10:09:32 GMT</pubDate>
      <description>Pi v0.75.5 adds adaptive thinking for custom Anthropic-compatible providers and cleaner read tool UI.
• Adds `compat.forceAdaptiveThinking` option to custom Anthropic-compatible model configs to enable adaptive-thinking Claude behavior on third-party providers.
• Collapsed `read` tool cards now show only the read line by default; press `Ctrl+O` to expand full file content.
• Adds a standard unified patch to edit tool result details for SDK consumers.</description>
    </item>
    <item>
      <title>Pi v0.75.4</title>
      <link>https://github.com/earendil-works/pi/releases/tag/v0.75.4</link>
      <guid isPermaLink="true">https://github.com/earendil-works/pi/releases/tag/v0.75.4</guid>
      <pubDate>Wed, 20 May 2026 15:29:15 GMT</pubDate>
      <description>Pi v0.75.4 adds supply-chain hardening with shrinkwrap/lifecycle-script controls and interactive post-update changelogs.
• Supply-chain hardening: ships `npm-shrinkwrap.json` for transitive dependency locking, enforces dependency pinning and lifecycle-script allowlists, and disables lifecycle scripts during self-update and local release installs.
• Shows interactive update notes after `pi update` so users can review the installed version&apos;s changelog before continuing.
• Exports image resize utilities from the package root for SDK consumers.</description>
    </item>
    <item>
      <title>Pi v0.74.1</title>
      <link>https://github.com/earendil-works/pi/releases/tag/v0.74.1</link>
      <guid isPermaLink="true">https://github.com/earendil-works/pi/releases/tag/v0.74.1</guid>
      <pubDate>Sat, 16 May 2026 23:37:16 GMT</pubDate>
      <description>Pi v0.74.1 adds image generation, Together AI provider, and Windows ARM64 binaries
• Adds image generation support via OpenRouter, including image generation APIs and image model metadata.
• Adds Together AI as a built-in provider with `/login` API-key authentication and default model resolution.
• Adds standalone release binaries for Windows ARM64.
• Improves terminal markdown rendering with list indentation and task-list checkbox display.</description>
    </item>
    <item>
      <title>Pi v0.73.1</title>
      <link>https://github.com/earendil-works/pi/releases/tag/v0.73.1</link>
      <guid isPermaLink="true">https://github.com/earendil-works/pi/releases/tag/v0.73.1</guid>
      <pubDate>Thu, 07 May 2026 14:47:01 GMT</pubDate>
      <description>Pi v0.73.1 adds self-update npm scope migration support, interactive OAuth login selection, and JSONC-style models.json parsing.
• Adds npm scope migration support to `pi update --self`: uninstalls the old `@mariozechner/pi-coding-agent` package and installs the renamed `@earendil-works/pi-coding-agent` package automatically.
• Enables interactive OAuth login selection so providers can present multiple login choices in `/login` for provider-specific authentication flows.
• Supports JSONC-style `models.json` parsing — comments and trailing commas are now allowed, making custom provider and model configuration easier to maintain.</description>
    </item>
    <item>
      <title>Pi v0.73.0</title>
      <link>https://github.com/earendil-works/pi/releases/tag/v0.73.0</link>
      <guid isPermaLink="true">https://github.com/earendil-works/pi/releases/tag/v0.73.0</guid>
      <pubDate>Mon, 04 May 2026 18:34:45 GMT</pubDate>
      <description>Pi v0.73.0 adds incremental bash streaming, compact read rendering, and Xiaomi MiMo API billing with regional Token Plan providers.
• Adds Xiaomi MiMo API billing provider (`xiaomi`) alongside three regional Token Plan providers: `xiaomi-token-plan-cn`, `xiaomi-token-plan-ams`, and `xiaomi-token-plan-sgp`, each defaulting to `mimo-v2.5-pro`.
• Streams bash tool output incrementally as commands run, rather than buffering until completion.
• Collapses Pi docs, AGENTS/CLAUDE context files, and `SKILL.md` contents by default in interactive `read` output, showing only selected line ranges.
Breaking changes:
• The built-in `xiaomi` provider now uses Xiaomi&apos;s API billing endpoint instead of Token Plan AMS; `XIAOMI_API_KEY` must now be an API billing key from platform.xiaomimimo.com. Users on Token Plan must switch to `xiaomi-token-plan-cn`, `xiaomi-token-plan-ams`, or `xiaomi-token-plan-sgp` and set the corresponding env var (`XIAOMI_TOKEN_PLAN_CN_API_KEY`, `XIAOMI_TOKEN_PLAN_AMS_API_KEY`, or `XIAOMI_TOKEN_PLAN_SGP_API_KEY`).
• The `/login` display name for the built-in Xiaomi provider is renamed from &quot;Xiaomi MiMo Token Plan&quot; to &quot;Xiaomi MiMo&quot;.</description>
    </item>
    <item>
      <title>Pi v0.72.0</title>
      <link>https://github.com/earendil-works/pi/releases/tag/v0.72.0</link>
      <guid isPermaLink="true">https://github.com/earendil-works/pi/releases/tag/v0.72.0</guid>
      <pubDate>Fri, 01 May 2026 23:57:20 GMT</pubDate>
      <description>Pi v0.72.0 adds Xiaomi MiMo provider, per-model base URL overrides, and a post-turn agent stop callback.
• Adds Xiaomi MiMo Token Plan as an Anthropic-compatible provider, authenticated via `XIAOMI_API_KEY`, with default model `mimo-v2.5-pro` and `/login` display support.
• Introduces `thinkingLevelMap` for model definitions, letting models declare exactly which thinking levels they support (replacing `reasoningEffortMap`).
• Enables per-model `baseUrl` overrides in pi.registerProvider() model definitions.
• Adds `shouldStopAfterTurn` callback to the agent loop, allowing graceful exit after a completed turn.
Breaking changes:
• `compat.reasoningEffortMap` in `models.json` and pi.registerProvider() model definitions is replaced by model-level `thinkingLevelMap`; existing mappings must be migrated from `compat.reasoningEffortMap` to `thinkingLevelMap`.</description>
    </item>
    <item>
      <title>Pi v0.71.1</title>
      <link>https://github.com/earendil-works/pi/releases/tag/v0.71.1</link>
      <guid isPermaLink="true">https://github.com/earendil-works/pi/releases/tag/v0.71.1</guid>
      <pubDate>Fri, 01 May 2026 11:14:15 GMT</pubDate>
      <description>Pi v0.71.1 adds `websocket-cached` transport for OpenAI Codex, reusing connections and sending only new conversation items.
• Adds `websocket-cached` transport option for the OpenAI Codex provider, keeping a single WebSocket open per session and sending only new conversation items instead of the full chat history on each request.</description>
    </item>
    <item>
      <title>Pi v0.71.0</title>
      <link>https://github.com/earendil-works/pi/releases/tag/v0.71.0</link>
      <guid isPermaLink="true">https://github.com/earendil-works/pi/releases/tag/v0.71.0</guid>
      <pubDate>Thu, 30 Apr 2026 23:05:15 GMT</pubDate>
      <description>Pi v0.71.0 adds Cloudflare AI Gateway and Moonshot AI providers, Mistral Medium 3.5, and new extension APIs.
• Adds Cloudflare AI Gateway as a built-in provider, configured via `CLOUDFLARE_API_KEY`, `CLOUDFLARE_ACCOUNT_ID`, and `CLOUDFLARE_GATEWAY_ID`.
• Adds Moonshot AI as a built-in provider, configured via `MOONSHOT_API_KEY`.
• Adds built-in support for the Mistral Medium 3.5 model.
• Adds `PI_CODING_AGENT_SESSION_DIR` environment variable as an equivalent to `--session-dir` for configuring session storage.
• Extension APIs can now replace finalized `message_end` messages, enabling overrides of assistant usage cost reporting.
• Adds ctx.ui.getEditorComponent() so extensions can wrap the currently configured custom editor factory.
• Adds a `thinking_level_select` extension event for observing thinking level changes.
• Adds top-level `name` support to pi.registerProvider() so extension-registered providers display a friendly name in `/login`.
• Exposes routed OpenAI-compatible response model metadata in assistant messages so providers like OpenRouter can surface the concrete model used.
Breaking changes:
• Built-in Google Gemini CLI and Google Antigravity providers have been removed; existing configurations using those providers must switch to another supported provider.</description>
    </item>
    <item>
      <title>Pi v0.70.6</title>
      <link>https://github.com/earendil-works/pi/releases/tag/v0.70.6</link>
      <guid isPermaLink="true">https://github.com/earendil-works/pi/releases/tag/v0.70.6</guid>
      <pubDate>Tue, 28 Apr 2026 17:36:03 GMT</pubDate>
      <description>Pi v0.70.6 adds Cloudflare Workers AI as a built-in provider with API key, default model, and /login support.
• Adds Cloudflare Workers AI as a built-in provider, configured via `CLOUDFLARE_API_KEY` and `CLOUDFLARE_ACCOUNT_ID`, with default model resolution and `/login` support.</description>
    </item>
    <item>
      <title>Pi v0.70.3</title>
      <link>https://github.com/earendil-works/pi/releases/tag/v0.70.3</link>
      <guid isPermaLink="true">https://github.com/earendil-works/pi/releases/tag/v0.70.3</guid>
      <pubDate>Mon, 27 Apr 2026 19:31:09 GMT</pubDate>
      <description>Pi v0.70.3 adds self-update via `pi update`, Azure Cognitive Services endpoint support, and new extension APIs for custom working-state UI.
• Adds self-update capability to `pi update` so Pi itself can be upgraded alongside installed packages.
• Adds Azure Cognitive Services endpoint support for Azure OpenAI Responses deployments.
• Adds `warnings.anthropicExtraUsage` setting in `/settings` to suppress the Anthropic extra-usage billing warning.
• Adds ctx.ui.setWorkingVisible() extension API, enabling extensions to hide the built-in loader row and render a custom working state.</description>
    </item>
    <item>
      <title>Pi v0.70.1</title>
      <link>https://github.com/earendil-works/pi/releases/tag/v0.70.1</link>
      <guid isPermaLink="true">https://github.com/earendil-works/pi/releases/tag/v0.70.1</guid>
      <pubDate>Fri, 24 Apr 2026 12:10:53 GMT</pubDate>
      <description>Pi v0.70.1 adds DeepSeek provider support and configurable provider timeout/retry controls.
• Adds DeepSeek provider with V4 Flash/Pro models, authenticated via `DEEPSEEK_API_KEY`.
• New `retry.provider.{timeoutMs,maxRetries,maxRetryDelayMs}` settings expose per-provider timeout and retry controls, useful for long-running local inference.</description>
    </item>
    <item>
      <title>Pi v0.70.0</title>
      <link>https://github.com/earendil-works/pi/releases/tag/v0.70.0</link>
      <guid isPermaLink="true">https://github.com/earendil-works/pi/releases/tag/v0.70.0</guid>
      <pubDate>Thu, 23 Apr 2026 23:03:05 GMT</pubDate>
      <description>Pi v0.70.0 adds GPT-5.5 Codex support, fuzzy auth-provider search, auth source labels, and granular built-in tool disabling.
• Adds `openai-codex/gpt-5.5` as a model option with `xhigh` reasoning support and priority-tier pricing.
• Adds fuzzy search/filtering to the `/login` provider selector, making it faster to find providers when many are configured.
• Adds auth source labels in `/login` showing whether credentials come from `--api-key`, an environment variable, or a custom provider fallback — without exposing secrets.
• Adds `--no-builtin-tools` CLI flag and createAgentSession({ noTools: &quot;builtin&quot; }) SDK option to disable only built-in tools while keeping extension tools active.
• Adds opt-in OSC 9;4 terminal progress indicators, toggled via `terminal.showTerminalProgress` in `/settings`.
Breaking changes:
• OSC 9;4 terminal progress indicators are now disabled by default; set `terminal.showTerminalProgress` to `true` in `/settings` to re-enable.</description>
    </item>
    <item>
      <title>Pi v0.69.0</title>
      <link>https://github.com/earendil-works/pi/releases/tag/v0.69.0</link>
      <guid isPermaLink="true">https://github.com/earendil-works/pi/releases/tag/v0.69.0</guid>
      <pubDate>Wed, 22 Apr 2026 19:40:02 GMT</pubDate>
      <description>Pi v0.69.0 adds stacked autocomplete providers, terminating tool results, and OSC 9;4 progress indicators.
• Adds ctx.ui.addAutocompleteProvider(...) so extensions can stack custom completion logic on top of built-in slash and path completion.
• Supports `terminate: true` on tool results, letting custom tools end a tool batch without triggering an automatic follow-up LLM call.
• Adds OSC 9;4 terminal progress indicators during agent streaming and compaction for terminals that support tab-bar activity display (iTerm2, WezTerm, Windows Terminal, Kitty).
• Migrates extension SDK to TypeBox 1.x with native tool argument validation that works in eval-restricted runtimes such as Cloudflare Workers.
Breaking changes:
• Extensions and SDK integrations must now depend on and import from `typebox` 1.x instead of `@sinclair/typebox` 0.34.x; `@sinclair/typebox/compiler` is no longer shimmed.
• After ctx.newSession(), ctx.fork(), or ctx.switchSession(), pre-replacement session-bound extension objects (including captured `pi` and command `ctx` references) are invalidated and now throw instead of silently targeting the replaced session; post-switch work must be moved into the `withSession` callback using the provided `ReplacedSessionContext`.</description>
    </item>
    <item>
      <title>Pi v0.68.1</title>
      <link>https://github.com/earendil-works/pi/releases/tag/v0.68.1</link>
      <guid isPermaLink="true">https://github.com/earendil-works/pi/releases/tag/v0.68.1</guid>
      <pubDate>Wed, 22 Apr 2026 00:16:17 GMT</pubDate>
      <description>Pi v0.68.1 adds Fireworks AI provider support and configurable inline tool image width.
• Adds built-in Fireworks provider with `FIREWORKS_API_KEY` auth and default model `accounts/fireworks/models/kimi-k2p6`.
• Adds configurable inline tool image width via `terminal.imageWidthCells` in `/settings`.</description>
    </item>
    <item>
      <title>Pi v0.68.0</title>
      <link>https://github.com/earendil-works/pi/releases/tag/v0.68.0</link>
      <guid isPermaLink="true">https://github.com/earendil-works/pi/releases/tag/v0.68.0</guid>
      <pubDate>Mon, 20 Apr 2026 21:57:10 GMT</pubDate>
      <description>Pi v0.68.0 adds /clone, configurable keybindings, extension working-indicator control, and richer session_shutdown metadata.
• New `/clone` command duplicates the current active branch into a fresh session, complementing `/fork` which targets a previous user message.
• Extensions can now control the streaming working indicator (animated frames, static, or hidden) via ctx.ui.setWorkingIndicator().
• `before_agent_start` extension events now expose `systemPromptOptions` (`BuildSystemPromptOptions`) so extensions can inspect structured system-prompt inputs directly.
• ctx.fork() gains a `position: &quot;before&quot; | &quot;at&quot;` option so extensions can branch before a user message or duplicate the current conversation point.
• Keybindings for scoped model-selector actions and session-tree filter actions are now remappable via `keybindings.json`.
• New `PI_OAUTH_CALLBACK_HOST` environment variable lets the built-in OAuth login flow (`pi auth`) bind its local callback server to a custom interface instead of hardcoded `127.0.0.1`.
• `session_shutdown` extension events now carry `reason` and `targetSessionFile` metadata, enabling extensions to distinguish quit, reload, new-session, resume, and fork teardown paths.
• `pi update` now batches npm package updates per scope and runs git package updates with bounded parallelism, significantly reducing multi-package update time.
Breaking changes:
• createAgentSession({ tools }) now expects `string[]` names such as `&quot;read&quot;` and `&quot;bash&quot;` instead of `Tool[]` instances; migrate SDK code from `tools: [readTool, bashTool]` to `tools: [&quot;read&quot;, &quot;bash&quot;]`.
• `--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.
• Prebuilt cwd-bound tool exports (`readTool`, `bashTool`, `editTool`, `writeTool`, `grepTool`, `findTool`, `lsTool`, `readOnlyTools`, `codingTools`) and their corresponding `*ToolDefinition` values have been removed from `@mariozechner/pi-coding-agent`; use explicit factory exports such as createReadTool(cwd), createBashTool(cwd), createCodingTools(cwd), and createReadToolDefinition(cwd) instead.
• `DefaultResourceLoader`, loadProjectContextFiles(), and loadSkills() no longer fall back to process.cwd() / a default agent-dir; an explicit `cwd` is now required and exported system-prompt option types enforce it.</description>
    </item>
    <item>
      <title>Pi v0.67.67</title>
      <link>https://github.com/earendil-works/pi/releases/tag/v0.67.67</link>
      <guid isPermaLink="true">https://github.com/earendil-works/pi/releases/tag/v0.67.67</guid>
      <pubDate>Fri, 17 Apr 2026 21:08:28 GMT</pubDate>
      <description>Pi v0.67.67 adds AWS bearer-token auth for Bedrock Converse API, removing the SigV4 credential requirement.
• Supports `AWS_BEARER_TOKEN_BEDROCK` environment variable to authenticate Bedrock sessions via the Converse API without local SigV4 credentials.</description>
    </item>
    <item>
      <title>Pi v0.67.6</title>
      <link>https://github.com/earendil-works/pi/releases/tag/v0.67.6</link>
      <guid isPermaLink="true">https://github.com/earendil-works/pi/releases/tag/v0.67.6</guid>
      <pubDate>Thu, 16 Apr 2026 21:28:10 GMT</pubDate>
      <description>Pi v0.67.6 adds prompt template argument hints, a new extension hook for HTTP response inspection, and OSC 8 hyperlink rendering.
• Adds `argument-hint` frontmatter field for prompt templates, displayed before the description in the `/` autocomplete dropdown using `&lt;angle&gt;` for required and `[square]` for optional arguments.
• New `after_provider_response` extension hook lets extensions inspect provider HTTP status codes and headers after each response is received and before stream consumption begins.
• Compact interactive startup header now shows loaded AGENTS.md files, prompt templates, skills, and extensions as a comma-separated list; press `Ctrl+O` to toggle the expanded view.
• Markdown links in assistant output render as OSC 8 hyperlinks on supporting terminals, with safe fallback to plain text on unknown terminals and tmux/screen.</description>
    </item>
    <item>
      <title>Pi v0.67.4</title>
      <link>https://github.com/earendil-works/pi/releases/tag/v0.67.4</link>
      <guid isPermaLink="true">https://github.com/earendil-works/pi/releases/tag/v0.67.4</guid>
      <pubDate>Thu, 16 Apr 2026 15:58:18 GMT</pubDate>
      <description>Pi v0.67.4 adds --no-context-files flag, exportable context-file utility, new extension hook, and claude-opus-4-7 model support.
• New `--no-context-files` (`-nc`) flag disables automatic `AGENTS.md` / `CLAUDE.md` discovery for clean runs without project context injection.
• Exports loadProjectContextFiles() as a standalone utility for extensions and SDK-style integrations to inspect context-file resolution order.
• New `after_provider_response` extension hook enables extensions to inspect provider HTTP status codes and headers after each response and before stream consumption.
• Adds `claude-opus-4-7` model for Anthropic provider.
• Anthropic prompt caching now adds a `cache_control` breakpoint on the last tool definition, enabling tool schemas to be cached independently from transcript updates.</description>
    </item>
    <item>
      <title>Pi v0.67.3</title>
      <link>https://github.com/earendil-works/pi/releases/tag/v0.67.3</link>
      <guid isPermaLink="true">https://github.com/earendil-works/pi/releases/tag/v0.67.3</guid>
      <pubDate>Wed, 15 Apr 2026 21:42:33 GMT</pubDate>
      <description>Pi v0.67.3 adds `renderShell: &quot;self&quot;` for tool renderers to own their outer shell and live backoff countdowns on auto-retry.
• New `renderShell: &quot;self&quot;` option for custom and built-in tool renderers lets tools own their outer shell instead of the default boxed shell, enabling stable large previews such as edit diffs.
• Interactive auto-retry status now displays a live countdown during backoff periods instead of a static retry delay message.</description>
    </item>
    <item>
      <title>Pi v0.67.2</title>
      <link>https://github.com/earendil-works/pi/releases/tag/v0.67.2</link>
      <guid isPermaLink="true">https://github.com/earendil-works/pi/releases/tag/v0.67.2</guid>
      <pubDate>Tue, 14 Apr 2026 21:43:27 GMT</pubDate>
      <description>Pi v0.67.2 adds multi-flag system prompt appending, Kitty super-key bindings, and inline extension factories for custom entrypoints.
• Supports multiple `--append-system-prompt` flags in a single invocation, with each value appended to the system prompt separated by double newlines.
• Adds interactive keybinding support for Kitty `super`-modified shortcuts such as `super+k`, `super+enter`, and `ctrl+super+k`.
• Supports passing inline extension factories to main() for embedded integrations and custom entrypoints.</description>
    </item>
    <item>
      <title>Pi v0.67.1</title>
      <link>https://github.com/earendil-works/pi/releases/tag/v0.67.1</link>
      <guid isPermaLink="true">https://github.com/earendil-works/pi/releases/tag/v0.67.1</guid>
      <pubDate>Mon, 13 Apr 2026 22:33:29 GMT</pubDate>
      <description>Pi v0.67.1 adds full OpenRouter routing config in models.json and a new env var for subprocess detection.
• Adds full `openRouterRouting` field support in `models.json`, enabling fallbacks, parameter requirements, data collection, ZDR, ignore lists, quantizations, provider sorting, max price, and preferred throughput/latency constraints.
• Sets `PI_CODING_AGENT=true` at startup so subprocesses and scripts can detect they are running inside the Pi coding agent.
• Adds anonymous install/update telemetry ping (only in interactive mode) to count per-version adoption; disable via `/settings` → `Install telemetry`, `enableInstallTelemetry: false` in `settings.json`, `PI_OFFLINE=1`, or `PI_TELEMETRY=0`.</description>
    </item>
    <item>
      <title>Pi v0.67.0</title>
      <link>https://github.com/earendil-works/pi/releases/tag/v0.67.0</link>
      <guid isPermaLink="true">https://github.com/earendil-works/pi/releases/tag/v0.67.0</guid>
      <pubDate>Mon, 13 Apr 2026 22:24:41 GMT</pubDate>
      <description>Pi v0.67.0 adds full OpenRouter routing control in models.json and a PI_CODING_AGENT env flag for subprocess detection.
• Adds full `openRouterRouting` field support in `models.json`, enabling fallbacks, parameter requirements, data collection, ZDR, ignore lists, quantizations, provider sorting, max price, and preferred throughput/latency constraints.
• Sets `PI_CODING_AGENT=true` environment variable at startup so subprocesses and scripts can detect they are running inside the coding agent.
• Adds lightweight anonymous install/update telemetry ping to track per-version adoption; controllable via `/settings`, `enableInstallTelemetry` in `settings.json`, `PI_OFFLINE=1`, or `PI_TELEMETRY=0`.</description>
    </item>
    <item>
      <title>Pi v0.66.0</title>
      <link>https://github.com/earendil-works/pi/releases/tag/v0.66.0</link>
      <guid isPermaLink="true">https://github.com/earendil-works/pi/releases/tag/v0.66.0</guid>
      <pubDate>Wed, 08 Apr 2026 16:58:53 GMT</pubDate>
      <description>Pi v0.66.0 adds an Earendil startup announcement with inline image rendering and an Anthropic subscription billing warning.
• Displays an Earendil startup announcement with bundled inline image rendering and a linked blog post during interactive mode on April 8 and 9, 2026.
• Shows an interactive warning when Anthropic subscription auth is active, clarifying that third-party Anthropic usage draws from extra usage and is billed per token.</description>
    </item>
    <item>
      <title>Pi v0.65.0</title>
      <link>https://github.com/earendil-works/pi/releases/tag/v0.65.0</link>
      <guid isPermaLink="true">https://github.com/earendil-works/pi/releases/tag/v0.65.0</guid>
      <pubDate>Fri, 03 Apr 2026 18:33:35 GMT</pubDate>
      <description>Pi v0.65.0 adds a session runtime API, defineTool() helper, tree timestamps, and unified structured diagnostics.
• New createAgentSessionRuntime() and `AgentSessionRuntime` SDK API: closure-based runtime that recreates cwd-bound services and session config on every session switch, used consistently across startup, `/new`, `/resume`, `/fork`, and import.
• New defineTool() helper: create standalone custom tool definitions with full TypeScript parameter type inference, eliminating manual casts.
• Label timestamps in `/tree`: toggle timestamps on session tree entries with `Shift+T`, with smart date formatting and preservation through branching.
• Unified structured diagnostics: arg parsing, service creation, session option resolution, and resource loading now return `info`/`warning`/`error` diagnostics instead of logging or exiting, letting the app layer control presentation and exit behavior.
• Error diagnostics now reported for missing explicit CLI resource paths (`-e`, `--skill`, `--prompt-template`, `--theme`).
Breaking changes:
• Extension post-transition events `session_switch` and `session_fork` are removed; use `session_start` with `event.reason` (`&quot;startup&quot; | &quot;reload&quot; | &quot;new&quot; | &quot;resume&quot; | &quot;fork&quot;`) and `event.previousSessionFile` (set for `&quot;new&quot;`, `&quot;resume&quot;`, `&quot;fork&quot;`).
• Session-replacement methods (newSession(), switchSession(), fork(), importFromJsonl()) are removed from `AgentSession`; use `AgentSessionRuntime` instead.
• `session_directory` is removed from extension and settings APIs.
• Unknown single-dash CLI flags (e.g. `-s`) now produce an error instead of being silently ignored.</description>
    </item>
    <item>
      <title>Pi v0.64.0</title>
      <link>https://github.com/earendil-works/pi/releases/tag/v0.64.0</link>
      <guid isPermaLink="true">https://github.com/earendil-works/pi/releases/tag/v0.64.0</guid>
      <pubDate>Sun, 29 Mar 2026 19:58:22 GMT</pubDate>
      <description>Pi v0.64.0 adds a prepareArguments hook for tool schema migration and lets extensions customize the thinking block label.
• Adds `ToolDefinition.prepareArguments` hook so extensions and SDK callers can normalize or migrate raw model arguments before schema validation — enabling compatibility shims for resumed sessions with outdated tool schemas.
• Built-in `edit` tool uses `prepareArguments` to silently fold legacy top-level `oldText`/`newText` into `edits[]` when resuming old sessions.
• Adds ctx.ui.setHiddenThinkingLabel() so extensions can customize the collapsed thinking block label shown in interactive mode.
Breaking changes:
• `ModelRegistry` no longer has a public constructor; direct new ModelRegistry(...) calls no longer compile. SDK callers and tests must use ModelRegistry.create(authStorage, modelsJsonPath?) for file-backed registries or ModelRegistry.inMemory(authStorage) for built-in-only registries.</description>
    </item>
    <item>
      <title>Pi v0.63.2</title>
      <link>https://github.com/earendil-works/pi/releases/tag/v0.63.2</link>
      <guid isPermaLink="true">https://github.com/earendil-works/pi/releases/tag/v0.63.2</guid>
      <pubDate>Sun, 29 Mar 2026 11:15:33 GMT</pubDate>
      <description>Pi v0.63.2 adds `ctx.signal` to ExtensionContext for propagating cancellation into nested model calls and fetch operations.
• Adds `ctx.signal` to `ExtensionContext`, letting extension handlers forward cancellation into nested model calls, fetch(), and other abort-aware work.</description>
    </item>
    <item>
      <title>Pi v0.63.1</title>
      <link>https://github.com/earendil-works/pi/releases/tag/v0.63.1</link>
      <guid isPermaLink="true">https://github.com/earendil-works/pi/releases/tag/v0.63.1</guid>
      <pubDate>Fri, 27 Mar 2026 03:16:20 GMT</pubDate>
      <description>Adds gemini-3.1-pro-preview-customtools model support for the google-vertex provider.
• Adds `gemini-3.1-pro-preview-customtools` model availability for the `google-vertex` provider.</description>
    </item>
    <item>
      <title>Pi v0.63.0</title>
      <link>https://github.com/earendil-works/pi/releases/tag/v0.63.0</link>
      <guid isPermaLink="true">https://github.com/earendil-works/pi/releases/tag/v0.63.0</guid>
      <pubDate>Fri, 27 Mar 2026 01:32:31 GMT</pubDate>
      <description>Pi v0.63.0 adds persistent sessionDir config, multi-edit support, and per-instance TUI log files.
• Adds `sessionDir` setting in global and project `settings.json` to persist session storage location without passing `--session-dir` on every invocation.
• Adds multi-edit support to the `edit` tool, allowing one call to update multiple disjoint regions in the same file matched against the original content.
• Adds `PI_TUI_WRITE_LOG` directory path support, writing a unique `tui-&lt;timestamp&gt;-&lt;pid&gt;.log` per pi instance for debugging multiple concurrent sessions.
• Adds startup onboarding hint in the interactive header informing users that pi can explain its own features and documentation.
Breaking changes:
• ModelRegistry.getApiKey(model) is replaced by getApiKeyAndHeaders(model); extensions and SDK integrations must now fetch both `apiKey` and `headers` per request instead of a single API key.
• Deprecated direct model IDs `minimax` and `minimax-cn` are removed; pinned model IDs must be updated to `MiniMax-M2.7` or `MiniMax-M2.7-highspeed`.</description>
    </item>
    <item>
      <title>Pi v0.62.0</title>
      <link>https://github.com/earendil-works/pi/releases/tag/v0.62.0</link>
      <guid isPermaLink="true">https://github.com/earendil-works/pi/releases/tag/v0.62.0</guid>
      <pubDate>Mon, 23 Mar 2026 01:52:03 GMT</pubDate>
      <description>Pi v0.62.0 adds extensible built-in tool rendering, unified sourceInfo provenance, and AWS Bedrock cost allocation tagging.
• Enables extension authors to override rendering of built-in read/write/edit/bash/grep/find/ls tools with custom `renderCall`/`renderResult` components via extensible ToolDefinitions.
• Adds unified `sourceInfo` struct (path, scope, source metadata) to all resources, commands, tools, skills, and prompt templates — visible in autocomplete, RPC discovery, and SDK introspection.
• New `requestMetadata` option on `BedrockOptions` forwards key-value pairs to the Bedrock Converse API for AWS Cost Explorer split cost allocation tagging.
Breaking changes:
• If `renderCall` or `renderResult` is defined on a `ToolDefinition`, it must now return a `Component`; fallback rendering only occurs when no renderer is defined for that slot.
• RPC `get_commands`, `RpcSlashCommand`, and SDK `SlashCommandInfo` no longer expose `location` or `path` — use `sourceInfo` instead.
• The legacy `source` fields on `Skill` and `PromptTemplate` are removed — use `sourceInfo.source` instead.
• ResourceLoader.getPathMetadata() is removed — resource provenance is now attached directly to loaded resources via `sourceInfo`.
• `extensionPath` is removed from `RegisteredCommand` and `RegisteredTool` — use `sourceInfo.path` instead.</description>
    </item>
    <item>
      <title>Pi v0.61.1</title>
      <link>https://github.com/earendil-works/pi/releases/tag/v0.61.1</link>
      <guid isPermaLink="true">https://github.com/earendil-works/pi/releases/tag/v0.61.1</guid>
      <pubDate>Fri, 20 Mar 2026 19:17:37 GMT</pubDate>
      <description>Pi v0.61.1 adds typed tool_call handler return values and updated default models for zai, cerebras, and MiniMax providers.
• Adds `ToolCallEventResult` type exports from `@mariozechner/pi-coding-agent` top-level and core extension entry points, enabling extension authors to strongly type `tool_call` handler return values.
• Updates default models for `zai`, `cerebras`, `minimax`, and `minimax-cn` providers and adds `MiniMax-M2.1-highspeed` model entries with normalized context limits.</description>
    </item>
    <item>
      <title>Pi v0.61.0</title>
      <link>https://github.com/earendil-works/pi/releases/tag/v0.61.0</link>
      <guid isPermaLink="true">https://github.com/earendil-works/pi/releases/tag/v0.61.0</guid>
      <pubDate>Fri, 20 Mar 2026 01:11:02 GMT</pubDate>
      <description>Pi v0.61.0 adds JSONL session export/import, a unified keybinding manager, and gpt-5.4-mini support.
• Adds JSONL session export and import via `/export &lt;path.jsonl&gt;` and `/import &lt;path.jsonl&gt;` commands.
• Introduces namespaced keybinding IDs and a unified keybinding manager across the app and TUI, with automatic migration of older `keybindings.json` config files.
• Adds `gpt-5.4-mini` to the `openai-codex` model catalog.
• Adds a resizable sidebar to HTML share and export views.
Breaking changes:
• Keybinding IDs in `keybindings.json` are now namespaced; extension authors must update keyHint(), keyText(), and keybindings.matches(...) calls from old names like `&quot;expandTools&quot;`, `&quot;selectConfirm&quot;`, and `&quot;interrupt&quot;` to namespaced IDs like `&quot;app.tools.expand&quot;`, `&quot;tui.select.confirm&quot;`, and `&quot;app.interrupt&quot;`. Older config files are migrated automatically on startup.
• Custom editors and extension UI components receive an injected `keybindings: KeybindingsManager` and must not call getKeybindings() or setKeybindings() themselves.</description>
    </item>
    <item>
      <title>Pi v0.60.0</title>
      <link>https://github.com/earendil-works/pi/releases/tag/v0.60.0</link>
      <guid isPermaLink="true">https://github.com/earendil-works/pi/releases/tag/v0.60.0</guid>
      <pubDate>Wed, 18 Mar 2026 02:43:47 GMT</pubDate>
      <description>Pi v0.60.0 adds session forking from the CLI and a new createLocalBashOperations() SDK export for custom bash integrations.
• Adds `--fork &lt;path|id&gt;` flag to fork an existing session file or partial session UUID into a new session in the current project.
• Adds createLocalBashOperations() export so extensions and SDK callers can wrap pi&apos;s built-in local bash backend for `user_bash` interception and custom bash integrations.
• Startup no longer auto-updates unpinned npm and git packages; interactive mode now checks for updates in the background and notifies when newer packages are available.
Breaking changes:
• Installed unpinned packages are no longer checked or updated during startup — use `pi update` explicitly to apply npm/git package updates.</description>
    </item>
    <item>
      <title>Pi v0.58.1</title>
      <link>https://github.com/earendil-works/pi/releases/tag/v0.58.1</link>
      <guid isPermaLink="true">https://github.com/earendil-works/pi/releases/tag/v0.58.1</guid>
      <pubDate>Sat, 14 Mar 2026 11:41:25 GMT</pubDate>
      <description>Adds `pi uninstall` as a convenient alias for `pi install --uninstall`
• Adds `pi uninstall` as a shorthand alias for `pi install --uninstall`</description>
    </item>
    <item>
      <title>Pi v0.58.0</title>
      <link>https://github.com/earendil-works/pi/releases/tag/v0.58.0</link>
      <guid isPermaLink="true">https://github.com/earendil-works/pi/releases/tag/v0.58.0</guid>
      <pubDate>Sat, 14 Mar 2026 02:32:26 GMT</pubDate>
      <description>Pi v0.58.0 expands Claude Opus/Sonnet 4.6 context to 1M tokens, adds parallel tool execution, and supports GOOGLE_CLOUD_API_KEY for Vertex AI.
• Raises Claude Opus 4.6, Sonnet 4.6, and related Bedrock model context windows from 200K to 1M tokens.
• Enables parallel execution of extension tool calls by default, with sequential `tool_call` preflight preserved for extension interception.
• Adds `GOOGLE_CLOUD_API_KEY` environment variable support for the `google-vertex` provider as an alternative to Application Default Credentials.
• Allows extensions to supply deterministic session IDs via newSession().</description>
    </item>
    <item>
      <title>Pi v0.57.1</title>
      <link>https://github.com/earendil-works/pi/releases/tag/v0.57.1</link>
      <guid isPermaLink="true">https://github.com/earendil-works/pi/releases/tag/v0.57.1</guid>
      <pubDate>Sat, 07 Mar 2026 23:57:54 GMT</pubDate>
      <description>Pi v0.57.1 adds /tree branch folding, a session_directory extension event, and digit keybindings to the TUI.
• Adds branch folding and segment-jump navigation in `/tree` via `Ctrl+←`/`Ctrl+→` (segment jump) and `Alt+←`/`Alt+→` (fold/unfold), alongside existing `←`/`→` and `Page Up`/`Page Down` paging.
• New `session_directory` extension event fires before session manager creation, letting extensions customize the session directory path based on cwd or other factors (CLI `--session-dir` still takes precedence).
• Digit keys (`0-9`) now supported in the TUI keybinding system, including modified combos like `ctrl+1`, with Kitty CSI-u and xterm `modifyOtherKeys` protocol support.</description>
    </item>
    <item>
      <title>Pi v0.57.0</title>
      <link>https://github.com/earendil-works/pi/releases/tag/v0.57.0</link>
      <guid isPermaLink="true">https://github.com/earendil-works/pi/releases/tag/v0.57.0</guid>
      <pubDate>Sat, 07 Mar 2026 13:45:31 GMT</pubDate>
      <description>Pi v0.57.0 adds extension payload interception, non-capturing overlay focus control, and strict JSONL framing in RPC mode.
• Adds `before_provider_request` extension hook so extensions can inspect or replace provider request payloads before they are sent.
• Enables non-capturing overlays in extension UIs with explicit focus control via `OverlayOptions.nonCapturing` and OverlayHandle.focus() / unfocus() / isFocused().
• RPC mode now uses strict LF-only JSONL framing for more robust payload handling.
Breaking changes:
• RPC mode now uses strict LF-delimited JSONL framing: clients must split records on `\n` only and can no longer use generic line readers such as Node `readline`, which also split on Unicode separators (U+2028, U+2029) inside JSON payloads.</description>
    </item>
    <item>
      <title>Pi v0.56.3</title>
      <link>https://github.com/earendil-works/pi/releases/tag/v0.56.3</link>
      <guid isPermaLink="true">https://github.com/earendil-works/pi/releases/tag/v0.56.3</guid>
      <pubDate>Fri, 06 Mar 2026 16:08:46 GMT</pubDate>
      <description>Pi v0.56.3 adds claude-sonnet-4-6 via google-antigravity and improves tmux key support.
• Adds `claude-sonnet-4-6` model support via the `google-antigravity` provider.
• Supports Shift+Enter and Ctrl+Enter inside tmux via xterm modifyOtherKeys fallback.</description>
    </item>
    <item>
      <title>Pi v0.56.2</title>
      <link>https://github.com/earendil-works/pi/releases/tag/v0.56.2</link>
      <guid isPermaLink="true">https://github.com/earendil-works/pi/releases/tag/v0.56.2</guid>
      <pubDate>Thu, 05 Mar 2026 23:43:51 GMT</pubDate>
      <description>Pi v0.56.2 adds GPT-5.4 support, a new treeFilterMode setting, and native Mistral conversations integration.
• Supports GPT-5.4 across `openai`, `openai-codex`, `azure-openai-responses`, and `opencode` providers, with `gpt-5.4` now the default for `openai` and `openai-codex`.
• Adds `gpt-5.3-codex` as a fallback model for `github-copilot` until upstream model catalogs include it.
• New `treeFilterMode` setting lets you choose the default `/tree` filter mode from `default`, `no-tools`, `user-only`, `labeled-only`, or `all`.
• Adds native Mistral conversations integration via the SDK-backed provider, preserving Mistral-specific thinking and replay semantics.
Breaking changes:
• The default model for the `openai` and `openai-codex` providers is now `gpt-5.4`; any workflow pinned to the previous default will silently switch models on upgrade.</description>
    </item>
    <item>
      <title>Pi v0.56.0</title>
      <link>https://github.com/earendil-works/pi/releases/tag/v0.56.0</link>
      <guid isPermaLink="true">https://github.com/earendil-works/pi/releases/tag/v0.56.0</guid>
      <pubDate>Wed, 04 Mar 2026 20:25:49 GMT</pubDate>
      <description>Pi v0.56.0 adds OpenCode Go provider support, a new branch-summary skip setting, and a Gemini flash-lite fallback model.
• Adds OpenCode Go provider support with `opencode-go` model defaults and `OPENCODE_API_KEY` environment variable.
• New `branchSummary.skipPrompt` setting suppresses branch summarization prompts during tree navigation.
• Adds `gemini-3.1-flash-lite-preview` as a fallback model in Google provider catalogs when upstream metadata lags.
Breaking changes:
• Scoped model entries without an explicit `:&lt;thinking&gt;` suffix now inherit the current session thinking level when selected, instead of applying a startup-captured default.
• Node OAuth runtime exports are removed from the top-level `@mariozechner/pi-ai` entry; OAuth login and refresh must now be imported from `@mariozechner/pi-ai/oauth`.</description>
    </item>
    <item>
      <title>Pi v0.55.4</title>
      <link>https://github.com/earendil-works/pi/releases/tag/v0.55.4</link>
      <guid isPermaLink="true">https://github.com/earendil-works/pi/releases/tag/v0.55.4</guid>
      <pubDate>Mon, 02 Mar 2026 22:26:21 GMT</pubDate>
      <description>Pi v0.55.4 adds live tool registration, per-tool system-prompt injection via `promptSnippet` and `promptGuidelines`.
• Enables runtime tool registration that takes effect immediately in active sessions — tools added via pi.registerTool() are available to pi.getAllTools() and the LLM without `/reload`.
• Adds `promptSnippet` field to `ToolDefinition` for injecting a one-line entry into the default system prompt&apos;s `Available tools` section while the tool is active.
• Adds `promptGuidelines` field to `ToolDefinition` so active tools can append tool-specific bullets to the default system prompt&apos;s `Guidelines` section.
• Supports custom tool renderers that suppress transcript output cleanly, leaving no blank rows or empty footprint in interactive rendering.</description>
    </item>
    <item>
      <title>Pi v0.55.2</title>
      <link>https://github.com/earendil-works/pi/releases/tag/v0.55.2</link>
      <guid isPermaLink="true">https://github.com/earendil-works/pi/releases/tag/v0.55.2</guid>
      <pubDate>Fri, 27 Feb 2026 21:27:56 GMT</pubDate>
      <description>Extensions can now dynamically unregister providers and register them at runtime without requiring /reload.
• Adds pi.unregisterProvider(name) to dynamically remove a custom provider and its models from the registry, restoring any overridden built-in models.
• pi.registerProvider() now takes effect immediately when called outside the initial extension load phase (e.g. from a command handler), eliminating the need for `/reload` after late registrations.</description>
    </item>
    <item>
      <title>Pi v0.55.1</title>
      <link>https://github.com/earendil-works/pi/releases/tag/v0.55.1</link>
      <guid isPermaLink="true">https://github.com/earendil-works/pi/releases/tag/v0.55.1</guid>
      <pubDate>Thu, 26 Feb 2026 00:12:10 GMT</pubDate>
      <description>Pi v0.55.1 adds offline startup mode and Gemini 3.1 Pro Preview model support.
• Adds `--offline` flag (or `PI_OFFLINE` env var) to disable startup network operations and avoid hangs in restricted or air-gapped environments.
• Adds `gemini-3.1-pro-preview` model support to the `google-gemini-cli` provider.</description>
    </item>
    <item>
      <title>Pi v0.54.0</title>
      <link>https://github.com/earendil-works/pi/releases/tag/v0.54.0</link>
      <guid isPermaLink="true">https://github.com/earendil-works/pi/releases/tag/v0.54.0</guid>
      <pubDate>Thu, 19 Feb 2026 23:19:52 GMT</pubDate>
      <description>Pi v0.54.0 adds auto-discovery of agent skills from `.agents/skills` in project and home directories.
• Adds automatic skill discovery from `.agents/skills` in the current directory, ancestor directories (up to git repo root), and `~/.agents/skills` globally, alongside existing `.pi` skill paths.</description>
    </item>
    <item>
      <title>Pi v0.53.0</title>
      <link>https://github.com/earendil-works/pi/releases/tag/v0.53.0</link>
      <guid isPermaLink="true">https://github.com/earendil-works/pi/releases/tag/v0.53.0</guid>
      <pubDate>Tue, 17 Feb 2026 19:06:12 GMT</pubDate>
      <description>Pi v0.53.0 adds caller-controlled I/O error draining, pluggable auth storage backends, and a new Claude Sonnet 4-6 model entry.
• Adds SettingsManager.drainErrors() for caller-controlled settings I/O error handling without manager-side console output.
• Adds pluggable auth storage backends (`FileAuthStorageBackend`, `InMemoryAuthStorageBackend`) and AuthStorage.fromStorage(...) for flexible auth persistence wiring.
• Adds Anthropic `claude-sonnet-4-6` model fallback entry to generated model definitions.
Breaking changes:
• `SettingsManager` setters now update in-memory state immediately and queue disk writes — code that requires durable on-disk settings must call await settingsManager.flush() explicitly.
• `AuthStorage` constructor is no longer public — code using new AuthStorage(...) directly will break; use AuthStorage.create(...), AuthStorage.fromStorage(...), or AuthStorage.inMemory(...) instead.</description>
    </item>
    <item>
      <title>Pi v0.52.12</title>
      <link>https://github.com/earendil-works/pi/releases/tag/v0.52.12</link>
      <guid isPermaLink="true">https://github.com/earendil-works/pi/releases/tag/v0.52.12</guid>
      <pubDate>Fri, 13 Feb 2026 22:44:48 GMT</pubDate>
      <description>Pi v0.52.12 adds a `transport` setting to choose between SSE, WebSocket, or auto for supported providers.
• New `transport` setting (`&quot;sse&quot;`, `&quot;websocket&quot;`, `&quot;auto&quot;`) in `/settings` and `settings.json` lets you control the connection transport for providers like `openai-codex`.
• Interactive mode applies transport changes immediately without restarting the agent session.
Breaking changes:
• The legacy `websockets: boolean` setting is migrated to the new `transport` setting; existing configs using `websockets` will be remapped automatically.</description>
    </item>
    <item>
      <title>Pi v0.52.10</title>
      <link>https://github.com/earendil-works/pi/releases/tag/v0.52.10</link>
      <guid isPermaLink="true">https://github.com/earendil-works/pi/releases/tag/v0.52.10</guid>
      <pubDate>Thu, 12 Feb 2026 21:20:51 GMT</pubDate>
      <description>Pi v0.52.10 adds terminal input interception for extensions, richer --model selection syntax, and new built-in GLM-5 and gpt-5.3-codex-spark models.
• Adds `terminal_input` extension event, letting extensions intercept, consume, or transform raw terminal input before normal TUI handling.
• Adds extension event forwarding for full message and tool execution lifecycles: `message_start`, `message_update`, `message_end`, `tool_execution_start`, `tool_execution_update`, `tool_execution_end`.
• Expands `--model` flag to support `provider/id` syntax, fuzzy matching, and `:&lt;thinking&gt;` suffixes (e.g., `--model sonnet:high`, `--model openai/gpt-4o`) without requiring `--provider`.
• Adds built-in `gpt-5.3-codex-spark` model definition for OpenAI and OpenAI Codex providers (research preview).
• Adds built-in GLM-5 model support via z.ai and OpenRouter provider catalogs.
• Routes GitHub Copilot Claude 4.x models through the Anthropic Messages API with updated Copilot header handling.
Breaking changes:
• `ContextUsage.tokens` and `ContextUsage.percent` are now `number | null`; extensions reading these fields must handle the `null` case after compaction.
• The `usageTokens`, `trailingTokens`, and `lastUsageIndex` fields have been removed from `ContextUsage`; extensions referencing these fields will break.
• Git source parsing is now strict: shorthand sources like `github.com/org/repo` and `git@github.com:org/repo` no longer work without the `git:` prefix — only protocol URLs (`https://`, `http://`, `ssh://`, `git://`) are recognized automatically.</description>
    </item>
    <item>
      <title>Pi v0.52.9</title>
      <link>https://github.com/earendil-works/pi/releases/tag/v0.52.9</link>
      <guid isPermaLink="true">https://github.com/earendil-works/pi/releases/tag/v0.52.9</guid>
      <pubDate>Sun, 08 Feb 2026 23:19:04 GMT</pubDate>
      <description>Pi v0.52.9 adds hot-reload for extensions, short disable flag aliases, and richer tool introspection via getAllTools().
• New ctx.reload() extension API method triggers a full runtime reload, enabling hot-reloading of configuration or restarting the agent programmatically.
• New short CLI aliases `-ne`, `-ns`, and `-np` for `--no-extensions`, `--no-skills`, and `--no-prompt-templates` speed up interactive usage and scripting.
• Exported `/export` HTML sessions now include collapsible tool input schemas (parameter names, types, descriptions) for easier session review and sharing.
• pi.getAllTools() now returns tool parameters in addition to name and description, enabling richer extension integrations.</description>
    </item>
    <item>
      <title>Pi v0.52.8</title>
      <link>https://github.com/earendil-works/pi/releases/tag/v0.52.8</link>
      <guid isPermaLink="true">https://github.com/earendil-works/pi/releases/tag/v0.52.8</guid>
      <pubDate>Sat, 07 Feb 2026 16:52:16 GMT</pubDate>
      <description>Pi v0.52.8 adds Emacs kill-ring editing, OpenRouter auto-routing, and programmatic editor paste for extensions.
• Adds Emacs-style kill ring (`ctrl+k`/`ctrl+y`/`alt+y`) and undo (`ctrl+z`) keybindings in the editor input.
• Adds `openrouter:auto` model alias for automatic OpenRouter model routing.
• Enables extensions to programmatically paste content into the editor via `pasteToEditor` in the extension UI context.
• Adds helpful output for `pi &lt;package&gt; --help` and invalid subcommands instead of silent failure.
Breaking changes:
• The default model is changed from Claude Opus 4.5 to Opus 4.6; any workflow pinned to the implicit default will now use Opus 4.6.</description>
    </item>
    <item>
      <title>Pi v0.52.7</title>
      <link>https://github.com/earendil-works/pi/releases/tag/v0.52.7</link>
      <guid isPermaLink="true">https://github.com/earendil-works/pi/releases/tag/v0.52.7</guid>
      <pubDate>Fri, 06 Feb 2026 18:21:47 GMT</pubDate>
      <description>Pi v0.52.7 adds per-model config overrides and unauthenticated Bedrock proxy support via new env vars.
• Adds `modelOverrides` key in `models.json` to customize individual built-in provider models (e.g., context window, parameters) without replacing the entire provider model list.
• Supports merge-by-id behavior for `models.json` provider `models`, letting custom model entries upsert or extend built-ins rather than replacing the full list.
• Supports unauthenticated Bedrock proxy endpoints via new `AWS_BEDROCK_SKIP_AUTH` and `AWS_BEDROCK_FORCE_HTTP1` environment variables.
Breaking changes:
• `models.json` provider `models` no longer performs full replacement of built-in models — it now merges by `id`, keeping built-in models by default and upserting custom entries. Any config that relied on `models` to fully replace a provider&apos;s model list will now also include the built-ins.</description>
    </item>
    <item>
      <title>Pi v0.52.0</title>
      <link>https://github.com/earendil-works/pi/releases/tag/v0.52.0</link>
      <guid isPermaLink="true">https://github.com/earendil-works/pi/releases/tag/v0.52.0</guid>
      <pubDate>Thu, 05 Feb 2026 19:44:00 GMT</pubDate>
      <description>Pi v0.52.0 adds Claude Opus 4.6 and GPT-5.3 Codex models, SSH git packages, and dynamic API key resolution via shell commands.
• Adds Claude Opus 4.6 to the model catalog.
• Adds GPT-5.3 Codex to the model catalog (OpenAI Codex provider only).
• Supports SSH URLs for git packages.
• Enables dynamic API key resolution in `auth.json` via shell command (`!command`) and environment variable lookup.
• Model selectors now display the currently selected model name.
• New `minimal-mode.ts` example extension demonstrating how to override built-in tool rendering for a minimal display mode.</description>
    </item>
    <item>
      <title>Pi v0.51.6</title>
      <link>https://github.com/earendil-works/pi/releases/tag/v0.51.6</link>
      <guid isPermaLink="true">https://github.com/earendil-works/pi/releases/tag/v0.51.6</guid>
      <pubDate>Wed, 04 Feb 2026 13:26:45 GMT</pubDate>
      <description>Pi v0.51.6 adds a configurable `resume` keybinding and smarter slash command triggering.
• Adds `resume` as a configurable keybinding action to open the session resume selector, on par with `newSession`, `tree`, and `fork`.
• Slash command menu now triggers on the first line even when other lines contain content, enabling commands to be prepended to existing text.</description>
    </item>
    <item>
      <title>Pi v0.51.4</title>
      <link>https://github.com/earendil-works/pi/releases/tag/v0.51.4</link>
      <guid isPermaLink="true">https://github.com/earendil-works/pi/releases/tag/v0.51.4</guid>
      <pubDate>Tue, 03 Feb 2026 22:07:09 GMT</pubDate>
      <description>Share URLs now default to the pi.dev domain.
• Share URLs now default to pi.dev (replacing the previous default domain).</description>
    </item>
    <item>
      <title>Pi v0.51.3</title>
      <link>https://github.com/earendil-works/pi/releases/tag/v0.51.3</link>
      <guid isPermaLink="true">https://github.com/earendil-works/pi/releases/tag/v0.51.3</guid>
      <pubDate>Tue, 03 Feb 2026 16:42:02 GMT</pubDate>
      <description>Pi v0.51.3 adds extension command discovery via ExtensionAPI.getCommands() and local path support for `pi install`/`pi remove`.
• Adds ExtensionAPI.getCommands() so extensions can enumerate available slash commands (extensions, prompt templates, skills) for programmatic invocation.
• Exports `SlashCommandInfo` types to support command discovery integrations.
• Adds a `commands.ts` example extension demonstrating command discovery invocation patterns.
• Supports local filesystem paths in `pi install` and `pi remove`, with relative paths resolved against the settings file.
Breaking changes:
• The RPC `get_commands` response and `SlashCommandSource` type have the `&quot;template&quot;` value renamed to `&quot;prompt&quot;` — any code matching on `&quot;template&quot;` will break.</description>
    </item>
    <item>
      <title>Pi v0.51.2</title>
      <link>https://github.com/earendil-works/pi/releases/tag/v0.51.2</link>
      <guid isPermaLink="true">https://github.com/earendil-works/pi/releases/tag/v0.51.2</guid>
      <pubDate>Tue, 03 Feb 2026 01:20:10 GMT</pubDate>
      <description>Pi v0.51.2 adds extension UI controls for tool output expansion and install-method-aware update instructions.
• Adds `ExtensionUIContext` methods `getToolsExpanded` and `setToolsExpanded` so extensions can programmatically control tool output expansion in the UI.
• Adds install method detection to display package-manager-specific update instructions (e.g., brew, apt) when an update is available.</description>
    </item>
    <item>
      <title>Pi v0.51.1</title>
      <link>https://github.com/earendil-works/pi/releases/tag/v0.51.1</link>
      <guid isPermaLink="true">https://github.com/earendil-works/pi/releases/tag/v0.51.1</guid>
      <pubDate>Mon, 02 Feb 2026 18:38:01 GMT</pubDate>
      <description>Pi v0.51.1 adds a programmatic session-switching Extension API and a new terminal clear-on-shrink setting.
• New ctx.switchSession(sessionPath) Extension API lets extensions programmatically switch sessions.
• New `terminal.clearOnShrink` setting (also togglable via `PI_CLEAR_ON_SHRINK=1`) pins editor and footer to the bottom of the terminal when content shrinks.</description>
    </item>
    <item>
      <title>Pi v0.51.0</title>
      <link>https://github.com/earendil-works/pi/releases/tag/v0.51.0</link>
      <guid isPermaLink="true">https://github.com/earendil-works/pi/releases/tag/v0.51.0</guid>
      <pubDate>Sun, 01 Feb 2026 23:52:34 GMT</pubDate>
      <description>Pi v0.51.0 adds Android/Termux support, bash spawn hooks, Nix/Guix compatibility, and a full Extension UI RPC protocol.
• Supports Android via Termux, with graceful clipboard fallback when `termux-api` is unavailable.
• New pi.setBashSpawnHook() API lets extensions intercept and modify bash commands, working directory, and environment variables before execution.
• Adds Linux ARM64 musl (Alpine Linux) support via updated clipboard dependency.
• New `PI_PACKAGE_DIR` environment variable overrides the package path for Nix/Guix content-addressed package managers where store paths tokenize poorly.
• The `/resume` session picker gains a named-session-only filter toggle (Ctrl+N by default, configurable via `toggleSessionNamedFilter` keybinding).
• New isToolCallEventType() type guard lets extension developers narrow `ToolCallEvent` types per tool for stronger TypeScript safety.
• Full Extension UI Protocol RPC documentation and examples enable headless clients to support interactive extension dialogs and notifications.
• Exports `discoverAndLoadExtensions` from the package, enabling extension testing without a local repo clone.
Breaking changes:
• The `ToolDefinition.execute` parameter order has changed from (toolCallId, params, onUpdate, ctx, signal) to (toolCallId, params, signal, onUpdate, ctx). Any existing extension that implements `execute` must swap the `signal` and `onUpdate` parameters or it will break.</description>
    </item>
    <item>
      <title>Pi v0.50.9</title>
      <link>https://github.com/earendil-works/pi/releases/tag/v0.50.9</link>
      <guid isPermaLink="true">https://github.com/earendil-works/pi/releases/tag/v0.50.9</guid>
      <pubDate>Sun, 01 Feb 2026 08:37:31 GMT</pubDate>
      <description>Pi v0.50.9 adds prompt cache retention control and a new titlebar spinner extension example.
• New `cacheRetention` stream option lets you control prompt cache retention duration with provider-specific mappings, defaulting to short retention.
• New `titlebar-spinner.ts` example extension displays a braille spinner animation in the terminal title bar while the agent is working.
• Adds `PI_AI_ANTIGRAVITY_VERSION` environment variable to the help text for easier version management.</description>
    </item>
    <item>
      <title>Pi v0.50.8</title>
      <link>https://github.com/earendil-works/pi/releases/tag/v0.50.8</link>
      <guid isPermaLink="true">https://github.com/earendil-works/pi/releases/tag/v0.50.8</guid>
      <pubDate>Sun, 01 Feb 2026 01:35:18 GMT</pubDate>
      <description>Pi v0.50.8 adds threaded session picker, keybindable fork/tree/new commands, retry cap, Qwen OAuth, and new extension hooks.
• Adds `newSession`, `tree`, and `fork` keybinding actions for `/new`, `/tree`, and `/fork` commands (unbound by default).
• New `retry.maxDelayMs` setting caps how long Pi will wait on server-requested retry delays — requests exceeding the cap fail immediately with an informative error instead of hanging silently (default: 60 000 ms).
• Adds &apos;Threaded&apos; sort mode to the `/resume` session picker (now default), displaying sessions as a tree based on fork relationships with compact one-line format showing message count and age.
• Adds Qwen CLI OAuth provider extension example and `modifyModels` hook support for extension-registered providers at registration time.
• Supports Qwen thinking format for OpenAI-compatible completions via `enable_thinking`.
• Adds `resources_discover` extension hook to supply additional skills, prompts, and themes on startup and reload.
• Adds sticky column tracking so the editor restores the preferred column when vertically navigating across short lines.</description>
    </item>
    <item>
      <title>Pi v0.50.6</title>
      <link>https://github.com/earendil-works/pi/releases/tag/v0.50.6</link>
      <guid isPermaLink="true">https://github.com/earendil-works/pi/releases/tag/v0.50.6</guid>
      <pubDate>Fri, 30 Jan 2026 21:05:09 GMT</pubDate>
      <description>Pi v0.50.6 adds ctx.getSystemPrompt() for extensions to read the active system prompt.
• Adds ctx.getSystemPrompt() to the extension context API, enabling extensions to access the current effective system prompt at runtime.</description>
    </item>
    <item>
      <title>Pi v0.50.4</title>
      <link>https://github.com/earendil-works/pi/releases/tag/v0.50.4</link>
      <guid isPermaLink="true">https://github.com/earendil-works/pi/releases/tag/v0.50.4</guid>
      <pubDate>Fri, 30 Jan 2026 02:28:25 GMT</pubDate>
      <description>Pi v0.50.4 adds OSC 52 clipboard over SSH, Vercel AI Gateway routing, new RPC command, and richer editor navigation.
• Enables `/copy` to work over SSH and mosh sessions via OSC 52 terminal escape sequence.
• Adds Vercel AI Gateway routing with provider failover and load balancing, configured via `vercelGatewayRouting` in models.json.
• New `set_session_name` RPC command lets headless clients set the session display name programmatically.
• Adds Bash/Readline-style character jump navigation: Ctrl+] forward, Ctrl+Alt+] backward.
• Adds Emacs-style Ctrl+B / Ctrl+F keybindings for word-level cursor navigation in the editor.
• Editor now jumps to line start on Up at the first visual line, and line end on Down at the last visual line.
• New `&quot;none&quot;` option for `doubleEscapeAction` setting completely disables the double-escape shortcut.</description>
    </item>
    <item>
      <title>Pi v0.50.3</title>
      <link>https://github.com/earendil-works/pi/releases/tag/v0.50.3</link>
      <guid isPermaLink="true">https://github.com/earendil-works/pi/releases/tag/v0.50.3</guid>
      <pubDate>Thu, 29 Jan 2026 03:20:59 GMT</pubDate>
      <description>Pi v0.50.3 adds Kimi For Coding (Moonshot AI) as a new provider via KIMI_API_KEY.
• Adds Kimi For Coding provider, enabling access to Moonshot AI&apos;s Anthropic-compatible coding API via the `KIMI_API_KEY` environment variable.</description>
    </item>
    <item>
      <title>Pi v0.50.2</title>
      <link>https://github.com/earendil-works/pi/releases/tag/v0.50.2</link>
      <guid isPermaLink="true">https://github.com/earendil-works/pi/releases/tag/v0.50.2</guid>
      <pubDate>Thu, 29 Jan 2026 02:25:52 GMT</pubDate>
      <description>Pi v0.50.2 adds Hugging Face provider, extended prompt caching, /files command, shell keybindings, and RPC get_commands.
• Adds Hugging Face provider via OpenAI-compatible Inference Router — set `HF_TOKEN` to access HF models.
• New `PI_CACHE_RETENTION=long` env var enables 1-hour prompt caching for Anthropic and 24-hour for OpenAI, vs. short in-memory defaults.
• New `/files` command lists all file operations (read, write, edit) performed in the current session.
• Adds shell-style keybindings: `alt+b`/`alt+f` for word navigation and `ctrl+d` for forward character delete.
• New `autocompleteMaxVisible` setting (3–20 items, default 5) controls autocomplete dropdown height via `/settings` or `settings.json`.
• New `get_commands` RPC method lets headless clients programmatically list available commands.</description>
    </item>
    <item>
      <title>Pi v0.50.0</title>
      <link>https://github.com/earendil-works/pi/releases/tag/v0.50.0</link>
      <guid isPermaLink="true">https://github.com/earendil-works/pi/releases/tag/v0.50.0</guid>
      <pubDate>Mon, 26 Jan 2026 15:56:46 GMT</pubDate>
      <description>Pi v0.50.0 adds package management, custom providers, Azure OpenAI Responses, hot reload, and a new `--verbose` flag.
• New `pi install`, `pi remove`, `pi update`, and `pi list` commands for managing extension packages (npm/git sources).
• New `pi config` TUI command to enable/disable package and top-level resources via glob patterns.
• New `/reload` command for hot-reloading extensions, skills, prompts, themes, and context files without restarting.
• Custom provider registration via pi.registerProvider() for proxies, OAuth/SSO flows, and non-standard streaming APIs.
• Adds `azure-openai-responses` provider supporting the Azure OpenAI Responses API with deployment-aware model mapping.
• Adds OpenRouter routing support for custom models via the `openRouterRouting` field in model config.
• New `--verbose` CLI flag to override the `quietStartup` setting and show full startup output.
• New CLI flags `--skill`, `--prompt-template`, `--theme`, `--no-prompt-templates`, and `--no-themes` for resource selection at launch.
• Skill invocation messages are now collapsible in chat output, shown collapsed by default.
• Header values in `models.json` now support environment variable and shell command resolution, matching `apiKey` behavior.
• Glob pattern support (minimatch) in package filters, top-level settings arrays, and pi manifests.
• New `markdown.codeBlockIndent` setting to customize code block indentation in rendered output.
• HTTP proxy environment variable support for all API requests.
• Session renaming directly from the `/resume` picker via `Ctrl+R`.
• Session selector keybindings are now fully configurable.
• Footer now shows the active provider alongside the model when multiple providers are available.
• Exposes `copyToClipboard` utility for use by extensions.
Breaking changes:
• Header values in `models.json` now resolve environment variables: if a literal header value matches an env var name, the env var&apos;s value is used instead, which may change behavior for existing configs.
• External packages (npm/git) are now configured via the `packages` array in `settings.json` instead of `extensions`; existing `npm:`/`git:` entries in `extensions` are auto-migrated.
• Resource loading now uses `ResourceLoader` only and `settings.json` uses arrays for `extensions`, `skills`, `prompts`, and `themes`.
• `discoverAuthStorage` and `discoverModels` are removed from the SDK; `AuthStorage` and `ModelRegistry` now default to `~/.pi/agent` paths unless you pass an `agentDir`.
• The `/resume` picker sort toggle is moved from `Ctrl+R` to `Ctrl+S` (freeing `Ctrl+R` for session rename).</description>
    </item>
    <item>
      <title>Pi v0.49.3</title>
      <link>https://github.com/earendil-works/pi/releases/tag/v0.49.3</link>
      <guid isPermaLink="true">https://github.com/earendil-works/pi/releases/tag/v0.49.3</guid>
      <pubDate>Thu, 22 Jan 2026 00:44:37 GMT</pubDate>
      <description>Pi v0.49.3 adds inline bash expansion, AI image-gen extension, custom share viewer URLs, and a new word-delete hotkey.
• New `markdown.codeBlockIndent` setting to customize code block indentation in rendered output.
• New `inline-bash.ts` example extension that expands `!{command}` patterns inline within prompts.
• New `antigravity-image-gen.ts` example extension for AI image generation via Google Antigravity.
• New `PI_SHARE_VIEWER_URL` environment variable to point Pi at a custom share viewer URL.
• Adds Alt+Delete hotkey for deleting a word forwards in the editor.
Breaking changes:
• The tree selector label filter shortcut is changed from `l` to `Shift+L`; any workflow or muscle-memory relying on `l` to filter labels will now need to use `Shift+L`.</description>
    </item>
    <item>
      <title>Pi v0.49.2</title>
      <link>https://github.com/earendil-works/pi/releases/tag/v0.49.2</link>
      <guid isPermaLink="true">https://github.com/earendil-works/pi/releases/tag/v0.49.2</guid>
      <pubDate>Mon, 19 Jan 2026 15:16:04 GMT</pubDate>
      <description>Pi v0.49.2 adds AWS container credential detection, quiet startup, and richer HTML exports with JSONL download.
• Supports AWS credential detection for ECS/Kubernetes environments via `AWS_CONTAINER_CREDENTIALS_RELATIVE_URI`, `AWS_CONTAINER_CREDENTIALS_FULL_URI`, and `AWS_WEB_IDENTITY_TOKEN_FILE`.
• Adds &apos;quiet startup&apos; setting configurable via `/settings`.
• HTML exports now include a JSONL download button and jump-to-last-message navigation.
• Adds `widgetPlacement` option in pi.addWidget() for controlling extension widget placement.
Breaking changes:
• The `strictResponsesPairing` compat option has been removed from the models.json schema.</description>
    </item>
    <item>
      <title>Pi v0.49.1</title>
      <link>https://github.com/earendil-works/pi/releases/tag/v0.49.1</link>
      <guid isPermaLink="true">https://github.com/earendil-works/pi/releases/tag/v0.49.1</guid>
      <pubDate>Sun, 18 Jan 2026 23:25:10 GMT</pubDate>
      <description>Pi v0.49.1 adds undo in interactive mode, richer session management, shell-command API key retrieval, and Azure Responses pairing support.
• Adds `strictResponsesPairing` compat option for custom OpenAI Responses models on Azure.
• Session selector (`/resume`) gains path display toggle (`Ctrl+P`) and inline session deletion (`Ctrl+D`).
• Adds undo support in interactive mode via `Ctrl+-` hotkey.
• API keys in `models.json` can now be sourced from shell commands using the `!` prefix, enabling integration with system keychains (e.g., macOS Keychain).
• Share URLs now use hash fragments (`#`) instead of query strings, keeping session IDs out of server logs.</description>
    </item>
    <item>
      <title>Pi v0.49.0</title>
      <link>https://github.com/earendil-works/pi/releases/tag/v0.49.0</link>
      <guid isPermaLink="true">https://github.com/earendil-works/pi/releases/tag/v0.49.0</guid>
      <pubDate>Sat, 17 Jan 2026 21:04:15 GMT</pubDate>
      <description>Pi v0.49.0 adds Emacs-style kill ring editing, per-entry labels via ExtensionAPI, and programmatic context compaction.
• Adds pi.setLabel(entryId, label) to the ExtensionAPI for setting per-entry labels programmatically from extensions.
• Exports `keyHint`, `appKeyHint`, `editorKey`, `appKey`, and `rawKeyHint` so extensions can format keybinding hints consistently.
• Adds `showHardwareCursor` setting to control cursor visibility while retaining IME positioning support.
• Adds Emacs-style kill ring editing with yank, yank-pop, Alt+letter handling, and Alt+D delete-word-forward in the interactive editor.
• Adds ctx.compact() and ctx.getContextUsage() to extension contexts for programmatic compaction and context-usage inspection.
• Exports `VERSION` from the package index for use in extensions and custom headers.
Breaking changes:
• The `pi-internal://` path resolution has been removed from the read tool — any extension or workflow relying on `pi-internal://` URIs will break.</description>
    </item>
    <item>
      <title>Pi v0.48.0</title>
      <link>https://github.com/earendil-works/pi/releases/tag/v0.48.0</link>
      <guid isPermaLink="true">https://github.com/earendil-works/pi/releases/tag/v0.48.0</guid>
      <pubDate>Fri, 16 Jan 2026 23:34:10 GMT</pubDate>
      <description>Pi v0.48.0 adds shell alias support, extension argument completions, and bash-style prompt template slicing
• New `quietStartup` setting silences the version header, loaded context info, and model scope line on startup
• New `shellCommandPrefix` setting prepends a command to every bash execution, enabling alias expansion in non-interactive shells
• New `editorPaddingX` setting controls horizontal padding (0–3) in the input editor
• Extension commands can now expose argument auto-completions via `getArgumentCompletions` in pi.registerCommand()
• Exports `getShellConfig` so extensions can detect and respond to the user&apos;s shell environment
• Adds bash-style argument slicing for prompt templates
• Bash tool now displays the configured timeout value in the UI when a timeout is set
• navigateTree() gains `replaceInstructions` option to override the default summarization prompt, and a `label` option to tag branch summary entries
• Adds `thinkingText` and `selectedBg` fields to the theme schema
Breaking changes:
• Hardware cursor is now disabled by default; the previous opt-out env var `PI_NO_HARDWARE_CURSOR=1` is replaced by `PI_HARDWARE_CURSOR=1` to opt in.</description>
    </item>
    <item>
      <title>Pi v0.47.0</title>
      <link>https://github.com/earendil-works/pi/releases/tag/v0.47.0</link>
      <guid isPermaLink="true">https://github.com/earendil-works/pi/releases/tag/v0.47.0</guid>
      <pubDate>Fri, 16 Jan 2026 03:43:07 GMT</pubDate>
      <description>Pi v0.47.0 adds OpenAI Codex support, an extension input-intercept event, and Tree mode filter shortcuts.
• Adds OpenAI Codex provider support (`gpt-5.1`, `gpt-5.2`, `gpt-5.1-codex-mini`, `gpt-5.2-codex`) with prompt caching via session ID and reasoning signature retention across turns — enable with `--provider openai-codex`.
• New `pi-internal://` URL scheme in the read tool lets the model access internal coding-agent documentation, READMEs, and examples directly.
• New `input` event in the extension system allows intercepting, transforming, or fully handling user input before the agent processes it, with result types `continue`, `transform`, and `handled`.
• Adds `input-transform.ts` extension example demonstrating input interception patterns including quick mode, instant commands, and source routing.
• Custom tool HTML export: extensions implementing `renderCall`/`renderResult` now render with ANSI-to-HTML color conversion in `/share` and `/export` output.
• Direct filter shortcuts in Tree mode: Ctrl+D (default), Ctrl+T (no-tools), Ctrl+U (user-only), Ctrl+L (labeled-only), Ctrl+A (all).
• Skill commands (`/skill:name`) now expand in AgentSession, enabling their use in RPC and print modes and allowing the `input` event to intercept them before expansion.
Breaking changes:
• Extensions using `Editor` directly must now pass `TUI` as the first constructor argument: new Editor(tui, theme). The `tui` parameter is available in extension factory functions.</description>
    </item>
    <item>
      <title>Pi v0.46.0</title>
      <link>https://github.com/earendil-works/pi/releases/tag/v0.46.0</link>
      <guid isPermaLink="true">https://github.com/earendil-works/pi/releases/tag/v0.46.0</guid>
      <pubDate>Thu, 15 Jan 2026 16:38:03 GMT</pubDate>
      <description>Pi v0.46.0 adds MiniMax China provider, fuzzy edit matching, APPEND_SYSTEM.md support, and enhanced session search.
• Adds `APPEND_SYSTEM.md` support to append custom instructions to the system prompt without modifying the base prompt.
• Edit tool now uses fuzzy matching as fallback, tolerating trailing whitespace, smart quotes, Unicode dashes, and special spaces.
• Session picker search gains Ctrl+R to toggle between fuzzy and most-recent sorting, plus quoted phrase matching and `re:` regex mode.
• Adds MiniMax China (`minimax-cn`) as a new provider.
• Adds `gpt-5.2-codex` model support for GitHub Copilot and OpenCode Zen providers.
• Exports `getAgentDir` for use in extensions.
• Shows loaded prompt templates on startup for visibility into active configuration.</description>
    </item>
    <item>
      <title>Pi v0.45.4</title>
      <link>https://github.com/earendil-works/pi/releases/tag/v0.45.4</link>
      <guid isPermaLink="true">https://github.com/earendil-works/pi/releases/tag/v0.45.4</guid>
      <pubDate>Tue, 13 Jan 2026 20:38:44 GMT</pubDate>
      <description>Pi v0.45.4 adds Vercel AI Gateway provider support and new extension examples for custom UI workflows.
• Adds experimental Vercel AI Gateway provider support via `--provider vercel-ai-gateway` and `AI_GATEWAY_API_KEY` environment variable.
• New `summarize.ts` extension example for summarizing conversations using custom UI and an external model.
• New `questionnaire.ts` extension example for multi-question input with tab bar navigation.
• Enhanced `plan-mode/` extension example with explicit step tracking and a progress widget.
• Switches image processing from `sharp` to `wasm-vips`, eliminating native build requirements.</description>
    </item>
    <item>
      <title>Pi v0.45.0</title>
      <link>https://github.com/earendil-works/pi/releases/tag/v0.45.0</link>
      <guid isPermaLink="true">https://github.com/earendil-works/pi/releases/tag/v0.45.0</guid>
      <pubDate>Tue, 13 Jan 2026 01:43:31 GMT</pubDate>
      <description>Pi v0.45.0 adds MiniMax and Amazon Bedrock providers, model reordering in /scoped-models, and a bash sandbox extension example.
• Adds MiniMax provider support via `MINIMAX_API_KEY` environment variable and `minimax/MiniMax-M2.1` model identifier.
• Adds Amazon Bedrock provider support (experimental, tested with Anthropic Claude models) as a new LLM backend.
• Enables Alt+Up/Down reordering of enabled models in `/scoped-models`; order persists on Ctrl+S save and controls Ctrl+P cycling sequence.
• Adds `sandbox/` extension example demonstrating OS-level bash sandboxing via `@anthropic-ai/sandbox-runtime` with per-project configuration.</description>
    </item>
    <item>
      <title>Pi v0.44.0</title>
      <link>https://github.com/earendil-works/pi/releases/tag/v0.44.0</link>
      <guid isPermaLink="true">https://github.com/earendil-works/pi/releases/tag/v0.44.0</guid>
      <pubDate>Mon, 12 Jan 2026 18:06:15 GMT</pubDate>
      <description>Pi v0.44.0 adds session naming, fuzzy settings search, and page-jump navigation in the session selector.
• New `/name &lt;name&gt;` command sets a display name for the current session in the session selector, useful for distinguishing forked sessions.
• Extensions can programmatically get and set session names via new pi.setSessionName() and pi.getSessionName() APIs.
• New `notify.ts` extension example demonstrates desktop notifications via the OSC 777 escape sequence.
• Page-up/down navigation in `/resume` session selector jumps by 5 items at a time.
• Fuzzy search in `/settings` menu lets you type to filter settings by label.
Breaking changes:
• pi.getAllTools() now returns `ToolInfo[]` (with `name` and `description`) instead of `string[]`; extensions that only need names must use .map(t =&gt; t.name).</description>
    </item>
    <item>
      <title>Pi v0.43.0</title>
      <link>https://github.com/earendil-works/pi/releases/tag/v0.43.0</link>
      <guid isPermaLink="true">https://github.com/earendil-works/pi/releases/tag/v0.43.0</guid>
      <pubDate>Mon, 12 Jan 2026 00:01:34 GMT</pubDate>
      <description>Pi v0.43.0 adds /scoped-models cycling, skill slash commands with fuzzy autocomplete, and new extension hooks for model changes and custom working messages.
• New `/scoped-models` command lets you enable/disable models for Ctrl+P cycling; use Ctrl+S to persist choices to settings.json.
• Loaded skills are now registered as `/skill:name` slash commands for quick access; toggle via `/settings` or `skills.enableSkillCommands`.
• Slash command autocomplete now uses fuzzy matching (e.g., `/skbra` matches `/skill:brave-search`).
• New `model_select` extension hook fires on model changes (via `/model`, cycling, or session restore) with `source` and `previousModel` fields.
• New ctx.ui.setWorkingMessage() extension API lets extensions customize the &apos;Working...&apos; message during streaming.
• New `SessionInfo.cwd` field exposes a session&apos;s working directory; `/resume` All view now displays session cwd with loading progress.
• SessionManager.list() and SessionManager.listAll() now accept an optional `onProgress` callback for progress updates.
• New `SessionListProgress` type export for use with progress callbacks.
• `/tree` branch summarization now offers three options: &apos;No summary&apos;, &apos;Summarize&apos;, and &apos;Summarize with custom prompt&apos;; custom prompts are appended to default summarization instructions.
• Tab in the `/resume` selector toggles between current-folder and all sessions.
Breaking changes:
• The `/branch` command is renamed to `/fork`; RPC `branch` → `fork` and `get_branch_messages` → `get_fork_messages`; SDK branch() → fork() and getBranchMessages() → getForkMessages(); AgentSession branch() → fork() and getUserMessagesForBranching() → getUserMessagesForForking(); extension events `session_before_branch` → `session_before_fork` and `session_branch` → `session_fork`; settings value `doubleEscapeAction: &quot;branch&quot;` → `&quot;fork&quot;`.
• Extension editor (ctx.ui.editor()) submit key changed from Ctrl+Enter to Enter (Shift+Enter now inserts newlines); extensions with hardcoded &quot;ctrl+enter&quot; hints need updating.
• SessionManager.list() and SessionManager.listAll() are now async, returning `Promise&lt;SessionInfo[]&gt;`; all callers must be updated to await them.</description>
    </item>
    <item>
      <title>Pi v0.42.2</title>
      <link>https://github.com/earendil-works/pi/releases/tag/v0.42.2</link>
      <guid isPermaLink="true">https://github.com/earendil-works/pi/releases/tag/v0.42.2</guid>
      <pubDate>Sat, 10 Jan 2026 00:44:39 GMT</pubDate>
      <description>Pi v0.42.2 adds smarter model switching, a custom footer API, and a hotkey to recover queued messages.
• Adds pre-filtering and exact-match auto-selection to `/model &lt;search&gt;`, with `provider/model` syntax (e.g., `/model openai/gpt-4`) to disambiguate across providers.
• Introduces `FooterDataProvider` API: ctx.ui.setFooter() gains a third `footerData` parameter exposing getGitBranch(), getExtensionStatuses(), and onBranchChange() for reactive custom footers.
• Adds `Alt+Up` hotkey to restore queued steering or follow-up messages back into the editor without aborting the current run.</description>
    </item>
    <item>
      <title>Pi v0.39.0</title>
      <link>https://github.com/earendil-works/pi/releases/tag/v0.39.0</link>
      <guid isPermaLink="true">https://github.com/earendil-works/pi/releases/tag/v0.39.0</guid>
      <pubDate>Thu, 08 Jan 2026 23:11:49 GMT</pubDate>
      <description>Pi v0.39.0 adds remote SSH tool execution, --no-tools flag, Wayland clipboard, and runtime theme switching for extensions.
• Adds `--no-tools` flag to disable all built-in tools, enabling pure extension-defined tool setups.
• Adds pluggable operations interfaces (`ReadOperations`, `WriteOperations`, `BashOperations`, `GrepOperations`, etc.) for routing built-in tool calls over SSH or other transports.
• Adds `user_bash` event so extensions can intercept and redirect user `!`/`!!` shell commands to remote systems.
• Adds setActiveTools() to ExtensionAPI for dynamically managing the active tool set at runtime.
• Adds ctx.ui.getAllThemes(), ctx.ui.getTheme(name), and ctx.ui.setTheme(name | Theme) for extensions to list, load, and switch themes at runtime.
• Adds Wayland clipboard support for the `/copy` command via wl-copy with xclip/xsel fallback.
• Adds experimental `{ overlay: true }` option to ctx.ui.custom() for floating modal components that composite over existing content without clearing the screen.
• Adds `AgentSession.skills` and `AgentSession.skillWarnings` properties to access loaded skills and warnings without re-running discovery.
• Ships `ssh.ts` example extension for remote tool execution via `--ssh user@host:/path`.
• Ships `interactive-shell.ts` example for running interactive commands (vim, git rebase, htop) with full terminal access via `!i` prefix or auto-detection.
Breaking changes:
• The `before_agent_start` event now receives `systemPrompt` in the event object and must return `systemPrompt` (full replacement) instead of `systemPromptAppend`; extensions that were appending must now use the `event.systemPrompt + extra` pattern.
• discoverSkills() now returns `{ skills: Skill[], warnings: SkillWarning[] }` instead of `Skill[]`; callers that destructured or iterated the return value directly will break.</description>
    </item>
    <item>
      <title>Pi v0.38.0</title>
      <link>https://github.com/earendil-works/pi/releases/tag/v0.38.0</link>
      <guid isPermaLink="true">https://github.com/earendil-works/pi/releases/tag/v0.38.0</guid>
      <pubDate>Thu, 08 Jan 2026 11:22:50 GMT</pubDate>
      <description>Pi v0.38.0 adds `--no-extensions`, async extension factories, UI dialog timeouts, custom editor components, and graceful shutdown control.
• Adds `--no-extensions` flag to disable auto-discovery of extensions while still loading explicit `-e` paths.
• Adds `PI_SKIP_VERSION_CHECK` environment variable to suppress startup version-update notifications.
• Adds `thinkingBudgets` setting to customize per-level token budgets for token-based providers.
• Extension UI dialogs (ctx.ui.select(), ctx.ui.confirm(), ctx.ui.input()) now support a `timeout` option with live countdown display.
• Extensions can now provide custom editor components via ctx.ui.setEditorComponent().
• Extension factories can now be async, enabling dynamic imports and lazy-loaded dependencies.
• Adds ctx.shutdown() to extension contexts for requesting graceful shutdown, with mode-aware deferral (idle in interactive, post-response in RPC, no-op in print).
• SDK exports `InteractiveMode`, runPrintMode(), and runRpcMode() for building custom run modes.
Breaking changes:
• ctx.ui.custom() factory signature changed from (tui, theme, done) to (tui, theme, keybindings, done); custom components must add the new `keybindings` parameter.
• `LoadedExtension` type renamed to `Extension`; code referencing `LoadedExtension` will fail to compile.
• LoadExtensionsResult.setUIContext() removed; replace with the `runtime: ExtensionRuntime` field.
• `ExtensionRunner` constructor now requires `runtime: ExtensionRuntime` as a second parameter.
• ExtensionRunner.initialize() signature changed from an options object to positional params (actions, contextActions, commandContextActions?, uiContext?).
• ExtensionRunner.getHasUI() renamed to hasUI(); calls to getHasUI() will break.
• OpenAI Codex model aliases `gpt-5`, `gpt-5-mini`, `gpt-5-nano`, and `codex-mini-latest` removed; replace with canonical IDs `gpt-5.1`, `gpt-5.1-codex-mini`, `gpt-5.2`, or `gpt-5.2-codex`.</description>
    </item>
    <item>
      <title>Pi v0.37.6</title>
      <link>https://github.com/earendil-works/pi/releases/tag/v0.37.6</link>
      <guid isPermaLink="true">https://github.com/earendil-works/pi/releases/tag/v0.37.6</guid>
      <pubDate>Tue, 06 Jan 2026 23:44:34 GMT</pubDate>
      <description>Extension UI dialogs gain AbortSignal support for programmatic timeouts; HTML export improves Codex session visibility.
• Adds optional `AbortSignal` parameter to ctx.ui.select(), ctx.ui.confirm(), and ctx.ui.input() extension dialogs, enabling programmatic dismissal and timeout patterns.
• HTML export now includes bridge prompts in model change messages for Codex sessions.</description>
    </item>
    <item>
      <title>Pi v0.37.5</title>
      <link>https://github.com/earendil-works/pi/releases/tag/v0.37.5</link>
      <guid isPermaLink="true">https://github.com/earendil-works/pi/releases/tag/v0.37.5</guid>
      <pubDate>Tue, 06 Jan 2026 23:17:46 GMT</pubDate>
      <description>Pi v0.37.5 adds runtime model/thinking controls, exported truncation utilities, and a full UI component library for extensions.
• Adds setModel(), getThinkingLevel(), and setThinkingLevel() ExtensionAPI methods so extensions can switch model and thinking level at runtime.
• Exports truncation utilities (`truncateHead`, `truncateTail`, `truncateLine`, `formatSize`, `DEFAULT_MAX_BYTES`, `DEFAULT_MAX_LINES`, `TruncationOptions`, `TruncationResult`) for use in custom tools.
• Exports the full suite of built-in UI components (`ArminComponent`, `AssistantMessageComponent`, `BashExecutionComponent`, `BorderedLoader`, and 20+ more) plus utilities `renderDiff` and `truncateToVisualLines` for extension developers.
• New `truncated-tool.ts` example demonstrating output truncation with custom rendering for extensions.
• New `preset.ts` example demonstrating preset configurations with model, thinking, and tools switching.
• New Common Patterns and Key Rules sections in `docs/tui.md` with copy-paste code for `SelectList`, `BorderedLoader`, `SettingsList`, `setStatus`, `setWidget`, and `setFooter`.</description>
    </item>
    <item>
      <title>Pi v0.37.0</title>
      <link>https://github.com/earendil-works/pi/releases/tag/v0.37.0</link>
      <guid isPermaLink="true">https://github.com/earendil-works/pi/releases/tag/v0.37.0</guid>
      <pubDate>Mon, 05 Jan 2026 23:08:56 GMT</pubDate>
      <description>Pi v0.37.0 adds headless OAuth over SSH, per-message shareable URLs, and a claude-rules extension example.
• Adds headless OAuth login with paste-based URL/code entry, enabling authentication over SSH sessions without a DISPLAY environment variable.
• Adds copy-link button in the share viewer to generate URLs that navigate directly to a specific message.
• Adds `claude-rules` extension example that loads `.claude/rules/` entries into the system prompt.
• OpenAI Codex provider now sets thinking level separately from model selection, with the provider clamping to each model&apos;s supported range.
Breaking changes:
• OpenAI Codex per-thinking-level model variants have been removed; thinking level must now be set separately.</description>
    </item>
    <item>
      <title>Pi v0.36.0</title>
      <link>https://github.com/earendil-works/pi/releases/tag/v0.36.0</link>
      <guid isPermaLink="true">https://github.com/earendil-works/pi/releases/tag/v0.36.0</guid>
      <pubDate>Mon, 05 Jan 2026 05:18:05 GMT</pubDate>
      <description>Pi v0.36.0 adds experimental OpenAI Codex OAuth so ChatGPT Plus/Pro subscribers can access Codex models without a separate API key.
• Adds experimental OpenAI Codex OAuth provider, letting ChatGPT Plus/Pro subscribers authenticate and use Codex models via `/login openai-codex`.</description>
    </item>
    <item>
      <title>Pi v0.35.0</title>
      <link>https://github.com/earendil-works/pi/releases/tag/v0.35.0</link>
      <guid isPermaLink="true">https://github.com/earendil-works/pi/releases/tag/v0.35.0</guid>
      <pubDate>Mon, 05 Jan 2026 02:43:07 GMT</pubDate>
      <description>Pi v0.35.0 unifies hooks and custom tools into a single extensions system with a richer API and renames slash commands to prompt templates.
• Introduces unified extensions system — hooks and custom tools are now a single concept discovered from `extensions/` directories, configured via one `--extension` / `-e` flag and one `extensions` key in settings.json.
• Extensions now support npm package.json manifests with declared entry points and dependencies (resolved via jiti), enabling extensions to be published to and installed from npm.
• Custom tools registered via pi.registerTool() now receive the same full `ctx` object as event handlers, giving them access to UI prompts, session management, and all other context capabilities.
• New extension API surface: pi.registerCommand(), pi.registerShortcut(), pi.registerFlag(), pi.registerMessageRenderer(), pi.appendEntry(), pi.getActiveTools() / pi.setActiveTools(), pi.getAllTools(), `pi.events` event bus for cross-extension communication.
• New UI API: ctx.ui.setStatus() (persistent per-extension footer status), ctx.ui.setWidget() (widget above editor), ctx.ui.setTitle() (terminal window title), ctx.ui.custom() (full TUI component with keyboard handling), ctx.ui.editor() (multi-line editor with external editor support).
• Renames &apos;slash commands&apos; to &apos;prompt templates&apos;; `commands/` directories are auto-migrated to `prompts/` on startup.
• Session format bumped to version 3; existing sessions are automatically migrated on first load (message role `hookMessage` → `custom`).
Breaking changes:
• The `hooks` and `customTools` arrays in settings.json are replaced by a single `extensions` array; existing configs must be updated manually.
• The `--hook` and `--tool` CLI flags are replaced by `--extension` / `-e`; invocations using the old flags will break.
• Extension source files must be moved from `hooks/` and `tools/` directories to `extensions/`; deprecation warnings are shown on startup but old paths are not auto-migrated.
• SDK: `HookAPI`, `HookContext`, `HookCommandContext`, `HookUIContext`, `CustomToolAPI`, `CustomToolContext`, `CustomToolUIContext`, `CustomTool`, `CustomToolFactory`, `HookMessage` types are renamed — existing TypeScript extensions will fail to compile without updates.
• SDK: discoverAndLoadHooks(), discoverAndLoadCustomTools(), loadHooks(), loadCustomTools() are replaced by discoverAndLoadExtensions() and loadExtensions().
• SDK: `HookRunner` is renamed to `ExtensionRunner`; wrapToolsWithHooks() / wrapToolWithHooks() are renamed to wrapToolsWithExtensions() / wrapToolWithExtensions().
• SDK `CreateAgentSessionOptions`: `.hooks` is removed; `.additionalHookPaths` → `.additionalExtensionPaths`; `.preloadedHooks` → `.preloadedExtensions`; `.customTools` type changed from `Array&lt;{ path?; tool: CustomTool }&gt;` to `ToolDefinition[]`; `.additionalCustomToolPaths` merged into `.additionalExtensionPaths`; `.slashCommands` → `.promptTemplates`.
• SDK `AgentSession`: `.hookRunner` → `.extensionRunner`; `.fileCommands` → `.promptTemplates`; .sendHookMessage() → .sendCustomMessage().
• SDK: `FileSlashCommand`, `LoadSlashCommandsOptions` types and discoverSlashCommands(), loadSlashCommands(), expandSlashCommand(), getCommandsDir() functions are renamed; callers must update imports.
• Session files with message role `hookMessage` are migrated to `custom` on first load under the new session version 3 format.</description>
    </item>
    <item>
      <title>Pi v0.34.1</title>
      <link>https://github.com/earendil-works/pi/releases/tag/v0.34.1</link>
      <guid isPermaLink="true">https://github.com/earendil-works/pi/releases/tag/v0.34.1</guid>
      <pubDate>Sun, 04 Jan 2026 19:58:37 GMT</pubDate>
      <description>Pi v0.34.1 adds a Hook API method to dynamically set the terminal window/tab title from hooks.
• New Hook API method ctx.ui.setTitle(title) lets hooks dynamically set the terminal window or tab title.</description>
    </item>
    <item>
      <title>Pi v0.34.0</title>
      <link>https://github.com/earendil-works/pi/releases/tag/v0.34.0</link>
      <guid isPermaLink="true">https://github.com/earendil-works/pi/releases/tag/v0.34.0</guid>
      <pubDate>Sun, 04 Jan 2026 19:31:34 GMT</pubDate>
      <description>Pi v0.34.0 adds dynamic system prompt injection, multi-message hook returns, and runtime tool toggling via hooks.
• Enables `before_agent_start` hook handlers to return `systemPromptAppend` to dynamically inject text into the system prompt per turn; multiple hooks&apos; appends are concatenated.
• Allows `before_agent_start` handlers to return and inject multiple messages in a single turn, not just the first.
• Expands the tool registry to include all built-in tools (`read`, `bash`, `edit`, `write`, `grep`, `find`, `ls`) even when `--tools` restricts the initially active set, letting hooks enable any registered tool via pi.setActiveTools().
• Automatically rebuilds the system prompt — including tool descriptions and guidelines — whenever the active tool set changes via setActiveTools().
• Adds example hook `tools.ts` providing an interactive `/tools` command to enable/disable tools with session persistence.
• Adds example hook `pirate.ts` demonstrating `systemPromptAppend` to alter agent persona at runtime.
• Displays full stack traces for hook errors to aid debugging.</description>
    </item>
    <item>
      <title>Pi v0.33.0</title>
      <link>https://github.com/earendil-works/pi/releases/tag/v0.33.0</link>
      <guid isPermaLink="true">https://github.com/earendil-works/pi/releases/tag/v0.33.0</guid>
      <pubDate>Sun, 04 Jan 2026 00:09:10 GMT</pubDate>
      <description>Pi v0.33.0 adds clipboard image paste, configurable keybindings, and clean-exit slash commands.
• Supports pasting clipboard images via Ctrl+V — images are saved to a temp file and attached to the message (macOS, Windows, Linux/X11).
• Adds configurable keybindings via `~/.pi/agent/keybindings.json`, covering editor navigation, deletion, and app actions like model cycling, with support for multiple bindings per action.
• New `/quit` and `/exit` slash commands exit the application gracefully, properly awaiting hook and custom tool cleanup handlers before terminating.
Breaking changes:
• All isXxx() key detection functions (isEnter(), isEscape(), isCtrlC(), etc.) have been removed from `@mariozechner/pi-tui`; replace them with matchesKey(data, keyId) (e.g., matchesKey(data, &quot;enter&quot;), matchesKey(data, &quot;ctrl+c&quot;)). Hooks and custom tools using ctx.ui.custom() with keyboard input handling will break without this change.</description>
    </item>
    <item>
      <title>Pi v0.32.2</title>
      <link>https://github.com/earendil-works/pi/releases/tag/v0.32.2</link>
      <guid isPermaLink="true">https://github.com/earendil-works/pi/releases/tag/v0.32.2</guid>
      <pubDate>Sat, 03 Jan 2026 15:09:49 GMT</pubDate>
      <description>Pi v0.32.2 adds $ARGUMENTS syntax for slash commands and enables slash/hook commands during streaming.
• Adds `$ARGUMENTS` as an alternative to `$@` in custom slash commands, aligning with Claude, Codex, and OpenCode conventions — both syntaxes remain supported.
• Slash commands and hook commands now work during agent streaming: hook commands execute immediately, file-based slash commands are queued via steer/followUp.
• New `streamingBehavior` option (`&quot;steer&quot;` or `&quot;followUp&quot;`) on prompt() lets callers specify queuing behavior when the agent is mid-stream.
• RPC `prompt` command now accepts an optional `streamingBehavior` field for remote streaming-state control.</description>
    </item>
    <item>
      <title>Pi v0.32.1</title>
      <link>https://github.com/earendil-works/pi/releases/tag/v0.32.1</link>
      <guid isPermaLink="true">https://github.com/earendil-works/pi/releases/tag/v0.32.1</guid>
      <pubDate>Sat, 03 Jan 2026 03:27:29 GMT</pubDate>
      <description>Pi v0.32.1 adds `!!command` syntax to run shell commands hidden from LLM context.
• New `!!command` syntax executes bash commands that appear in the TUI and session history but are excluded from LLM context, keeping sensitive commands private from the AI.</description>
    </item>
    <item>
      <title>Pi v0.32.0</title>
      <link>https://github.com/earendil-works/pi/releases/tag/v0.32.0</link>
      <guid isPermaLink="true">https://github.com/earendil-works/pi/releases/tag/v0.32.0</guid>
      <pubDate>Sat, 03 Jan 2026 01:49:59 GMT</pubDate>
      <description>Pi v0.32.0 adds Vertex AI support, proxy overrides in models.json, auto image resizing, and splits message delivery into steer/followUp APIs.
• Adds steer(text) and followUp(text) methods to `AgentSession`, replacing queueMessage(), with distinct delivery semantics: `steer` interrupts mid-run, `followUp` waits until the agent finishes.
• Adds `steeringMode` and `followUpMode` settings to `settings.json`, replacing `queueMode`, with automatic migration of existing settings files.
• Adds `deliverAs: &quot;followUp&quot;` option to pi.sendMessage() second parameter (now `options?: { triggerTurn?, deliverAs? }`), enabling follow-up delivery from hooks.
• Adds `steer` and `follow_up` RPC commands, `set_steering_mode` and `set_follow_up_mode` RPC commands, and `steeringMode`/`followUpMode` fields on `RpcSessionState`, replacing the old `queue_message`/`set_queue_mode` surface.
• Adds `doubleEscapeAction` key to `settings.json` (also configurable via `/settings`) to choose whether double-escape with empty editor opens `/tree` (default) or `/branch`.
• Adds `google-vertex` provider for accessing Gemini models via Google Cloud Vertex AI using Application Default Credentials.
• Adds built-in provider overrides in `models.json`: set `baseUrl` to proxy a built-in provider while keeping its models, or define `models` to fully replace the provider.
• Adds `images.autoResize` key to `settings.json` (also configurable via `/settings`) to automatically resize images larger than 2000x2000 and inject original dimensions into the prompt.
• Adds Alt+Enter keybind to queue follow-up messages while the agent is streaming.
• Exports `Theme` and `ThemeColor` types for hooks using ctx.ui.custom().
• Terminal window title now displays &apos;pi - dirname&apos; to identify which project session is active.
Breaking changes:
• AgentSession.queueMessage() is removed; use steer() for mid-run interrupts or followUp() for post-run delivery.
• `queueMode` getter on `AgentSession` is replaced by `steeringMode` and `followUpMode` getters.
• setQueueMode() on `AgentSession` is replaced by setSteeringMode() and setFollowUpMode().
• `queuedMessageCount` on `AgentSession` is renamed to `pendingMessageCount`.
• getQueuedMessages() on `AgentSession` is replaced by getSteeringMessages() and getFollowUpMessages().
• clearQueue() on `AgentSession` now returns `{ steering: string[], followUp: string[] }` instead of a flat array.
• hasQueuedMessages() on `AgentSession` is renamed to hasPendingMessages().
• pi.sendMessage() second parameter changed from `triggerTurn?: boolean` to `options?: { triggerTurn?, deliverAs? }`; callers passing a bare boolean must be updated.
• `queue_message` RPC command replaced by `steer` and `follow_up` commands.
• `set_queue_mode` RPC command replaced by `set_steering_mode` and `set_follow_up_mode` commands.
• `RpcSessionState.queueMode` field replaced by `steeringMode` and `followUpMode` fields.
• The &apos;Queue mode&apos; settings UI entry is split into &apos;Steering mode&apos; and &apos;Follow-up mode&apos;.</description>
    </item>
    <item>
      <title>Pi v0.31.0</title>
      <link>https://github.com/earendil-works/pi/releases/tag/v0.31.0</link>
      <guid isPermaLink="true">https://github.com/earendil-works/pi/releases/tag/v0.31.0</guid>
      <pubDate>Fri, 02 Jan 2026 01:01:29 GMT</pubDate>
      <description>Pi v0.31.0 adds session trees with in-place branching, a restructured hooks/tools API, structured compaction with file tracking, and new UI commands.
• Sessions now use a tree structure with `id`/`parentId` fields, enabling in-place branching via the new `/tree` command; existing sessions are auto-migrated from v1 to v2 on first load.
• New `/tree` interactive navigator supports search, ←/→ paging, filter modes toggled with Ctrl+O (default → no-tools → user-only → labeled-only → all), and `l` to bookmark entries as `LabelEntry`.
• New `/share` command uploads a session as a secret GitHub gist and returns a shareable URL via shittycodingagent.ai.
• Adds `enabledModels` key to `settings.json` as an allowlist for models, mirroring the `--models` CLI flag.
• New `ModelRegistry` class (`discoverModels`, `discoverAuthStorage`) resolves model discovery and API key lookup from `~/.pi/agent/auth.json` and `~/.pi/agent/models.json`; exposed to hooks and tools via `ctx.modelRegistry`.
• Hooks API gains granular session events: `session_start`, `session_before_switch`, `session_switch` (with `reason: &quot;new&quot; | &quot;resume&quot;`), `session_before_branch`, `session_branch`, `session_before_compact`, `session_compact`, `session_shutdown`, `session_before_tree`, `session_tree`, `before_agent_start`, and `context`.
• New hook API method pi.sendMessage(message, triggerTurn?) replaces pi.send() and creates a `CustomMessageEntry`.
• New hook API method pi.appendEntry(customType, data?) for persisting hook state without exposing it to the LLM context.
• New hook API method pi.registerCommand(name, options) for registering custom slash commands whose handlers receive `HookCommandContext`.
• New hook API method pi.registerMessageRenderer(customType, renderer) for custom TUI rendering of hook entry types.
• New hook context methods available in all events: ctx.isIdle(), ctx.abort(), ctx.hasQueuedMessages().
• New UI helpers on `ctx.ui`: editor(title, prefill?) for multi-line editing with Ctrl+G external editor support, custom(component) for full TUI component rendering, setStatus(key, text) for persistent footer status text, and `theme` getter for theme-colored text.
• New `HookCommandContext`-only methods for slash commands: ctx.waitForIdle(), ctx.newSession(options?), ctx.branch(entryId), ctx.navigateTree(targetId, options?).
• New `ctx.modelRegistry` and `ctx.model` on hook context for API key resolution.
• Custom tools `execute` signature reordered to execute(toolCallId, params, onUpdate, ctx, signal?) and gains `CustomToolContext` with `sessionManager`, `modelRegistry`, `model`, isIdle(), hasQueuedMessages(), and abort().
• New `SessionManager` tree methods: getTree(), getBranch(), getLeafId(), getLeafEntry(), getEntry(), getChildren(), getLabel().
• New `SessionManager` append methods: appendCustomEntry(), appendCustomMessageEntry(), appendLabelChange().
• New `SessionManager` branch methods: branch(entryId), branchWithSummary().
• New `AgentSession` method navigateTree(targetId, options?) for in-place session tree navigation.
• New `AgentSession` method newSession(options?) accepts optional `parentSession` for lineage tracking.
• SDK adds sendHookMessage(message, triggerTurn?) for hook message injection.
• RPC `prompt` command replaces `attachments` field with `images` field using `ImageContent` format; `auto_compaction_start` gains `reason` field (`&quot;threshold&quot;` or `&quot;overflow&quot;`); `auto_compaction_end` gains `willRetry` field; `compact` response now includes full `CompactionResult` with `summary`, `firstKeptEntryId`, `tokensBefore`, and `details`.
• RPC `reset` command replaced by `new_session` command with optional `parentSession` field.
• Structured compaction now tracks `readFiles` and `modifiedFiles` arrays in `details`, accumulated across compactions, with clear sections: Goal, Progress, Key Information, File Operations.
• New `before_compact` and `before_tree` hook events allow custom compaction implementations.
• HTML export includes a tree visualization sidebar for navigating session branches.
• HTML export supports keyboard shortcuts Ctrl+T (toggle thinking blocks) and Ctrl+O (toggle tool outputs).
• HTML export supports theme-configurable background colors via optional `export` section in theme JSON.
• HTML export syntax highlighting now uses theme colors matching TUI rendering.
• New theme token `thinkingText` for configurable thinking block text color.
• New theme tokens required for custom themes: `selectedBg`, `customMessageBg`, `customMessageText`, `customMessageLabel` (total color count increased from 46 to 50).
• New `BranchSummaryEntry`, `CustomEntry`, `CustomMessageEntry`, and `LabelEntry` session entry types.
• Session entries now use short 8-character hex IDs instead of full UUIDs.
• `ANTHROPIC_OAUTH_TOKEN` environment variable now takes precedence over `ANTHROPIC_API_KEY` for API key resolution.
Breaking changes:
• `HookEventContext` is renamed to `HookContext`; existing hooks referencing `HookEventContext` will break.
• The monolithic `session` hook event is removed; hooks must migrate to the granular events `session_start`, `session_before_switch`, `session_switch`, `session_before_branch`, `session_branch`, `session_before_compact`, `session_compact`, `session_shutdown`.
• Session entries are no longer passed in hook or custom tool events; code must call ctx.sessionManager.getEntries() or ctx.sessionManager.getBranch() instead.
• pi.send(text, attachments?) is replaced by pi.sendMessage(message, triggerTurn?); callers using the old signature will break.
• ctx.exec() moved to pi.exec(); existing hooks calling ctx.exec() will break.
• `ctx.sessionFile` replaced by ctx.sessionManager.getSessionFile().
• `hookTimeout` setting removed; hooks no longer have timeouts.
• `resolveApiKey` parameter removed; use ctx.modelRegistry.getApiKey(model) instead.
• Custom tool type `CustomAgentTool` renamed to `CustomTool`; `ToolAPI` renamed to `CustomToolAPI`; `ToolContext` renamed to `CustomToolContext`; `ToolSessionEvent` renamed to `CustomToolSessionEvent`.
• Custom tool `execute` parameter order changed from execute(toolCallId, params, signal, onUpdate) to execute(toolCallId, params, onUpdate, ctx, signal?).
• Custom tool dispose() method removed; use `onSession` with `reason: &quot;shutdown&quot;` for cleanup.
• SDK type `AppMessage` renamed to `AgentMessage`; references will break.
• SDK `Attachment` type removed; use `ImageContent` from `@mariozechner/pi-ai` and add images directly to message content arrays.
• AgentSession.branch(entryIndex: number) changed to branch(entryId: string).
• AgentSession.getUserMessagesForBranching() now returns `{ entryId, text }` instead of `{ entryIndex, text }`.
• AgentSession.reset() replaced by newSession(options?).
• SessionManager.saveXXX() methods renamed to appendXXX() (e.g., `appendMessage`, `appendCompaction`).
• SessionManager.branchInPlace() renamed to branch().
• SessionManager.reset() replaced by newSession(options?) with optional `parentSession`.
• SessionManager.createBranchedSessionFromEntries(entries, index) replaced by createBranchedSession(leafId).
• `SessionHeader.branchedFrom` renamed to `SessionHeader.parentSession`.
• SessionManager.saveCompaction(entry) replaced by appendCompaction(summary, firstKeptEntryId, tokensBefore, details?).
• SessionManager.getEntries() now excludes the session header; use getHeader() separately.
• SessionManager.getSessionFile() returns `string | undefined` (previously returned a value for in-memory sessions).
• SDK export `messageTransformer` renamed to `convertToLlm`.
• SDK `SessionContext` alias `LoadedSession` removed.
• RPC `branch` command field `entryIndex` replaced by `entryId`; `get_branch_messages` response field `entryIndex` replaced by `entryId`.
• RPC `reset` command replaced by `new_session` command.
• Custom themes must add `selectedBg`, `customMessageBg`, `customMessageText`, and `customMessageLabel` color tokens or they will fail to load.</description>
    </item>
    <item>
      <title>Pi v0.30.0</title>
      <link>https://github.com/earendil-works/pi/releases/tag/v0.30.0</link>
      <guid isPermaLink="true">https://github.com/earendil-works/pi/releases/tag/v0.30.0</guid>
      <pubDate>Thu, 25 Dec 2025 19:36:15 GMT</pubDate>
      <description>Pi v0.30.0 adds custom session directories and reverse model cycling in the TUI.
• New `--session-dir` flag lets you store sessions in any directory instead of the default `~/.pi/agent/sessions/&lt;encoded-cwd&gt;/`, compatible with `-c` (continue) and `-r` (resume) flags.
• Shift+Ctrl+P cycles models backward and Ctrl+L opens the model selector while retaining the current editor text.
Breaking changes:
• The second parameter of SessionManager.create(), continueRecent(), and list() is renamed from `agentDir` to `sessionDir` with changed semantics: when provided it now specifies the session directory directly (no cwd encoding); when omitted it falls back to `~/.pi/agent/sessions/&lt;encoded-cwd&gt;/`.
• SessionManager.open() no longer accepts an `agentDir` parameter.</description>
    </item>
    <item>
      <title>Pi v0.29.1</title>
      <link>https://github.com/earendil-works/pi/releases/tag/v0.29.1</link>
      <guid isPermaLink="true">https://github.com/earendil-works/pi/releases/tag/v0.29.1</guid>
      <pubDate>Thu, 25 Dec 2025 17:11:13 GMT</pubDate>
      <description>Pi v0.29.1 adds automatic SYSTEM.md prompt loading and a unified /settings command.
• Adds automatic custom system prompt loading: Pi now auto-loads `.pi/SYSTEM.md` (project-local) or `~/.pi/agent/SYSTEM.md` (global), with `--system-prompt` flag taking highest precedence.
• Introduces unified `/settings` command consolidating thinking level, theme, queue mode, auto-compact, show images, hide thinking, and collapse changelog into a single menu.
Breaking changes:
• The `/thinking`, `/queue`, `/theme`, `/autocompact`, and `/show-images` commands are replaced by the new `/settings` menu.</description>
    </item>
    <item>
      <title>Pi v0.29.0</title>
      <link>https://github.com/earendil-works/pi/releases/tag/v0.29.0</link>
      <guid isPermaLink="true">https://github.com/earendil-works/pi/releases/tag/v0.29.0</guid>
      <pubDate>Thu, 25 Dec 2025 03:17:53 GMT</pubDate>
      <description>Pi v0.29.0 adds word navigation, full Unicode input, and auto-spacing for pasted file paths in the CLI.
• Adds Ctrl+Left/Right and Alt+Left/Right word-by-word cursor movement in input fields.
• Supports full Unicode input beyond ASCII in all input fields.
• Auto-prepends a space when pasting a file path (starting with `/`, `~`, or `.`) after a word character.
Breaking changes:
• The `/clear` command is renamed to `/new`; hook event reasons `before_clear` and `clear` are renamed to `before_new` and `new`.</description>
    </item>
    <item>
      <title>Pi v0.28.0</title>
      <link>https://github.com/earendil-works/pi/releases/tag/v0.28.0</link>
      <guid isPermaLink="true">https://github.com/earendil-works/pi/releases/tag/v0.28.0</guid>
      <pubDate>Thu, 25 Dec 2025 02:58:52 GMT</pubDate>
      <description>Pi v0.28.0 refactors credential storage to `~/.pi/agent/auth.json` and overhauls the SDK API for auth and model management.
• Moves credential storage (API keys and OAuth tokens) from `oauth.json` and `settings.json` to `~/.pi/agent/auth.json`; existing credentials are automatically migrated on first run.
• Adds `AuthStorage` class to the SDK for managing API keys and OAuth tokens, including AuthStorage.setRuntimeApiKey() for runtime overrides.
• Adds `ModelRegistry` class to the SDK for model discovery and API key resolution, with modelRegistry.find() for locating custom and built-in models.
• Adds discoverAuthStorage() and discoverModels() discovery functions to the SDK.
• Extends createAgentSession() to accept `authStorage` and `modelRegistry` options.
• Adds getModel() from `@mariozechner/pi-ai` for accessing built-in models.
Breaking changes:
• API keys are removed from `settings.json`; they must now be stored in `~/.pi/agent/auth.json`.
• SDK: configureOAuthStorage(), defaultGetApiKey(), findModel(), and discoverAvailableModels() are removed.
• SDK: The `getApiKey` callback option to createAgentSession() is removed; use AuthStorage.setRuntimeApiKey() instead.</description>
    </item>
    <item>
      <title>Pi v0.27.6</title>
      <link>https://github.com/earendil-works/pi/releases/tag/v0.27.6</link>
      <guid isPermaLink="true">https://github.com/earendil-works/pi/releases/tag/v0.27.6</guid>
      <pubDate>Wed, 24 Dec 2025 13:00:12 GMT</pubDate>
      <description>Pi v0.27.6 enhances compaction hooks with richer context and cleans up the SessionManager API.
• Adds `previousSummary` field to `before_compact` hook payloads so hooks can carry accumulated context across compactions.
• Adds `messagesToKeep` field to `before_compact` hook payloads exposing the recent turns that will survive compaction.
• Adds `resolveApiKey` function to `before_compact` hook payloads for flexible model key resolution across settings, OAuth, and env vars.
• Adds buildSessionContext() method to SessionManager for building LLM context from entries with compaction handling.
• Renames getEntries() (formerly loadEntries()) on SessionManager to return a defensive copy of all session entries.
Breaking changes:
• loadSessionFromEntries() is renamed to buildSessionContext() — any code calling loadSessionFromEntries() will break.
• loadEntries() is renamed to getEntries() — any code calling loadEntries() will break.
• The `apiKey` string field in `before_compact` hook payloads is removed in favor of `resolveApiKey` — hooks that read `apiKey` directly will break.</description>
    </item>
    <item>
      <title>Pi v0.27.5</title>
      <link>https://github.com/earendil-works/pi/releases/tag/v0.27.5</link>
      <guid isPermaLink="true">https://github.com/earendil-works/pi/releases/tag/v0.27.5</guid>
      <pubDate>Wed, 24 Dec 2025 11:19:52 GMT</pubDate>
      <description>Pi v0.27.5 adds syntax highlighting and full markdown rendering to HTML exports.
• Adds syntax highlighting to code blocks in HTML exports using highlight.js, with theme-aware colors matching the TUI.
• Adds server-side markdown rendering in HTML exports (tables, headings, code blocks, image rendering for user messages, TUI-style language markers, light/dark theme support).</description>
    </item>
    <item>
      <title>Pi v0.27.3</title>
      <link>https://github.com/earendil-works/pi/releases/tag/v0.27.3</link>
      <guid isPermaLink="true">https://github.com/earendil-works/pi/releases/tag/v0.27.3</guid>
      <pubDate>Wed, 24 Dec 2025 01:47:35 GMT</pubDate>
      <description>Pi v0.27.3 adds persistent API key storage in settings.json with priority over environment variables.
• Supports storing API keys in `~/.pi/agent/settings.json` under the `apiKeys` field, taking priority over environment variables.</description>
    </item>
    <item>
      <title>Pi v0.27.2</title>
      <link>https://github.com/earendil-works/pi/releases/tag/v0.27.2</link>
      <guid isPermaLink="true">https://github.com/earendil-works/pi/releases/tag/v0.27.2</guid>
      <pubDate>Tue, 23 Dec 2025 02:49:55 GMT</pubDate>
      <description>Hooks can now skip conversation restore on branch for checkpoint-style session management.
• Adds `skipConversationRestore: true` return value for `before_branch` hooks, allowing branched sessions to be created without restoring conversation messages.</description>
    </item>
    <item>
      <title>Pi v0.27.1</title>
      <link>https://github.com/earendil-works/pi/releases/tag/v0.27.1</link>
      <guid isPermaLink="true">https://github.com/earendil-works/pi/releases/tag/v0.27.1</guid>
      <pubDate>Mon, 22 Dec 2025 18:29:42 GMT</pubDate>
      <description>Pi v0.27.1 adds startup timing instrumentation via PI_TIMING=1 to profile interactive-mode performance.
• New `PI_TIMING=1` env var prints a startup performance breakdown in interactive mode.</description>
    </item>
    <item>
      <title>Pi v0.27.0</title>
      <link>https://github.com/earendil-works/pi/releases/tag/v0.27.0</link>
      <guid isPermaLink="true">https://github.com/earendil-works/pi/releases/tag/v0.27.0</guid>
      <pubDate>Mon, 22 Dec 2025 17:21:24 GMT</pubDate>
      <description>Pi v0.27.0 adds cancellable `before_*` session lifecycle hooks and a `shutdown` hook for graceful exit handling.
• Adds `before_switch`, `before_clear`, and `before_branch` session hook variants that fire before their respective actions and can be cancelled by returning `{ cancel: true }`.
• Adds `shutdown` session hook reason for graceful exit handling via pi.on(&quot;session&quot;, ...).
Breaking changes:
• The `branch` event is merged into the `session` event: `BranchEvent`, `BranchEventResult` types and pi.on(&quot;branch&quot;, ...) are removed; use pi.on(&quot;session&quot;, ...) with `reason: &quot;before_branch&quot; | &quot;branch&quot;` instead.
• AgentSession.branch() now returns `{ cancelled }` instead of `{ skipped }`.
• AgentSession.reset() and switchSession() now return `boolean` (false if cancelled by a hook) instead of their previous return types.
• RPC commands `reset`, `switch_session`, and `branch` now include `cancelled` in their response data instead of `skipped`.</description>
    </item>
    <item>
      <title>Pi v0.26.0</title>
      <link>https://github.com/earendil-works/pi/releases/tag/v0.26.0</link>
      <guid isPermaLink="true">https://github.com/earendil-works/pi/releases/tag/v0.26.0</guid>
      <pubDate>Mon, 22 Dec 2025 11:55:04 GMT</pubDate>
      <description>Pi v0.26.0 adds a programmatic SDK with factory APIs for agent sessions, project-scoped settings, and flexible session management.
• New createAgentSession() SDK factory enables programmatic agent control over model, tools, hooks, skills, session persistence, and settings — ships with 12 examples.
• Supports project-specific settings loaded from `&lt;cwd&gt;/.pi/settings.json`, deep-merged over global `~/.pi/agent/settings.json`, and treated as read-only for version control.
• New `SettingsManager` static factories: SettingsManager.create() for file-based settings, SettingsManager.inMemory() for testing, plus applyOverrides() for programmatic overrides.
• New `SessionManager` static factories: SessionManager.create(), SessionManager.open(), SessionManager.continueRecent(), SessionManager.inMemory(), and SessionManager.list() for flexible session lifecycle management.</description>
    </item>
    <item>
      <title>Pi v0.25.3</title>
      <link>https://github.com/earendil-works/pi/releases/tag/v0.25.3</link>
      <guid isPermaLink="true">https://github.com/earendil-works/pi/releases/tag/v0.25.3</guid>
      <pubDate>Sun, 21 Dec 2025 20:02:30 GMT</pubDate>
      <description>Pi v0.25.3 adds Gemini 3 preview models, external editor support, process suspension, and granular skills filtering.
• Adds `gemini-3-pro-preview` and `gemini-3-flash-preview` models to the google-gemini-cli provider.
• New `Ctrl+G` keybinding opens the current message in `$VISUAL` or `$EDITOR` for external editing.
• New `Ctrl+Z` keybinding suspends Pi to the shell; resume with `fg`.
• Adds granular skill-source toggles: `enableCodexUser`, `enableClaudeUser`, `enableClaudeProject`, `enablePiUser`, `enablePiProject`, plus `customDirectories` and `ignoredSkills` settings.
• New `--skills &lt;patterns&gt;` CLI flag filters loaded skills by glob pattern; `includeSkills` setting and glob support for `ignoredSkills` also added.</description>
    </item>
    <item>
      <title>Pi v0.25.0</title>
      <link>https://github.com/earendil-works/pi/releases/tag/v0.25.0</link>
      <guid isPermaLink="true">https://github.com/earendil-works/pi/releases/tag/v0.25.0</guid>
      <pubDate>Sat, 20 Dec 2025 21:04:02 GMT</pubDate>
      <description>Pi v0.25.0 adds interruptible tool execution and two free Google OAuth providers for Gemini and Claude models.
• Enables mid-task agent interruption: queuing a message while tools are running skips remaining tools and processes your new message immediately.
• New Google Gemini CLI OAuth provider: access Gemini 2.0/2.5 models for free via Google Cloud Code Assist using `/login` → &apos;Google Gemini CLI&apos;.
• New Google Antigravity OAuth provider: access Gemini 3, Claude sonnet/opus thinking models, and GPT-OSS models for free via `/login` → &apos;Antigravity&apos;.
• The `/model` command now filters to only the models specified by `--models`, preventing accidental selection of out-of-scope providers.</description>
    </item>
    <item>
      <title>Pi v0.24.1</title>
      <link>https://github.com/earendil-works/pi/releases/tag/v0.24.1</link>
      <guid isPermaLink="true">https://github.com/earendil-works/pi/releases/tag/v0.24.1</guid>
      <pubDate>Fri, 19 Dec 2025 19:52:55 GMT</pubDate>
      <description>Pi v0.24.1 adds OAuth/model config exports for scripting and xhigh thinking level for gpt-5.2 models.
• Exports `getAvailableModels`, `getApiKeyForModel`, `findModel`, `login`, `logout`, and `getOAuthProviders` from `@mariozechner/pi-coding-agent` so custom `AgentSession` scripts can reuse OAuth token storage and model resolution.
• Adds `xhigh` thinking level option for `gpt-5.2` and `gpt-5.2-codex` models in the thinking level selector and shift+tab cycling.</description>
    </item>
    <item>
      <title>Pi v0.24.0</title>
      <link>https://github.com/earendil-works/pi/releases/tag/v0.24.0</link>
      <guid isPermaLink="true">https://github.com/earendil-works/pi/releases/tag/v0.24.0</guid>
      <pubDate>Fri, 19 Dec 2025 04:22:33 GMT</pubDate>
      <description>Pi v0.24.0 adds multi-agent orchestration, Kitty keyboard protocol, dynamic OAuth refresh, and a new /hotkeys command.
• Adds a comprehensive subagent orchestration example with scout/planner/reviewer/worker agents and multi-agent pipeline workflow commands.
• Enables pi.exec() to accept `{ signal, timeout }` options in custom tools and hooks, with a `killed` flag on the result when the process is terminated.
• Supports the Kitty keyboard protocol, enabling Shift+Enter, Alt+Enter, Shift+Tab, Ctrl+D, and all Ctrl+key combos in Ghostty, Kitty, WezTerm, and other modern terminals.
• Adds dynamic OAuth token refresh for GitHub Copilot and Anthropic OAuth before each LLM call, preventing auth failures in long-running agent loops.
• Adds `/hotkeys` command to display all keyboard shortcuts in a formatted table.
• Exports getMarkdownTheme() from `@mariozechner/pi-coding-agent` so custom tools can use the same markdown styling as the main UI.
• Renders markdown tables with proper top and bottom borders.
Breaking changes:
• Auto-discovered custom tools now require an `index.ts` entry point inside a subdirectory: the old pattern `~/.pi/agent/tools/mytool.ts` must become `~/.pi/agent/tools/mytool/index.ts`. Explicit paths via `--tool` or `settings.json` still accept any `.ts` file.
• The `ToolResultEvent` `result: string` field is removed; hook handlers must replace `{ result: &quot;...&quot; }` returns with `{ content: [{ type: &quot;text&quot;, text: &quot;...&quot; }] }`, and access content via `content: (TextContent | ImageContent)[]` instead. `ToolResultEventResult.result` is renamed/removed — use `content` instead.</description>
    </item>
    <item>
      <title>Pi v0.23.4</title>
      <link>https://github.com/earendil-works/pi/releases/tag/v0.23.4</link>
      <guid isPermaLink="true">https://github.com/earendil-works/pi/releases/tag/v0.23.4</guid>
      <pubDate>Thu, 18 Dec 2025 15:58:06 GMT</pubDate>
      <description>Pi v0.23.4 adds syntax highlighting for code blocks and word-level intra-line diff highlighting in the Edit tool.
• Adds syntax highlighting for markdown code blocks, read tool output, and write tool content using theme-aware VS Code-style colors.
• Edit tool now shows word-level (intra-line) diff highlighting with inverse highlighting for single-line changes; multi-line changes display all removed lines before added lines.</description>
    </item>
    <item>
      <title>Pi v0.23.0</title>
      <link>https://github.com/earendil-works/pi/releases/tag/v0.23.0</link>
      <guid isPermaLink="true">https://github.com/earendil-works/pi/releases/tag/v0.23.0</guid>
      <pubDate>Wed, 17 Dec 2025 15:14:38 GMT</pubDate>
      <description>Pi v0.23.0 adds custom TypeScript tools with TUI rendering, user interaction, and session-state persistence.
• New custom tools system: extend pi with TypeScript plugins that provide custom TUI rendering, prompt users via `pi.ui` (select, confirm, input, notify), and persist state across sessions via an `onSession` callback.
• Bundled hook and custom-tool examples in `examples/hooks/` and `examples/custom-tools/` shipped with npm and binary releases.
Breaking changes:
• The `session_start` and `session_switch` hook events are replaced by a single `session` event; use `event.reason` (`&quot;start&quot; | &quot;switch&quot; | &quot;clear&quot;`) to distinguish them, and read `event.entries` for state reconstruction.</description>
    </item>
    <item>
      <title>Pi v0.22.4</title>
      <link>https://github.com/earendil-works/pi/releases/tag/v0.22.4</link>
      <guid isPermaLink="true">https://github.com/earendil-works/pi/releases/tag/v0.22.4</guid>
      <pubDate>Tue, 16 Dec 2025 23:40:28 GMT</pubDate>
      <description>Pi v0.22.4 adds `--list-models` to browse available models with fuzzy search and capability details.
• New `--list-models [search]` flag lists all available models filtered by configured API keys, showing provider, model ID, context window, max output, thinking support, and image support — with optional fuzzy search.</description>
    </item>
    <item>
      <title>Pi v0.22.0</title>
      <link>https://github.com/earendil-works/pi/releases/tag/v0.22.0</link>
      <guid isPermaLink="true">https://github.com/earendil-works/pi/releases/tag/v0.22.0</guid>
      <pubDate>Mon, 15 Dec 2025 19:15:38 GMT</pubDate>
      <description>Pi v0.22.0 adds GitHub Copilot OAuth login with access to Claude, GPT, Gemini, Grok, and more.
• Adds GitHub Copilot integration via OAuth login (`/login` → &quot;GitHub Copilot&quot;), supporting github.com and GitHub Enterprise with models sourced from models.dev including Claude, GPT, Gemini, and Grok — all automatically enabled after login.</description>
    </item>
    <item>
      <title>Pi v0.21.0</title>
      <link>https://github.com/earendil-works/pi/releases/tag/v0.21.0</link>
      <guid isPermaLink="true">https://github.com/earendil-works/pi/releases/tag/v0.21.0</guid>
      <pubDate>Sat, 13 Dec 2025 22:56:43 GMT</pubDate>
      <description>Pi v0.21.0 adds inline image rendering for Kitty/iTerm2 terminals and Gemini 3 Pro thinking-level support.
• Renders images inline in tool output on terminals supporting Kitty graphics protocol (Kitty, Ghostty, WezTerm) or iTerm2 inline images, with aspect ratio preserved; toggle via `/show-images` command or `terminal.showImages` setting.
• Extends thinking level selector (Minimal/Low → Google LOW, Medium/High → Google HIGH) to Gemini 3 Pro models.</description>
    </item>
    <item>
      <title>Pi v0.20.0</title>
      <link>https://github.com/earendil-works/pi/releases/tag/v0.20.0</link>
      <guid isPermaLink="true">https://github.com/earendil-works/pi/releases/tag/v0.20.0</guid>
      <pubDate>Fri, 12 Dec 2025 22:26:10 GMT</pubDate>
      <description>Pi v0.20.0 displays loaded skills on startup and adopts the SKILL.md directory convention.
• Displays loaded skills on startup in interactive mode so you can confirm which skills are active before issuing commands.
Breaking changes:
• Pi skills must now be named `SKILL.md` inside a directory (e.g. `~/.pi/agent/skills/foo/SKILL.md`); the previous convention of any `*.md` file directly under the skills directory is no longer supported. Migrate by renaming `~/.pi/agent/skills/foo.md` to `~/.pi/agent/skills/foo/SKILL.md`.</description>
    </item>
    <item>
      <title>Pi v0.19.0</title>
      <link>https://github.com/earendil-works/pi/releases/tag/v0.19.0</link>
      <guid isPermaLink="true">https://github.com/earendil-works/pi/releases/tag/v0.19.0</guid>
      <pubDate>Fri, 12 Dec 2025 17:35:09 GMT</pubDate>
      <description>Pi v0.19.0 adds a skills system for on-demand instruction loading and a --version flag.
• New skills system auto-discovers and loads instruction files on demand from Claude Code, Codex CLI, and Pi-native skill directories, with descriptions surfaced in the system prompt.
• Adds `--version` / `-v` flag to print the current Pi version and exit.</description>
    </item>
    <item>
      <title>Pi v0.18.2</title>
      <link>https://github.com/earendil-works/pi/releases/tag/v0.18.2</link>
      <guid isPermaLink="true">https://github.com/earendil-works/pi/releases/tag/v0.18.2</guid>
      <pubDate>Wed, 10 Dec 2025 22:40:21 GMT</pubDate>
      <description>Pi v0.18.2 adds auto-retry with exponential backoff for transient provider errors and line numbers in HTML exports.
• Adds auto-retry on transient provider errors (429, 500, 502–504) using exponential backoff (2s, 4s, 8s), with TUI retry status display and Escape-to-cancel support.
• Exposes retry configuration via `retry.enabled`, `retry.maxRetries`, and `retry.baseDelayMs` in `settings.json`.
• Emits `auto_retry_start` and `auto_retry_end` events in RPC mode for programmatic retry visibility.
• HTML exports now show line number ranges (e.g., `file.txt:10-20`) for read tool calls when offset/limit parameters are used, with yellow highlighting.</description>
    </item>
    <item>
      <title>Pi v0.18.1</title>
      <link>https://github.com/earendil-works/pi/releases/tag/v0.18.1</link>
      <guid isPermaLink="true">https://github.com/earendil-works/pi/releases/tag/v0.18.1</guid>
      <pubDate>Wed, 10 Dec 2025 20:44:47 GMT</pubDate>
      <description>Pi v0.18.1 adds Mistral AI as a supported provider via MISTRAL_API_KEY.
• Supports Mistral AI models as a new provider — set the `MISTRAL_API_KEY` environment variable to enable.</description>
    </item>
    <item>
      <title>Pi v0.13.1</title>
      <link>https://github.com/earendil-works/pi/releases/tag/v0.13.1</link>
      <guid isPermaLink="true">https://github.com/earendil-works/pi/releases/tag/v0.13.1</guid>
      <pubDate>Sat, 06 Dec 2025 22:13:45 GMT</pubDate>
      <description>Pi v0.13.1 adds flexible Windows shell configuration, supporting Cygwin, MSYS2, and custom bash environments.
• Supports custom Windows shell configuration via `shellPath` in `~/.pi/agent/settings.json`, enabling Cygwin, MSYS2, and other bash environments beyond Git Bash.</description>
    </item>
    <item>
      <title>Pi v0.12.12</title>
      <link>https://github.com/earendil-works/pi/releases/tag/v0.12.12</link>
      <guid isPermaLink="true">https://github.com/earendil-works/pi/releases/tag/v0.12.12</guid>
      <pubDate>Fri, 05 Dec 2025 22:01:58 GMT</pubDate>
      <description>Pi v0.12.12 adds fuzzy model/session search, prompt history navigation, and a `/resume` command for mid-conversation session switching.
• Adds fuzzy search for models and sessions (e.g., `codexmax` matches `gpt-5.1-codex-max`) in the interactive selector.
• Adds prompt history navigation: browse up to 100 previously submitted prompts using Up/Down arrow keys when the editor is empty.
• New `/resume` command lets you switch to a different session mid-conversation via an interactive selector, without restarting the agent.
• Footer token counts now use M suffix for millions and shortened context display format (e.g., `61.3%/200k`).</description>
    </item>
    <item>
      <title>Pi v0.12.11</title>
      <link>https://github.com/earendil-works/pi/releases/tag/v0.12.11</link>
      <guid isPermaLink="true">https://github.com/earendil-works/pi/releases/tag/v0.12.11</guid>
      <pubDate>Fri, 05 Dec 2025 11:20:48 GMT</pubDate>
      <description>Pi v0.12.11 adds custom auth headers, a system-prompt layering flag, and a thinking-block visibility toggle.
• New `authHeader` option in models.json lets custom providers automatically inject `Authorization: Bearer &lt;apiKey&gt;` headers.
• New `--append-system-prompt` flag appends inline text or file contents to the system prompt without replacing the base prompt.
• New `Ctrl+T` shortcut toggles visibility of LLM thinking blocks to reduce visual clutter during long conversations.</description>
    </item>
    <item>
      <title>Pi v0.12.9</title>
      <link>https://github.com/earendil-works/pi/releases/tag/v0.12.9</link>
      <guid isPermaLink="true">https://github.com/earendil-works/pi/releases/tag/v0.12.9</guid>
      <pubDate>Thu, 04 Dec 2025 12:23:58 GMT</pubDate>
      <description>Pi v0.12.9 adds /copy command to grab the last agent message straight to your clipboard.
• Adds `/copy` command to copy the last agent message to the clipboard, with cross-platform support (macOS, Windows, Linux) — useful for extracting text from rendered Markdown output.</description>
    </item>
    <item>
      <title>Pi v0.12.7</title>
      <link>https://github.com/earendil-works/pi/releases/tag/v0.12.7</link>
      <guid isPermaLink="true">https://github.com/earendil-works/pi/releases/tag/v0.12.7</guid>
      <pubDate>Thu, 04 Dec 2025 02:12:04 GMT</pubDate>
      <description>Pi v0.12.7 adds context compaction with manual and auto modes, plus branch source tracking for session lineage.
• Adds `/compact [instructions]` command to manually summarize older messages and reduce context usage, with optional custom instructions for the summary.
• Adds `/autocompact` toggle to automatically compact context when it reaches `contextWindow - reserveTokens` (default 16k reserve tokens).
• Compacted sessions display a collapsible summary in the TUI (toggled with `o` key) and in HTML exports.
• RPC mode gains a `{&quot;type&quot;:&quot;compact&quot;}` command and auto-compaction support, emitting compaction events.
• Branched sessions now record `branchedFrom` in the session header to track the originating session file path.</description>
    </item>
    <item>
      <title>Pi v0.12.5</title>
      <link>https://github.com/earendil-works/pi/releases/tag/v0.12.5</link>
      <guid isPermaLink="true">https://github.com/earendil-works/pi/releases/tag/v0.12.5</guid>
      <pubDate>Wed, 03 Dec 2025 15:22:22 GMT</pubDate>
      <description>Pi v0.12.5 adds configurable branding via `piConfig` in `package.json` for forks and white-labels.
• Supports forking/rebranding the CLI by setting `piConfig.name` and `piConfig.configDir` in `package.json`, updating the banner, help text, config paths, and error messages without code changes.</description>
    </item>
    <item>
      <title>Pi v0.12.4</title>
      <link>https://github.com/earendil-works/pi/releases/tag/v0.12.4</link>
      <guid isPermaLink="true">https://github.com/earendil-works/pi/releases/tag/v0.12.4</guid>
      <pubDate>Tue, 02 Dec 2025 12:27:52 GMT</pubDate>
      <description>Pi v0.12.4 adds a `/debug` slash command that logs terminal rendering diagnostics to disk.
• New `/debug` slash command writes terminal width and all rendered lines with their visible widths to `~/.pi/agent/pi-debug.log` for diagnosing rendering issues.</description>
    </item>
    <item>
      <title>Pi v0.12.0</title>
      <link>https://github.com/earendil-works/pi/releases/tag/v0.12.0</link>
      <guid isPermaLink="true">https://github.com/earendil-works/pi/releases/tag/v0.12.0</guid>
      <pubDate>Tue, 02 Dec 2025 11:24:16 GMT</pubDate>
      <description>Pi v0.12.0 ships pre-built standalone binaries for macOS, Linux, and Windows — no Node/Bun runtime required.
• Adds standalone self-contained binary builds via `npm run build:binary`, with pre-built releases for macOS (arm64/x64), Linux (x64/arm64), and Windows (x64) on GitHub Releases.</description>
    </item>
  </channel>
</rss>
