useSendFollowUpMessage posts a message into the conversation as if the user had typed it, starting the next assistant turn.
Example
Tapping a product asks the model to tell the shopper more about it, while the carousel stays on screen.Returns
useSendFollowUpMessage returns a single, memoized function, safe to pass to effects and handlers.
sendFollowUpMessage
promptthe text posted as a user turn, model-visible, as if the user had typed it, or an array of MCP content blocks. The view keeps running after the message is posted.optionsscrollToBottomasks the host to scroll the conversation to the newest message after posting; omit it for the host default, or setfalseto keep the scroll position and the view on screen.target: "new"sends the message to a new conversation instead of the active one. On hosts that don’t advertiseopenai/message, the call rejects with aNotSupportedErrorand nothing is posted.
scrollToBottom is specific to ChatGPT. target and titled items come from the OpenAI MCP extensions: only ChatGPT reads them, and mobile only supports the active conversation. ChatGPT doesn’t accept audio blocks, nor resource links on iOS.Titled items
On ChatGPT, a text or image block with_meta["openai/title"] becomes a labeled item in the message, which the user can remove as one unit. Untitled text stays ordinary message text.
target are sent through the MCP Apps ui/message request, also inside ChatGPT, so scrollToBottom doesn’t apply to them.
useCallTool
Call a server tool without a conversation turn
useToolInfo
Read the tool result the view mounted with
DataLLM
Sync on-screen state to the model passively