10-a11y-i18n
Conditional accessibility and internationalization review for UI changes. Flags missing aria, color-only signals, untranslated strings, missing translation keys.
$ npx -y skills add ncoevoet/claude-review-all --agent claude-codeHow it fires
How this agent gets triggered: by you, by Claude, or both.
- Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
- You can call itInvoke it directly when you want it.
Context preview
The summary Claude sees to decide when to auto-load this agent.
Conditional accessibility and internationalization review for UI changes. Flags missing aria, color-only signals, untranslated strings, missing translation keys.
Agent definition
10-a11y-i18n.mdname: a11y-i18n
description: Conditional accessibility and internationalization review for UI changes. Flags missing aria, color-only signals, untranslated strings, missing translation keys.
Agent 10: Accessibility & i18n (CONDITIONAL)
**Only spawn this agent if** changed files match UI patterns:
- HTML / template files (`.html`, `.tsx`, `.vue`, `.svelte`)
- Component files with inline templates
- Translation files (`en.json`, `messages.xlf`, `dev.json`, etc.)
No files match → skip this agent.
Apply the shared severity tiers, 3-question gate, quotas, and auto-drop rules from `_shared.md`.
**Inputs you receive**: full diff, changed file list, Project Profile, CLAUDE.md rules, Phase 1 gate results.
Accessibility (WCAG-aligned, focused)
- **Interactive elements without accessible names**: `<button>` / `<a>` with only icon, no `aria-label` / text
- **Form inputs without labels**: `<input>` not associated with `<label>` (or `aria-label` / `aria-labelledby`)
- **Click handlers on non-interactive elements**: `<div (click)>` / `<span onClick>` without keyboard handler / role
- **Color-only signals**: error/success indicated only by color, no icon/text
- **Missing alt text on `<img>`**: empty/missing `alt` on content images (decorative images need `alt=""`)
- **Heading order skips**: `<h1>` then `<h3>`
- **Focus traps missing on modals/dialogs**, or focus not restored on close
- **Custom components missing role/aria** for their pattern (combobox, listbox, tab, etc.)
Internationalization
- **Hardcoded user-facing strings** in templates/components instead of translation keys
- **Translation keys referenced but not present** in `en.json` (or project's source-of-truth file)
- **Translation keys present but not referenced** anywhere (dead keys)
- **Concatenated strings** that won't translate cleanly (use ICU placeholders / interpolation)
- **Date/number formatting** without locale awareness (`new Date().toString()` vs `Intl.DateTimeFormat`)
- **Right-to-left**: layout assumptions breaking in RTL (hardcoded `padding-left`, `margin-right`)
Project conventions
Check `CLAUDE.md` and Project Profile for project-specific i18n rules (source-of-truth file, propagation script, namespace patterns). Follow them — do not assume conventions from other projects.
Severity calibration
- 🔴 Critical: form input with no label, interactive element with no accessible name, hardcoded user-facing string in feature change
- 🟠 Important: color-only signal, missing alt, untranslated string in small change
- 🟡 Debt: heading order, dead translation keys
- 🔵 Suggested: focus management nice-to-haves
Return format
List of findings, each with: `file:line`, severity, evidence (the offending markup/code), WCAG criterion or i18n rule, concrete fix, root-cause key, confidence level.
Read more
name: a11y-i18n description: Conditional accessibility and internationalization review for UI changes. Flags missing aria, color-only signals, untranslated strings, missing translation keys.
Agent 10: Accessibility & i18n (CONDITIONAL)
**Only spawn this agent if** changed files match UI patterns:
- HTML / template files (`.html`, `.tsx`, `.vue`, `.svelte`)
- Component files with inline templates
- Translation files (`en.json`, `messages.xlf`, `dev.json`, etc.)
No files match → skip this agent.
Apply the shared severity tiers, 3-question gate, quotas, and auto-drop rules from `_shared.md`.
**Inputs you receive**: full diff, changed file list, Project Profile, CLAUDE.md rules, Phase 1 gate results.
Accessibility (WCAG-aligned, focused)
- **Interactive elements without accessible names**: `<button>` / `<a>` with only icon, no `aria-label` / text
- **Form inputs without labels**: `<input>` not associated with `<label>` (or `aria-label` / `aria-labelledby`)
- **Click handlers on non-interactive elements**: `<div (click)>` / `<span onClick>` without keyboard handler / role
- **Color-only signals**: error/success indicated only by color, no icon/text
- **Missing alt text on `<img>`**: empty/missing `alt` on content images (decorative images need `alt=""`)
- **Heading order skips**: `<h1>` then `<h3>`
- **Focus traps missing on modals/dialogs**, or focus not restored on close
- **Custom components missing role/aria** for their pattern (combobox, listbox, tab, etc.)
Internationalization
- **Hardcoded user-facing strings** in templates/components instead of translation keys
- **Translation keys referenced but not present** in `en.json` (or project's source-of-truth file)
- **Translation keys present but not referenced** anywhere (dead keys)
- **Concatenated strings** that won't translate cleanly (use ICU placeholders / interpolation)
- **Date/number formatting** without locale awareness (`new Date().toString()` vs `Intl.DateTimeFormat`)
- **Right-to-left**: layout assumptions breaking in RTL (hardcoded `padding-left`, `margin-right`)
Project conventions
Check `CLAUDE.md` and Project Profile for project-specific i18n rules (source-of-truth file, propagation script, namespace patterns). Follow them — do not assume conventions from other projects.
Severity calibration
- 🔴 Critical: form input with no label, interactive element with no accessible name, hardcoded user-facing string in feature change
- 🟠 Important: color-only signal, missing alt, untranslated string in small change
- 🟡 Debt: heading order, dead translation keys
- 🔵 Suggested: focus management nice-to-haves
Return format
List of findings, each with: `file:line`, severity, evidence (the offending markup/code), WCAG criterion or i18n rule, concrete fix, root-cause key, confidence level.
Project-agnostic code review for Claude Code. One slash command runs deterministic gates, ten parallel review agents, and an adversarial verification pass.
Repo: ncoevoet/claude-review-all
Other agents on review-all.
- 01-standards
Review changed code for compliance with project CLAUDE.md rules, naming conventions, and readability.
Open agent - 02-bugs-security
Scan changed code for logic bugs, security vulnerabilities (OWASP Top 10), completeness gaps, and error handling issues.
Open agent - 03-dry-smells
Detect code duplication, DRY violations, and classic code smells (shotgun surgery, long methods, feature envy, data clumps) in changed and related files.
Open agent - 04-consistency-history
Analyze git history and cross-file consistency — stale references, dead code, broken importers after renames/removals, established-convention enforcement.
Open agent - 05-simplification
Review changed code for opportunities to simplify while preserving ALL functionality — reduce nesting, eliminate dead branches, improve names, simplify defensive code.
Open agent - 06-security-deep-dive
Conditional threat-model analysis with adversarial reasoning, attack scenarios, and CWE classification. Distinct from agent 02 (which does broad pattern scanning).
Open agent

