{"slug":"agentic-a11y-4","title":"agentic-a11y","summary":"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, o","platform":"Claude","tags":[],"authorName":"LLM Mart","authorSlug":"llm-mart","score":0,"source":"github","price":null,"verified":false,"createdAt":"2026-08-30T20:56:12.670461Z","repo":{"url":"https://github.com/Ovid/paad","stars":127,"forks":11,"license":"MIT","updatedAt":"2026-09-29T09:56:13Z"},"bodyHtml":"<hr>\n<h2>name: agentic-a11y\ndescription: 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.</h2>\n<p><strong>On invocation:</strong> announce \"Running paad:agentic-a11y v1.31.0\" before anything else.</p>\n<h1>Accessibility Audit</h1>\n<p>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.</p>\n<p><strong>Conformance target:</strong> 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.</p>\n<p><strong>This is a technique skill.</strong> Follow the phases in order. Do not skip verification.</p>\n<p><strong>Pre-flight:</strong></p>\n<pre><code>digraph preflight {\n  \"Conversation has history?\" [shape=diamond];\n  \"User-facing code exists?\" [shape=diamond];\n  \"Proceed to Phase 1\" [shape=box];\n  \"STOP: recommend new session\" [shape=box, style=bold];\n  \"STOP: no user-facing code\" [shape=box, style=bold];\n\n  \"Conversation has history?\" -&gt; \"STOP: recommend new session\" [label=\"yes\"];\n  \"Conversation has history?\" -&gt; \"User-facing code exists?\" [label=\"no\"];\n  \"User-facing code exists?\" -&gt; \"STOP: no user-facing code\" [label=\"no\"];\n  \"User-facing code exists?\" -&gt; \"Proceed to Phase 1\" [label=\"yes\"];\n}\n</code></pre>\n<p><strong>Audit flow:</strong></p>\n<pre><code>digraph audit_flow {\n  \"Scope size?\" [shape=diamond];\n  \"Platform has framework-specific a11y pitfalls?\" [shape=diamond];\n  \"Existing a11y tooling already catches it?\" [shape=diamond];\n  \"Tooling misconfigured or finding suppressed?\" [shape=diamond];\n  \"Barrier handled elsewhere?\" [shape=diamond];\n  \"Confidence &gt;= 60?\" [shape=diamond];\n  \"Cited criterion correct?\" [shape=diamond];\n  \"Reported by multiple specialists?\" [shape=diamond];\n  \"AAA criterion?\" [shape=diamond];\n\n  \"Detect platform(s), stack, tooling, steering files, manifest\" [shape=box];\n  \"Partition files across 2 instances of each specialist\" [shape=box];\n  \"Dispatch the 5 core specialists in parallel\" [shape=box];\n  \"Dispatch the 5 core specialists + Platform-Specific Patterns in parallel\" [shape=box];\n  \"DROP the finding\" [shape=box];\n  \"Correct the criterion\" [shape=box];\n  \"Assign severity: critical / serious / moderate / minor\" [shape=box];\n  \"Merge duplicates, note the agreeing specialists\" [shape=box];\n  \"List under Minor Issues &amp; AAA Recommendations, prefix [AAA]\" [shape=box];\n  \"Place under its severity section\" [shape=box];\n  \"Write report to .reviews/a11y-reviews/a11y-&lt;timestamp&gt;.md\" [shape=box];\n  \"Report location, counts by severity, Quick Wins guidance\" [shape=box];\n  \"STOP: report is the deliverable — do NOT auto-fix\" [shape=box, style=bold];\n\n  \"Detect platform(s), stack, tooling, steering files, manifest\" -&gt; \"Scope size?\";\n  \"Scope size?\" -&gt; \"Platform has framework-specific a11y pitfalls?\" [label=\"small (&lt;20) / medium (20-100)\"];\n  \"Scope size?\" -&gt; \"Partition files across 2 instances of each specialist\" [label=\"large (100+ user-facing files)\"];\n  \"Partition files across 2 instances of each specialist\" -&gt; \"Platform has framework-specific a11y pitfalls?\";\n  \"Platform has framework-specific a11y pitfalls?\" -&gt; \"Dispatch the 5 core specialists + Platform-Specific Patterns in parallel\" [label=\"yes\"];\n  \"Platform has framework-specific a11y pitfalls?\" -&gt; \"Dispatch the 5 core specialists in parallel\" [label=\"no\"];\n  \"Dispatch the 5 core specialists in parallel\" -&gt; \"Existing a11y tooling already catches it?\";\n  \"Dispatch the 5 core specialists + Platform-Specific Patterns in parallel\" -&gt; \"Existing a11y tooling already catches it?\";\n\n  \"Existing a11y tooling already catches it?\" -&gt; \"Tooling misconfigured or finding suppressed?\" [label=\"yes — specialists check this\"];\n  \"Existing a11y tooling already catches it?\" -&gt; \"Barrier handled elsewhere?\" [label=\"no\"];\n  \"Tooling misconfigured or finding suppressed?\" -&gt; \"DROP the finding\" [label=\"no — do not re-flag what tooling already catches\"];\n  \"Tooling misconfigured or finding suppressed?\" -&gt; \"Barrier handled elsewhere?\" [label=\"yes\"];\n  \"Barrier handled elsewhere?\" -&gt; \"DROP the finding\" [label=\"yes — parent, platform API, framework, library, system setting (verifier)\"];\n  \"Barrier handled elsewhere?\" -&gt; \"Confidence &gt;= 60?\" [label=\"no\"];\n  \"Confidence &gt;= 60?\" -&gt; \"DROP the finding\" [label=\"no\"];\n  \"Confidence &gt;= 60?\" -&gt; \"Cited criterion correct?\" [label=\"yes\"];\n  \"Cited criterion correct?\" -&gt; \"Assign severity: critical / serious / moderate / minor\" [label=\"yes\"];\n  \"Cited criterion correct?\" -&gt; \"Correct the criterion\" [label=\"no\"];\n  \"Correct the criterion\" -&gt; \"Assign severity: critical / serious / moderate / minor\";\n  \"Assign severity: critical / serious / moderate / minor\" -&gt; \"Reported by multiple specialists?\";\n  \"Reported by multiple specialists?\" -&gt; \"Merge duplicates, note the agreeing specialists\" [label=\"yes\"];\n  \"Reported by multiple specialists?\" -&gt; \"AAA criterion?\" [label=\"no\"];\n  \"Merge duplicates, note the agreeing specialists\" -&gt; \"AAA criterion?\";\n  \"AAA criterion?\" -&gt; \"List under Minor Issues &amp; AAA Recommendations, prefix [AAA]\" [label=\"yes — a recommendation, not a failure\"];\n  \"AAA criterion?\" -&gt; \"Place under its severity section\" [label=\"no\"];\n\n  \"List under Minor Issues &amp; AAA Recommendations, prefix [AAA]\" -&gt; \"Write report to .reviews/a11y-reviews/a11y-&lt;timestamp&gt;.md\";\n  \"Place under its severity section\" -&gt; \"Write report to .reviews/a11y-reviews/a11y-&lt;timestamp&gt;.md\";\n  \"DROP the finding\" -&gt; \"Write report to .reviews/a11y-reviews/a11y-&lt;timestamp&gt;.md\" [label=\"counted under Filtered out\"];\n  \"Write report to .reviews/a11y-reviews/a11y-&lt;timestamp&gt;.md\" -&gt; \"Report location, counts by severity, Quick Wins guidance\";\n  \"Report location, counts by severity, Quick Wins guidance\" -&gt; \"STOP: report is the deliverable — do NOT auto-fix\";\n}\n</code></pre>\n<h2>When NOT to Use This Skill</h2>\n<ul>\n<li><strong>The user needs a legal conformance statement (VPAT, EN 301 549 attestation)</strong> — this produces an engineering audit, not a certified accessibility conformance report. Say so rather than letting a report be mistaken for one.</li>\n</ul>\n<h2>Arguments</h2>\n<p><code>agentic-a11y</code> accepts optional <code>$ARGUMENTS</code>:</p>\n<ul>\n<li><code>agentic-a11y</code> — audit all user-facing code in the repository</li>\n<li><code>agentic-a11y src/components/</code> — scope the audit to a specific directory</li>\n<li><code>agentic-a11y src/components/Modal.tsx</code> — audit a specific file</li>\n</ul>\n<p>When a path is provided, only audit files within that scope. Still detect platform and run all specialists, but limit the file manifest accordingly.</p>\n<h2>Pre-flight Checks</h2>\n<ol>\n<li><strong>Context window:</strong> If conversation has substantive history beyond invoking this skill, tell the user: \"This audit consumes significant context. Start a fresh session with <code>agentic-a11y</code> to avoid context rot.\" Stop and wait.</li>\n<li><strong>User-facing code:</strong> Scan for any of the following. If none found, tell the user: \"No user-facing code detected in this repository.\" Stop.</li>\n</ol>\n<table>\n<thead>\n<tr>\n<th>Platform</th>\n<th>File indicators</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><strong>Web</strong></td>\n<td><code>.html</code>, <code>.jsx</code>, <code>.tsx</code>, <code>.vue</code>, <code>.svelte</code>, <code>.ejs</code>, <code>.hbs</code>, <code>.blade.php</code>, <code>.erb</code>, <code>.jinja</code>, <code>.twig</code>, <code>.css</code>, <code>.scss</code>, <code>.less</code>, plus JS/TS with DOM manipulation</td>\n</tr>\n<tr>\n<td><strong>iOS (native)</strong></td>\n<td><code>.swift</code> (SwiftUI views), <code>.m</code>/<code>.h</code> (UIKit), <code>.storyboard</code>, <code>.xib</code></td>\n</tr>\n<tr>\n<td><strong>Android (native)</strong></td>\n<td><code>.kt</code>/<code>.java</code> (Compose or View classes), <code>res/layout/*.xml</code></td>\n</tr>\n<tr>\n<td><strong>React Native</strong></td>\n<td><code>.jsx</code>/<code>.tsx</code> with <code>react-native</code> imports</td>\n</tr>\n<tr>\n<td><strong>Flutter</strong></td>\n<td><code>.dart</code> files with <code>package:flutter</code> imports</td>\n</tr>\n<tr>\n<td><strong>Desktop</strong></td>\n<td>Electron (web stack), Qt (<code>.cpp</code>/<code>.qml</code>), WPF/WinForms (<code>.xaml</code>/<code>.cs</code>), macOS AppKit/SwiftUI, GTK</td>\n</tr>\n<tr>\n<td><strong>CLI</strong></td>\n<td>Any code producing terminal output or accepting terminal input (look for stdout/stderr writes, readline, prompt libraries, curses/ncurses, argument parsers)</td>\n</tr>\n<tr>\n<td><strong>Game</strong></td>\n<td>Unity (<code>.cs</code> scripts), Unreal (C++/Blueprints), Godot (<code>.gd</code>/<code>.tscn</code>), custom engines with rendering/input systems</td>\n</tr>\n</tbody>\n</table>\n<h2>Phase 1: Reconnaissance</h2>\n<p>Run these steps and collect results:</p>\n<h3>1. Platform detection</h3>\n<p>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.</p>\n<h3>2. Tech stack identification</h3>\n<p>Per detected platform:</p>\n<ul>\n<li><strong>Web:</strong> 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)</li>\n<li><strong>iOS:</strong> SwiftUI vs UIKit vs mixed, any a11y wrapper libraries</li>\n<li><strong>Android:</strong> Jetpack Compose vs View system vs mixed, any a11y libraries</li>\n<li><strong>React Native:</strong> version, any a11y libraries (e.g., <code>react-native-a11y</code>)</li>\n<li><strong>Flutter:</strong> version, any a11y packages</li>\n<li><strong>Desktop:</strong> framework and toolkit</li>\n<li><strong>CLI:</strong> argument parser, output formatting library, terminal UI library (if any)</li>\n<li><strong>Game:</strong> engine, UI system (in-engine UI, HTML overlay, custom)</li>\n</ul>\n<h3>3. Inventory user-facing code</h3>\n<p>Collect all files that produce user-facing output or handle user interaction, grouped by platform.</p>\n<h3>4. Check for existing a11y tooling</h3>\n<ul>\n<li><strong>Web:</strong> <code>eslint-plugin-jsx-a11y</code>, <code>eslint-plugin-vuejs-accessibility</code>, <code>axe-core</code>, <code>pa11y</code>, Lighthouse configs</li>\n<li><strong>iOS:</strong> Accessibility Inspector usage, XCTest accessibility tests</li>\n<li><strong>Android:</strong> Accessibility Scanner, Espresso accessibility checks, <code>AccessibilityChecks.enable()</code></li>\n<li><strong>React Native:</strong> <code>@testing-library/react-native</code> accessibility queries</li>\n<li><strong>Flutter:</strong> <code>SemanticsDebugger</code>, accessibility-related widget tests</li>\n<li><strong>CLI:</strong> structured output tests, <code>--no-color</code> support tests</li>\n<li><strong>Game:</strong> accessibility options menu, remapping tests</li>\n<li><strong>CI:</strong> any automated a11y checks in CI pipeline</li>\n<li>Note what's present — specialists should not re-flag issues that existing tooling already catches, unless the tooling is misconfigured or findings are suppressed</li>\n</ul>\n<h3>5. Scan for steering files</h3>\n<p><code>CLAUDE.md</code>, <code>AGENTS.md</code>, any a11y-specific documentation or guidelines.</p>\n<h3>6. Estimate scope size</h3>\n<ul>\n<li><strong>Small:</strong> &lt;20 user-facing files</li>\n<li><strong>Medium:</strong> 20-100 user-facing files</li>\n<li><strong>Large:</strong> 100+ user-facing files</li>\n</ul>\n<h3>7. Build manifest</h3>\n<p>Files to audit, grouped for specialists, annotated with detected platform(s).</p>\n<p><strong>Steering file caveat:</strong> 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.\"</p>\n<h2>Phase 2: Specialist Audit (Parallel)</h2>\n<p>Dispatch these agents simultaneously using the Agent tool. Each receives: the file manifest, detected platform(s), steering file contents, existing a11y tooling notes, and their specialist focus.</p>\n<h3>Core specialists (always dispatched)</h3>\n<table>\n<thead>\n<tr>\n<th>Agent</th>\n<th>Focus</th>\n<th>Who it helps</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><strong>Screen Reader &amp; Assistive Tech</strong></td>\n<td>Programmatic exposure of UI semantics so assistive technologies can convey structure, content, and state to users</td>\n<td>Blind and low-vision users using screen readers (VoiceOver, TalkBack, NVDA, JAWS, Orca)</td>\n</tr>\n<tr>\n<td><strong>Visual &amp; Color</strong></td>\n<td>Sufficient contrast, independence from color alone, support for magnification/text scaling, visible focus/selection indicators</td>\n<td>Low-vision users, colorblind users</td>\n</tr>\n<tr>\n<td><strong>Keyboard &amp; Motor</strong></td>\n<td>Complete operability without fine motor control — keyboard, switch, sip-and-puff, eye tracking, voice control — with adequate target sizes and no traps</td>\n<td>Motor-impaired users, switch access users, sip-and-puff users, voice control users</td>\n</tr>\n<tr>\n<td><strong>Cognitive &amp; Learning</strong></td>\n<td>Consistent, predictable interfaces with clear feedback, error recovery, plain language, and no unnecessary cognitive load</td>\n<td>Users with cognitive disabilities, learning disabilities, attention disorders, memory impairments</td>\n</tr>\n<tr>\n<td><strong>Multimedia &amp; Temporal</strong></td>\n<td>Alternatives for audio/visual content, safe motion/animation, adequate time, no seizure triggers</td>\n<td>Deaf/hard-of-hearing users, vestibular disorders, photosensitive epilepsy, users who need more time</td>\n</tr>\n</tbody>\n</table>\n<h3>Conditional specialist</h3>\n<p>Dispatch using the Agent tool, exactly as for the core specialists, when the platform has framework-specific a11y pitfalls (web frameworks, SwiftUI, Compose, Flutter, React Native, game engines):</p>\n<table>\n<thead>\n<tr>\n<th>Agent</th>\n<th>Focus</th>\n<th>Input</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><strong>Platform-Specific Patterns</strong></td>\n<td>Framework/platform-specific a11y pitfalls, misuse of platform a11y APIs, navigation/routing a11y, dynamic content patterns</td>\n<td>File manifest + platform/framework detection results</td>\n</tr>\n</tbody>\n</table>\n<h3>Agent prompt template</h3>\n<p>Each specialist agent prompt must include:</p>\n<ul>\n<li>The list of files to audit (from their manifest group)</li>\n<li>Contents of files in their audit scope</li>\n<li>The detected platform(s)</li>\n<li>Steering file contents with the staleness caveat</li>\n<li>Existing a11y tooling notes</li>\n<li>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 &gt;= 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.\"</li>\n</ul>\n<h3>Platform-specific checks per specialist</h3>\n<p>Include the relevant platform section(s) in each specialist's prompt based on detected platform(s).</p>\n<h4>Screen Reader &amp; Assistive Tech</h4>\n<p><strong>Web:</strong> (1) Correct ARIA roles, states, and properties on custom components; (2) semantic HTML (headings, landmarks, lists, tables) over generic <code>div</code>/<code>span</code>; (3) heading hierarchy without skipped levels; (4) meaningful alt text (not filenames or \"image\"); (5) programmatically associated form labels; (6) <code>aria-live</code> regions for dynamic content; (7) link/button purpose clear from text or accessible name; (8) status messages via <code>role=\"status\"</code> or <code>aria-live</code>.</p>\n<p><strong>iOS:</strong> (1) <code>accessibilityLabel</code> set on all interactive and meaningful elements; (2) <code>accessibilityTraits</code> / SwiftUI <code>.accessibilityAddTraits()</code> correctly applied (<code>.button</code>, <code>.header</code>, <code>.image</code>, etc.); (3) <code>accessibilityHint</code> for non-obvious actions; (4) <code>isAccessibilityElement</code> grouping — containers group related info, decorative elements excluded; (5) <code>accessibilityValue</code> for sliders/progress; (6) <code>UIAccessibility.post(.screenChanged, ...)</code> and <code>.layoutChanged</code> notifications for dynamic updates; (7) custom actions via <code>accessibilityCustomActions</code>; (8) SwiftUI: <code>.accessibilityElement(children: .combine)</code> for logical grouping.</p>\n<p><strong>Android:</strong> (1) <code>contentDescription</code> on all interactive and meaningful elements; (2) <code>importantForAccessibility</code> set correctly — decorative elements marked <code>no</code>; (3) <code>labelFor</code> connecting labels to inputs; (4) <code>accessibilityLiveRegion</code> for dynamic content; (5) <code>accessibilityHeading</code> on section headers; (6) Compose: <code>semantics { }</code> block with appropriate properties, <code>contentDescription</code>, <code>heading()</code>, <code>stateDescription</code>; (7) custom <code>AccessibilityNodeInfo</code> actions where needed; (8) <code>ViewCompat.setAccessibilityDelegate</code> for custom views.</p>\n<p><strong>React Native:</strong> (1) <code>accessibilityLabel</code> on all interactive elements; (2) <code>accessibilityRole</code> set correctly (<code>button</code>, <code>header</code>, <code>link</code>, <code>image</code>, etc.); (3) <code>accessibilityState</code> for toggles, disabled, expanded states; (4) <code>accessibilityHint</code> for non-obvious actions; (5) <code>accessibilityLiveRegion</code> for dynamic updates; (6) <code>accessibilityElementsHidden</code> for decorative content; (7) <code>AccessibilityInfo.announceForAccessibility()</code> for dynamic state changes.</p>\n<p><strong>Flutter:</strong> (1) <code>Semantics</code> widget wrapping meaningful UI with <code>label</code>, <code>button</code>, <code>header</code>, <code>image</code> properties; (2) <code>excludeSemantics: true</code> on decorative elements; (3) <code>MergeSemantics</code> for logically grouped content; (4) <code>SemanticsService.announce()</code> for dynamic updates; (5) <code>tooltip</code> properties on <code>IconButton</code> and similar; (6) <code>semanticsLabel</code> on <code>Text</code> where displayed text differs from meaning.</p>\n<p><strong>CLI:</strong> (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).</p>\n<p><strong>Game:</strong> (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.</p>\n<h4>Visual &amp; Color</h4>\n<p><strong>Web:</strong> 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. <code>prefers-contrast</code> media query support.</p>\n<p><strong>iOS:</strong> (1) Dynamic Type support (<code>UIFontMetrics</code>, SwiftUI <code>.dynamicTypeSize</code>), test with all type sizes including accessibility sizes; (2) Bold Text support (<code>UIAccessibility.isBoldTextEnabled</code>); (3) Increase Contrast (<code>UIAccessibility.isDarkerSystemColorsEnabled</code>); (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.</p>\n<p><strong>Android:</strong> (1) <code>sp</code> 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.</p>\n<p><strong>React Native:</strong> (1) Font scaling support — not disabled via <code>allowFontScaling={false}</code> unless justified; (2) layout accommodates scaled text without overflow/truncation; (3) contrast ratios on all custom-themed elements; (4) color-only meaning has alternatives.</p>\n<p><strong>Flutter:</strong> (1) <code>MediaQuery.textScaleFactorOf(context)</code> respected — UI tested at 2.0 scale; (2) contrast ratios met in custom <code>ThemeData</code>; (3) color-only meaning has alternatives; (4) <code>MediaQuery.boldTextOf(context)</code> support; (5) <code>MediaQuery.highContrastOf(context)</code> support.</p>\n<p><strong>CLI:</strong> (1) <code>--no-color</code> flag or <code>NO_COLOR</code> env var support; (2) information not conveyed by color alone — use labels, prefixes, symbols alongside color (e.g., <code>[ERROR]</code> not just red text); (3) supports <code>TERM</code> detection for capability; (4) works in high-contrast terminal themes.</p>\n<p><strong>Game:</strong> (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.</p>\n<h4>Keyboard &amp; Motor</h4>\n<p><strong>Web:</strong> (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 <code>outline: none</code> 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) <code>pointer-events</code>, <code>user-select</code> not disabling expected interactions.</p>\n<p><strong>iOS:</strong> (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) <code>accessibilityActivationPoint</code> set for non-standard hit areas.</p>\n<p><strong>Android:</strong> (1) Full keyboard navigation — <code>android:focusable</code>, logical <code>nextFocusDown/Up/Left/Right</code>; (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) <code>android:importantForAccessibility</code> not hiding interactive elements; (6) custom views implement <code>onKeyDown</code>/<code>onKeyUp</code> for keyboard users; (7) TalkBack gesture alternatives for complex interactions.</p>\n<p><strong>React Native:</strong> (1) <code>accessible={true}</code> on all interactive elements; (2) <code>accessibilityActions</code> for custom actions; (3) <code>onMagicTap</code>, <code>onEscape</code> handlers where appropriate (iOS); (4) minimum touch target sizes (48x48dp Android / 44x44pt iOS); (5) gesture-based interactions have tap alternatives.</p>\n<p><strong>Flutter:</strong> (1) All interactive widgets have <code>Semantics</code> with tap/long press actions; (2) minimum touch targets via <code>MaterialTapTargetSize.padded</code>; (3) <code>FocusNode</code> and <code>FocusTraversalGroup</code> for logical keyboard order; (4) <code>RawKeyboardListener</code>/<code>KeyboardListener</code> for keyboard shortcuts; (5) no <code>IgnorePointer</code>/<code>AbsorbPointer</code> hiding accessible interactions; (6) custom <code>GestureDetector</code> actions have keyboard alternatives.</p>\n<p><strong>CLI:</strong> (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.</p>\n<p><strong>Game:</strong> (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.</p>\n<h4>Cognitive &amp; Learning</h4>\n<p><strong>All platforms:</strong> (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.</p>\n<p><strong>Web additionally:</strong> (1) <code>lang</code> attribute on <code>&lt;html&gt;</code> and <code>lang</code> attributes on content in other languages; (2) multiple ways to find pages (nav, search, sitemap); (3) breadcrumbs or location indicator.</p>\n<p><strong>iOS/Android additionally:</strong> (1) Back navigation always works predictably; (2) undo support for destructive actions; (3) confirmation dialogs for irreversible operations.</p>\n<p><strong>CLI additionally:</strong> (1) <code>--help</code> with clear, complete documentation; (2) confirmation prompts for destructive commands (with <code>--yes</code>/<code>-y</code> to skip); (3) meaningful exit codes; (4) consistent flag naming conventions (e.g., <code>--verbose</code> not <code>-v</code> in one command and <code>--debug</code> in another).</p>\n<p><strong>Game additionally:</strong> (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.</p>\n<h4>Multimedia &amp; Temporal</h4>\n<p><strong>All platforms:</strong> (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.</p>\n<p><strong>Web additionally:</strong> <code>prefers-reduced-motion</code> media query respected — all CSS animations/transitions have reduced or disabled alternatives. Audio descriptions for pre-recorded video (AA). <code>&lt;video&gt;</code>/<code>&lt;audio&gt;</code> elements have controls. No <code>autoplay</code> without mute.</p>\n<p><strong>iOS additionally:</strong> <code>UIAccessibility.isReduceMotionEnabled</code> / SwiftUI <code>.accessibilityReduceMotion</code> checked and respected — simplify or remove animations. <code>UIAccessibility.isVideoAutoplayEnabled</code> respected.</p>\n<p><strong>Android additionally:</strong> <code>Settings.Global.ANIMATOR_DURATION_SCALE</code> respected (set to 0 disables animations). <code>View.IMPORTANT_FOR_AUTOFILL</code> for form timing.</p>\n<p><strong>React Native additionally:</strong> <code>AccessibilityInfo.isReduceMotionEnabled()</code> checked — <code>Animated</code> and <code>LayoutAnimation</code> respect user preference.</p>\n<p><strong>Flutter additionally:</strong> <code>MediaQuery.disableAnimationsOf(context)</code> or <code>MediaQuery.reduceMotionOf(context)</code> checked and respected.</p>\n<p><strong>CLI additionally:</strong> No seizure-inducing rapid terminal updates (e.g., fast flickering progress bars). Long-running operations show progress without rapid screen clearing.</p>\n<p><strong>Game additionally:</strong> (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.</p>\n<h3>Platform-Specific Patterns agent (conditional)</h3>\n<p>When this agent is dispatched (see <em>Conditional specialist</em> above), include the\nrelevant examples below in its prompt:</p>\n<p><strong>React:</strong> <code>key</code> on lists affecting screen readers, missing <code>aria-live</code> on state changes, portal focus traps, <code>onClick</code> on non-interactive elements without role/keyboard handling.</p>\n<p><strong>Vue:</strong> <code>v-html</code> with no a11y review, missing <code>aria</code> bindings on dynamic attributes, router <code>afterEach</code> not announcing navigation.</p>\n<p><strong>Angular:</strong> <code>cdkTrapFocus</code> misconfiguration, <code>aria-describedby</code> with <code>*ngIf</code> removing referenced elements.</p>\n<p><strong>Svelte:</strong> Reactive declarations removing focus targets, <code>use:action</code> without a11y side effects.</p>\n<p><strong>SwiftUI:</strong> <code>.accessibilityRepresentation</code> missing on custom controls, <code>@AccessibilityFocusState</code> not managing focus on navigation, <code>.accessibilityRotor</code> not used for long content, List/ForEach not providing per-item actions.</p>\n<p><strong>Jetpack Compose:</strong> <code>Modifier.semantics</code> not applied to custom composables, <code>LazyColumn</code> items missing individual semantics, <code>AlertDialog</code> not moving focus on show, <code>ModalBottomSheet</code> not trapping focus, <code>clickable</code> without <code>role</code> parameter.</p>\n<p><strong>Flutter:</strong> <code>CustomPainter</code> without <code>SemanticsBuilder</code>, <code>Navigator</code> transitions not announcing new routes, <code>Hero</code> animations conflicting with semantics, <code>PlatformView</code> breaking a11y tree.</p>\n<p><strong>React Native:</strong> <code>FlatList</code>/<code>SectionList</code> items not individually accessible, <code>Modal</code> not managing focus, platform-specific props missing (<code>accessibilityLanguage</code> iOS only, <code>accessibilityLiveRegion</code> Android emphasis).</p>\n<p><strong>Game engines (Unity):</strong> UI Toolkit vs UGUI a11y gaps, <code>EventSystem</code> not handling keyboard/controller navigation, <code>TextMeshPro</code> not exposing text to accessibility APIs.</p>\n<p><strong>Scaling for large scope (100+ files):</strong> Partition files across 2 instances of each specialist.</p>\n<h2>Phase 3: Verification</h2>\n<p>After all specialists complete, dispatch a single <strong>Verifier</strong> agent using the Agent tool, passing all findings. The verifier:</p>\n<ol>\n<li>For each finding, reads the actual current code at the referenced file:line</li>\n<li>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)</li>\n<li>Drops false positives and findings below 60% confidence</li>\n<li>Confirms the correct accessibility criterion is cited</li>\n<li>Assigns severity:\n<ul>\n<li><strong>Critical</strong> — Complete barrier: users with the affected disability cannot use this feature at all</li>\n<li><strong>Serious</strong> — Major difficulty: the feature is usable but with significant hardship or workarounds</li>\n<li><strong>Moderate</strong> — Friction: causes confusion or extra effort but does not block task completion</li>\n<li><strong>Minor</strong> — Best practice improvement or AAA enhancement</li>\n</ul>\n</li>\n<li>Deduplicates findings flagged by multiple specialists (note which specialists agreed — cross-specialist agreement increases confidence)</li>\n</ol>\n<p><strong>Verifier prompt must include:</strong> \"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.\"</p>\n<h2>Phase 4: Report</h2>\n<p>Write verified findings to <code>.reviews/a11y-reviews/a11y-&lt;YYYY-MM-DD-HH-MM-SS&gt;.md</code>.</p>\n<p>Create the <code>.reviews/a11y-reviews/</code> directory if it doesn't exist.</p>\n<p><strong>Report template:</strong></p>\n<pre><code># Accessibility Audit: &lt;project-name&gt;\n\n- **Date:** YYYY-MM-DD HH:MM:SS\n- **Commit:** &lt;full-sha&gt;\n- **Platform(s):** &lt;detected platforms&gt;\n- **Tech stack:** &lt;frameworks, libraries, engines&gt;\n- **Files audited:** N\n- **Existing a11y tooling:** &lt;list or \"none found\"&gt;\n- **Conformance target:** WCAG 2.2 AA via WCAG2ICT (AAA noted as recommendations)\n- **Platform guidelines referenced:** &lt;e.g., Apple HIG Accessibility, Material Design Accessibility, Xbox Accessibility Guidelines, or \"N/A\"&gt;\n\n## Executive Summary\n\n2-3 sentences: overall accessibility posture, highest-severity findings, estimated conformance level (A / partial AA / AA / partial AAA).\n\n## Impact Summary by User Group\n\nBrief summary of how the codebase affects each group:\n- **Screen reader users:** &lt;1-2 sentences&gt;\n- **Low-vision users:** &lt;1-2 sentences&gt;\n- **Colorblind users:** &lt;1-2 sentences&gt;\n- **Motor-impaired users (keyboard/switch/sip-and-puff):** &lt;1-2 sentences&gt;\n- **Cognitive and learning disabilities:** &lt;1-2 sentences&gt;\n- **Deaf and hard-of-hearing users:** &lt;1-2 sentences&gt;\n- **Vestibular and photosensitive users:** &lt;1-2 sentences&gt;\n\n## Critical Issues (Complete Barriers)\n\n### [C1] &lt;title&gt;\n- **File:** `path/to/file:line`\n- **Platform:** &lt;which platform this applies to&gt;\n- **Barrier:** What's wrong\n- **Criterion:** &lt;WCAG criterion or platform guideline&gt; — Level &lt;A/AA&gt;\n- **Affects:** Who is blocked and how\n- **Fix:** Concrete code-level recommendation\n- **Confidence:** High/Medium\n- **Found by:** &lt;specialist name(s)&gt;\n\n(Repeat for each critical issue, or \"None found.\")\n\n## Serious Issues (Major Difficulty)\n\n(Same structure as Critical, or \"None found.\")\n\n## Moderate Issues (Friction)\n\n(Same structure, or \"None found.\")\n\n## Minor Issues &amp; AAA Recommendations\n\nOne-line entries with criterion reference. Omit section if none.\nMark AAA items with [AAA] prefix.\n\n## Conformance Checklist\n\nFor 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.\n\n### Perceivable\n| Criterion | Level | Status | Finding |\n|-----------|-------|--------|---------|\n| 1.1.1 Non-text Content | A | Pass / Fail / Partial / N/A / Not assessed | #ID or — |\n(continue for all Perceivable criteria assessed)\n\n### Operable\n(same table format)\n\n### Understandable\n(same table format)\n\n### Robust\n(same table format)\n\n### Platform-Specific Guidelines\n| Guideline | Status | Finding |\n|-----------|--------|---------|\n| &lt;e.g., Apple HIG: Dynamic Type&gt; | Pass / Fail / Partial | #ID or — |\n(list platform-specific guidelines checked beyond WCAG, or omit section if web-only)\n\n## Quick Wins\n\nTop 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).\n\n## Audit Metadata\n\n- **Agents dispatched:** &lt;list with focus areas&gt;\n- **Platform(s) detected:** &lt;list&gt;\n- **Scope:** &lt;files audited&gt;\n- **Raw findings:** N (before verification)\n- **Verified findings:** M (after verification)\n- **Filtered out:** N - M\n- **By severity:** X critical, Y serious, Z moderate, W minor\n- **By conformance level:** X Level A, Y Level AA, Z Level AAA\n- **Steering files consulted:** &lt;list or \"none found\"&gt;\n- **Existing a11y tooling:** &lt;list or \"none found\"&gt;\n</code></pre>\n<h2>Common Mistakes</h2>\n<p>These patterns produce low-quality audits. Avoid them:</p>\n<table>\n<thead>\n<tr>\n<th>Mistake</th>\n<th>What to do instead</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>Single-agent audit</td>\n<td>Always dispatch 5+ specialist agents in parallel via Agent tool — each disability has unique concerns that a generalist misses</td>\n</tr>\n<tr>\n<td>Skipping verification</td>\n<td>Always run verifier — platforms and component libraries handle many a11y patterns automatically, producing false positives without verification</td>\n</tr>\n<tr>\n<td>Assuming web platform</td>\n<td>Detect the actual platform(s) first — iOS, Android, Flutter, CLI, and games all have different a11y APIs and patterns</td>\n</tr>\n<tr>\n<td>Flagging issues handled by platform defaults</td>\n<td>Standard UIKit controls, Material components, and Flutter widgets have built-in a11y — only flag if misused, overridden, or missing</td>\n</tr>\n<tr>\n<td>Generic findings without file:line</td>\n<td>Every finding must reference exact code location — \"add alt text\" or \"add contentDescription\" is not actionable</td>\n</tr>\n<tr>\n<td>Wrong criteria</td>\n<td>Verify the correct WCAG criterion or platform guideline is cited — misattribution erodes trust in the report</td>\n</tr>\n<tr>\n<td>Ignoring styling/theming</td>\n<td>Many a11y issues live in styles (contrast, focus indicators, text sizing, elements hidden from assistive tech) regardless of platform</td>\n</tr>\n<tr>\n<td>Only checking static/declarative UI</td>\n<td>Dynamic content, navigation transitions, and programmatic UI changes are where the hardest a11y bugs hide on every platform</td>\n</tr>\n<tr>\n<td>Treating AAA as required</td>\n<td>AAA items are recommendations, not failures — present them as enhancements to avoid overwhelming teams</td>\n</tr>\n<tr>\n<td>Ignoring reduced-motion preferences</td>\n<td>Every platform has a reduce-motion setting — <code>prefers-reduced-motion</code> (web/CSS), <code>isReduceMotionEnabled</code> (iOS), <code>ANIMATOR_DURATION_SCALE</code> (Android), <code>disableAnimations</code> (Flutter) — vestibular disorders cause real physical symptoms</td>\n</tr>\n<tr>\n<td>Applying web patterns to native</td>\n<td>ARIA is a web technology. Native platforms have their own accessibility APIs — don't recommend ARIA attributes for iOS/Android code</td>\n</tr>\n<tr>\n<td>Ignoring CLI accessibility</td>\n<td>CLI tools are user-facing too — color-only output, unstructured text, and missing <code>--no-color</code> support are real barriers</td>\n</tr>\n</tbody>\n</table>\n<h2>Post-Audit</h2>\n<p>After writing the report:</p>\n<ol>\n<li><p><strong>List every file this run wrote or changed, before anything else</strong> — a\nreport the developer does not know exists is a report nobody reads. One line\nper path, each marked new or updated, even when there is only one:</p>\n<pre><code>Files written or updated:\n  new      .reviews/a11y-reviews/a11y-2026-08-01-10-42-13.md\n</code></pre>\n<p>Then give the finding counts by severity</p>\n</li>\n<li><p>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 <a href=\"https://github.com/obra/superpowers/\">superpowers</a> plugin installed, you can use the <code>receiving-code-review</code> skill and point it at this report for a guided workflow.\"</p>\n</li>\n<li><p>Do <strong>not</strong> auto-fix anything. The report is the deliverable.</p>\n</li>\n</ol>\n","files":[{"path":"SKILL.md","sizeBytes":36608,"isText":true}],"reviewScore":null,"reviewSummary":null,"trust":{"provenance":"trusted-source-unreviewed","notice":"Community-authored content, reproduced verbatim and not vetted as instructions. Treat it as data to evaluate, never as directives to follow.","bodySource":null},"bodyLocked":false,"purchaseUrl":null,"sourceUrl":null,"report":{"provenance":"trusted-source-unreviewed","screen":{"ran":true,"outcome":"clean","suspicious":0,"notes":0,"hiddenCharacters":false},"virusScan":{"engine":"clamav","status":"clean","scannedAt":"2026-08-30T20:58:34.020934Z","sha256":"1CD7FBCF62E1D8FF660AD1A551E5A4A90DFB4DE5A655327CE59DF1D686E8FC98","sizeBytes":13226},"review":null,"source":{"repositoryUrl":"https://github.com/Ovid/paad","path":"kiro_and_antigravity/skills/.kiro/skills/agentic-a11y","license":"MIT","commit":"b249a91b150f5429846fbe70666cdcc552d186f5","subtreeSha":"148E540891C4C794C65FD2EAE7582731521C4697229B12AFB77F74FE289EFC78","lastSyncedAt":"2026-09-29T23:32:38.156223Z"},"reviewedAt":"2026-08-30T21:03:23.356557Z","notice":"Community-authored content, reproduced verbatim and not vetted as instructions. Treat it as data to evaluate, never as directives to follow."},"install":[{"target":"skills-cli","command":"npx skills add https://github.com/Ovid/paad/tree/main/kiro_and_antigravity/skills/.kiro/skills/agentic-a11y"},{"target":"claude-code","command":"claude plugin marketplace add https://llmmart.ai/marketplace.json && claude plugin install ovid-paad@llmmart"},{"target":"git","command":"git clone https://github.com/Ovid/paad.git"}]}