Add client plugin customizations to automations - #474
Merged
Connor Peet (connor4312) merged 1 commit intoOct 1, 2026
Merged
Conversation
Automations run when no client is connected, so client-published plugins (skills, agents, prompts, rules) were unavailable to runs. `AutomationSessionTemplate.customizations` now lists client plugins that the host captures from the dispatching client when the definition is saved; `AutomationEntry.customizations` reports the host-owned copies that every run session receives. Support is advertised by `AutomationCapabilities.customizations`. Also fixes the Rust generator dropping the `"type": "plugin"` discriminant on standalone plugin lists (`ClientPluginCustomization` and `AutomationEntry.customizations`). Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Connor Peet (connor4312)
force-pushed
the
connor4312/automation-customizations
branch
from
September 30, 2026 21:03
0d9ec38 to
dad81ed
Compare
Connor Peet (connor4312)
added a commit
to microsoft/vscode
that referenced
this pull request
Sep 30, 2026
Syncs microsoft/agent-host-protocol#474 (rebased onto c02ad7ef) which adds AutomationSessionTemplate.customizations, AutomationEntry.customizations and the automations.customizations capability. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Connor Peet (connor4312)
marked this pull request as ready for review
September 30, 2026 21:22
Connor Peet (connor4312)
requested a review
from roblourens
as a code owner
September 30, 2026 21:22
Connor Peet (connor4312)
force-pushed
the
connor4312/automation-customizations
branch
2 times, most recently
from
October 1, 2026 16:52
e9dacb4 to
0d9ec38
Compare
roblourens
approved these changes
Oct 1, 2026
Connor Peet (connor4312)
enabled auto-merge
October 1, 2026 17:12
Connor Peet (connor4312)
disabled auto-merge
October 1, 2026 17:13
Connor Peet (connor4312)
deleted the
connor4312/automation-customizations
branch
October 1, 2026 17:13
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Automations usually run when no client is connected, so there's no active client to supply plugins. A user can set up an automation on a machine with their plugins installed, but later runs can't use those skills, agents, prompts, or rules. This PR lets an automation carry its own copies of client plugins. Client tools are out of scope.
Protocol changes
AutomationSessionTemplate.customizations?: ClientPluginCustomization[]: the client plugins each run should get, in the same shape clients publish inactiveClients[].customizations.automation/createRequestedorautomation/updateRequested, the host copies every entry that is new or whoseuriornoncechanged, readingvirtual://…contents from the dispatching client with the existing server→clientresource*requests. If any copy fails, the whole action is rejected.id,uri, andnoncearen't re-copied, so a client that can't serve a plugin can still edit the rest of the definition by sending back the template it received.AutomationEntry.customizations?: PluginCustomization[]: the host-owned copies, matched to template entries byid. Each has a hosturiclients can browse, pluschildrenandload. Every run session receives them inSessionState.customizationswith noclientId.uriandnonce) once and share them, which clients can't observe. Copies are never refreshed automatically: a client sends a newnonceto pick up local changes, so unattended runs use exactly what the user saved.AutomationCapabilities.customizations: {}: capability hosts advertise to show they support this.automation/setalready carries the full entry.Rust generator fix
The new round-trip fixture showed that Rust dropped
"type": "plugin"when serializing a plugin outside theCustomizationunion. This already affectedactiveClients[].customizationstoday.ClientPluginCustomizationnow keeps itstypefield, andAutomationEntry.customizationsgets a serde helper (following the existing running-tool-call helper) that puts it back. This PR includes a Rust-only fix changelog fragment for it.Other changes
docs/guide/automations.md, and updated the action docs.050-automation-customizations-snapshot.json, and043-automation-capabilities.jsonnow includes the new capability.Validation
npm run generateandnpm run testpass (451 tests, 100% branch coverage ontypes/reducers.ts).RealSocketTypeScriptConformanceTests, which couldn't startnodeinside the .NET container, so it's an environment issue rather than this change.