Reviews generated frontend code for WCAG accessibility compliance. Always runs before completion. Checks semantic HTML, ARIA, keyboard navigation, color contrast, forms, images, and dynamic content.
How this skill is triggered — by the user, by Claude, or both
Slash command
/frontend-coding-agent:accessibility-reviewThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Runs automatically before every code-review completion. Reviews all generated and modified frontend files against the configured WCAG standard.
Runs automatically before every code-review completion. Reviews all generated and modified frontend files against the configured WCAG standard.
| Value | Description |
|---|---|
wcag-2.1-a | WCAG 2.1 Level A |
wcag-2.1-aa | WCAG 2.1 Level AA |
wcag-2.2-aa | WCAG 2.2 Level AA (default) |
wcag-2.2-aaa | WCAG 2.2 Level AAA |
Configure via .frontend-agent.json:
{
"accessibility": {
"standard": "wcag-2.2-aa"
}
}
<main>, <nav>, <aside>, <footer> where appropriate. Missing <main> is a blocker.<ul> / <ol> + <li>, not <div> chains.<button> or <a href>, not <div onClick> / <span onClick>.aria-label or aria-labelledby. Missing label is a blocker.role="button" on <button>). Flag as warning.aria-hidden="true" must not be placed on focusable elements.tabindex="0" for custom interactive elements; never use positive tabindex values (warning).style props or CSS-in-JS without verified contrast ratio. Severity: warning, requires manual verification.<input>, <select>, and <textarea> must have an associated <label> via htmlFor / id pair. Missing association is a blocker.aria-describedby. Missing link is a blocker.aria-required="true" or the HTML required attribute. Missing is a warning.autocomplete) should be present on common fields (name, email, password). Missing is a nit.<img> element must have an alt attribute. Missing alt is a blocker.alt="" and optionally aria-hidden="true". Descriptive alt on decorative images is a warning.aria-label or a visually hidden <title>. Missing label is a blocker.<video> and <audio> elements must not have autoplay without muted. Auto-playing media with sound is a blocker.<track kind="captions">). Missing captions is a warning.aria-live region (polite for non-urgent, assertive for critical alerts only). Missing live region is a blocker.aria-label or visually hidden text (e.g., "Loading..."). Missing announcement is a warning.aria-live="polite" region. Missing announcement is a blocker.aria-busy="true" must be set on containers actively loading content.Produce a structured list grouped by severity, then by file.
[BLOCKER] Semantic HTML — Missing <main> landmark
File: src/pages/Home.tsx, line 12
Fix: Wrap page content in <main>
[BLOCKER] Forms — <input id="email"> has no associated <label>
File: src/components/LoginForm.tsx, line 34
Fix: Add <label htmlFor="email">Email</label> or aria-label on the input
[WARNING] Color & Contrast — Hardcoded color #aaa on white background; contrast unverified
File: src/components/Badge.tsx, line 8
Fix: Verify contrast ratio >= 4.5:1 or replace with a design token
[WARNING] ARIA — Redundant role="navigation" on <nav> element
File: src/components/Sidebar.tsx, line 5
Fix: Remove role attribute; <nav> is already a landmark
[NIT] Forms — Missing autocomplete="email" on email input
File: src/components/SignupForm.tsx, line 19
Fix: Add autocomplete="email" attribute
Blockers must be resolved before the skill reports success. Warnings and nits are reported but do not block completion.
npx claudepluginhub gagandeepp/software-agent-teams --plugin frontend-coding-agentGuides completion of development work by verifying tests, detecting environment, and presenting structured options for merge, PR, or cleanup.
Enforces test-driven development: write failing test first, then minimal code to pass. Use when implementing features or bugfixes.
Guides creation and editing of skills using test-driven development with pressure scenarios and subagents to verify agent compliance.