{"version":"2.1.288","anchor":"plugin-runtime-uiselection-op-httpfetch-refactor-plugin","canonical_anchor":"plugin-runtime-uiselection-op-httpfetch-refactor-plugin","heading":"Plugin runtime adds ui.selection and ties network and audio access to a plugin id","tier":"use","area":"Plugins","scope":"individual","heads_up":false,"url":"https:\/\/changelogs.core-directive.com\/v\/2.1.288\/e\/plugin-runtime-uiselection-op-httpfetch-refactor-plugin","release_url":"https:\/\/changelogs.core-directive.com\/v\/2.1.288","markdown":"### Plugin runtime adds ui.selection and ties network and audio access to a plugin id\n\nPlugins 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\n\n**Unclear.** It is not clear what `ui.selection` returns, or whether the extra check on signed-in requests is always on.\n\n**What**\n\nThe set of operations that plugins (add-ons that extend Claude Code) can call has changed:\n\n- `ui.selection` is a new operation in the plugin API list.\n\n- `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.\n\n- URL checks and audio fetching now receive both `pluginName` and `pluginStorageId`.\n\n- Authenticated fetches, meaning web requests that send login credentials, now run an extra check before they are sent.\n\n- `$.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`.\n\n**Why**\n\nThis 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.\n\n- Area: Plugins\n- Tier: Use it now\n- Useful: 4\/5\n- Signal: 3\/5\n- Scope: individual\n- Heads-up: no"}