Sweep 19 Sep 2026 · 02:36Z Build v2.1.278 500 read Stable v2.1.267 Latest v2.1.278 Next v2.1.278 Feeds RSS JSON llms.txt Unofficial

hooks.json can now declare a separate 'surface' module for drawing a hook module's UI elements

TierUse it nowhow much it should matter to you
Useful3my rating, 1 to 5
Signal3worth watching, 1 to 5
AreaPluginswhat it touches
KindNew Featuresin v2.1.267,
Use it now

hooks.json can now declare a separate 'surface' module for drawing a hook module's UI elements

What

A plugin's hooks.json configuration file can now include an optional surface field, naming a module (a code file separate from the main hooks module) whose job is to render the hooks module's Client UI elements onto a display surface. This field requires the modules field to also be present, and its format is checked by a new validation rule: it must be a path relative to the hooks.json file and cannot start with $.

Why

This gives plugin authors a way to separate the code that renders UI elements from the main hooks logic, which is useful for plugins that need to show their own interface elements.

Read from
Names in the bundlesurface
Since it was published

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 TypeScript SDK V2 session API (removed) touched a line naming surface after this was published. V2 was an experimental session API that removed the need for async generators and yield coordination. Instead of managing generator state across turns, each turn was a separate `send()`/`stream()` cycle. The API surface reduced to creating… agent-sdk/typescript-v2-preview see the edit
Confirmed since Anthropic's documentation has since written up surface, on List Events. When set, this event was cross-posted from a subagent's thread to surface its custom tool use on the primary thread's stream. Empty on the thread's own events. Echo this on a `user.custom_tool_result` event to route the result back. api/beta/sessions/events/list see the edit
How sure we are
One source agreesOne thing we can check says the same as this entry.
Anthropic's documentation agreesAnthropic's documentation has since written up surface, on List Events.

See this entry in the whole of v2.1.267 →