Changelog

Release notes and changes from the Pi changelog.

Release notes

Pi 0.45.4

New version of pi. Download from npm or view release on GitHub.

Changed

  • Light theme colors adjusted for WCAG AA compliance (4.5:1 contrast ratio against white backgrounds)
  • Replaced sharp with wasm-vips for image processing (resize, PNG conversion). Eliminates native build requirements that caused installation failures on some systems. (#696)

Added

  • Extension example: summarize.ts for summarizing conversations using custom UI and an external model (#684 by @scutifer)
  • Extension example: question.ts enhanced with custom UI for asking user questions (#693 by @ferologics)
  • Extension example: plan-mode/ enhanced with explicit step tracking and progress widget (#694 by @ferologics)
  • Extension example: questionnaire.ts for multi-question input with tab bar navigation (#695 by @ferologics)
  • Experimental Vercel AI Gateway provider support: set AI_GATEWAY_API_KEY and use --provider vercel-ai-gateway. Token usage is currently reported incorrectly by Anthropic Messages compatible endpoint. (#689 by @timolins)

Read more

Release notes

Pi 0.45.2

New version of pi. Download from npm or view release on GitHub.

Fixed

  • Extensions now load correctly in compiled Bun binary using @mariozechner/jiti fork with virtualModules support. Bundled packages (@sinclair/typebox, @mariozechner/pi-tui, @mariozechner/pi-ai, @mariozechner/pi-coding-agent) are accessible to extensions without filesystem node_modules.

Read more

Release notes

Pi 0.45.0

New version of pi. Download from npm or view release on GitHub.

Added

  • MiniMax provider support: set MINIMAX_API_KEY and use minimax/MiniMax-M2.1 (#656 by @dannote)
  • /scoped-models: Alt+Up/Down to reorder enabled models. Order is preserved when saving with Ctrl+S and determines Ctrl+P cycling order. (#676 by @thomasmhr)
  • Amazon Bedrock provider support (experimental, tested with Anthropic Claude models only) (#494 by @unexge)
  • Extension example: sandbox/ for OS-level bash sandboxing using @anthropic-ai/sandbox-runtime with per-project config (#673 by @dannote)
  • Print mode JSON output now emits the session header as the first line.

Read more

Release notes

Pi 0.44.0

New version of pi. Download from npm or view release on GitHub.

Breaking Changes

  • pi.getAllTools() now returns ToolInfo[] (with name and description) instead of string[]. Extensions that only need names can use .map(t => t.name). (#648 by @carsonfarmer)

Added

  • Session naming: /name <name> command sets a display name shown in the session selector instead of the first message. Useful for distinguishing forked sessions. Extensions can use pi.setSessionName() and pi.getSessionName(). (#650 by @scutifer)
  • Extension example: notify.ts for desktop notifications via OSC 777 escape sequence (#658 by @ferologics)
  • Inline hint for queued messages showing the Alt+Up restore shortcut (#657 by @tmustier)
  • Page-up/down navigation in /resume session selector to jump by 5 items (#662 by @aliou)
  • Fuzzy search in /settings menu: type to filter settings by label (#643 by @ninlds)

Read more

Release notes

Pi 0.43.0

New version of pi. Download from npm or view release on GitHub.

Breaking Changes

  • Extension editor (ctx.ui.editor()) now uses Enter to submit and Shift+Enter for newlines, matching the main editor. Previously used Ctrl+Enter to submit. Extensions with hardcoded "ctrl+enter" hints need updating. (#642 by @mitsuhiko)
  • Renamed /branch command to /fork (#641)
    • RPC: branchfork, get_branch_messagesget_fork_messages
    • SDK: branch()fork(), getBranchMessages()getForkMessages()
    • AgentSession: branch()fork(), getUserMessagesForBranching()getUserMessagesForForking()
    • Extension events: session_before_branchsession_before_fork, session_branchsession_fork
    • Settings: doubleEscapeAction: "branch" | "tree""fork" | "tree"
  • SessionManager.list() and SessionManager.listAll() are now async, returning Promise<SessionInfo[]>. Callers must await them. (#620 by @tmustier)

Added

  • /resume selector now toggles between current-folder and all sessions with Tab, showing the session cwd in the All view and loading progress. (#620 by @tmustier)
  • SessionManager.list() and SessionManager.listAll() accept optional onProgress callback for progress updates
  • SessionInfo.cwd field containing the session's working directory (empty string for old sessions)
  • SessionListProgress type export for progress callbacks
  • /scoped-models command to enable/disable models for Ctrl+P cycling. Changes are session-only by default; press Ctrl+S to persist to settings.json. (#626 by @CarlosGtrz)
  • model_select extension hook fires when model changes via /model, model cycling, or session restore with source field and previousModel (#628 by @marckrenn)
  • ctx.ui.setWorkingMessage() extension API to customize the "Working..." message during streaming (#625 by @nicobailon)
  • Skill slash commands: loaded skills are registered as /skill:name commands for quick access. Toggle via /settings or skills.enableSkillCommands in settings.json. (#630 by @Dwsy)
  • Slash command autocomplete now uses fuzzy matching (type /skbra to match /skill:brave-search)
  • /tree branch summarization now offers three options: "No summary", "Summarize", and "Summarize with custom prompt". Custom prompts are appended as additional focus to the default summarization instructions. (#642 by @mitsuhiko)

Read more

Release notes

Pi 0.42.5

New version of pi. Download from npm or view release on GitHub.

Fixed

  • Reduced flicker by only re-rendering changed lines (#617 by @ogulcancelik). No worries tho, there's still a little flicker in the VS Code Terminal. Praise the flicker.
  • Cursor position tracking when content shrinks with unchanged remaining lines
  • TUI renders with wrong dimensions after suspend/resume if terminal was resized while suspended (#599)
  • Pasted content containing Kitty key release patterns (e.g., :3F in MAC addresses) was incorrectly filtered out (#623 by @ogulcancelik)

Read more

Release notes

Pi 0.42.2

New version of pi. Download from npm or view release on GitHub.

Added

  • /model <search> now pre-filters the model selector or auto-selects on exact match. Use provider/model syntax to disambiguate (e.g., /model openai/gpt-4). (#587 by @zedrdave)
  • FooterDataProvider for custom footers: ctx.ui.setFooter() now receives a third footerData parameter providing getGitBranch(), getExtensionStatuses(), and onBranchChange() for reactive updates (#600 by @nicobailon)
  • Alt+Up hotkey to restore queued steering/follow-up messages back into the editor without aborting the current run (#604 by @tmustier)

Read more

Release notes

Pi 0.39.1

New version of pi. Download from npm or view release on GitHub.

Fixed

  • setTheme() now triggers a full rerender so previously rendered components update with the new theme colors
  • mac-system-theme.ts example now polls every 2 seconds and uses osascript for real-time macOS appearance detection

Read more

Release notes

Pi 0.39.0

New version of pi. Download from npm or view release on GitHub.

Breaking Changes

  • before_agent_start event now receives systemPrompt in the event object and returns systemPrompt (full replacement) instead of systemPromptAppend. Extensions that were appending must now use event.systemPrompt + extra pattern. (#575)
  • discoverSkills() now returns { skills: Skill[], warnings: SkillWarning[] } instead of Skill[]. This allows callers to handle skill loading warnings. (#577 by @cv)

Added

  • ctx.ui.getAllThemes(), ctx.ui.getTheme(name), and ctx.ui.setTheme(name | Theme) methods for extensions to list, load, and switch themes at runtime (#576)
  • --no-tools flag to disable all built-in tools, allowing extension-only tool setups (#557 by @cv)
  • Pluggable operations for built-in tools enabling remote execution via SSH or other transports (#564). Interfaces: ReadOperations, WriteOperations, EditOperations, BashOperations, LsOperations, GrepOperations, FindOperations
  • user_bash event for intercepting user !/!! commands, allowing extensions to redirect to remote systems (#528)
  • setActiveTools() in ExtensionAPI for dynamic tool management
  • Built-in renderers used automatically for tool overrides without custom renderCall/renderResult
  • ssh.ts example: remote tool execution via --ssh user@host:/path
  • interactive-shell.ts example: run interactive commands (vim, git rebase, htop) with full terminal access via !i prefix or auto-detection
  • Wayland clipboard support for /copy command using wl-copy with xclip/xsel fallback (#570 by @OgulcanCelik)
  • Experimental: ctx.ui.custom() now accepts { overlay: true } option for floating modal components that composite over existing content without clearing the screen (#558 by @nicobailon)
  • AgentSession.skills and AgentSession.skillWarnings properties to access loaded skills without rediscovery (#577 by @cv)

Read more

Release notes

Pi 0.38.0

New version of pi. Download from npm or view release on GitHub.

Breaking Changes

  • ctx.ui.custom() factory signature changed from (tui, theme, done) to (tui, theme, keybindings, done) for keybinding access in custom components
  • LoadedExtension type renamed to Extension
  • LoadExtensionsResult.setUIContext() removed, replaced with runtime: ExtensionRuntime
  • ExtensionRunner constructor now requires runtime: ExtensionRuntime as second parameter
  • ExtensionRunner.initialize() signature changed from options object to positional params (actions, contextActions, commandContextActions?, uiContext?)
  • ExtensionRunner.getHasUI() renamed to hasUI()
  • OpenAI Codex model aliases removed (gpt-5, gpt-5-mini, gpt-5-nano, codex-mini-latest). Use canonical IDs: gpt-5.1, gpt-5.1-codex-mini, gpt-5.2, gpt-5.2-codex. (#536 by @ghoulr)

Added

  • --no-extensions flag to disable extension discovery while still allowing explicit -e paths (#524 by @cv)
  • SDK: InteractiveMode, runPrintMode(), runRpcMode() exported for building custom run modes. See docs/sdk.md.
  • PI_SKIP_VERSION_CHECK environment variable to disable new version notifications at startup (#549 by @aos)
  • thinkingBudgets setting to customize token budgets per thinking level for token-based providers (#529 by @melihmucuk)
  • Extension UI dialogs (ctx.ui.select(), ctx.ui.confirm(), ctx.ui.input()) now support a timeout option with live countdown display (#522 by @nicobailon)
  • Extensions can now provide custom editor components via ctx.ui.setEditorComponent(). See examples/extensions/modal-editor.ts and docs/tui.md Pattern 7.
  • Extension factories can now be async, enabling dynamic imports and lazy-loaded dependencies (#513 by @austinm911)
  • ctx.shutdown() is now available in extension contexts for requesting a graceful shutdown. In interactive mode, shutdown is deferred until the agent becomes idle (after processing all queued steering and follow-up messages). In RPC mode, shutdown is deferred until after completing the current command response. In print mode, shutdown is a no-op as the process exits automatically when prompts complete. (#542 by @kaofelix)

Read more

Release notes

Pi 0.37.6

New version of pi. Download from npm or view release on GitHub.

Added

  • Extension UI dialogs (ctx.ui.select(), ctx.ui.confirm(), ctx.ui.input()) now accept an optional AbortSignal to programmatically dismiss dialogs. Useful for implementing timeouts. See examples/extensions/timed-confirm.ts. (#474)
  • HTML export now shows bridge prompts in model change messages for Codex sessions (#510 by @mitsuhiko)

Read more