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: queueMode setting renamed to steeringMode. Added new followUpMode setting. Old settings.json files are migrated automatically.
AgentSession methods renamed:
queueMessage() → steer() and followUp()
queueMode getter → steeringMode and followUpMode getters
setQueueMode() → setSteeringMode() and setFollowUpMode()
queuedMessageCount → pendingMessageCount
getQueuedMessages() → getSteeringMessages() and getFollowUpMessages()
clearQueue() now returns { steering: string[], followUp: string[] }
hasQueuedMessages() → hasPendingMessages()
Hook API signature changed: pi.sendMessage() second parameter changed from triggerTurn?: boolean to options?: { triggerTurn?, deliverAs? }. Use deliverAs: "followUp" for follow-up delivery. Affects both hooks and internal sendHookMessage() method.
RPC API changes:
queue_message command → steer and follow_up commands
set_queue_mode command → set_steering_mode and set_follow_up_mode commands
RpcSessionState.queueMode → steeringMode and followUpMode
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 /settings or doubleEscapeAction in 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 just baseUrl to route a built-in provider through a proxy while keeping all its models, or define models to 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 /settings or images.autoResize in settings.json. (#402 by @mitsuhiko)
Alt+Enter keybind to queue follow-up messages while agent is streaming
Theme and ThemeColor types now exported for hooks using ctx.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
/model selector 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. Use steer() or followUp() 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)