
Tool Rename Deprecation
Audit VS Code language-model tool and tool-set renames so legacy reference names stay registered and saved prompts keep resolving.
Overview
tool-rename-deprecation is an agent skill for the Ship phase that ensures renamed VS Code tool and tool-set reference names retain legacy aliases for backward compatibility.
Install
npx skills add https://github.com/microsoft/vscode --skill tool-rename-deprecationWhat is this skill?
- Run on any built-in tool or tool set registration change, not only obvious renames
- Maps IToolData toolReferenceName to legacyToolReferenceFullNames while stable id must never change
- Covers tool set referenceName and legacyFullNames when sets or membership paths move
- Flags moving a tool between sets so old toolSet/toolName paths become legacy entries
- PR review checklist for dropped legacy names on TypeScript and package.json registrations
- Procedure table covers Tool (IToolData), Tool (extension package.json), and Tool set entities with distinct legacy array
Adoption & trust: 1.3k installs on skills.sh; 186k GitHub stars; 3/3 security scanners passed (skills.sh audits).
What problem does it solve?
You renamed a languageModel tool reference in VS Code and existing prompts or configs still call the old toolSet/toolName path.
Who is it for?
VS Code extension authors and contributors editing built-in LM tool registration in TypeScript or package.json.
Skip if: Application repos with no languageModelTools registration or teams renaming unrelated npm packages without tool reference surfaces.
When should I use this skill?
Use when renaming a toolReferenceName, tool set referenceName, or any tool identifier, or on any change to built-in tool registration code.
What do I get? / Deliverables
Registration changes include complete legacyToolReferenceFullNames or legacyFullNames entries so downstream prompts and extensions keep working without silent tool resolution failures.
- Verified legacyToolReferenceFullNames entries for renamed tools
- Verified legacyFullNames entries for renamed or restructured tool sets
Recommended Skills
Journey fit
Renaming shipped tool identifiers is a ship-time compatibility risk that belongs with review gates before release. Review covers PR checks that registration changes did not drop legacyToolReferenceFullNames or legacyFullNames arrays.
How it compares
A registration review checklist for VS Code tools, not a general semver or API deprecation policy skill.
Common Questions / FAQ
Who is tool-rename-deprecation for?
Developers shipping or reviewing VS Code language model tool and tool-set registration changes who must preserve old reference strings for users and saved prompts.
When should I use tool-rename-deprecation?
On ship review whenever you rename toolReferenceName or a tool set referenceName, move tools between sets, or review a PR that modifies tool registration code.
Is tool-rename-deprecation safe to install?
It is documentation-only procedural guidance; review the Security Audits panel on this Prism page before adding any third-party skill to your editor agent.
SKILL.md
READMESKILL.md - Tool Rename Deprecation
# Tool Rename Deprecation 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. ## When to Use Run this skill on **any change to built-in tool or tool set registration code** to catch regressions: - Renaming a tool's `toolReferenceName` - Renaming a tool set's `referenceName` - Moving a tool from one tool set to another (the old `toolSet/toolName` path becomes a legacy name) - Reviewing a PR that modifies tool registration — verify no legacy names were dropped ## Procedure ### Step 1 — Identify What Changed 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`. ### Step 2 — Add the Old Name to the Legacy Array **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`): ```typescript // 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: ```typescript legacyToolReferenceFullNames: ['oldToolSet/oldToolName'], ``` If renaming multiple times, **accumulate** all prior names — never remove existing entries: ```typescript legacyToolReferenceFullNames: ['firstOldName', 'secondOldName'], ``` **For tool sets**, add the old name to the `legacyFullNames` option when calling `createToolSet`: ```typescript 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:** ```jsonc // CORRECT — only toolReferenceName changes, name stays stable { "name": "copilot_myTool", // ← KEEP this unchanged "toolReferenceName": "newName", // ← renamed "legacyToolReferenceFullNames": [ "oldName" // ← old toolReferenceName preserved ] } ``` ### Step 3 — Check All Consumers of Tool Names Legacy names must be respected **everywhere** a tool is looked up by reference name, not just in prompt resolution. Key consumers: - *