Ai Accessibility Audit logo

Ai Accessibility Audit

Community
varunk130
ai-accessibility-audit

WCAG 2.2 Level AA accessibility audit for AI product surfaces - color contrast, focus order, ARIA usage, keyboard navigation, motion/animation, reduced-motion respect, alt text, and form label association. Use when: accessibility audit, a11y review, WCAG audit, screen reader compliance, keyboard-only navigation, color contrast check, focus management, ARIA review, accessible AI UX.

Overview

Publishervarunk130
Repositoryai-ux-skill-library
Skill nameai-accessibility-audit
Stars
3
Forks
0
Bundled files
Instructions only
LicenseMIT
Links
  • Markdown instructions

    A SKILL.md file the model loads on demand, so it only costs tokens when a request actually matches.

  • Works with any LLM

    AI skills are plain Markdown, not provider-specific code, so this works with GPT, Claude, Gemini, Grok, or a local model.

  • Self-contained

    Everything the model needs lives in the instructions — no extra files to sync.

  • Open source

    Published by varunk130 on GitHub. Read the source before you install it.

Installation

Install the Ai Accessibility Audit AI skill in TypingMind to use it with any LLM, or drop it into another agent that reads SKILL.md.

1

Install in TypingMind

TypingMind installs a skill straight from its GitHub folder — it reads SKILL.md, bundles the resource files, and stores the result locally.

  1. Open the app and go to Plugins → Skills.
  2. Choose "Install from GitHub".
  3. Paste the skill folder URL below and confirm.
    https://github.com/varunk130/ai-ux-skill-library/tree/main/skills/ai-accessibility-audit
  4. Enable the skill in any chat where you want it available.
Plugins → Skills → Add skill → From GitHub URL, then paste the folder URL and press Continue.
2

Install in another agent

Any agent that reads the Agent Skills format can use this skill — copy the folder into that agent's skills directory.

Claude Code — .claude/skills
git clone --depth 1 https://github.com/varunk130/ai-ux-skill-library.git /tmp/ai-ux-skill-library
mkdir -p .claude/skills
cp -r /tmp/ai-ux-skill-library/skills/ai-accessibility-audit .claude/skills/ai-accessibility-audit
Restart Claude Code after copying so it picks up the new skill.

Use it in TypingMind

Enable Ai Accessibility Audit in any TypingMind chat and the model takes it from there. Its name and description sit in the system prompt, and the moment a request matches, the model loads the full instructions itself — you never invoke it by hand, and it costs no tokens until it is actually used.

The model loads Ai Accessibility Audit on its own as soon as a request matches it.

Works with any AI model

AI skills are plain Markdown instructions rather than provider-specific code, so Ai Accessibility Audit is not tied to the model it was written for. Install it once in TypingMind and use it with GPT-5, Claude, Gemini, Grok, DeepSeek, Mistral, Llama, or a local model you run yourself — all on your own API keys.

  • Loaded only when it is needed

    The system prompt carries just the name and description. The instructions are fetched on the first matching request, so an idle skill costs nothing.

  • Switch models mid-chat

    Because the skill is instructions rather than code, changing model does not break it — the next model reads the same SKILL.md.

Skill instructions

This is the SKILL.md content the model loads. Read it before installing — a skill is instructions your model will follow.

AI Accessibility Audit

Catch accessibility regressions in AI product surfaces before they ship - chat interfaces, agent dashboards, generated-content panels, streaming output regions, and consent / safety UI. WCAG 2.2 Level AA is the bar; the framework below operationalizes it for AI-specific patterns that the spec doesn't natively cover.

Core Principle

Accessibility is a property of the experience, not just the markup. An AI product can pass an axe-core scan and still be unusable for a screen-reader user if streaming output isn't announced, consent UI traps focus, or "regenerate" controls are unreachable from the keyboard. This skill audits both the static layer (DOM, contrast, semantics) and the AI-specific dynamic layer (live regions, latency, motion).


The CLEAR Audit Framework

LetterDimensionThe Question
CContrast & ColorDoes every text/icon/state meet 4.5:1 (or 3:1 for ≥18pt or non-text UI)? Is color the only signal anywhere?
LLogic of FocusCan a keyboard-only user reach every action in a sensible order, with a visible focus indicator and no traps?
EEquivalents for Non-TextDo images, charts, generated visuals, and audio have meaningful alternatives - including AI-generated content?
AAnnouncements & Live RegionsAre streaming outputs, status changes, and AI errors announced to assistive tech without spamming?
RRespect for User PreferencesDoes the product honor prefers-reduced-motion, prefers-color-scheme, OS-level font scaling, and reduced-data hints?

WCAG 2.2 AA Coverage Matrix

The skill produces findings against the success criteria most commonly violated in AI product surfaces:

Success CriterionWhat Gets CheckedAI-Specific Gotchas
1.1.1 Non-text ContentAlt text on every meaningful imageAI-generated images often ship with empty alt; charts rendered as <canvas> lack text equivalents
1.3.1 Info & RelationshipsHeadings, lists, landmarks, form labelsMarkdown rendered from LLM output frequently produces orphan headings (h3 without h2)
1.4.3 Contrast (Minimum)4.5:1 on all body text"Subtle" UI states (disabled, secondary, "thinking…") often dip below threshold
1.4.10 ReflowNo horizontal scroll at 320 CSS pxLong streaming code blocks and tables break this - needs horizontal-scroll container, not body scroll
1.4.11 Non-text Contrast3:1 for UI components, focus indicatorsCustom focus rings on dark backgrounds frequently fail
1.4.13 Content on Hover/FocusTooltips dismissible, hoverable, persistent"Why this answer?" popovers on AI citations often violate all three
2.1.1 KeyboardAll functionality keyboard-operableSend button, regenerate, stop-generation, copy-to-clipboard, model picker - audit each
2.1.2 No Keyboard TrapFocus can leave any componentModal consent gates and citation popovers frequently trap
2.4.3 Focus OrderLogical, predictable focus orderStreaming content insertion can shift focus or skip newly-rendered actions
2.4.7 Focus VisibleVisible indicator on every focused elementoutline: none with no replacement is the single most common failure
2.4.11 Focus Not Obscured (2.2 new)Focused element not hidden behind sticky UISticky composer bars often cover the focused message above
2.5.7 Dragging Movements (2.2 new)Single-pointer alternative for drag"Drag to reorder citations" patterns need keyboard alternative
2.5.8 Target Size (2.2 new)Interactive targets ≥24×24 CSS pxInline action chips inside chat bubbles routinely fail
3.2.6 Consistent Help (2.2 new)Help mechanisms consistently located"Report response" / feedback controls drift across surfaces
3.3.7 Redundant Entry (2.2 new)Don't make users re-type info in the same flowMulti-step agent setup flows commonly violate
3.3.8 Accessible Authentication (2.2 new)No cognitive function test for authAPI-key paste flows that disallow paste fail this
4.1.3 Status MessagesUse ARIA live regions for status without focus shiftStreaming AI output, "Thinking…", and error toasts must use aria-live="polite" (not assertive for streaming - it spams)

AI-Specific Patterns the Spec Doesn't Cover

These are the patterns that pass a generic scan but fail real users of AI products. The skill explicitly checks each:

PatternFailure ModeRecommended Fix
Streaming outputEach token announced individually → screen reader chaosWrap streaming region in aria-live="polite" and aria-atomic="false"; announce only on sentence boundaries or every N tokens
"Thinking…" indicatorsAnimated dots invisible to AT, or announced repeatedlySingle aria-live="polite" status text, not a loop; respect prefers-reduced-motion for the animation
Stop-generation controlOnly appears mid-stream and steals focusReserve a stable focusable slot; toggle aria-disabled, don't add/remove from DOM
Citation popoversOpen on hover only; trap focus when keyboard-openedOpen on focus or click; ESC closes and returns focus to trigger
Regenerate / variant carouselRight-arrow cycles, but not announcedUse role="region" + aria-label + aria-live on the active variant
Consent / safety modalsFirst-time modals trap focus before user understandsFocus headline (not first input); Esc closes only if the action is non-blocking
Generated imagesalt="" or alt="image"Caption with the user's prompt as a baseline; let users override
Voice / audio outputNo transcript; no captions on TTSAlways render the spoken text; offer scrubbable transcript
Color-coded confidenceRed/yellow/green badge with no textPair every color with a label or icon

Output

Save to outputs/a11y-audit-[surface]-[YYYY-MM-DD].md

The audit produces a prioritized issue list:

SeverityDefinitionExamples
CriticalBlocks a class of users from completing a core taskSend button unreachable by keyboard; modal traps focus; streaming output unannounced
SeriousSignificantly degrades the experience for assistive-tech usersFocus indicator removed; contrast 3.5:1 on body text; missing form labels
ModerateWorkaround exists but cognitive load is highConfusing focus order; redundant announcements; small touch targets
MinorPolish-level; doesn't block any taskDecorative icons exposed; non-essential heading-level skip

Every finding includes:

  • Where - selector, screenshot, or step-by-step reproduction
  • WCAG criterion - e.g., "2.4.7 Focus Visible (AA)"
  • Why - the user impact in one sentence
  • Fix - concrete code snippet or design change, not just "add ARIA"
  • Test - how to verify the fix (keyboard-only walk, NVDA/VoiceOver script, contrast number)

Process

Step 1: Scope the Audit

I'll ask:

"What surface am I auditing? (URL, route, component name, or screenshot.) What user flows must work end-to-end? (e.g., 'send a message and copy the response'.) Any known assistive-tech users I should optimize for?"

Step 2: Static Layer Pass (CLEAR - C, E)

Walk the rendered DOM and styles for contrast, semantics, alt text, landmarks, and headings. Produce findings against 1.x and 4.1.x criteria.

Step 3: Keyboard Layer Pass (CLEAR - L)

Tab through every focusable element from <body>. Note: focus visibility, focus order vs. visual order, focus traps, missing focus return after dismissals, and 2.2's new criteria (2.4.11, 2.5.7, 2.5.8).

Step 4: Dynamic / AI Layer Pass (CLEAR - A)

Trigger streaming output, errors, stop-generation, regenerate, citation popovers, and consent modals. Verify announcements (live regions), focus behavior on insertion, and motion respect.

Step 5: Preference Pass (CLEAR - R)

Confirm prefers-reduced-motion, prefers-color-scheme, font-size scaling to 200%, and zoom to 400% all degrade gracefully.

Step 6: Synthesize the Report

Group findings by severity, then by CLEAR dimension. Add a one-page "ship blockers" summary at the top (Critical + Serious only) so the team knows what must be fixed before release.

Step 7: Acceptance Tests

For each Critical and Serious finding, write a one-line acceptance test the team can paste into their PR template (e.g., "Tabbing from composer → send → response area works in this order; focus visible at every stop").


Tips

  1. Audit the flow, not just the page - a checkbox-clean page with a broken send-message flow is worse than a couple of contrast warnings on a perfect flow.
  2. Test with the OS, not just a browser extension - turn on VoiceOver / NVDA for at least one full task. Extensions don't catch announcement spam.
  3. Treat 2.2's new criteria as table stakes - 2.5.8 (target size) and 2.4.11 (focus not obscured) catch ~30% of real-world failures in chat UIs.
  4. Make accessibility part of the prompt - when generating UI from a model, include "WCAG 2.2 AA, visible focus, semantic HTML, aria-live for streaming" in the system prompt; it raises the floor measurably.

Frequently asked questions

What does the Ai Accessibility Audit AI skill do?

WCAG 2.2 Level AA accessibility audit for AI product surfaces - color contrast, focus order, ARIA usage, keyboard navigation, motion/animation, reduced-motion respect, alt text, and form label association. Use when: accessibility audit, a11y review, WCAG audit, screen reader compliance, keyboard-only navigation, color contrast check, focus management, ARIA review, accessible AI UX.

Why use Ai Accessibility Audit on TypingMind?

Because you install it once and use it with any model. Ai Accessibility Audit is plain Markdown rather than provider-specific code, so the same skill runs on GPT-5, Claude, Gemini, Grok, or a local model — and you can switch model mid-chat without it breaking. TypingMind runs on your own API keys, so you pay providers directly instead of a per-seat subscription, and your skills and chats stay in your own storage.

How do I install Ai Accessibility Audit in TypingMind?

Open Plugins → Skills → Install from GitHub in TypingMind and paste https://github.com/varunk130/ai-ux-skill-library/tree/main/skills/ai-accessibility-audit. TypingMind reads its SKILL.md and installs it as a skill you can enable per chat.

Which AI models can use Ai Accessibility Audit?

Any model you connect in TypingMind. AI skills are plain Markdown instructions rather than provider-specific code, so GPT, Claude, Gemini, Grok, and local models can all load this skill when a request matches it.

How many AI models can I use with Ai Accessibility Audit?

As many as you like. As long as a model supports skills, you can use Ai Accessibility Audit with it — GPT, Claude, Gemini, Grok, DeepSeek, Mistral, Llama and more — all on TypingMind with your own API keys.

Is the Ai Accessibility Audit AI skill free?

Yes. It is published on GitHub by varunk130 under the MIT license. You only pay your own AI provider for the tokens you use.

What are AI skills?

An AI skill is a reusable instruction bundle that teaches an AI model how to do one specific task. It follows the open Agent Skills format: a SKILL.md file with a name and description, plus any scripts, templates or reference files the model may need. The model reads the instructions only when your request matches the skill, so an installed skill costs nothing until it is used.

How are AI skills different from plugins or MCP servers?

A plugin or MCP server gives a model new tools to call — code that runs somewhere and returns a result. An AI skill gives the model knowledge and process instead: how to approach a task, which steps to follow, what good output looks like. Skills are plain Markdown, so they need no server, no API key and no runtime, and they work with any model.

View all

Set up your own AI workspace now

Get notified about new features and future giveaways by subscribing to our newsletter 👇