What
When Claude Code builds an event for a plugin's UI component, it used to always mark the event's surface as "terminal". It now takes the surface value from whoever triggered the event instead, and the request format was updated to accept an optional surface field with its own validation.
Why
This allows plugin component events to be correctly labeled when they happen somewhere other than the terminal, which matters as Claude Code runs in more surfaces beyond the terminal.
Names in the bundlesurface
The entry above is what we published on the day. These lines were added later, as Anthropic's own pages caught up, and they sit beside the original rather than replacing it.
Added since
A small documentation edit on List local sessions touched a line naming surface after this was published.
The product the session ran in: `cowork` (Cowork in Claude Desktop on the user's machine), `claude_code` (Claude Code), `claude_science` (Claude Science), `claude_in_chrome` (the Claude in Chrome browser extension's built-in chat), or one …api/compliance/apps/sessions/local/list see the edit
Confirmed since
Anthropic's documentation has since written up surface, on Beta.
Deprecated: use `group.type` instead. The kind of rate-limit group this entry represents. `model_group` entries apply to a family of models (listed in `models`); other values apply to an API-surface category and have `models` set to `null`…api/beta see the edit
One source agreesOne thing we can check says the same as this entry.
Anthropic's documentation agrees
Anthropic's documentation has since written up surface, on Beta.