Changelog
Release notes, project updates, and announcements from the Pi team.
Pi 0.52.3
New version of pi. Download from npm or view release on GitHub.
Fixed
- Fixed git package parsing fallback for unknown hosts so enterprise git sources like
git:github.tools.sap/org/repoare treated as git packages instead of local paths - Fixed git package
@refparsing for shorthand, HTTPS, and SSH source formats, including branch refs with slashes - Fixed Bedrock default model ID from
us.anthropic.claude-opus-4-6-v1:0tous.anthropic.claude-opus-4-6-v1 - Fixed Bedrock Opus 4.6 model metadata (IDs, cache pricing) and added missing EU profile
- Fixed Claude Opus 4.6 context window metadata to 200000 for Anthropic and OpenCode providers
Pi 0.52.2
New version of pi. Download from npm or view release on GitHub.
Changed
- Updated default model for
anthropicprovider toclaude-opus-4-6 - Updated default model for
openai-codexprovider togpt-5.3-codex - Updated default model for
amazon-bedrockprovider tous.anthropic.claude-opus-4-6-v1:0 - Updated default model for
vercel-ai-gatewayprovider toanthropic/claude-opus-4-6 - Updated default model for
opencodeprovider toclaude-opus-4-6
Pi 0.52.0
New version of pi. Download from npm or view release on GitHub.
New Features
- Claude Opus 4.6 model support.
- GPT-5.3 Codex model support (OpenAI Codex provider only).
- SSH URL support for git packages. See docs/packages.md.
auth.jsonAPI keys now support shell command resolution (!command) and environment variable lookup. See docs/providers.md.- Model selectors now display the selected model name.
Added
- API keys in
auth.jsonnow support shell command resolution (!command) and environment variable lookup, matching the behavior inmodels.json - Added
minimal-mode.tsexample extension demonstrating how to override built-in tool rendering for a minimal display mode - Added Claude Opus 4.6 model to the model catalog
- Added GPT-5.3 Codex model to the model catalog (OpenAI Codex provider only)
- Added SSH URL support for git packages (#1287 by @markusn)
- Model selectors now display the selected model name (#1275 by @haoqixu)
Pi 0.51.6
New version of pi. Download from npm or view release on GitHub.
New Features
- Configurable resume keybinding action for opening the session resume selector. See docs/keybindings.md. (#1249 by @juanibiapina)
Added
- Added
resumeas a configurable keybinding action, allowing users to bind a key to open the session resume selector (likenewSession,tree, andfork) (#1249 by @juanibiapina)
Changed
Pi 0.51.3
New version of pi. Download from npm or view release on GitHub.
New Features
- Command discovery for extensions via
ExtensionAPI.getCommands(), withcommands.tsexample for invocation patterns. See docs/extensions.md#pigetcommands and examples/extensions/commands.ts. - Local path support for
pi installandpi remove, with relative path resolution against the settings file. See docs/packages.md#local-paths.
Breaking Changes
- RPC
get_commandsresponse andSlashCommandSourcetype: renamed"template"to"prompt"for consistency with the rest of the codebase
Added
- Added
ExtensionAPI.getCommands()to let extensions list available slash commands (extensions, prompt templates, skills) for invocation viaprompt(#1210 by @w-winter) - Added
commands.tsexample extension and exportedSlashCommandInfotypes for command discovery integrations (#1210 by @w-winter) - Added local path support for
pi installandpi removewith relative paths stored against the target settings file (#1216)
Pi 0.51.2
New version of pi. Download from npm or view release on GitHub.
New Features
- Extension tool output expansion controls via ExtensionUIContext getToolsExpanded and setToolsExpanded. See docs/extensions.md and docs/rpc.md.
Added
- Added ExtensionUIContext getToolsExpanded and setToolsExpanded for controlling tool output expansion (#1199 by @academo)
- Added install method detection to show package manager specific update instructions (#1203 by @Itsnotaka)
Pi 0.51.1
New version of pi. Download from npm or view release on GitHub.
New Features
- Extension API switchSession: Extensions can now programmatically switch sessions via
ctx.switchSession(sessionPath). See docs/extensions.md. (#1187) - Clear on shrink setting: New
terminal.clearOnShrinksetting keeps the editor and footer pinned to the bottom of the terminal when content shrinks. May cause some flicker due to redraws. Disabled by default. Enable via/settingsorPI_CLEAR_ON_SHRINK=1env var.
Pi 0.51.0
New version of pi. Download from npm or view release on GitHub.
Breaking Changes
- Extension tool signature change:
ToolDefinition.executenow uses(toolCallId, params, signal, onUpdate, ctx)parameter order to matchAgentTool.execute. Previously it was(toolCallId, params, onUpdate, ctx, signal). This makes wrapping built-in tools trivial since the first four parameters now align. Update your extensions by swapping thesignalandonUpdateparameters:// Before async execute(toolCallId, params, onUpdate, ctx, signal) { ... } // After async execute(toolCallId, params, signal, onUpdate, ctx) { ... }
New Features
- Android/Termux support: Pi now runs on Android via Termux. Install with:
Clipboard operations fall back gracefully whenpkg install nodejs termux-api git npm install -g @mariozechner/pi-coding-agent mkdir -p ~/.pi/agent echo "You are running on Android in Termux." > ~/.pi/agent/AGENTS.mdtermux-apiis unavailable. (#1164) - Bash spawn hook: Extensions can now intercept and modify bash commands before execution via
pi.setBashSpawnHook(). Adjust the command string, working directory, or environment variables. See docs/extensions.md. (#1160 by @mitsuhiko) - Linux ARM64 musl support: Pi now runs on Alpine Linux ARM64 (linux-arm64-musl) via updated clipboard dependency.
- Nix/Guix support:
PI_PACKAGE_DIRenvironment variable overrides the package path for content-addressed package managers where store paths tokenize poorly. See README.md#environment-variables. (#1153 by @odysseus0) - Named session filter:
/resumepicker now supports filtering to show only named sessions via Ctrl+N. Configurable viatoggleSessionNamedFilterkeybinding. See docs/keybindings.md. (#1128 by @w-winter) - Typed tool call events: Extension developers can narrow
ToolCallEventtypes usingisToolCallEventType()for better TypeScript support. See docs/extensions.md#tool-call-events. (#1147 by @giuseppeg) - Extension UI Protocol: Full RPC documentation and examples for extension dialogs and notifications, enabling headless clients to support interactive extensions. See docs/rpc.md#extension-ui-protocol. (#1144 by @aliou)
Added
- Added Linux ARM64 musl (Alpine Linux) support via clipboard dependency update
- Added Android/Termux support with graceful clipboard fallback (#1164)
- Added bash tool spawn hook support for adjusting command, cwd, and env before execution (#1160 by @mitsuhiko)
- Added typed
ToolCallEvent.inputper tool withisToolCallEventType()type guard for narrowing built-in tool events (#1147 by @giuseppeg) - Exported
discoverAndLoadExtensionsfrom package to enable extension testing without a local repo clone (#1148) - Added Extension UI Protocol documentation to RPC docs covering all request/response types for extension dialogs and notifications (#1144 by @aliou)
- Added
rpc-demo.tsexample extension exercising all RPC-supported extension UI methods (#1144 by @aliou) - Added
rpc-extension-ui.tsTUI example client demonstrating the extension UI protocol with interactive dialogs (#1144 by @aliou) - Added
PI_PACKAGE_DIRenvironment variable to override package path for content-addressed package managers (Nix, Guix) where store paths tokenize poorly (#1153 by @odysseus0) /resumesession picker now supports named-only filter toggle (default Ctrl+N, configurable viatoggleSessionNamedFilter) to show only named sessions (#1128 by @w-winter)
Pi 0.50.9
New version of pi. Download from npm or view release on GitHub.
Added
- Added
titlebar-spinner.tsexample extension that shows a braille spinner animation in the terminal title while the agent is working. - Added
PI_AI_ANTIGRAVITY_VERSIONenvironment variable documentation to help text (#1129) - Added
cacheRetentionstream option with provider-specific mappings for prompt cache controls, defaulting to short retention (#1134)
Pi 0.50.8
New version of pi. Download from npm or view release on GitHub.
Added
- Added
newSession,tree, andforkkeybinding actions for/new,/tree, and/forkcommands. All unbound by default. (#1114 by @juanibiapina) - Added
retry.maxDelayMssetting to cap maximum server-requested retry delay. When a provider requests a longer delay (e.g., Google's "quota will reset after 5h"), the request fails immediately with an informative error instead of waiting silently. Default: 60000ms (60 seconds). (#1123) /resumesession picker: new "Threaded" sort mode (now default) displays sessions in a tree structure based on fork relationships. Compact one-line format with message count and age on the right. (#1124 by @pasky)- Added Qwen CLI OAuth provider extension example. (#940 by @4h9fbZ)
- Added OAuth
modifyModelshook support for extension-registered providers at registration time. (#940 by @4h9fbZ) - Added Qwen thinking format support for OpenAI-compatible completions via
enable_thinking. (#940 by @4h9fbZ) - Added sticky column tracking for vertical cursor navigation so the editor restores the preferred column when moving across short lines. (#1120 by @Perlence)
- Added
resources_discoverextension hook to supply additional skills, prompts, and themes on startup and reload.
Pi 0.50.7
New version of pi. Download from npm or view release on GitHub.
Fixed
- Multi-file extensions in packages now work correctly. Package resolution now uses the same discovery logic as local extensions: only
index.ts(or manifest-declared entries) are loaded from subdirectories, not helper modules. (#1102)
Pi 0.50.4
New version of pi. Download from npm or view release on GitHub.
New Features
- OSC 52 clipboard support for SSH/mosh - The
/copycommand now works over remote connections using the OSC 52 terminal escape sequence. No more clipboard frustration when using pi over SSH. (#1069 by @gturkoglu) - Vercel AI Gateway routing - Route requests through Vercel's AI Gateway with provider failover and load balancing. Configure via
vercelGatewayRoutingin models.json. (#1051 by @ben-vargas) - Character jump navigation - Bash/Readline-style character search: Ctrl+] jumps forward to the next occurrence of a character, Ctrl+Alt+] jumps backward. (#1074 by @Perlence)
- Emacs-style Ctrl+B/Ctrl+F navigation - Alternative keybindings for word navigation (cursor word left/right) in the editor. (#1053 by @ninlds)
- Line boundary navigation - Editor jumps to line start when pressing Up at first visual line, and line end when pressing Down at last visual line. (#1050 by @4h9fbZ)
- Performance improvements - Optimized image line detection and box rendering cache in the TUI for better rendering performance. (#1084 by @can1357)
set_session_nameRPC command - Headless clients can now set the session display name programmatically. (#1075 by @dnouri)- Disable double-escape behavior - New
"none"option fordoubleEscapeActionsetting completely disables the double-escape shortcut. (#973 by @juanibiapina)
Added
- Added "none" option to
doubleEscapeActionsetting to disable double-escape behavior entirely (#973 by @juanibiapina) - Added OSC 52 clipboard support for SSH/mosh sessions.
/copynow works over remote connections. (#1069 by @gturkoglu) - Added Vercel AI Gateway routing support via
vercelGatewayRoutingin models.json (#1051 by @ben-vargas) - Added Ctrl+B and Ctrl+F keybindings for cursor word left/right navigation in the editor (#1053 by @ninlds)
- Added character jump navigation: Ctrl+] jumps forward to next character, Ctrl+Alt+] jumps backward (#1074 by @Perlence)
- Editor now jumps to line start when pressing Up at first visual line, and line end when pressing Down at last visual line (#1050 by @4h9fbZ)
- Optimized image line detection and box rendering cache for better TUI performance (#1084 by @can1357)
- Added
set_session_nameRPC command for headless clients to set session display name (#1075 by @dnouri)
Pi 0.50.3
New version of pi. Download from npm or view release on GitHub.
New Features
- Kimi For Coding provider: Access Moonshot AI's Anthropic-compatible coding API. Set
KIMI_API_KEYenvironment variable. See README.md#kimi-for-coding.
Added
- Added Kimi For Coding provider support (Moonshot AI's Anthropic-compatible coding API). Set
KIMI_API_KEYenvironment variable. See README.md#kimi-for-coding.
Pi 0.50.2
New version of pi. Download from npm or view release on GitHub.
New Features
- Hugging Face provider: Access Hugging Face models via OpenAI-compatible Inference Router. Set
HF_TOKENenvironment variable. See README.md#hugging-face. - Extended prompt caching:
PI_CACHE_RETENTION=longenables 1-hour caching for Anthropic (vs 5min default) and 24-hour for OpenAI (vs in-memory default). Only applies to direct API calls. See README.md#prompt-caching. - Configurable autocomplete height:
autocompleteMaxVisiblesetting (3-20 items, default 5) controls dropdown size. Adjust via/settingsorsettings.json. - Shell-style keybindings:
alt+b/alt+ffor word navigation,ctrl+dfor delete character forward. See docs/keybindings.md. - RPC
get_commands: Headless clients can now list available commands programmatically. See docs/rpc.md.
Added
- Added Hugging Face provider support via OpenAI-compatible Inference Router (#994)
- Added
PI_CACHE_RETENTIONenvironment variable to control cache TTL for Anthropic (5m vs 1h) and OpenAI (in-memory vs 24h). Set tolongfor extended retention. (#967) - Added
autocompleteMaxVisiblesetting for configurable autocomplete dropdown height (3-20 items, default 5) (#972 by @masonc15) - Added
/filescommand to list all file operations (read, write, edit) in the current session - Added shell-style keybindings:
alt+b/alt+ffor word navigation,ctrl+dfor delete character forward (when editor has text) (#1043 by @jasonish) - Added
get_commandsRPC method for headless clients to list available commands (#995 by @dnouri)
Changed
Pi 0.50.1
New version of pi. Download from npm or view release on GitHub.
Fixed
- Git extension updates now handle force-pushed remotes gracefully instead of failing (#961 by @aliou)
- Extension
ctx.newSession({ setup })now properly syncs agent state and renders messages after setup callback runs (#968) - Fixed extension UI bindings not initializing when starting with no extensions, which broke UI methods after
/reload - Fixed
/hotkeysoutput to title-case extension hotkeys (#969 by @Perlence) - Fixed model catalog generation to exclude deprecated OpenCode Zen models (#970 by @DanielTatarkin)
- Fixed git extension removal to prune empty directories
Pi 0.50.0
New version of pi. Download from npm or view release on GitHub.
New Features
- Pi packages for bundling and installing extensions, skills, prompts, and themes. See docs/packages.md.
- Hot reload (
/reload) of resources including AGENTS.md, SYSTEM.md, APPEND_SYSTEM.md, prompt templates, skills, themes, and extensions. See README.md#commands and README.md#context-files. - Custom providers via
pi.registerProvider()for proxies, custom endpoints, OAuth or SSO flows, and non-standard streaming APIs. See docs/custom-provider.md. - Azure OpenAI Responses provider support with deployment-aware model mapping. See docs/providers.md#azure-openai.
- OpenRouter routing support for custom models via
openRouterRouting. See docs/providers.md#api-keys and docs/models.md. - Skill invocation messages are now collapsible and skills can opt out of model invocation via
disable-model-invocation. See docs/skills.md#frontmatter. - Session selector renaming and configurable keybindings. See README.md#commands and docs/keybindings.md.
models.jsonheaders can resolve environment variables and shell commands. See docs/models.md#value-resolution.--verboseCLI flag to override quiet startup. See README.md#cli-reference.
Read the fully revamped docs in README.md, or have your clanker read them for you.
SDK Migration Guide
There are multiple SDK breaking changes since v0.49.3. For the quickest migration, point your agent at packages/coding-agent/docs/sdk.md, the SDK examples in packages/coding-agent/examples/sdk, and the SDK source in packages/coding-agent/src/core/sdk.ts and related modules.
Breaking Changes
- Header values in
models.jsonnow resolve environment variables (if a header value matches an env var name, the env var value is used). This may change behavior if a literal header value accidentally matches an env var name. (#909) - External packages (npm/git) are now configured via
packagesarray in settings.json instead ofextensions. Existing npm:/git: entries inextensionsare auto-migrated. (#645) - Resource loading now uses
ResourceLoaderonly and settings.json uses arrays for extensions, skills, prompts, and themes (#645) - Removed
discoverAuthStorageanddiscoverModelsfrom the SDK.AuthStorageandModelRegistrynow default to~/.pi/agentpaths unless you pass anagentDir(#645)
Added
- Session renaming in
/resumepicker viaCtrl+Rwithout opening the session (#863 by @svkozak) - Session selector keybindings are now configurable (#948 by @aos)
disable-model-invocationfrontmatter field for skills to prevent agentic invocation while still allowing explicit/skill:namecommands (#927)- Exposed
copyToClipboardutility for extensions (#926 by @mitsuhiko) - Skill invocation messages are now collapsible in chat output, showing collapsed by default with skill name and expand hint (#894)
- Header values in
models.jsonnow support environment variables and shell commands, matchingapiKeyresolution (#909) - Added HTTP proxy environment variable support for API requests (#942 by @haoqixu)
- Added OpenRouter provider routing support for custom models via
openRouterRoutingcompat field (#859 by @v01dpr1mr0s3) - Added
azure-openai-responsesprovider support for Azure OpenAI Responses API. (#890 by @markusylisiurunen) - Added changelog link to update notifications (#925 by @dannote)
- Added
--verboseCLI flag to override quietStartup setting (#906 by @Perlence) markdown.codeBlockIndentsetting to customize code block indentation in rendered output- Extension package management with
pi install,pi remove,pi update, andpi listcommands (#645) - Package filtering: selectively load resources from packages using object form in
packagesarray (#645) - Glob pattern support with minimatch in package filters, top-level settings arrays, and pi manifest (e.g.,
"!funky.json","*.ts") (#645) /reloadcommand to reload extensions, skills, prompts, and themes (#645)pi configcommand with TUI to enable/disable package and top-level resources via patterns (#938)- CLI flags for
--skill,--prompt-template,--theme,--no-prompt-templates, and--no-themes(#645) - Package deduplication: if same package appears in global and project settings, project wins (#645)
- Unified collision reporting with
ResourceDiagnostictype for all resource types (#645) - Show provider alongside the model in the footer if multiple providers are available
- Custom provider support via
pi.registerProvider()withstreamSimplefor custom API implementations - Added
custom-provider.tsexample extension demonstrating custom Anthropic provider with OAuth
Changed
/resumepicker sort toggle moved toCtrl+Sto freeCtrl+Rfor rename (#863 by @svkozak)- HTML export: clicking a sidebar message now navigates to its newest leaf and scrolls to it, instead of truncating the branch (#853 by @mitsuhiko)
- HTML export: active path is now visually highlighted with dimmed off-path nodes (#929 by @hewliyang)
- Azure OpenAI Responses provider now uses base URL configuration with deployment-aware model mapping and no longer includes service tier handling
/reloadnow re-renders the entire scrollback so updated extension components are visible immediately (#928 by @ferologics)- Skill, prompt template, and theme discovery now use settings and CLI path arrays instead of legacy filters (#645)