К основному содержанию
команда CX Codex

accessibility-audit — команда для Claude Code: аудит и установка

Проверяет UI-код на соответствие WCAG и сохраняет отчёт с найденными проблемами. Подходит для аудита компонента, страницы или приложения.

Установить в Claude Code · Через маркетплейс плагинов Все способы и платформы ↓
/plugin marketplace add wshobson/agents
/plugin install ui-design@claude-code-workflows
Открыть на GitHub

Что делает accessibility-audit

Команда проверяет UI-код по критериям WCAG 2.1 и ищет проблемы с альтернативным текстом, семантикой, клавиатурной навигацией, фокусом, формами, ARIA и динамическим содержимым. Она также выявляет распространённые анти-паттерны в JSX и HTML, включая клики на div, пропущенные alt и некорректный tabIndex.

Перед аудитом команда создаёт .ui-design/audits/, загружает сведения из conductor/tech-stack.md и .ui-design/design-system.json, а затем формирует отчёт в .ui-design/audits/{audit_id}.md. При наличии цветовых токенов или CSS она проверяет контраст. Если уровень не задан, используется WCAG 2.1 AA, поэтому для строгой проверки нужно передать --level AAA явно.

Какие задачи решает

  • проверить компонент на требования WCAG
  • найти проблемы с клавиатурной навигацией
  • выявить ошибки в ARIA и формах
  • проверить контраст текста и фона
  • сохранить отчёт аудита в Markdown

Примеры запросов агенту

  • Запусти /accessibility-audit для всего приложения и проверь уровень AA.
  • Проведи /accessibility-audit src/components/Button.tsx --level AAA.
  • Проверь компонент CheckoutForm на клавиатурную доступность и ошибки ARIA.

Как установить accessibility-audit

1Через маркетплейс плагинов

/plugin marketplace add wshobson/agents
/plugin install ui-design@claude-code-workflows

2Вручную: положить файлы

.claude/commands/accessibility-audit.md

Вызов — /accessibility-audit. Для всех проектов — ~/.claude/commands/

Вопросы о accessibility-audit

Как установить accessibility-audit в Claude Code?

Добавьте маркетплейс командой /plugin marketplace add wshobson/agents, установите плагин через /plugin install ui-design@claude-code-workflows, затем используйте файл .claude/commands/accessibility-audit.md.

Что делает accessibility-audit?

Команда анализирует UI-код по критериям WCAG, проверяет типовые проблемы доступности, контраст и ARIA, а результат сохраняет в .ui-design/audits/{audit_id}.md.

Как выбрать уровень проверки WCAG?

Передайте флаг --level AA или --level AAA. Без флага команда использует уровень AA.

Исходный текст

accessibility-audit.md · MIT
---
description: "Audit UI code for WCAG compliance"
argument-hint: "[file-path|component-name|--level AA|AAA]"
---

# Accessibility Audit

Comprehensive audit of UI code for WCAG 2.1/2.2 compliance. Identifies accessibility issues and provides actionable remediation guidance.

## Pre-flight Checks

1. Check if `.ui-design/` directory exists:
   - If not: Create `.ui-design/` directory
   - Create `.ui-design/audits/` subdirectory for audit results

2. Load project context:
   - Check for `conductor/tech-stack.md` for framework info
   - Check for `.ui-design/design-system.json` for color tokens
   - Detect testing framework for a11y test suggestions

## Target and Level Configuration

### If argument provided:

- Parse for file path or component name
- Parse for `--level` flag (AA or AAA)
- Default to WCAG 2.1 Level AA if not specified

### If no argument:

**Q1: Audit Target**

```
What would you like to audit?

1. A specific component (provide name or path)
2. A page/route (provide path)
3. All components in a directory
4. The entire application
5. Recent changes only (last commit)

Enter number or provide a file path:
```

**Q2: Compliance Level**

```
What WCAG compliance level should I audit against?

1. Level A   - Minimum accessibility (must-fix issues)
2. Level AA  - Standard compliance (recommended, most common target)
3. Level AAA - Enhanced accessibility (highest standard)

Note: Each level includes all requirements from previous levels.

Enter number:
```

**Q3: Focus Areas (optional)**

```
Any specific areas to focus on? (Press enter to audit all)

1. Color contrast and visual presentation
2. Keyboard navigation and focus management
3. Screen reader compatibility
4. Forms and input validation
5. Dynamic content and ARIA
6. All areas

Enter numbers (comma-separated) or press enter:
```

## State Management

Create `.ui-design/audits/audit_state.json`:

```json
{
  "audit_id": "{target}_{YYYYMMDD_HHMMSS}",
  "target": "{file_path_or_scope}",
  "wcag_level": "AA",
  "focus_areas": ["all"],
  "status": "in_progress",
  "started_at": "ISO_TIMESTAMP",
  "files_audited": 0,
  "issues_found": {
    "critical": 0,
    "serious": 0,
    "moderate": 0,
    "minor": 0
  },
  "criteria_checked": 0,
  "criteria_passed": 0
}
```

## Audit Execution

### 1. File Discovery

Identify all files to audit:

- If single file: Audit that file
- If component: Find all related files (component, styles, tests)
- If directory: Recursively find UI files (`.tsx`, `.vue`, `.svelte`, etc.)
- If application: Audit all component and page files

### 2. Static Code Analysis

For each file, check against WCAG criteria:

#### Perceivable (WCAG 1.x)

**1.1 Text Alternatives:**

- [ ] Images have `alt` attributes
- [ ] Decorative images use `alt=""` or `role="presentation"`
- [ ] Complex images have extended descriptions
- [ ] Icon buttons have accessible names

**1.2 Time-based Media:**

- [ ] Videos have captions
- [ ] Audio has transcripts
- [ ] Media players are keyboard accessible

**1.3 Adaptable:**

- [ ] Semantic HTML structure (headings, lists, landmarks)
- [ ] Proper heading hierarchy (h1 > h2 > h3)
- [ ] Form inputs have associated labels
- [ ] Tables have proper headers
- [ ] Reading order is logical

**1.4 Distinguishable:**

- [ ] Color contrast meets requirements (4.5:1 normal, 3:1 large)
- [ ] Color is not sole means of conveying information
- [ ] Text can be resized to 200%
- [ ] Focus indicators are visible
- [ ] Content reflows at 320px width (AA)

#### Operable (WCAG 2.x)

**2.1 Keyboard Accessible:**

- [ ] All interactive elements are keyboard accessible
- [ ] No keyboard traps
- [ ] Focus order is logical
- [ ] Custom widgets follow ARIA patterns

**2.2 Enough Time:**

- [ ] Time limits can be extended/disabled
- [ ] Auto-updating content can be paused
- [ ] No content times out unexpectedly

**2.3 Seizures:**

- [ ] No content flashes more than 3 times/second
- [ ] Animations can be disabled (prefers-reduced-motion)

**2.4 Navigable:**

- [ ] Skip links present
- [ ] Page has descriptive title
- [ ] Focus visible on all elements
- [ ] Link purpose is clear
- [ ] Multiple ways to find pages

**2.5 Input Modalities:**

- [ ] Touch targets are at least 44x44px (AAA: 44px, AA: 24px)
- [ ] Functionality not dependent on motion
- [ ] Dragging has alternative

#### Understandable (WCAG 3.x)

**3.1 Readable:**

- [ ] Language is specified (`lang` attribute)
- [ ] Unusual words are defined
- [ ] Abbreviations are expanded

**3.2 Predictable:**

- [ ] Focus doesn't trigger unexpected changes
- [ ] Input doesn't trigger unexpected changes
- [ ] Navigation is consistent
- [ ] Components behave consistently

**3.3 Input Assistance:**

- [ ] Error messages are descriptive
- [ ] Labels or instructions provided
- [ ] Error suggestions provided
- [ ] Important submissions can be reviewed

#### Robust (WCAG 4.x)

**4.1 Compatible:**

- [ ] HTML validates (no duplicate IDs)
- [ ] Custom components have proper ARIA
- [ ] Status messages announced to screen readers

### 3. Pattern Detection

Identify common accessibility anti-patterns:

```javascript
// Anti-patterns to detect
const antiPatterns = [
  // Missing alt text
  /<img(?![^>]*alt=)[^>]*>/,

  // onClick without keyboard handler
  /onClick={[^}]+}(?!.*onKeyDown)/,

  // Div/span with click handlers (likely needs role)
  /<(?:div|span)[^>]*onClick/,

  // Non-semantic buttons
  /<(?:div|span)[^>]*role="button"/,

  // Missing form labels
  /<input(?![^>]*(?:aria-label|aria-labelledby|id))[^>]*>/,

  // Positive tabindex (disrupts natural order)
  /tabIndex={[1-9]/,

  // Empty links
  /<a[^>]*>[\s]*<\/a>/,

  // Missing lang attribute
  /<html(?![^>]*lang=)/,

  // Autofocus (usually bad for a11y)
  /autoFocus/,
];
```

### 4. Color Contrast Analysis

If design tokens or CSS available:

- Extract color combinations used in text/background
- Calculate contrast ratios using WCAG formula
- Flag combinations that fail requirements:
  - Normal text: 4.5:1 (AA), 7:1 (AAA)
  - Large text (18pt+ or 14pt bold): 3:1 (AA), 4.5:1 (AAA)
  - UI components: 3:1 (AA)

### 5. ARIA Validation

Check ARIA usage:

- Verify ARIA roles are valid
- Check required ARIA attributes are present
- Verify ARIA values are valid
- Check for redundant ARIA (e.g., `role="button"` on `<button>`)
- Validate ARIA references (aria-labelledby, aria-describedby)

## Output Format

Generate audit report in `.ui-design/audits/{audit_id}.md`:

````markdown
# Accessibility Audit Report

**Audit ID:** {audit_id}
**Date:** {YYYY-MM-DD HH:MM}
**Target:** {target}
**WCAG Level:** {level}
**Standard:** WCAG 2.1

## Executive Summary

**Compliance Status:** {Passing | Needs Improvement | Failing}

| Severity | Count | % of Issues |
| -------- | ----- | ----------- |
| Critical | {n}   | {%}         |
| Serious  | {n}   | {%}         |
| Moderate | {n}   | {%}         |
| Minor    | {n}   | {%}         |

**Criteria Checked:** {n}
**Criteria Passed:** {n} ({%})
**Files Audited:** {n}

## Critical Issues (Must Fix)

These issues prevent users with disabilities from using the interface.

### Issue 1: {Title}

**WCAG Criterion:** {number} - {name} (Level {A|AA|AAA})
**Severity:** Critical
**Location:** `{file}:{line}`
**Element:** `{element_snippet}`

**Problem:**
{Description of the issue}

**Impact:**
{Who is affected and how}

**Remediation:**
{Step-by-step fix instructions}

**Code Fix:**

```{language}
// Before
{current_code}

// After
{fixed_code}
```
````

**Testing:**

- Manual: {how to manually verify}
- Automated: {suggested test}

---

### Issue 2: ...

## Serious Issues

These issues create significant barriers for some users.

### Issue 3: ...

## Moderate Issues

These issues may cause difficulty for some users.

### Issue 4: ...

## Minor Issues

These are best practice improvements.

### Issue 5: ...

## Passed Criteria

The following WCAG criteria passed:

| Criterion | Name                   | Level |
| --------- | ---------------------- | ----- |
| 1.1.1     | Non-text Content       | A     |
| 1.3.1     | Info and Relationships | A     |
| ...       | ...                    | ...   |

## Recommendations

### Quick Wins (< 1 hour each)

1. {Quick fix 1}
2. {Quick fix 2}

### Medium Effort (1-4 hours each)

1. {Medium fix 1}
2. {Medium fix 2}

### Significant Effort (> 4 hours)

1. {Larger fix 1}

## Testing Resources

### Automated Testing

Add these tests to catch regressions:

```javascript
// Example jest-axe test
import { axe, toHaveNoViolations } from "jest-axe";

expect.extend(toHaveNoViolations);

test("component has no accessibility violations", async () => {
  const { container } = render(<Component />);
  const results = await axe(container);
  expect(results).toHaveNoViolations();
});
```

### Manual Testing Checklist

- [ ] Navigate entire page using only keyboard
- [ ] Test with screen reader (VoiceOver/NVDA)
- [ ] Zoom to 200% and verify usability
- [ ] Test with high contrast mode
- [ ] Verify focus indicators are visible
- [ ] Test with prefers-reduced-motion

### Recommended Tools

- axe DevTools browser extension
- WAVE Web Accessibility Evaluator
- Lighthouse accessibility audit
- Color contrast analyzers

---

_Generated by UI Design Accessibility Audit_
_WCAG Reference: https://www.w3.org/WAI/WCAG21/quickref/_

````

## Completion

Update `audit_state.json`:

```json
{
  "status": "complete",
  "completed_at": "ISO_TIMESTAMP",
  "compliance_status": "needs_improvement",
  "issues_found": {
    "critical": 2,
    "serious": 5,
    "moderate": 8,
    "minor": 3
  }
}
````

Display summary:

```
Accessibility Audit Complete!

Target: {target}
WCAG Level: {level}
Compliance Status: {status}

Issues Found:
  - {n} Critical (must fix)
  - {n} Serious
  - {n} Moderate
  - {n} Minor

Full report: .ui-design/audits/{audit_id}.md

What would you like to do next?
1. View details for critical issues
2. Start fixing issues (guided)
3. Generate automated tests
4. Export report for stakeholders
5. Audit another component

Enter number:
```

## Guided Fix Mode

If user selects "Start fixing issues":

```
Let's fix accessibility issues starting with critical ones.

Issue 1 of {n}: {Issue Title}
WCAG {criterion}: {criterion_name}
Location: {file}:{line}

{Show current code}

The fix is:
{Explain the fix}

Should I:
1. Apply this fix automatically
2. Show me the fixed code first
3. Skip this issue
4. Stop fixing

Enter number:
```

Apply fixes one at a time, re-validating after each fix.

## Error Handling

- If file not found: Suggest alternatives, offer to search
- If not UI code: Explain limitation, suggest correct target
- If color extraction fails: Note in report, suggest manual check
- If audit incomplete: Save partial results, offer to resume

© Seth Hobson · MIT · wshobson/agents

Похожие слэш-команды

Все слэш-команды по теме «Фронтенд и UI» →

Из того же набора405

Весь набор →
incident-responder Субагент координирует локализацию и устранение сбоев на продакшене по практикам SRE. Помогает быстро стабилизировать сервисы и составить разбор инцидента. CX Codex 265установок find Ищет референсы в галерее Meigen по ключевым словам и сразу показывает картинки с короткими выдержками промптов. CX Codex 210установок social-evidence-research Собирает проверяемый отчёт о обсуждении продукта или темы в соцплатформах. Пригодится для поиска, сравнения и аудита социальных данных. CX Codex 201установок design-review Проверяет готовый интерфейс на проблемы вёрстки, юзабилити и кода, а потом складывает отчёт с рекомендациями в файл. CX Codex ★ 41 729звёзд репо standup-notes Собирает заметки к асинхронному стендапу из коммитов, тикетов Jira и заметок Obsidian. Пригодится, когда команда разбросана по часовым поясам. CX Codex ★ 41 729звёзд репо tdd-red Слэш-команда пишет только тесты, которые обязаны падать, и не трогает рабочий код. Первый шаг TDD, когда нужно зафиксировать поведение до реализации. CX Codex ★ 41 729звёзд репо rust-project Слэш-команда разворачивает структуру Rust-проекта: бинарник, библиотеку, воркспейс или веб-API на Axum. Пригодится, когда нужен старт без ручной раскладки модулей. CX Codex ★ 41 729звёзд репо market-opportunity Слэш-команда проводит интерактивный анализ рынка: считает TAM, SAM и SOM и собирает отчёт в markdown. Пригодится на этапе оценки стартапа. CX Codex ★ 41 729звёзд репо

Спонсоры проекта

Компании, которые помогают держать аналитику открытой