What
A headless session is Claude Code running without its own screen, driven by another program (the host) through the SDK with stream-json output. Plugin interface actions there used to do nothing but log "no notification bar in a headless session". Now they are passed to the host:
- System messages with subtypes
ui_toast,ui_status,ui_invalidate,ui_log,ui_panes,ui_scrollandui_focus. The last five are sent only when a check passes. Before, onlycommands_changedwas sent. - Requests the host answers:
ui_copy,ui_prompt_read,ui_prompt_fillandui_prompt_suggest, sent on non-remote connections. If an answer is shaped like an error and is not from the expected client, it is ignored and the request keeps waiting. - An allowlist of message subtypes now includes these
ui_*subtypes andsession_title_changed. - New hooks for connecting and resolving plugin MCP servers.
In the same area, reconnect and retry delays now go through one shared helper with random variation of 0.25 either way, and errors when waking a worker map to reasons such as wake_unsupported_host.
Why
A host app can now show plugin notifications, status and panes, and let plugins read or fill in the prompt box. This only has an effect if the host answers these messages.
It is not clear which host apps answer these requests, or which plugin features send them.