What
Claude Code gained a new set of messages that let outside apps, called surfaces, connect to a running session and show user interface drawn by plugins. The surfaces named are desktop, mobile and vscode. The message schemas are part of the plugin hooks engine, the part of Claude Code that runs plugin code in response to events.
- Attaching and leaving:
ui_attach,ui_detach - Drawing and interaction:
ui_render,ui_press,ui_input,ui_select,ui_scroll,ui_focus,ui_close,ui_copy,ui_message - Panes:
ui_panes,ui_pane_show,ui_pane_focus - Surface-side modules:
ui_client_module,ui_client_press - The prompt box:
ui_prompt_read,ui_prompt_fill,ui_prompt_suggest,ui_prompt_edit - Building blocks a plugin can draw with: Box, Text, Button, Input, Select, Link, Code, Markdown, Client and Svg
The headless control handler, which answers requests from a connected app when there is no terminal screen, now handles these ui_* requests and a new list_directory request. Before, it handled only read_file and get_workspace_diff. list_directory runs only when CLAUDE_CODE_REMOTE is set, on Linux, and with the remote switch tengu_gentle_hummingbird on. Nothing has been read about that switch.
Why
This defines how plugins could show buttons, inputs, panes and other controls inside Claude Desktop, the mobile app and VS Code, not only in the terminal. It also lets a connected app ask a remote session to list a folder's contents.
It is not settled whether all of these messages are new or whether the feature is switched on for anyone.