
Accessibility
Ship WCAG-minded interactive UI in VS Code workbench, editor, and extensions without waiting for an explicit accessibility ticket.
Overview
Accessibility is an agent skill for the Build phase that enforces VS Code’s required help dialog, accessible view, and verbosity patterns whenever you add or change interactive UI.
Install
npx skills add https://github.com/microsoft/vscode --skill accessibilityWhat is this skill?
- Mandatory for new VS Code features and contributions even when the prompt omits “accessibility”
- Three required pieces for new interactive surfaces: Accessibility Help dialog, Accessible View, verbosity setting
- Covers keyboard navigation, ARIA announcements/labels/roles, signals, and accessible views for screen readers
- Applies to workbench, editor overlays, dialogs, and extension-contributed UI
- Update path for changing existing UI interactions without dropping accessibility contracts
- 3 mandatory accessibility components for new interactive UI surfaces
Adoption & trust: 1.4k installs on skills.sh; 186k GitHub stars; 3/3 security scanners passed (skills.sh audits).
What problem does it solve?
You are shipping new VS Code UI but risk shipping focus traps, silent screen reader experiences, or missing platform accessibility contracts.
Who is it for?
Contributors and indie extension authors implementing workbench panels, editor UI, commands, or dialogs inside the VS Code repo or compatible extensions.
Skip if: Pure backend or CLI-only changes with no interactive UI, or web apps outside the VS Code workbench/extension model.
When should I use this skill?
Any VS Code feature work that introduces or changes interactive UI; default for new features and contributions.
What do I get? / Deliverables
New or updated UI ships with help dialog, accessible view, verbosity controls, and ARIA/keyboard behavior reviewers expect on VS Code contributions.
- Accessibility Help dialog wired to help keybinding on focus
- Accessible View for non-trivial visual content
- Accessibility verbosity boolean setting when applicable
Recommended Skills
Journey fit
Accessibility wiring happens while you implement or change focusable UI in the product codebase—squarely in Build. Panels, widgets, commands, and ARIA live in client/workbench UI work, which Prism shelves under frontend build.
How it compares
Use as a platform-specific implementation checklist—not a generic WCAG audit skill or a standalone MCP accessibility scanner.
Common Questions / FAQ
Who is accessibility for?
VS Code feature authors, extension developers, and agent-assisted contributors who touch interactive workbench or editor UI.
When should I use accessibility?
Use it during Build whenever you add a panel, view, widget, command workflow, or change existing UI interactions—including when the user never says “accessibility.”
Is accessibility safe to install?
It is procedural guidance for your repo; review the Security Audits panel on this Prism page before trusting any third-party skill packaging.
SKILL.md
READMESKILL.md - Accessibility
## When to Use This Skill Use this skill for any VS Code feature work that introduces or changes interactive UI. Use this skill by default for new features and contributions, including when the request does not explicitly mention accessibility. Trigger examples: - "add a new feature" - "implement a new panel/view/widget" - "add a new command or workflow" - "new contribution in workbench/editor/extensions" - "update existing UI interactions" Do not skip this skill just because accessibility is not named in the prompt. When adding a **new interactive UI surface** to VS Code — a panel, view, widget, editor overlay, dialog, or any rich focusable component the user interacts with — you **must** provide three accessibility components (if they do not already exist for the feature): 1. **An Accessibility Help Dialog** — opened via the accessibility help keybinding when the feature has focus. 2. **An Accessible View** — a plain-text read-only editor that presents the feature's content to screen reader users (when the feature displays non-trivial visual content). 3. **An Accessibility Verbosity Setting** — a boolean setting that controls whether the "open accessibility help" hint is announced. Examples of existing features that have all three: the **terminal**, **chat panel**, **notebook**, **diff editor**, **inline completions**, **comments**, **debug REPL**, **hover**, and **notifications**. Features with only a help dialog (no accessible view) include **find widgets**, **source control input**, **keybindings editor**, **problems panel**, and **walkthroughs**. Sections 4–7 below (signals, ARIA announcements, keyboard navigation, ARIA labels) apply more broadly to **any UI change**, including modifications to existing features. When **updating an existing feature** — for example, adding new commands, keyboard shortcuts, or interactive capabilities — you must also update the feature's existing accessibility help dialog (`provideContent()`) to document the new functionality. Screen reader users rely on the help dialog as the primary way to discover available actions. --- ## 1. Accessibility Help Dialog An accessibility help dialog tells the user what the feature does, which keyboard shortcuts are available, and how to interact with it via a screen reader. ### Steps 1. **Create a class implementing `IAccessibleViewImplementation`** with `type = AccessibleViewType.Help`. - Set a `priority` (higher = shown first when multiple providers match). - Set `when` to a `ContextKeyExpression` that matches when the feature is focused. - `getProvider(accessor)` returns an `AccessibleContentProvider`. 2. **Create a content-provider class** implementing `IAccessibleViewContentProvider`. - `id` — add a new entry in the `AccessibleViewProviderId` enum in `src/vs/platform/accessibility/browser/accessibleView.ts`. - `verbositySettingKey` — reference the new `AccessibilityVerbositySettingId` entry (see §3). - `options` — `{ type: AccessibleViewType.Help }`. - `provideContent()` — return localized, multi-line help text. 3. **Implement `onClose()`** to restore focus to whatever element was focused before the help dialog opened. This ensures keyboard users and screen reader users return to their previous context. 4. **Register** the implementation: ```ts AccessibleViewRegistry.register(new MyFeatureAccessibilityHelp()); ``` in the feature's `*.contribution.ts` file. ### Example skeleton The simplest approach is to return an `AccessibleContentProvider` directly from `getProvider()`. This is the most common pattern in the codebase (used by chat, inline chat, quick chat, etc.): ```ts import { Acces