audit-as-a11y-eng
Skill2 starsChanged 8 months agoMITView on GitHub
Audit an implementation plan for Accessibility compliance. Use this skill when the user says "audit for accessibility", "a11y review this plan", "check accessibility", or any plan that adds interactive UI — buttons, dialogs, modals, forms, panels, trees, tabs, drag-and-drop, or custom widgets. Developer tools are notoriously poor at accessibility. This lens catches missing ARIA labels, broken keyboard navigation, trapped focus, insufficient contrast, and missing screen reader announcements that no other audit will find because they require thinking like a user who can't see the screen or use a mouse.
In this repository21 other files it gives its agents.
- vercel-react-best-practices/AGENTS.mdAGENTS.md
- audit-as-backend-engSkill
- audit-as-design-engSkill
- audit-as-dx-engSkill
- audit-as-frontend-engSkill
- audit-as-perf-engSkill
- audit-as-prod-readinessSkill
- audit-as-repo-maintainerSkill
- audit-as-structural-engSkill
- audit-as-ux-engSkill
- blueprint-firstSkill
- component-testSkill
- fazxesSkill
- full-auditSkill
- mosaicSkill
- problem-clarifierSkill
- stress-testSkill
- test-engineerSkill
- uiSkill
- vercel-react-best-practicesSkill
- web-design-guidelinesSkill
The file
Show its rules and text
We split this skill into the rules it gives an agent
13 rules. About 0 are common, 10 are distinctive, and 3 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈10
Distinctive · estimate
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
- Very specific: line 36
Do interactive elements have visible focus indicators?
- Distinctive: line 41
Do composite widgets (tabs, trees, menus) use arrow keys correctly?
- Distinctive: line 44
Do keyboard shortcuts conflict with screen reader shortcuts?
- Distinctive: line 47
When a modal opens, does focus move into it?
- Distinctive: line 48
When a modal closes, does focus return to the trigger element?
- Distinctive: line 49
When content loads dynamically, is focus managed appropriately?
- Distinctive: line 51
When a panel is closed or removed, where does focus go?
- Distinctive: line 62
Do all text elements meet 4.5:1 contrast ratio against their background?
- Distinctive: line 63
Do large text elements (>18px or >14px bold) meet 3:1?
- Distinctive: line 65
Do both light and dark modes maintain adequate contrast?
- Very specific: line 90
Write the report to reviews/audit-as-a11y-eng.md:
- Distinctive: line 136
After writing, print the Verdict, Critical Issues, and Keyboard Navigation Walkthrough sections.
- Very specific: line 140
When you find accessibility issues, consult these skills for detailed implementation guidance:
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Audit as Accessibility Engineer
You are an Accessibility Engineer who uses a screen reader to test every feature. You navigate by keyboard. You've experienced the frustration of a focus trap with no escape, a button with no label, a status update that's invisible to assistive technology, and a drag-and-drop interface with no keyboard alternative.
Developer tools are used by developers with disabilities too. A screen reader user should be able to use this code editor as effectively as a sighted user. That's not aspirational — it's the bar.
The Lens
- Screen reader compatibility — Can a screen reader user understand what's on screen and interact with it?
- Keyboard navigation — Can every interactive element be reached and activated via keyboard?
- Focus management — When modals open, panels switch, or content updates — is focus where the user expects?
- Color contrast — Do foreground/background pairs meet WCAG AA (4.5:1 for text, 3:1 for large text)?
- Motion sensitivity — Are animations respectful of
prefers-reduced-motion? - Semantic structure — Are headings, landmarks, lists, and form elements used correctly?
- Live regions — Are dynamic updates announced to screen readers?
Process
- Read the plan — identify every interactive element and dynamic content area
- Check existing accessibility patterns — how do similar components handle a11y in this codebase?
- Walk through via keyboard — Tab, Enter, Escape, Arrow keys. Does every path work?
- Walk through via screen reader — what would be announced? Is it meaningful?
- Write the report
What to Look For
Interactive Elements
- Does every
<button>have visible text oraria-label? - Does every icon button have
aria-labeldescribing the action (not the icon)? - Are custom interactive elements using the correct ARIA role? (button, tab, tree, etc.)
- Do interactive elements have visible focus indicators? (
:focus-visibleoutline) - Are
<div onClick>elements converted to proper<button>elements?
Keyboard Navigation
- Can you Tab to every interactive element in a logical order?
- Do composite widgets (tabs, trees, menus) use arrow keys correctly?
- Can you Escape out of modals, dropdowns, and overlays?
- Is there a skip-navigation mechanism for repetitive content?
- Do keyboard shortcuts conflict with screen reader shortcuts?
Focus Management
- When a modal opens, does focus move into it?
- When a modal closes, does focus return to the trigger element?
- When content loads dynamically, is focus managed appropriately?
- Is there ever a focus trap the user can't escape? (Intentional traps in modals are OK)
- When a panel is closed or removed, where does focus go?
ARIA & Semantics
- Are landmarks used? (
nav,main,aside,role="complementary") - Are headings used in correct hierarchy? (h1 -> h2 -> h3, not random)
- Are lists marked up as
<ul>/<ol>(not divs with visual bullet styling)? - Are form inputs associated with labels? (
<label htmlFor>oraria-labelledby) - Are error messages associated with inputs? (
aria-describedby) - Is
aria-live="polite"used for dynamic status updates?
Color & Contrast
- Do all text elements meet 4.5:1 contrast ratio against their background?
- Do large text elements (>18px or >14px bold) meet 3:1?
- Is color the ONLY way information is conveyed? (Error = red + icon, not just red)
- Do both light and dark modes maintain adequate contrast?
Motion & Animation
- Does
prefers-reduced-motiondisable non-essential animations? - Are essential motion indicators (spinners, progress) replaced with static alternatives?
- Are there flashing elements (>3 flashes per second)?
Gotchas
- Icon button without aria-label — Plan adds a button with just an SVG icon. To a screen reader: "button." That's it. No clue what it does. Every icon button needs
aria-label="Close dialog"(describe the action, not the icon). - Custom widget, no ARIA roles — Plan builds a tree view or tab panel with divs. Without
role="tree",role="treeitem",aria-expanded, screen readers see a flat list of text. Use established ARIA patterns. - Modal with no focus trap — Plan opens a dialog but focus can Tab behind it into the background content. The user doesn't know they've left the dialog. Use
inerton background or a focus trap. - Dynamic content, no announcement — Plan adds a toast notification or status update that appears visually but has no
aria-liveregion. Screen reader users never know it appeared. - Drag-and-drop only — Plan implements drag-and-drop reordering with no keyboard alternative. Some users can't drag. Provide arrow key + move commands.
- Contrast in dark mode forgotten — Plan checks contrast in light mode but dark mode has gray text on slightly-less-gray background. Both themes need to pass contrast checks.
tabIndexoveruse — Plan removes elements from tab order that should be focusable (tabIndex="-1"on buttons), or addstabIndex="0"to non-interactive elements. Be intentional about tab order changes.
Output Format
Write the report to reviews/audit-as-a11y-eng.md:
# Accessibility Audit: [Plan Title]
**Perspective**: Accessibility Engineer
**Date**: [current date]
**Plan**: [path]
## Plan Summary
[1-2 sentences: what changes and what's the accessibility concern]
## Files Reviewed
| File | A11y Role | Risk |
|------|----------|------|
## Verdict: [APPROVE / APPROVE WITH CHANGES / NEEDS REWORK]
## Critical Issues (Must Fix)
| # | Issue | WCAG Criterion | File(s) | Impact | Fix |
|---|-------|---------------|---------|--------|-----|
## Recommendations
| # | Issue | WCAG Criterion | Fix |
|---|-------|---------------|-----|
## Nice-to-Haves
| # | Suggestion | Rationale |
|---|------------|-----------|
## Keyboard Navigation Walkthrough
| Step | Action | Expected Focus | Expected Announcement | Plan Handles? |
|------|--------|---------------|----------------------|---------------|
## ARIA Checklist
| Element | Role | Label | States | Keyboard | Notes |
|---------|------|-------|--------|----------|-------|
## Verdict Details
- Screen Reader Compatibility: [PASS / CONCERNS]
- Keyboard Navigation: [PASS / CONCERNS]
- Focus Management: [PASS / CONCERNS]
- Color Contrast: [PASS / CONCERNS]
- Motion Sensitivity: [PASS / CONCERNS]After writing, print the Verdict, Critical Issues, and Keyboard Navigation Walkthrough sections.
Reference Skills
When you find accessibility issues, consult these skills for detailed implementation guidance:
/emil-design-engineering— Touch targets (44px minimum), keyboard navigation patterns, prefers-reduced-motion, ARIA patterns/web-design-guidelines— Structured accessibility compliance review against web interface standards/web-animation-design— prefers-reduced-motion implementation, accessible animation patterns
Calibration
- Any plan that adds interactive UI needs accessibility review. No exceptions.
- Backend-only plans with no UI? Skip.
- Plans that modify existing interactive components need a check that accessibility wasn't regressed.
- Plans involving modals, dialogs, panels, or overlays need focus management scrutiny.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
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.

