Breaking Changes
- Queue API replaced with steer/followUp: The
queueMessage()method has been split into two methods with different delivery semantics (#403):steer(text): Interrupts the agent mid-run (Enter while streaming). Delivered after current tool execution.followUp(text): Waits until the agent finishes (Alt+Enter while streaming). Delivered only when agent stops.
- Settings renamed:
queueModesetting renamed tosteeringMode. Added newfollowUpModesetting. Old settings.json files are migrated automatically. - AgentSession methods renamed:
queueMessage()→steer()andfollowUp()queueModegetter →steeringModeandfollowUpModegetterssetQueueMode()→setSteeringMode()andsetFollowUpMode()queuedMessageCount→pendingMessageCountgetQueuedMessages()→getSteeringMessages()andgetFollowUpMessages()clearQueue()now returns{ steering: string[], followUp: string[] }hasQueuedMessages()→hasPendingMessages()
- Hook API signature changed:
pi.sendMessage()second parameter changed fromtriggerTurn?: booleantooptions?: { triggerTurn?, deliverAs? }. UsedeliverAs: "followUp"for follow-up delivery. Affects both hooks and internalsendHookMessage()method. - RPC API changes:
queue_messagecommand →steerandfollow_upcommandsset_queue_modecommand →set_steering_modeandset_follow_up_modecommandsRpcSessionState.queueMode→steeringModeandfollowUpMode
- Settings UI: "Queue mode" setting split into "Steering mode" and "Follow-up mode"
Added
- Configurable double-escape action: choose whether double-escape with empty editor opens
/tree(default) or/branch. Configure via/settingsordoubleEscapeActionin settings.json (#404) - Vertex AI provider (
google-vertex): access Gemini models via Google Cloud Vertex AI using Application Default Credentials (#300 by @default-anton) - Built-in provider overrides in
models.json: override justbaseUrlto route a built-in provider through a proxy while keeping all its models, or definemodelsto fully replace the provider (#406 by @yevhen) - Automatic image resizing: images larger than 2000x2000 are resized for better model compatibility. Original dimensions are injected into the prompt. Controlled via
/settingsorimages.autoResizein settings.json. (#402 by @mitsuhiko) - Alt+Enter keybind to queue follow-up messages while agent is streaming
ThemeandThemeColortypes now exported for hooks usingctx.ui.custom()- Terminal window title now displays "pi - dirname" to identify which project session you're in (#407 by @kaofelix)
Changed
- Editor component now uses word wrapping instead of character-level wrapping for better readability (#382 by @nickseelert)
Fixed
/modelselector now opens instantly instead of waiting for OAuth token refresh. Token refresh is deferred until a model is actually used.- Shift+Space, Shift+Backspace, and Shift+Delete now work correctly in Kitty-protocol terminals (Kitty, WezTerm, etc.) instead of being silently ignored (#411 by @nathyong)
AgentSession.prompt()now throws if called while the agent is already streaming, preventing race conditions. Usesteer()orfollowUp()to queue messages during streaming.- Ctrl+C now works like Escape in selector components, so mashing Ctrl+C will eventually close the program (#400 by @mitsuhiko)