accessibility-test — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited accessibility-test (Agent Skill) and scored it 96/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 1 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 1 flagged
The text {match} tells the agent to skip the normal "ask the user first" gate. Used adversarially it removes the human-in-the-loop check before destructive or sensitive actions, turning a normally-gated agent into a fire-and-forget executor.
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
You are in AUTONOMOUS MODE. Do NOT ask questions. Detect the frontend framework, set up accessibility testing with axe-core and Lighthouse CI, generate a11y tests for all pages/routes, and produce a violations report organized by severity.
INPUT: $ARGUMENTS
If arguments are provided, focus on those specific pages, components, or WCAG criteria. If no arguments are provided, test ALL pages and routes for WCAG 2.1 AA compliance.
============================================================ PHASE 1: FRONTEND DISCOVERY ============================================================
Step 1.1 -- Detect Frontend Framework
| Indicator | Framework |
|---|---|
| next.config.* | Next.js |
| nuxt.config.* | Nuxt |
| angular.json | Angular |
| svelte.config.* | SvelteKit |
| vite.config.* + React | React + Vite |
| vite.config.* + Vue | Vue + Vite |
| package.json with react-scripts | Create React App |
| pubspec.yaml with flutter | Flutter |
| package.json with expo | React Native (Expo) |
| astro.config.* | Astro |
Step 1.2 -- Detect Existing A11y Tools
| Indicator | Tool |
|---|---|
| jest-axe in package.json | jest-axe |
| @axe-core/playwright in package.json | Playwright axe |
| cypress-axe in package.json | Cypress axe |
| @axe-core/react in package.json | React axe (dev overlay) |
| pa11y in package.json | Pa11y |
| lighthouserc.* or @lhci/cli | Lighthouse CI |
| .a11yrc or a11y.config.* | Custom a11y config |
| Semantics widgets in Flutter | Flutter a11y (built-in) |
Step 1.3 -- Discover All Routes and Pages
Use the same route discovery method as /e2e Phase 0, Step 0.2.
Build the page inventory:
| # | Route | Page Name | Auth Required | Interactive Elements | Forms |
|---|
Identify component-level testing targets:
============================================================ PHASE 2: TOOL SETUP ============================================================
Step 2.1 -- Install A11y Testing Tools
FOR WEB PROJECTS (React, Next.js, Vue, Angular, Svelte, Astro):
Primary tool -- Playwright + axe-core (page-level testing):
Secondary tool -- jest-axe or vitest-axe (component-level testing):
Reporting tool -- Lighthouse CI:
FOR FLUTTER:
No extra installation needed. Flutter has built-in Semantics testing.
Step 2.2 -- Configure Lighthouse CI
Create lighthouserc.js (or .lighthouserc.json):
Configuration must include:
Step 2.3 -- Configure axe-core Rules
Set up axe-core with WCAG 2.1 AA as the baseline:
Rule tags to enable:
Rules to explicitly verify:
============================================================ PHASE 3: TEST GENERATION ============================================================
Step 3.1 -- Page-Level A11y Tests (Playwright + axe)
FOR EACH page in the inventory, generate a test file:
test('[page-name] - accessibility', async ({ page }) => {
// Navigate and wait for page to be fully loaded
// Inject axe-core
// Run full page scan with WCAG 2.1 AA tags
// Assert zero violations
})Each page test must:
Test interactive states for each page:
Step 3.2 -- Keyboard Navigation Tests
FOR EACH page, generate keyboard navigation tests:
TAB ORDER:
KEYBOARD INTERACTIONS:
FOCUS MANAGEMENT:
Step 3.3 -- Component-Level A11y Tests
FOR reusable components, generate unit-level a11y tests:
Using jest-axe or vitest-axe:
Test each component variant:
Verify semantic HTML:
Step 3.4 -- Screen Reader Compatibility Tests
Generate tests to verify screen reader announcements:
ARIA LIVE REGIONS:
ARIA LABELS:
FORM ACCESSIBILITY:
Step 3.5 -- Flutter-Specific A11y Tests (if Flutter)
Generate tests using Semantics finders:
============================================================ PHASE 4: EXECUTION ============================================================
Step 4.1 -- Start the Application
Start the frontend dev server (same as /e2e Phase 1). Wait for the server to be fully ready.
Step 4.2 -- Run axe-core Tests
Execute page-level a11y tests:
| Tool | Command |
|---|---|
| Playwright + axe | npx playwright test a11y-tests/ --reporter=list |
| Cypress + axe | npx cypress run --spec "cypress/e2e/a11y/**" |
| jest-axe | npx jest tests/a11y/ --verbose |
| Flutter | flutter test test/a11y/ |
Step 4.3 -- Run Lighthouse CI
Execute Lighthouse accessibility audits:
lhci autorun --config=lighthouserc.js
Or for individual pages: lhci collect --url=http://localhost:PORT/page1 --url=http://localhost:PORT/page2 lhci assert
Record the accessibility score for each page.
Step 4.4 -- Compile Violations
Merge results from axe-core and Lighthouse into a unified violations list. Deduplicate violations that appear in both tools.
============================================================ SELF-HEALING VALIDATION (max 3 iterations) ============================================================
After generating and running tests, validate:
IF STILL FAILING after 3 iterations:
============================================================ OUTPUT ============================================================
| Page | Score | Status |
|---|---|---|
| [page] | [0-100] | [PASS >= 90 / FAIL < 90] |
| Average | N | [verdict] |
#### Critical (must fix immediately)
| # | Rule | WCAG Criterion | Page | Element | Description | Fix |
|---|
#### Serious (should fix before release)
| # | Rule | WCAG Criterion | Page | Element | Description | Fix |
|---|
#### Moderate (fix in next sprint)
| # | Rule | WCAG Criterion | Page | Element | Description | Fix |
|---|
#### Minor (improvement opportunity)
| # | Rule | WCAG Criterion | Page | Element | Description | Fix |
|---|
| Page | Tab Order | Focus Visible | Keyboard Operable | Focus Management |
|---|
| Criterion | Description | Status | Notes |
|---|---|---|---|
| 1.1.1 | Non-text Content (alt text) | PASS/FAIL | |
| 1.3.1 | Info and Relationships (semantic HTML) | PASS/FAIL | |
| 1.4.3 | Contrast (Minimum) 4.5:1 | PASS/FAIL | |
| 1.4.11 | Non-text Contrast 3:1 | PASS/FAIL | |
| 2.1.1 | Keyboard accessible | PASS/FAIL | |
| 2.4.3 | Focus Order logical | PASS/FAIL | |
| 2.4.7 | Focus Visible | PASS/FAIL | |
| 3.3.1 | Error Identification | PASS/FAIL | |
| 3.3.2 | Labels or Instructions | PASS/FAIL | |
| 4.1.2 | Name, Role, Value (ARIA) | PASS/FAIL |
NEXT STEPS:
/visual-regression to verify fixes do not break the visual design."/e2e to verify a11y fixes do not break functionality."/test-suite to see overall test health with a11y coverage."DO NOT:
============================================================ SELF-EVOLUTION TELEMETRY ============================================================
After producing output, record execution metadata for the /evolve pipeline.
Check if a project memory directory exists:
~/.claude/projects/skill-telemetry.md in that memory directoryEntry format:
### /accessibility-test — {{YYYY-MM-DD}}
- Outcome: {{SUCCESS | PARTIAL | FAILED}}
- Self-healed: {{yes — what was healed | no}}
- Iterations used: {{N}} / {{N max}}
- Bottleneck: {{phase that struggled or "none"}}
- Suggestion: {{one-line improvement idea for /evolve, or "none"}}Only log if the memory directory exists. Skip silently if not found. Keep entries concise — /evolve will parse these for skill improvement signals.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.