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)
Fixed
Default thinking level from settings now applies correctly when enabledModels is configured (#540 by @ferologics)
External edits to settings.json while pi is running are now preserved when pi saves settings (#527 by @ferologics)
Overflow-based compaction now skips if error came from a different model or was already handled by a previous compaction (#535 by @mitsuhiko)
OpenAI Codex context window reduced from 400k to 272k tokens to match Codex CLI defaults and prevent 400 errors (#536 by @ghoulr)
Context overflow detection now recognizes context_length_exceeded errors.
Key presses no longer dropped when input is batched over SSH (#538)
Clipboard image support now works on Alpine Linux and other musl-based distros (#533)