Helps developers preserve backward compatibility when renaming tool identifiers.
Copy the install command and let the AI configure it · recommended for beginners
Please install the "tool-rename-deprecation" skill from askskill: 1. Download https://raw.githubusercontent.com/microsoft/vscode/main/.github/skills/tool-rename-deprecation/SKILL.md 2. Save it as ~/.claude/skills/tool-rename-deprecation/SKILL.md 3. Reload skills and tell me it's ready
I renamed a built-in tool's toolReferenceName from old.fetch to new.fetch. Check the registration code, ensure legacyToolReferenceFullNames is added, and tell me what other compatibility settings must be updated.
Returns a compatibility review showing whether old name mappings are preserved and which registration fields need updates.
We plan to rename a tool set referenceName from core-tools to platform-tools. Review the code, confirm legacyFullNames is configured correctly, and list all potentially affected legacy references.
Provides a tool set rename review, including compatibility field guidance and potential breaking change risks.
Audit this tool registration code change. If any tool name, tool set name, or other identifier changed, verify backward compatibility is preserved and provide fix recommendations.
Produces an audit summary listing detected renames, missing compatibility mappings, and recommended fixes.
When a tool or tool set reference name is changed, the old name must always be added to the deprecated/legacy array so that existing prompt files, tool configurations, and saved references continue to resolve correctly.
Run this skill on any change to built-in tool or tool set registration code to catch regressions:
toolReferenceNamereferenceNametoolSet/toolName path becomes a legacy name)Determine whether you are renaming a tool or a tool set, and where it is registered:
| Entity | Registration | Name field to rename | Legacy array | Stable ID (NEVER change) |
|---|---|---|---|---|
Tool (IToolData) | TypeScript | toolReferenceName | legacyToolReferenceFullNames | id |
| Tool (extension) | package.json languageModelTools | toolReferenceName | legacyToolReferenceFullNames | name (becomes id) |
Tool set (IToolSet) | TypeScript | referenceName | legacyFullNames | id |
| Tool set (extension) | package.json languageModelToolSets | name or referenceName | legacyFullNames | — |
Critical: For extension-contributed tools, the name field in package.json is mapped to id on IToolData (see languageModelToolsContribution.ts line id: rawTool.name). It is also used for activation events (onLanguageModelTool:<name>). Never rename the name field — only rename toolReferenceName.
Verify the old toolReferenceName value appears in legacyToolReferenceFullNames. Don't assume it's already there — check the actual array contents. If the old name is already listed (e.g., from a previous rename), confirm it wasn't removed. If it's not there, add it.
For internal/built-in tools (TypeScript IToolData):
// Before rename
export const MyToolData: IToolData = {
id: 'myExtension.myTool',
toolReferenceName: 'oldName',
// ...
};
// After rename — old name preserved
export const MyToolData: IToolData = {
id: 'myExtension.myTool',
toolReferenceName: 'newName',
legacyToolReferenceFullNames: ['oldName'],
// ...
};
If the tool previously lived inside a tool set, use the full toolSet/toolName form:
legacyToolReferenceFullNames: ['oldToolSet/oldToolName'],
If renaming multiple times, accumulate all prior names — never remove existing entries:
legacyToolReferenceFullNames: ['firstOldName', 'secondOldName'],
For tool sets, add the old name to the legacyFullNames option when calling createToolSet:
toolsService.createToolSet(source, id, 'newSetName', {
legacyFullNames: ['oldSetName'],
});
For extension-contributed tools (package.json), rename only toolReferenceName and add the old value to legacyToolReferenceFullNames. Do NOT rename the name field:
// CORRECT — only toolReferenceName changes, name stays stable
{
"name": "copilot_myTool", // ← KEEP this unchanged
"toolReferenceName": "newName", // ← renamed
"legacyToolReferenceFullNames": [
"oldName" // ← old toolReferenceName preserved
]
}
Legacy names must be respected everywhere a tool is looked up by reference name, not just in prompt resolution. Key consumers:
getDeprecatedFullReferenceNames() maps old → current names for .prompt.md validation and code actionsgetToolAliases() / getToolSetAliases() yield legacy names so tool picker and enablement maps resolve them…
Validate Azure DevOps pipeline changes and troubleshoot builds and YAML faster.
Update the GitHub Copilot CLI or SDK to a newer version.
Upgrade Anthropic SDKs, migrate versions, and fix dependency or typing issues.
Generate or update chat customization files for AI coding agents.
Find and read Code OSS dev build logs for faster debugging.
Merge session branch changes back into the base branch cleanly.