Coordinate a full accessibility audit workflow across multiple a11y skills.
Coordinates the complete accessibility audit workflow by directing AI to use specialized a11y skills in sequence.
This workflow runs autonomously without stopping. Do NOT:
Execute all three stages in a single continuous run. The user has already requested an audit—that is your authorization to complete the entire workflow.
┌─────────────────────────────────────────────────────────────┐
│ AUTONOMOUS WORKFLOW │
│ No human-in-the-loop required │
└─────────────────────────────────────────────────────────────┘
│
┌─────────────────┼─────────────────┐
▼ ▼ ▼
┌───────────┐ ┌───────────┐ ┌───────────┐
│ Stage 1 │───►│ Stage 2 │───►│ Stage 3 │
│ Analysis │ │Remediation│ │Validation │
└───────────┘ └───────────┘ └───────────┘
│ │ │
Static → Auto Compare & Re-test with
then compare apply fixes axe-core again
┌─────────────────────────────────────────────────────────────┐
│ 1. STATIC ANALYSIS (web-standards) ←── Initial Scan │
│ - Catch structural issues early │
│ - Identify patterns needing attention │
│ - Build context for automated testing │
├─────────────────────────────────────────────────────────────┤
│ 2. AUTOMATED TESTING (axe-core) ←── Runtime Validation │
│ - Violations = confirmed issues │
│ - Incomplete = needs manual review │
│ - Tests actual rendered state │
├─────────────────────────────────────────────────────────────┤
│ 3. COMPARE RESULTS ←── Determine Strategy │
│ - Both agree = high confidence, auto-fix │
│ - Only axe-core = runtime issue, auto-fix │
│ - Only static = potential issue, report for review │
└─────────────────────────────────────────────────────────────┘
Before running an audit, ensure the a11y-base-web skill has been loaded. It provides foundational patterns all other skills rely on.
Run static analysis first to identify potential issues, then validate with automated testing, then compare results to plan remediation.
Start with static code analysis using the web-standards skill to catch structural issues early:
This gives you a preliminary list of potential issues and builds context for what to look for in automated testing.
Next, run axe-core via Playwright to validate against the actual rendered page. Read and apply the a11y-tester skill:
python3 -m http.server)a11y-tester skill against the target URL (or local server URL)violations and incomplete arrays from resultsDo not call low-level browser tools directly from the orchestrator unless a11y-tester is unavailable.
Note: The a11y-tester skill returns raw violations when called by the orchestrator. Issue formatting is handled separately by the a11y-issue-writer skill if needed.
Automated testing catches issues static analysis cannot:
Even in an autonomous workflow, some criteria cannot be fully proven by static + axe-core. Always add a “Manual Review Queue” section to the report, including (at minimum):
If automated evidence is insufficient, categorize as “⚠️ Needs Manual Review” rather than claiming “Fixed”.
Compare findings from both methods to determine the best remediation strategy:
| Scenario | Confidence | Action |
|---|---|---|
| Both agree (static + axe-core) | High | Auto-fix with confidence |
| axe-core only | High | Auto-fix (runtime-confirmed issue) |
| Static only | Medium | Report as potential issue; may need manual review |
| axe-core incomplete | Needs review | Flag for manual testing |
Remediation priority:
Progress output:
🔍 Stage 1: Analyzing [target]
├─ Running static analysis (web-standards)...
│ └─ Found X potential issues
├─ Starting local server...
├─ Running automated tests (axe-core via Playwright)...
│ └─ Found Y violations, Z incomplete
├─ Comparing results...
│ └─ X confirmed by both, Y axe-only, Z static-only
└─ ✓ Remediation plan ready
Proceed immediately to Stage 2.
Immediately after Stage 1 completes, proceed to Stage 2. Do not stop. Do not ask permission.
For each issue, collaborate with specialized skills to determine the best fix, then apply it.
Before applying any fix, use axe-core recommendations as the primary guidance:
┌─────────────────────────────────────────────────────────────┐
│ REMEDIATION WORKFLOW │
├─────────────────────────────────────────────────────────────┤
│ Issue from Stage 1 │
│ │ │
│ ▼ │
│ ┌─────────────────────────────────────────────────┐ │
│ │ axe-core recommendations (help, helpUrl, │ │
│ │ failureSummary) ←── Primary Guidance │ │
│ └──────────────────────┬──────────────────────────┘ │
│ │ │
│ ▼ │
│ ┌─────────────────────────────────────────────────┐ │
│ │ MCP Resources (if available): │ │
│ │ - WCAG guidelines & success criteria │ │
│ │ - ARIA roles, states, properties │ │
│ │ - Component accessibility patterns │ │
│ └──────────────────────┬──────────────────────────┘ │
│ │ │
│ ┌───────────────┴───────────────┐ │
│ ▼ ▼ │
│ ┌─────────────┐ ┌─────────────┐ │
│ │a11y-personas│ │ Apply Fix │ │
│ │ -mcp │ │ to Code │ │
│ └─────────────┘ └─────────────┘ │
└─────────────────────────────────────────────────────────────┘
Note: For detailed WCAG criteria, ARIA specifications, and component patterns, use MCP servers if available. Skills focus on actions; MCP provides resources.
For each issue identified in Stage 1:
Start with axe-core recommendations — The axe-core results include remediation guidance:
help: Brief description of how to fixhelpUrl: Link to detailed Deque University documentationnodes[].failureSummary: Specific fix instructions per elementIdentify the component type — What kind of element is this? (button, accordion, form field, etc.)
Query MCP resources if available — For additional context:
Query a11y-personas-mcp — Understand user impact:
list-personas() → Returns all 69 personasget-personas(["blindness-screen-reader-nvda"]) → Returns specific persona detailsApply the fix — Based on axe-core guidance and MCP resources:
Verify no visual impact — Before applying:
Clarification: Some accessibility fixes may require visible changes to be truly effective (e.g., strengthening focus indication). If a fix materially affects visuals, do not silently change design; instead:
Fixes must be invisible to sighted users. The page design MUST NOT change visually. Accessibility improvements happen "under the hood" through:
If a fix would change the visual design, flag it for manual review instead of applying it.
Only fix issues in code that already exists. Do NOT:
<h1>, <h2>, etc.) that weren't in the original code<header>, <nav>, <footer>) that weren't thereDO:
<div onclick> to <button>)aria-expanded, aria-label, etc.)For each fixable issue, document:
### Issue #N: [Brief description]
**axe-core Guidance:**
- Rule: [rule ID]
- Help: [help text]
- Deque Docs: [helpUrl]
- Fix suggestion: [failureSummary]
**WCAG:** [Success criterion if known]
**Personas affected:** [Query a11y-personas-mcp]
**Before:**
```html
[original code]
After:
[fixed code]
For complex issues requiring manual review, document:
- Why auto-fix isn't appropriate
- Recommended approach for developer
**Progress output:**
🔧 Stage 2: Applying fixes ├─ Issue #1: [description] │ ├─ axe-core recommends: [fix suggestion] │ ├─ Checking personas... [X users affected] │ └─ ✓ Fix applied ├─ Issue #2: [description] │ └─ ... └─ ✓ Applied X fixes (Y need manual review)
**Proceed immediately to Stage 3.**
## Stage 3: Validation
**Immediately after Stage 2 completes, proceed to Stage 3.** Do not stop. Do not ask permission.
Verify that applied fixes resolve the issues.
### Validation Process
1. **Re-run tests** - Use `a11y-tester` skill to re-test the modified code (navigate and run axe-core again)
2. **Verify fixes resolved issues** - Compare before/after axe-core results
3. **Categorize results:**
- ✅ Fixed - Issue no longer detected
- ⚠️ Needs Manual Review - Cannot be automatically verified
- ❌ Still Failing - Fix did not resolve the issue
**Progress output:**
✅ Stage 3: Validating fixes ├─ Re-running accessibility tests... ├─ Checking acceptance criteria... └─ ✓ X/Y issues resolved
📄 Report complete
**Output the final report. The workflow is now complete.**
## Report Template
Generate the final report using this structure:
```markdown
# Accessibility Remediation Report
**File:** [filename or URL]
**Date:** [current date]
**Status:** [emoji] X/Y confirmed issues resolved
## Summary
| Source | Issues | Fixed | Manual Review |
|--------|--------|-------|---------------|
| axe-core Violations | X | X | X |
| axe-core Incomplete | X | - | X |
| **Confirmed Total** | **X** | **X** | **X** |
## Resolved Issues (Confirmed by axe-core)
### Issue #N: [Brief description]
- **axe-core Rule:** [rule ID]
- **WCAG:** [SC number and name]
- **Severity:** [Critical/Serious/Moderate/Minor]
- **Impact:** [One sentence describing user impact]
- **Persona:** Affects users like [persona name] who [brief description]
**Before:**
```html
[original code]
After:
[fixed code]
Pattern: [MagentaA11y link]
These issues were identified by static code analysis but NOT confirmed by automated testing. Review and address as needed:
| Metric | Result |
|---|---|
| axe-core violations re-tested | X |
| Confirmed fixed | X |
| Still failing | X |
| Incomplete (manual review) | X |
| Static-only (not auto-fixed) | X |
## Handling Different Input Types
### HTML File
Run full static analysis. Runtime testing if file can be served.
### URL
Run both static (fetch source) and runtime (Playwright) analysis.
### Code Snippet
Run static analysis only. Provide fixes inline.
### Component/Framework Code
Identify framework (React, Vue, etc.) and adapt patterns accordingly.
## Quick Reference: Skill Delegation
| Task | Skill | Key Information |
|------|-------|-----------------|
| Static code analysis | `web-standards` | HTML/ARIA/semantic issues |
| Runtime testing | `a11y-tester` | axe-core violations (raw format) |
| Format issues | `a11y-issue-writer` | Standardized issue reports from violations |
| Generate fixes | `a11y-remediator` | Applies accessibility fixes |
| Verify fixes | `a11y-validator` | Confirms issues resolved |
| Base patterns | `a11y-base-web` | Foundational requirements |
## MCP Resources (External)
For detailed reference data, query these MCP servers:
| Resource | MCP Server | Repository | Example Tools |
|----------|------------|------------|---------------|
| WCAG guidelines | `wcag-mcp` | [github.com/joe-watkins/wcag-mcp](https://github.com/joe-watkins/wcag-mcp) | `get-criterion("4.1.2")`, `get-techniques-for-criterion("1.3.1")` |
| ARIA specs | `aria-mcp` | [github.com/joe-watkins/aria-mcp](https://github.com/joe-watkins/aria-mcp) | `get-role("button")`, `validate-role-attributes(...)` |
| Component patterns | `magentaa11y-mcp` | [github.com/joe-watkins/magentaa11y-mcp](https://github.com/joe-watkins/magentaa11y-mcp) | `get_web_component("button")`, `get_component_developer_notes("modal")` |
| User personas | `a11y-personas-mcp` | [github.com/joe-watkins/a11y-personas-mcp](https://github.com/joe-watkins/a11y-personas-mcp) | `list-personas()`, `get-personas(["blindness-screen-reader-nvda"])` |
| Issue templates | `accessibility-issues-template-mcp` | [github.com/joe-watkins/accessibility-issues-template-mcp](https://github.com/joe-watkins/accessibility-issues-template-mcp) | `format_axe_violation(...)`, `list_issue_templates()`, `get_issue_template(...)` |
> **Philosophy:** Skills are "doers" — they perform actions. MCP servers are "resources" — they provide reference data. Skills query MCP servers when they need specifications or patterns.
## Skills and MCP Integration
### Skills (Actions)
- **a11y-tester**: Runs axe-core tests and returns raw violations
- **a11y-issue-writer**: Formats violations into standardized issue reports (uses accessibility-issues-template-mcp)
- **a11y-remediator**: Applies fixes to code
- **a11y-validator**: Validates fixes
- **web-standards**: Performs static code analysis
**Workflow:** a11y-tester collects violations → a11y-issue-writer formats them (optional) → a11y-remediator fixes them → a11y-validator confirms
### MCP Servers (Resources)
MCP servers provide reference data that skills query during execution:
- **accessibility-issues-template-mcp**: Templates for formatting violations as issues (used by a11y-issue-writer)
- **wcag-mcp**: WCAG success criteria and techniques
- **aria-mcp**: ARIA roles, states, properties
- **magentaa11y-mcp**: Component accessibility patterns
- **a11y-personas-mcp**: User personas and impact information