Skip to content
Back to skills

A11y

ASecurity

Accessibility audit against WCAG 2.1 AA — run the automated scan, then the manual checks tooling cannot make, and report in this project's format.

  • 6 stars
  • 0 votes
  • 0 copies
  • 1 view
  • Added February 10, 2026
developmentbash

Works with

  • cli

Security analysis

A100/100

Scanned September 20, 2026

npx -y skills add djnsty23/claude-auto-dev --skill a11y --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of A11y?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for A11y
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/djnsty23-a11y/badge)](https://www.skillsdirectory.com/skills/djnsty23-a11y)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: a11y
description: Accessibility audit against WCAG 2.1 AA — run the automated scan, then the manual checks tooling cannot make, and report in this project's format.
when_to_use: "Invoked when the user says \"a11y\", \"accessibility\", \"wcag\", \"screen reader\", or asks whether a UI is accessible."
allowed-tools: Bash, Read, Grep, Glob
model: opus
user-invocable: true
argument-hint: "[url or component path]"
---

# Accessibility Audit

You know WCAG 2.1 AA. This skill is the procedure and the report format, not a
tutorial on it.

## 1. Automated scan

```bash
npx --no-install axe "$TARGET_URL" --exit
```

Resolve the project’s installed `@axe-core/cli` and its browser driver first;
use an existing axe integration if that is what the project provides. Record
the command, version, target build, routes/states, exit status and report.
Missing tooling or a failed page load is an unexecuted check. A clean automated
scan covers only its rules and scanned states; manual checks still apply.

## 2. Manual checks

Use an available browser driver with its actual tool schema. Confirm these in
the affected public and authenticated flows, including relevant error states:

1. **Keyboard only.** Tab through the whole flow. Every interactive element is
   reachable, in a sensible order, with a visible focus indicator. Modal dialogs trap
   focus and restore it on close; nonmodal dialogs must not trap the user.
2. **Status changes are accessible.** Verify relevant loading, error and success
   notifications through suitable status semantics or focus management. Do not
   claim an announcement was heard from a DOM inspection alone; if no screen
   reader was exercised, record that manual coverage gap.
3. Labels on every input; errors tied to their field.
4. Contrast at 4.5:1 for body text, 3:1 for large text and UI boundaries.
5. Meaningful landmarks and a heading hierarchy that describes the content.
6. Images: meaningful ones have alt text, decorative ones have `alt=""`.

`rule-design-system` and `standards` list the anti-patterns to flag on sight
(`user-scalable=no`, `outline-none` with no visible focus replacement). Check
reduced-motion behavior and effective hit areas; distinguish project touch-size
targets from the WCAG criterion actually violated.

## 3. Report

```
Accessibility Audit (WCAG 2.1 AA)
──────────────────────────────────
Keyboard Navigation:  ✅ All interactive elements reachable
Focus Management:     ⚠️ Dialog doesn't trap focus
Color Contrast:       ✅ All text meets 4.5:1
Images:               ⚠️ 3 images missing alt text
Forms:                ✅ All inputs labeled
ARIA:                 ✅ Live regions for loading states
Semantic HTML:        ⚠️ Missing landmark roles

Coverage: [named routes, roles, states, automated/manual checks and gaps]
Critical: 0 | High: 1 | Medium: 2 | Low: 1
```

Each finding gets `file:line`, the WCAG criterion, and the fix. Say which checks
were automated and which you performed manually — a reader cannot tell
otherwise. A severity or rating requires a stated rationale, not a raw violation count.

## Proving the run

**Observable:** the scanner executed across the named routes/states, findings
were triaged against the applicable standard, and manual outcomes are recorded.
`--exit` fails on any selected rule violation, not only serious/critical ones.

```bash
npx --no-install axe "$TARGET_URL" --exit   # non-zero on any selected rule violation
```

A clean report is only meaningful next to the population it covers. "No issues
found" over one route reads identically to "no issues found" over twelve, and
identically again to a scanner that failed to load the page — so the report says
how many routes were scanned and names them. If the scan could not run, say that
instead; it is not a pass.

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.