Follow Discord
Sweep 02 Oct 2026 · 18:55Z Build v2.1.288 509 read Stable v2.1.285 Latest v2.1.287 Next v2.1.288 Feeds RSS JSON llms.txt llms-full.txt Unofficial

Claude Code v2.1.288 ·

Plugin runtime adds ui.selection and ties network and audio access to a plugin id

Plugins get a new ui.selection operation, and http.fetch and URL audio playback now use a plugin storage id, with $.audio.play refusing URLs without one

Group of 2 You'll notice No documentation found New Features
JSON All of v2.1.288
You'll noticeTier: how much it should matter to you
4Useful: my rating, 1 to 5
3Signal: worth watching, 1 to 5
PluginsArea: what it touches
New FeaturesKind: in v2.1.288,
What probably matters to youSection of the release

What

The set of operations that plugins (add-ons that extend Claude Code) can call has changed:

  • ui.selection is a new operation in the plugin API list.
  • http.fetch, which lets a plugin make web requests, is now built per plugin and takes a pluginStorageId, an identifier for the plugin's own storage. Before, it was an inline check run with only the plugin's name.
  • URL checks and audio fetching now receive both pluginName and pluginStorageId.
  • Authenticated fetches, meaning web requests that send login credentials, now run an extra check before they are sent.
  • $.audio.play now throws an error ("$.audio.play: the plugin has no id") when asked to play from a URL and the plugin has no pluginStorageId.

Why

This matters mainly to plugin authors. There is a new selection operation to use, and a plugin without a storage id can no longer play audio from a URL, so code that relied on that will now see an error.

Read from
Names in the bundleui.selection
How sure we are
Something disagreesSomething we can check disagrees with this entry, or the writer said they could not settle it.
The writer flagged doubtIt is not clear what `ui.selection` returns, or whether the extra check on signed-in requests is always on.

See this entry in the whole of v2.1.288 →

Feedback