Agent skill

Agentic A11y

by Ovid in Ovid/paad

A skill your agent uses when auditing a user-facing app — web, mobile (iOS/Android/React Native/Flutter), desktop, CLI, or games — for accessibility barriers or WCAG 2.2 conformance, before shipping…

MITAuto-check passedFrontend & Design

Install Agentic A11y

skills CLI
$ npx skills add Ovid/paad --skill agentic-a11y -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install Ovid/paad agentic-a11y --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/Ovid/paad.git skills-src && mkdir -p .claude/skills && cp -r skills-src/plugins/paad/skills/agentic-a11y .claude/skills/agentic-a11y && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
agentic-a11y
GitHub stars
131
Token cost
~9.1k tokens
SKILL.md length
3,366 words
Files
1
Skills in repo
16
Repo updated
First seen
Licence
MIT

At a glance

A skill your agent uses when auditing a user-facing app — web, mobile (iOS/Android/React Native/Flutter), desktop, CLI, or games — for accessibility barriers or WCAG 2.2 conformance, before shipping…

  • Works in 4 steps: Reconnaissance → Specialist Audit (Parallel) → Verification → …
  • Auditing a user-facing app — web
  • SKILL.md covers When NOT to Use This Skill, Arguments, Pre-flight Checks and Phase 1: Reconnaissance, plus 5 more sections
  • Instructions only: no scripts, shell commands, URLs or credentials in SKILL.md

What it does

Agentic A11y is an agent skill from Ovid/paad. Use when auditing a user-facing app — web, mobile (iOS/Android/React Native/Flutter), desktop, CLI, or games — for accessibility barriers or WCAG 2.2 conformance, before shipping UI changes, or in response to concerns about screen-reader, keyboard, low-vision, motor, cognitive, or photosensitive users. Not for general bug hunting or code correctness.

Its SKILL.md is about 9.1k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.

It sits in Frontend & Design, covering Accessibility and Cross-platform mobile apps. It works with Android, Flutter, React Native and iOS. The repository describes itself as: The practices that made software work didn't stop working. They stopped keeping up. PAAD brings them back at AI speed. The licence is MIT.

When your agent uses it

  • Auditing a user-facing app — web
  • Mobile (iOS/Android/React Native/Flutter)
  • Games — for accessibility barriers
  • WCAG 2.2 conformance

Example prompts

  • “/agentic-a11y”

Workflow steps

4 steps, taken from the step headings in SKILL.md.

  1. Reconnaissance
  2. Specialist Audit (Parallel)
  3. Verification
  4. Report

What it can do on your machine

Read from SKILL.md and the folder at commit 9b0b57f. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    No scripts in the folder and no shell commands in SKILL.md (its code samples are dot and markdown).

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    Links to these hosts (documentation or services it may open):

    • github.com

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Agentic A11y loads about 9.1k tokens when it runs. Until then it costs about 91 tokens; SKILL.md has 3,366 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~91
When it runs · the whole SKILL.md, loaded when a task matches
~9.1k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from Ovid/paad at commit 9b0b57f, republished under its MIT licence (© Ovid). 3,366 words, ~9,145 tokens.

Download SKILL.mdSave it as .claude/skills/agentic-a11y/SKILL.md (or your agent's skills folder).
name
agentic-a11y
description
Use when auditing a user-facing app — web, mobile (iOS/Android/React Native/Flutter), desktop, CLI, or games — for accessibility barriers or WCAG 2.2 conformance, before shipping UI changes, or in response to concerns about screen-reader, keyboard, low-vision, motor, cognitive, or photosensitive users. Not for general bug hunting or code correctness.

On invocation: announce "Running paad:agentic-a11y v1.31.0" before anything else.

Accessibility Audit

Multi-agent accessibility audit of user-facing code across any platform. Dispatches specialist agents in parallel — each focused on a different disability category — verifies findings to filter false positives, maps every issue to specific accessibility criteria, and produces a persistent report with concrete fix recommendations.

Conformance target: WCAG 2.2 AA as baseline (applied via WCAG2ICT for non-web platforms). AAA criteria are flagged as bonus recommendations. Platform-specific guidelines (Apple HIG Accessibility, Android Accessibility, Xbox Accessibility Guidelines) are referenced where applicable.

This is a technique skill. Follow the phases in order. Do not skip verification.

Pre-flight:

dot
digraph preflight {
  "Conversation has history?" [shape=diamond];
  "User-facing code exists?" [shape=diamond];
  "Proceed to Phase 1" [shape=box];
  "STOP: recommend new session" [shape=box, style=bold];
  "STOP: no user-facing code" [shape=box, style=bold];

  "Conversation has history?" -> "STOP: recommend new session" [label="yes"];
  "Conversation has history?" -> "User-facing code exists?" [label="no"];
  "User-facing code exists?" -> "STOP: no user-facing code" [label="no"];
  "User-facing code exists?" -> "Proceed to Phase 1" [label="yes"];
}

Audit flow:

dot
digraph audit_flow {
  "Scope size?" [shape=diamond];
  "Platform has framework-specific a11y pitfalls?" [shape=diamond];
  "Existing a11y tooling already catches it?" [shape=diamond];
  "Tooling misconfigured or finding suppressed?" [shape=diamond];
  "Barrier handled elsewhere?" [shape=diamond];
  "Confidence >= 60?" [shape=diamond];
  "Cited criterion correct?" [shape=diamond];
  "Reported by multiple specialists?" [shape=diamond];
  "AAA criterion?" [shape=diamond];

  "Detect platform(s), stack, tooling, steering files, manifest" [shape=box];
  "Partition files across 2 instances of each specialist" [shape=box];
  "Dispatch the 5 core specialists in parallel" [shape=box];
  "Dispatch the 5 core specialists + Platform-Specific Patterns in parallel" [shape=box];
  "DROP the finding" [shape=box];
  "Correct the criterion" [shape=box];
  "Assign severity: critical / serious / moderate / minor" [shape=box];
  "Merge duplicates, note the agreeing specialists" [shape=box];
  "List under Minor Issues & AAA Recommendations, prefix [AAA]" [shape=box];
  "Place under its severity section" [shape=box];
  "Write report to paad/a11y-reviews/a11y-<timestamp>.md" [shape=box];
  "Report location, counts by severity, Quick Wins guidance" [shape=box];
  "STOP: report is the deliverable — do NOT auto-fix" [shape=box, style=bold];

  "Detect platform(s), stack, tooling, steering files, manifest" -> "Scope size?";
  "Scope size?" -> "Platform has framework-specific a11y pitfalls?" [label="small (<20) / medium (20-100)"];
  "Scope size?" -> "Partition files across 2 instances of each specialist" [label="large (100+ user-facing files)"];
  "Partition files across 2 instances of each specialist" -> "Platform has framework-specific a11y pitfalls?";
  "Platform has framework-specific a11y pitfalls?" -> "Dispatch the 5 core specialists + Platform-Specific Patterns in parallel" [label="yes"];
  "Platform has framework-specific a11y pitfalls?" -> "Dispatch the 5 core specialists in parallel" [label="no"];
  "Dispatch the 5 core specialists in parallel" -> "Existing a11y tooling already catches it?";
  "Dispatch the 5 core specialists + Platform-Specific Patterns in parallel" -> "Existing a11y tooling already catches it?";

  "Existing a11y tooling already catches it?" -> "Tooling misconfigured or finding suppressed?" [label="yes — specialists check this"];
  "Existing a11y tooling already catches it?" -> "Barrier handled elsewhere?" [label="no"];
  "Tooling misconfigured or finding suppressed?" -> "DROP the finding" [label="no — do not re-flag what tooling already catches"];
  "Tooling misconfigured or finding suppressed?" -> "Barrier handled elsewhere?" [label="yes"];
  "Barrier handled elsewhere?" -> "DROP the finding" [label="yes — parent, platform API, framework, library, system setting (verifier)"];
  "Barrier handled elsewhere?" -> "Confidence >= 60?" [label="no"];
  "Confidence >= 60?" -> "DROP the finding" [label="no"];
  "Confidence >= 60?" -> "Cited criterion correct?" [label="yes"];
  "Cited criterion correct?" -> "Assign severity: critical / serious / moderate / minor" [label="yes"];
  "Cited criterion correct?" -> "Correct the criterion" [label="no"];
  "Correct the criterion" -> "Assign severity: critical / serious / moderate / minor";
  "Assign severity: critical / serious / moderate / minor" -> "Reported by multiple specialists?";
  "Reported by multiple specialists?" -> "Merge duplicates, note the agreeing specialists" [label="yes"];
  "Reported by multiple specialists?" -> "AAA criterion?" [label="no"];
  "Merge duplicates, note the agreeing specialists" -> "AAA criterion?";
  "AAA criterion?" -> "List under Minor Issues & AAA Recommendations, prefix [AAA]" [label="yes — a recommendation, not a failure"];
  "AAA criterion?" -> "Place under its severity section" [label="no"];

  "List under Minor Issues & AAA Recommendations, prefix [AAA]" -> "Write report to paad/a11y-reviews/a11y-<timestamp>.md";
  "Place under its severity section" -> "Write report to paad/a11y-reviews/a11y-<timestamp>.md";
  "DROP the finding" -> "Write report to paad/a11y-reviews/a11y-<timestamp>.md" [label="counted under Filtered out"];
  "Write report to paad/a11y-reviews/a11y-<timestamp>.md" -> "Report location, counts by severity, Quick Wins guidance";
  "Report location, counts by severity, Quick Wins guidance" -> "STOP: report is the deliverable — do NOT auto-fix";
}

When NOT to Use This Skill

  • The user needs a legal conformance statement (VPAT, EN 301 549 attestation) — this produces an engineering audit, not a certified accessibility conformance report. Say so rather than letting a report be mistaken for one.

Arguments

/agentic-a11y accepts optional $ARGUMENTS:

  • /agentic-a11y — audit all user-facing code in the repository
  • /agentic-a11y src/components/ — scope the audit to a specific directory
  • /agentic-a11y src/components/Modal.tsx — audit a specific file

When a path is provided, only audit files within that scope. Still detect platform and run all specialists, but limit the file manifest accordingly.

Pre-flight Checks

  1. Context window: If conversation has substantive history beyond invoking this skill, tell the user: "This audit consumes significant context. Start a fresh session with /agentic-a11y to avoid context rot." Stop and wait.
  2. User-facing code: Scan for any of the following. If none found, tell the user: "No user-facing code detected in this repository." Stop.
PlatformFile indicators
Web.html, .jsx, .tsx, .vue, .svelte, .ejs, .hbs, .blade.php, .erb, .jinja, .twig, .css, .scss, .less, plus JS/TS with DOM manipulation
iOS (native).swift (SwiftUI views), .m/.h (UIKit), .storyboard, .xib
Android (native).kt/.java (Compose or View classes), res/layout/*.xml
React Native.jsx/.tsx with react-native imports
Flutter.dart files with package:flutter imports
DesktopElectron (web stack), Qt (.cpp/.qml), WPF/WinForms (.xaml/.cs), macOS AppKit/SwiftUI, GTK
CLIAny code producing terminal output or accepting terminal input (look for stdout/stderr writes, readline, prompt libraries, curses/ncurses, argument parsers)
GameUnity (.cs scripts), Unreal (C++/Blueprints), Godot (.gd/.tscn), custom engines with rendering/input systems

Phase 1: Reconnaissance

Run these steps and collect results:

1. Platform detection

Classify the project into one or more platforms from the table above. A project may span multiple platforms (e.g., a web app with a CLI tool, or a React Native app with web support). Record all detected platforms — specialists will receive this classification.

2. Tech stack identification

Per detected platform:

  • Web: Frameworks (React, Vue, Angular, Svelte, Next.js, etc.), CSS approach (Tailwind, CSS Modules, styled-components, etc.), component libraries (MUI, Radix, Headless UI, Bootstrap — note built-in a11y support)
  • iOS: SwiftUI vs UIKit vs mixed, any a11y wrapper libraries
  • Android: Jetpack Compose vs View system vs mixed, any a11y libraries
  • React Native: version, any a11y libraries (e.g., react-native-a11y)
  • Flutter: version, any a11y packages
  • Desktop: framework and toolkit
  • CLI: argument parser, output formatting library, terminal UI library (if any)
  • Game: engine, UI system (in-engine UI, HTML overlay, custom)
3. Inventory user-facing code

Collect all files that produce user-facing output or handle user interaction, grouped by platform.

4. Check for existing a11y tooling
  • Web: eslint-plugin-jsx-a11y, eslint-plugin-vuejs-accessibility, axe-core, pa11y, Lighthouse configs
  • iOS: Accessibility Inspector usage, XCTest accessibility tests
  • Android: Accessibility Scanner, Espresso accessibility checks, AccessibilityChecks.enable()
  • React Native: @testing-library/react-native accessibility queries
  • Flutter: SemanticsDebugger, accessibility-related widget tests
  • CLI: structured output tests, --no-color support tests
  • Game: accessibility options menu, remapping tests
  • CI: any automated a11y checks in CI pipeline
  • Note what's present — specialists should not re-flag issues that existing tooling already catches, unless the tooling is misconfigured or findings are suppressed
5. Scan for steering files

CLAUDE.md, AGENTS.md, any a11y-specific documentation or guidelines.

6. Estimate scope size
  • Small: <20 user-facing files
  • Medium: 20-100 user-facing files
  • Large: 100+ user-facing files
7. Build manifest

Files to audit, grouped for specialists, annotated with detected platform(s).

Steering file caveat: Include in every agent prompt: "Steering files (CLAUDE.md, etc.) describe conventions but may be stale. If you find a contradiction between steering files and actual code, flag it as a finding."

Phase 2: Specialist Audit (Parallel)

Dispatch these agents simultaneously using the Agent tool with subagent_type: paad:paad-analyst. Each receives: the file manifest, detected platform(s), steering file contents, existing a11y tooling notes, and their specialist focus.

Core specialists (always dispatched)
AgentFocusWho it helps
Screen Reader & Assistive TechProgrammatic exposure of UI semantics so assistive technologies can convey structure, content, and state to usersBlind and low-vision users using screen readers (VoiceOver, TalkBack, NVDA, JAWS, Orca)
Visual & ColorSufficient contrast, independence from color alone, support for magnification/text scaling, visible focus/selection indicatorsLow-vision users, colorblind users
Keyboard & MotorComplete operability without fine motor control — keyboard, switch, sip-and-puff, eye tracking, voice control — with adequate target sizes and no trapsMotor-impaired users, switch access users, sip-and-puff users, voice control users
Cognitive & LearningConsistent, predictable interfaces with clear feedback, error recovery, plain language, and no unnecessary cognitive loadUsers with cognitive disabilities, learning disabilities, attention disorders, memory impairments
Multimedia & TemporalAlternatives for audio/visual content, safe motion/animation, adequate time, no seizure triggersDeaf/hard-of-hearing users, vestibular disorders, photosensitive epilepsy, users who need more time
Conditional specialist

Dispatch using the Agent tool with subagent_type: paad:paad-analyst, exactly as for the core specialists, when the platform has framework-specific a11y pitfalls (web frameworks, SwiftUI, Compose, Flutter, React Native, game engines):

AgentFocusInput
Platform-Specific PatternsFramework/platform-specific a11y pitfalls, misuse of platform a11y APIs, navigation/routing a11y, dynamic content patternsFile manifest + platform/framework detection results
Agent prompt template

Each specialist agent prompt must include:

  • The list of files to audit (from their manifest group)
  • Contents of files in their audit scope
  • The detected platform(s)
  • Steering file contents with the staleness caveat
  • Existing a11y tooling notes
  • Instruction: "You are an accessibility specialist focused on [FOCUS AREA]. The detected platform(s) for this project: [PLATFORMS]. Your goal is to find accessibility barriers that affect [USER GROUP]. For each finding report: file:line, what's wrong, which accessibility criterion it violates (WCAG 2.2 criterion where applicable, or platform-specific guideline), the conformance level (A/AA/AAA), who is affected and how, a concrete code-level fix, and your confidence (0-100). Only report findings with confidence >= 60. Do not modify any file in the repository. You may run read-only commands (existing tests, linters, type checkers) unchanged — their caches, coverage files, and build output are fine. If confirming a finding would require changing code, do not — cap that finding's confidence at 79 and state what would confirm it."
Platform-specific checks per specialist

Include the relevant platform section(s) in each specialist's prompt based on detected platform(s).

Screen Reader & Assistive Tech

Web: (1) Correct ARIA roles, states, and properties on custom components; (2) semantic HTML (headings, landmarks, lists, tables) over generic div/span; (3) heading hierarchy without skipped levels; (4) meaningful alt text (not filenames or "image"); (5) programmatically associated form labels; (6) aria-live regions for dynamic content; (7) link/button purpose clear from text or accessible name; (8) status messages via role="status" or aria-live.

iOS: (1) accessibilityLabel set on all interactive and meaningful elements; (2) accessibilityTraits / SwiftUI .accessibilityAddTraits() correctly applied (.button, .header, .image, etc.); (3) accessibilityHint for non-obvious actions; (4) isAccessibilityElement grouping — containers group related info, decorative elements excluded; (5) accessibilityValue for sliders/progress; (6) UIAccessibility.post(.screenChanged, ...) and .layoutChanged notifications for dynamic updates; (7) custom actions via accessibilityCustomActions; (8) SwiftUI: .accessibilityElement(children: .combine) for logical grouping.

Android: (1) contentDescription on all interactive and meaningful elements; (2) importantForAccessibility set correctly — decorative elements marked no; (3) labelFor connecting labels to inputs; (4) accessibilityLiveRegion for dynamic content; (5) accessibilityHeading on section headers; (6) Compose: semantics { } block with appropriate properties, contentDescription, heading(), stateDescription; (7) custom AccessibilityNodeInfo actions where needed; (8) ViewCompat.setAccessibilityDelegate for custom views.

React Native: (1) accessibilityLabel on all interactive elements; (2) accessibilityRole set correctly (button, header, link, image, etc.); (3) accessibilityState for toggles, disabled, expanded states; (4) accessibilityHint for non-obvious actions; (5) accessibilityLiveRegion for dynamic updates; (6) accessibilityElementsHidden for decorative content; (7) AccessibilityInfo.announceForAccessibility() for dynamic state changes.

Flutter: (1) Semantics widget wrapping meaningful UI with label, button, header, image properties; (2) excludeSemantics: true on decorative elements; (3) MergeSemantics for logically grouped content; (4) SemanticsService.announce() for dynamic updates; (5) tooltip properties on IconButton and similar; (6) semanticsLabel on Text where displayed text differs from meaning.

CLI: (1) Structured, parseable output (not just visual formatting with boxes/lines); (2) information not conveyed solely by position/layout — screen readers linearize output; (3) progress indication via text updates, not just spinners or progress bars that rely on cursor repositioning; (4) error messages written to stderr with clear text (not just color/emoji).

Game: (1) UI elements have text alternatives available for screen reader narration mode; (2) menu items narrated with name, type, and state; (3) game state changes announced; (4) narration option in settings if not always-on.

Visual & Color

Web: Contrast ratios — AA: 4.5:1 normal text, 3:1 large text (18pt+/14pt+ bold), 3:1 UI components and graphics. AAA: 7:1/4.5:1. Check CSS custom properties and theme values. Flag color-only meaning (error states, status indicators, required fields, links distinguished only by color). Reflow at 320px width. Text spacing override support. prefers-contrast media query support.

iOS: (1) Dynamic Type support (UIFontMetrics, SwiftUI .dynamicTypeSize), test with all type sizes including accessibility sizes; (2) Bold Text support (UIAccessibility.isBoldTextEnabled); (3) Increase Contrast (UIAccessibility.isDarkerSystemColorsEnabled); (4) Reduce Transparency support; (5) sufficient contrast ratios in custom themes (same ratios as web); (6) color-only information has shape/icon/text alternatives; (7) SF Symbols accessibility variants.

Android: (1) sp units for text (scales with user preference); (2) test at 200% font scale; (3) High Contrast Text setting support; (4) sufficient contrast in custom themes; (5) color-only meaning has alternatives; (6) Magnification gesture compatibility (no content hidden at 200%+ zoom); (7) custom views render correctly with font scaling.

React Native: (1) Font scaling support — not disabled via allowFontScaling={false} unless justified; (2) layout accommodates scaled text without overflow/truncation; (3) contrast ratios on all custom-themed elements; (4) color-only meaning has alternatives.

Flutter: (1) MediaQuery.textScaleFactorOf(context) respected — UI tested at 2.0 scale; (2) contrast ratios met in custom ThemeData; (3) color-only meaning has alternatives; (4) MediaQuery.boldTextOf(context) support; (5) MediaQuery.highContrastOf(context) support.

CLI: (1) --no-color flag or NO_COLOR env var support; (2) information not conveyed by color alone — use labels, prefixes, symbols alongside color (e.g., [ERROR] not just red text); (3) supports TERM detection for capability; (4) works in high-contrast terminal themes.

Game: (1) Colorblind mode(s) — at minimum deuteranopia (red-green), ideally also protanopia and tritanopia; (2) UI element outlines/patterns supplement color; (3) font size options or UI scaling; (4) high contrast UI option; (5) brightness/gamma controls; (6) important game elements distinguishable by shape, not just color.

Keyboard & Motor

Web: (1) Every interactive element reachable and activatable via keyboard; (2) no keyboard traps (focus can escape every modal, dropdown, overlay); (3) logical focus order matching visual layout; (4) visible focus indicators (not suppressed by outline: none without replacement); (5) skip navigation links; (6) custom widgets follow WAI-ARIA Authoring Practices keyboard patterns; (7) click targets at least 24x24 CSS px (AA), recommend 44x44 (AAA); (8) drag-and-drop has click/keyboard alternative; (9) single-character shortcuts remappable or only active on focus; (10) pointer-events, user-select not disabling expected interactions.

iOS: (1) Full Keyboard Access support — all actions reachable via external keyboard; (2) Switch Control compatibility — all interactive elements in accessibility tree with correct order; (3) AssistiveTouch custom gesture alternatives for complex gestures; (4) minimum 44x44pt tap targets (Apple HIG); (5) no gesture-only actions without alternatives (e.g., swipe-to-delete must have edit button); (6) custom gesture recognizers don't block Switch Control; (7) accessibilityActivationPoint set for non-standard hit areas.

Android: (1) Full keyboard navigation — android:focusable, logical nextFocusDown/Up/Left/Right; (2) Switch Access compatibility — all interactive elements focusable with adequate ordering; (3) minimum 48x48dp touch targets (Material Design); (4) no gesture-only actions without alternatives; (5) android:importantForAccessibility not hiding interactive elements; (6) custom views implement onKeyDown/onKeyUp for keyboard users; (7) TalkBack gesture alternatives for complex interactions.

React Native: (1) accessible={true} on all interactive elements; (2) accessibilityActions for custom actions; (3) onMagicTap, onEscape handlers where appropriate (iOS); (4) minimum touch target sizes (48x48dp Android / 44x44pt iOS); (5) gesture-based interactions have tap alternatives.

Flutter: (1) All interactive widgets have Semantics with tap/long press actions; (2) minimum touch targets via MaterialTapTargetSize.padded; (3) FocusNode and FocusTraversalGroup for logical keyboard order; (4) RawKeyboardListener/KeyboardListener for keyboard shortcuts; (5) no IgnorePointer/AbsorbPointer hiding accessible interactions; (6) custom GestureDetector actions have keyboard alternatives.

CLI: (1) Keyboard-only by nature, but check: interactive prompts (e.g., fuzzy finders, multi-select) navigable with arrow keys and enter; (2) Ctrl-C always exits; (3) no mouse-only interactions in TUI; (4) tab completion where appropriate; (5) long-running operations cancellable via keyboard.

Game: (1) Fully remappable controls; (2) multiple input device support (keyboard, mouse, controller, touch); (3) one-handed mode or alternative layouts; (4) no quick-time events without alternatives or adjustable timing; (5) auto-aim/aim assist option; (6) adjustable input sensitivity/dead zones; (7) hold-vs-toggle options for sustained inputs; (8) copilot/co-pilot mode if multiplayer.

Show full SKILL.md (1,263 more words)Show less
Cognitive & Learning

All platforms: (1) Consistent navigation patterns across screens/pages; (2) consistent identification of common elements; (3) clear error messages identifying the problem and suggesting a fix; (4) labels and instructions on all form inputs; (5) predictable behavior — no unexpected context changes on focus or input; (6) adequate time — adjustable/extendable timeouts, warnings before expiry; (7) help in a consistent, findable location; (8) no unnecessary re-entry of previously provided information; (9) accessible authentication — no cognitive function tests (CAPTCHAs) without alternatives.

Web additionally: (1) lang attribute on <html> and lang attributes on content in other languages; (2) multiple ways to find pages (nav, search, sitemap); (3) breadcrumbs or location indicator.

iOS/Android additionally: (1) Back navigation always works predictably; (2) undo support for destructive actions; (3) confirmation dialogs for irreversible operations.

CLI additionally: (1) --help with clear, complete documentation; (2) confirmation prompts for destructive commands (with --yes/-y to skip); (3) meaningful exit codes; (4) consistent flag naming conventions (e.g., --verbose not -v in one command and --debug in another).

Game additionally: (1) Tutorial or onboarding; (2) difficulty options including easy/story mode; (3) objective tracking/quest log; (4) adjustable game speed; (5) pause in single-player; (6) clear visual/audio feedback for actions; (7) option to simplify UI.

Multimedia & Temporal

All platforms: (1) Pre-recorded video has captions; (2) pre-recorded audio has transcript; (3) no content flashes more than 3 times per second; (4) auto-playing media has pause/stop control; (5) moving/blinking/scrolling content can be paused; (6) no time limits, or limits are adjustable/extendable with warning.

Web additionally: prefers-reduced-motion media query respected — all CSS animations/transitions have reduced or disabled alternatives. Audio descriptions for pre-recorded video (AA). <video>/<audio> elements have controls. No autoplay without mute.

iOS additionally: UIAccessibility.isReduceMotionEnabled / SwiftUI .accessibilityReduceMotion checked and respected — simplify or remove animations. UIAccessibility.isVideoAutoplayEnabled respected.

Android additionally: Settings.Global.ANIMATOR_DURATION_SCALE respected (set to 0 disables animations). View.IMPORTANT_FOR_AUTOFILL for form timing.

React Native additionally: AccessibilityInfo.isReduceMotionEnabled() checked — Animated and LayoutAnimation respect user preference.

Flutter additionally: MediaQuery.disableAnimationsOf(context) or MediaQuery.reduceMotionOf(context) checked and respected.

CLI additionally: No seizure-inducing rapid terminal updates (e.g., fast flickering progress bars). Long-running operations show progress without rapid screen clearing.

Game additionally: (1) Subtitle options with size/background/speaker-identification controls; (2) visual indicators for important audio cues (directional indicators, closed captions for sound effects); (3) screen shake toggle; (4) motion blur toggle; (5) field-of-view slider (reduces motion sickness); (6) photosensitivity mode reducing flashes/strobe effects.

Platform-Specific Patterns agent (conditional)

When this agent is dispatched (see Conditional specialist above), include the relevant examples below in its prompt:

React: key on lists affecting screen readers, missing aria-live on state changes, portal focus traps, onClick on non-interactive elements without role/keyboard handling.

Vue: v-html with no a11y review, missing aria bindings on dynamic attributes, router afterEach not announcing navigation.

Angular: cdkTrapFocus misconfiguration, aria-describedby with *ngIf removing referenced elements.

Svelte: Reactive declarations removing focus targets, use:action without a11y side effects.

SwiftUI: .accessibilityRepresentation missing on custom controls, @AccessibilityFocusState not managing focus on navigation, .accessibilityRotor not used for long content, List/ForEach not providing per-item actions.

Jetpack Compose: Modifier.semantics not applied to custom composables, LazyColumn items missing individual semantics, AlertDialog not moving focus on show, ModalBottomSheet not trapping focus, clickable without role parameter.

Flutter: CustomPainter without SemanticsBuilder, Navigator transitions not announcing new routes, Hero animations conflicting with semantics, PlatformView breaking a11y tree.

React Native: FlatList/SectionList items not individually accessible, Modal not managing focus, platform-specific props missing (accessibilityLanguage iOS only, accessibilityLiveRegion Android emphasis).

Game engines (Unity): UI Toolkit vs UGUI a11y gaps, EventSystem not handling keyboard/controller navigation, TextMeshPro not exposing text to accessibility APIs.

Scaling for large scope (100+ files): Partition files across 2 instances of each specialist.

Phase 3: Verification

After all specialists complete, dispatch a single Verifier agent using the Agent tool with subagent_type: paad:paad-analyst, passing all findings. The verifier:

  1. For each finding, reads the actual current code at the referenced file:line
  2. Confirms the accessibility barrier exists and isn't handled elsewhere (e.g., by a parent component, a platform API, a framework feature, a component library, or a system-level setting)
  3. Drops false positives and findings below 60% confidence
  4. Confirms the correct accessibility criterion is cited
  5. Assigns severity:
    • Critical — Complete barrier: users with the affected disability cannot use this feature at all
    • Serious — Major difficulty: the feature is usable but with significant hardship or workarounds
    • Moderate — Friction: causes confusion or extra effort but does not block task completion
    • Minor — Best practice improvement or AAA enhancement
  6. Deduplicates findings flagged by multiple specialists (note which specialists agreed — cross-specialist agreement increases confidence)

Verifier prompt must include: "You are verifying accessibility findings. For each finding, read the actual code and confirm the barrier exists. Be skeptical — the platform, framework, or component library may already handle accessibility automatically. On iOS, UIKit provides some accessibility by default for standard controls. On Android, standard Material components include accessibility support. A finding reported by multiple specialists is more likely real. Ensure the cited criterion is correct. Do not modify any file in the repository. You may run read-only commands (existing tests, linters, type checkers) unchanged — their caches, coverage files, and build output are fine. If confirming a finding would require changing code, do not — treat the barrier as unconfirmed and drop it as you would any other false positive, rather than lowering the finding's confidence or severity."

Phase 4: Report

Write verified findings to paad/a11y-reviews/a11y-<YYYY-MM-DD-HH-MM-SS>.md.

Create the paad/a11y-reviews/ directory if it doesn't exist.

Report template:

markdown
# Accessibility Audit: <project-name>

- **Date:** YYYY-MM-DD HH:MM:SS
- **Commit:** <full-sha>
- **Platform(s):** <detected platforms>
- **Tech stack:** <frameworks, libraries, engines>
- **Files audited:** N
- **Existing a11y tooling:** <list or "none found">
- **Conformance target:** WCAG 2.2 AA via WCAG2ICT (AAA noted as recommendations)
- **Platform guidelines referenced:** <e.g., Apple HIG Accessibility, Material Design Accessibility, Xbox Accessibility Guidelines, or "N/A">

## Executive Summary

2-3 sentences: overall accessibility posture, highest-severity findings, estimated conformance level (A / partial AA / AA / partial AAA).

## Impact Summary by User Group

Brief summary of how the codebase affects each group:
- **Screen reader users:** <1-2 sentences>
- **Low-vision users:** <1-2 sentences>
- **Colorblind users:** <1-2 sentences>
- **Motor-impaired users (keyboard/switch/sip-and-puff):** <1-2 sentences>
- **Cognitive and learning disabilities:** <1-2 sentences>
- **Deaf and hard-of-hearing users:** <1-2 sentences>
- **Vestibular and photosensitive users:** <1-2 sentences>

## Critical Issues (Complete Barriers)

### [C1] <title>
- **File:** `path/to/file:line`
- **Platform:** <which platform this applies to>
- **Barrier:** What's wrong
- **Criterion:** <WCAG criterion or platform guideline> — Level <A/AA>
- **Affects:** Who is blocked and how
- **Fix:** Concrete code-level recommendation
- **Confidence:** High/Medium
- **Found by:** <specialist name(s)>

(Repeat for each critical issue, or "None found.")

## Serious Issues (Major Difficulty)

(Same structure as Critical, or "None found.")

## Moderate Issues (Friction)

(Same structure, or "None found.")

## Minor Issues & AAA Recommendations

One-line entries with criterion reference. Omit section if none.
Mark AAA items with [AAA] prefix.

## Conformance Checklist

For each WCAG principle, list criteria checked and their status. For non-web platforms, criteria are interpreted via WCAG2ICT. Mark criteria that do not apply to the detected platform as "N/A" with brief explanation.

### Perceivable
| Criterion | Level | Status | Finding |
|-----------|-------|--------|---------|
| 1.1.1 Non-text Content | A | Pass / Fail / Partial / N/A / Not assessed | #ID or — |
(continue for all Perceivable criteria assessed)

### Operable
(same table format)

### Understandable
(same table format)

### Robust
(same table format)

### Platform-Specific Guidelines
| Guideline | Status | Finding |
|-----------|--------|---------|
| <e.g., Apple HIG: Dynamic Type> | Pass / Fail / Partial | #ID or — |
(list platform-specific guidelines checked beyond WCAG, or omit section if web-only)

## Quick Wins

Top 5 fixes that would have the largest positive impact for the least effort. Each entry: what to fix, which findings it addresses, estimated effort (small/medium/large).

## Audit Metadata

- **Agents dispatched:** <list with focus areas>
- **Platform(s) detected:** <list>
- **Scope:** <files audited>
- **Raw findings:** N (before verification)
- **Verified findings:** M (after verification)
- **Filtered out:** N - M
- **By severity:** X critical, Y serious, Z moderate, W minor
- **By conformance level:** X Level A, Y Level AA, Z Level AAA
- **Steering files consulted:** <list or "none found">
- **Existing a11y tooling:** <list or "none found">

Common Mistakes

These patterns produce low-quality audits. Avoid them:

MistakeWhat to do instead
Single-agent auditAlways dispatch 5+ specialist agents in parallel via Agent tool — each disability has unique concerns that a generalist misses
Skipping verificationAlways run verifier — platforms and component libraries handle many a11y patterns automatically, producing false positives without verification
Assuming web platformDetect the actual platform(s) first — iOS, Android, Flutter, CLI, and games all have different a11y APIs and patterns
Flagging issues handled by platform defaultsStandard UIKit controls, Material components, and Flutter widgets have built-in a11y — only flag if misused, overridden, or missing
Generic findings without file:lineEvery finding must reference exact code location — "add alt text" or "add contentDescription" is not actionable
Wrong criteriaVerify the correct WCAG criterion or platform guideline is cited — misattribution erodes trust in the report
Ignoring styling/themingMany a11y issues live in styles (contrast, focus indicators, text sizing, elements hidden from assistive tech) regardless of platform
Only checking static/declarative UIDynamic content, navigation transitions, and programmatic UI changes are where the hardest a11y bugs hide on every platform
Treating AAA as requiredAAA items are recommendations, not failures — present them as enhancements to avoid overwhelming teams
Ignoring reduced-motion preferencesEvery platform has a reduce-motion setting — prefers-reduced-motion (web/CSS), isReduceMotionEnabled (iOS), ANIMATOR_DURATION_SCALE (Android), disableAnimations (Flutter) — vestibular disorders cause real physical symptoms
Applying web patterns to nativeARIA is a web technology. Native platforms have their own accessibility APIs — don't recommend ARIA attributes for iOS/Android code
Ignoring CLI accessibilityCLI tools are user-facing too — color-only output, unstructured text, and missing --no-color support are real barriers

Post-Audit

After writing the report:

  1. List every file this run wrote or changed, before anything else — a report the developer does not know exists is a report nobody reads. One line per path, each marked new or updated, even when there is only one:

    Files written or updated:
      new      paad/a11y-reviews/a11y-2026-08-01-10-42-13.md

    Then give the finding counts by severity

  2. Tell them: "To address these findings, work through the Quick Wins first, then tackle Critical and Serious issues. Fix each issue with a per-fix commit. If you have the superpowers plugin installed, you can use the receiving-code-review skill and point it at this report for a guided workflow."

  3. Do not auto-fix anything. The report is the deliverable.

© Ovid, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

Just SKILL.md in plugins/paad/skills/agentic-a11y of Ovid/paad.

Open the folder on GitHubat commit 9b0b57f

Compare with similar skills

Agentic A11y next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Agentic A11y compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Agentic A11y this skillOvid/paad131—~9.1kAutomated safety check: PassMIT
AccessibilityGetStream/stream-chat-react-native1.2k—~6.5kAutomated safety check: PassCustom licence
AccessibilityVeryGoodOpenSource/vgv-ai-flutter-plugin169—~4.2kAutomated safety check: PassMIT
Mobile AccessibilityCommunity-Access/accessibility-agents422—~1.1kAutomated safety check: PassMIT
Kb Mobile AccessibilityCommunity-Access/accessibility-agents422—~3.8kAutomated safety check: PassMIT
Maui Accessibilitydavidortinau/maui-skills174—~974Automated safety check: PassMIT

Similar skills

  • Accessibility

    GetStream/stream-chat-react-native

    Maintain VoiceOver/TalkBack-focused accessibility in stream-chat-react-native.

    1.2k GitHub stars~6.5k tokensUpdated yesterday
    Frontend & DesignAuto-check passed
  • Accessibility

    VeryGoodOpenSource/vgv-ai-flutter-plugin

    Audits or remediates Flutter widgets against WCAG 2.2 conformance levels A, AA, or AAA across iOS, Android, Web, macOS, Windows, and Linux, covering Semantics labels and screen reader output under…

    169 GitHub stars~4.2k tokensUpdated 2 days ago
    Frontend & DesignAuto-check passed
  • Mobile Accessibility

    Community-Access/accessibility-agents

    React Native, Expo, iOS and Android: labels, roles and touch targets.

    422 GitHub stars~1.1k tokensUpdated 15 days ago
    MobileAuto-check passed
  • Kb Mobile Accessibility

    Community-Access/accessibility-agents

    Reference data, not a reviewer. An agent skill from Community-Access/accessibility-agents.

    422 GitHub stars~3.8k tokensUpdated 15 days ago
    MobileAuto-check passed
  • Maui Accessibility

    davidortinau/maui-skills

    Guide for making .NET MAUI apps accessible — screen reader support via SemanticProperties, heading levels, AutomationProperties visibility control, programmatic focus and announcements, and…

    174 GitHub stars~974 tokensUpdated 3 mo ago
    Frontend & DesignAuto-check passed
  • Cometchat I18n

    cometchat/cometchat-skills

    Localize a CometChat integration — set the UI Kit language, register custom/overridden translations, handle RTL, and never leak a raw localization key into the UI.

    130 GitHub stars~1.9k tokensUpdated 3 days ago
    Frontend & DesignAuto-check passed

More from Ovid/paad

All 16 skills in this repo
  • A skill your agent uses when reviewing current branch for bugs before pushing or merging, when wanting a thorough multi-agent review of local changes, or when preparing work for human review.

    131 GitHub starsUsed in 1 repo~10k tokens
    Auto-check passed
  • Test Roadmap

    Ovid/paad

    EXPERIMENTAL. An agent skill from Ovid/paad.

    131 GitHub stars~2.3k tokensUpdated yesterday
    Auto-check passed
  • Alignment

    Ovid/paad

    A skill your agent uses when verifying that requirements/specs/PRDs and their implementation plans match — before starting work, after a spec or plan update, or when suspecting coverage gaps, scope…

    131 GitHub stars~4.9k tokensUpdated yesterday
    Auto-check passed
  • Backlog

    Ovid/paad

    EXPERIMENTAL. An agent skill from Ovid/paad.

    131 GitHub stars~3.4k tokensUpdated yesterday
    Auto-check passed
  • Handoff

    Ovid/paad

    EXPERIMENTAL. An agent skill from Ovid/paad.

    131 GitHub stars~3.4k tokensUpdated yesterday
    Auto-check passed
  • Makefile

    Ovid/paad

    A skill your agent uses when creating or updating a Makefile for a project, especially when standard targets (build, test, lint, format, etc.) are missing or when modifying targets that may already…

    131 GitHub stars~2.2k tokensUpdated yesterday
    Auto-check passed

Questions about Agentic A11y

What does Agentic A11y do?

A skill your agent uses when auditing a user-facing app — web, mobile (iOS/Android/React Native/Flutter), desktop, CLI, or games — for accessibility barriers or WCAG 2.2 conformance, before shipping…. Agentic A11y is an agent skill from Ovid/paad.2 conformance, before shipping UI changes, or in response to concerns about screen-reader, keyboard, low-vision, motor, cognitive, or photosensitive users.

When should I use Agentic A11y?

Agentic A11y fits situations like: auditing a user-facing app — web; mobile (iOS/Android/React Native/Flutter); games — for accessibility barriers; WCAG 2.2 conformance.

How do I install Agentic A11y in Claude Code?

Run `npx skills add Ovid/paad --skill agentic-a11y -a claude-code`. Or copy the skill folder (plugins/paad/skills/agentic-a11y in Ovid/paad) into .claude/skills/agentic-a11y in your project. Claude Code loads it when a task matches its description.

How do I install Agentic A11y in Codex?

Run `npx skills add Ovid/paad --skill agentic-a11y -a codex`. Or copy the skill folder (plugins/paad/skills/agentic-a11y in Ovid/paad) into .agents/skills/agentic-a11y in your project. Codex loads it when a task matches its description.

Can I use Agentic A11y in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add Ovid/paad --skill agentic-a11y -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/agentic-a11y, .gemini/skills/agentic-a11y, .github/skills/agentic-a11y and .opencode/skills/agentic-a11y in your project.

What does Agentic A11y need to run?

SKILL.md names no scripts, command-line tools or credentials: Agentic A11y is instructions for the agent only.

Does Agentic A11y access the network?

SKILL.md names 1 domain. As links in the text: github.com. This is read from the text; nothing was executed.

Is Agentic A11y safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does Agentic A11y use?

Agentic A11y is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Agentic A11y use?

About 9.1k tokens (SKILL.md is roughly 37k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Agentic A11y?

Skills that share tags, products or a category with Agentic A11y: Accessibility (GetStream/stream-chat-react-native, 1.2k stars), Accessibility (VeryGoodOpenSource/vgv-ai-flutter-plugin, 169 stars), Mobile Accessibility (Community-Access/accessibility-agents, 422 stars) and Kb Mobile Accessibility (Community-Access/accessibility-agents, 422 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Agentic A11y?

Ovid (a GitHub user) maintains it in Ovid/paad, which has 131 GitHub stars. The repository holds 16 skills in this directory. The repository was last updated on October 7, 2026.

Source: Ovid/paad on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.