accessibility
Skill1 starsChanged 2 months agoMITView on GitHub
Use when building or reviewing web UIs for accessibility — WCAG 2.2 Level AA compliance, semantic HTML over ARIA, keyboard navigation, color contrast, screen reader patterns, and testing approach.
We split this skill into the rules it gives an agent
4 rules. 0 are common, 1 is distinctive, and 3 are very specific to this project.
0
Common
Most of the 97 edited versions we read keep these.
1
Distinctive
This author's own choices. Worth a look.
3
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 42
Verify computed colors — don't eyeball.
- Very specific: line 48
Keyboard: All interactive elements must be reachable by Tab, in logical order, with no keyboard trap.
- Very specific: line 51
Visible focus: Never outline: none without a clearly visible replacement.
- Very specific: line 97
Run axe-core in CI as a smoke test, not a complete audit.
“Common” is measured: kept by at least 6 in 10 of the 97 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Accessibility
This skill is self-contained for day-to-day use. Deeper reference (needs
the full harness checkout): patterns/accessibility/README.md (full
examples including ARIA live regions and APG patterns). External
canonical sources: WCAG 2.2 and the
WAI-ARIA Authoring Practices.
Target: WCAG 2.2 Level AA.
The first rule: don't use ARIA if a native element exists
A native <button>, <a href>, <input>, <label>, <nav>, or
<table> brings keyboard behavior, focus management, and the correct
role/state for free. role="button" + tabindex + keyboard handler is
a liability you now own forever.
<!-- Good: browser handles focus, Enter, Space, and role automatically -->
<button type="button" onclick="save()">Save</button>
<!-- Avoid: you must re-implement everything the native button provides -->
<div role="button" tabindex="0" onclick="save()" onkeydown="handleKey(event)">Save</div>Perceivable
- Text alternatives. Meaningful images:
altdescribing purpose. Decorative images:alt="". Icon-only controls:aria-labelor visually-hidden text. - Contrast. Body text ≥ 4.5:1 against background. Large text (≥ 24px, or ≥ 18.66px bold) and UI components/graphics ≥ 3:1. Verify computed colors — don't eyeball.
- Color alone is not enough. A red border and an error text/icon — not red alone.
Operable
- Keyboard. All interactive elements must be reachable by Tab, in
logical order, with no keyboard trap.
tabindex="0"for natural order;tabindex="-1"for programmatic-only focus; never positive values. - Visible focus. Never
outline: nonewithout a clearly visible replacement. Keyboard users navigate by it. - Skip link. First focusable element on pages with repeated
navigation:
<a href="#main">Skip to main content</a>. - Target size. Interactive targets ≥ 24×24 px (WCAG 2.2 §2.5.8), with adequate spacing if smaller.
Understandable
- Label every input.
<label for>oraria-labelledby. Placeholder text is not a label — it disappears when the user starts typing. - Errors in text. On validation failure: describe what's wrong and
how to fix it; associate via
aria-describedby; setaria-invalid="true"on the field. - Consistent, predictable behavior. Focus doesn't jump unexpectedly; forms don't submit on focus change.
Robust
- Name, Role, Value for every custom widget. Follow the matching ARIA APG pattern exactly — its roles, states, and keyboard interactions. A half-implemented ARIA widget is worse than a native element.
- Announce dynamic changes. Content that updates without a page load
(toasts, async results, validation) needs an
aria-liveregion (politefor status updates,assertiveonly for urgent/time-sensitive changes) orrole="alert".
<!-- Status message that updates asynchronously -->
<div aria-live="polite" aria-atomic="true" class="sr-only" id="status">
<!-- Updated by JS: "3 items saved." -->
</div>Testing: automated is not enough
Automated tools (axe-core, Lighthouse) catch ~30–50% of WCAG issues —
contrast, missing labels/alt, invalid ARIA. The rest requires manual
testing:
- Tab through every interactive element — confirm logical order, visible focus, no traps.
- Run a screen reader (NVDA + Firefox, VoiceOver + Safari) on each flow. Hear, don't just read, what's announced.
- Check at 200% browser zoom — layout must not break or lose content.
- Run
axe-corein CI as a smoke test, not a complete audit.
Pitfalls to catch in review
// Missing alt — screen reader announces the file path
<img src="/hero.png" /> // WRONG
<img src="/hero.png" alt="Developer reviewing code" /> // RIGHT
// Form input with no label
<input type="email" placeholder="you@example.com" /> // WRONG
<label htmlFor="email">Email</label>
<input type="email" id="email" placeholder="you@example.com" /> // RIGHT
// Click handler on non-interactive element — keyboard users can't trigger
<div onClick={handleSave}>Save</div> // WRONG
<button type="button" onClick={handleSave}>Save</button> // RIGHT
// outline: none without a replacement focus style
button:focus { outline: none; } // WRONG
button:focus-visible { outline: 2px solid #005fcc; outline-offset: 2px; } // RIGHTOther versions107 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 107
- microsoft/vscode★ 194ksame name
- elastic/kibana★ 21ksame name
- midudev/preguntas-entrevista-react★ 7.8ksame name
- gitpod-io/openvscode-server★ 6.2ksame name
- posit-dev/positron★ 4.3ksame name
- legions-developer/evilcharts★ 3.1ksame name
- midudev/la-velada-web-oficial★ 1.9ksame name
- UI5/webcomponents★ 1.8ksame name
- theopenco/llmgateway★ 1.7ksame name
- microsoft/hve-core★ 1.6ksame name
97 more not listed
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
Used alongsideProjects with it also use tool-rename-deprecation, author-contributions and 10 more.
Other files people use alongside this one.
Files found in the same public projects as a version of this one, more often than they turn up anywhere else. Each project counts once, large collections count for less, and this file's own repository is left out.
gitpod-ioSkilltool-rename-deprecation
Ensure renamed built-in tool references preserve backward compatibility. Use when renaming a toolReferenceName, tool set referenceName, or any tool identifier. Run on ANY change to tool registration code. Covers legacyToolReferenceFullNames for tools and legacyFullNames for tool sets.
Also in 5 projects that use this
MicrosoftSkillauthor-contributions
Identify all files a specific author contributed to on a branch vs its upstream, tracing code through renames. Use when asked who edited what, what code an author contributed, or to audit authorship before a merge. This skill should be run as a subagent — it performs many git operations and returns a concise table.
Also in 8 projects that use this
MicrosoftSkillauto-perf-optimize
Run agent-driven VS Code performance or memory investigations. Use when asked to launch Code OSS, automate a VS Code scenario, run the Chat memory smoke runner, capture renderer heap snapshots, take workflow screenshots, compare run summaries, or drive a repeatable scenario before heap-snapshot analysis.
Also in 7 projects that use this
- +9 more from microsoft
In this repository77 other files it gives its agents.
- AGENTS.mdAGENTS.md
- CLAUDE.mdCLAUDE.md
- .github/copilot-instructions.mdCopilot instructions
- .cursor/rules/accessibility.mdcCursor rule
- .cursor/rules/agentharness-router.mdcCursor rule
- .cursor/rules/agentic-loops.mdcCursor rule
- .cursor/rules/api-design.mdcCursor rule
- .cursor/rules/audit-review-followup.mdcCursor rule
- .cursor/rules/big-work-plan-review.mdcCursor rule
- .cursor/rules/branching.mdcCursor rule
- .cursor/rules/clean-architecture.mdcCursor rule
- .cursor/rules/code-review-api.mdcCursor rule
- .cursor/rules/code-review-db.mdcCursor rule
- .cursor/rules/code-review.mdcCursor rule
- .cursor/rules/code-review-ui.mdcCursor rule
- .cursor/rules/committing.mdcCursor rule
- .cursor/rules/database-conventions.mdcCursor rule
- .cursor/rules/dependency-audit.mdcCursor rule
- .cursor/rules/dependency-injection.mdcCursor rule
- .cursor/rules/design-patterns.mdcCursor rule
- .cursor/rules/docker-conventions.mdcCursor rule
- .cursor/rules/error-handling.mdcCursor rule
- .cursor/rules/file-placement-policy.mdcCursor rule
- .cursor/rules/github-issue-triage.mdcCursor rule
- .cursor/rules/go-conventions.mdcCursor rule
- .cursor/rules/harness-feedback.mdcCursor rule
- .cursor/rules/logging.mdcCursor rule
- .cursor/rules/multi-agent-coordination.mdcCursor rule
- .cursor/rules/mutation-testing.mdcCursor rule
- .cursor/rules/performance-profiling.mdcCursor rule
- .cursor/rules/planning-with-files.mdcCursor rule
- .cursor/rules/port-agent-config.mdcCursor rule
- .cursor/rules/project-bootstrap.mdcCursor rule
- .cursor/rules/python-conventions.mdcCursor rule
- .cursor/rules/react-best-practices.mdcCursor rule
- .cursor/rules/refactoring.mdcCursor rule
- .cursor/rules/requirements-clarification.mdcCursor rule
- .cursor/rules/security-review.mdcCursor rule
- .cursor/rules/solid-principles.mdcCursor rule
- .cursor/rules/testing.mdcCursor rule
- .cursor/rules/typescript-conventions.mdcCursor rule
- agentic-loopsSkill
- api-designSkill
- audit-review-followupSkill
- big-work-plan-reviewSkill
- branchingSkill
- clean-architectureSkill
- code-review-apiSkill
- code-review-dbSkill
- code-reviewSkill
- code-review-uiSkill
- committingSkill
- database-conventionsSkill
- dependency-auditSkill
- dependency-injectionSkill
- design-patternsSkill
- docker-conventionsSkill
- error-handlingSkill
- file-placement-policySkill
- github-issue-triageSkill
- The first 60 shown.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
Reviews can't be read right now.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

