Agent skill · microsoft
customizations-in-the-agent-host
Architecture and hard-won debugging lessons for customization enablement (plugins, MCP servers, agents, skills, instructions) in the agent host. Use when changing how customizations are discovered, published, enabled/disabled, or handed to a provider SDK; when a customization shows the wrong enabled state in the UI; or when a disabled MCP server or plugin is still reaching the model.
What it needs
About 5k tokens when loaded.
What this skill does
Customizations in the Agent Host Customizations are the plugins, MCP servers, agents, skills and instructions that an agent-host session exposes to a model. This skill covers enablement: how a customization's on/off state is decided, stored, published and enforced. Read this before changing anything in: src/vs/platform/agentHost/node/agentHostCustomizationEnablementService.ts src/vs/platform/agentHost/node/shared/customizationEnablementGate.ts src/vs/platform/agentHost/common/customizationEnablement.ts the per-provider customization paths under node/copilot/, node/claude/, node/codex/ The mental model Enablement is a list of scoped decisions, not a boolean A plugin or MCP server carries enablement?: CustomizationEnablement[] — an ordered list of decisions, most specific first: Kind Owner Meaning --- --- --- Session agent host this session only Workspace agent host this working directory (carries uri) Global client, unless the host discovered it everywhere isCustomizationEnabled() picks the first entry; absent entries inherit from the next scope out, and an absent list means enabled. Never re-add a parallel enabled boolean to plugins or MCP servers — a second source of truth is what this design exists to remove. (DirectoryCustomization legitimately keeps a plain enabled; consumers derive its state through isCustomizationEnabled() all the same.) Who owns Global The host owns Global for anything it discovered, even when that thing lives inside a plugin the client forwarded. The client owns Global only for what it actually bundled. The discriminator is childEnablement — not clientId. A plugin whose childEnablement record has a key for a child MCP server means "the client bundled this child and owns its global decision"; anything else the host discovered by parsing the plugin directory. The overlay model This is the single most important invariant, and getting it wrong caused a self-defeating write that silently erased user decisions: The client's value is the base. …
How to use it
Reference it in AdaL, Claude Code, Cursor or any coding agent — nothing to install:
@skills microsoft/customizations-in-the-agent-host