.opencode/skills/a11y-check/SKILL.md
Accessibility audit using axe-core. Checks WCAG 2.1 compliance, keyboard navigation, ARIA attributes, and color contrast.
npx skillsauth add astro44/Autonom8-Agents a11y-checkInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Runs accessibility checks using axe-core engine. Validates WCAG 2.1 AA compliance, keyboard navigation, ARIA usage, and color contrast.
{
"project_dir": "/path/to/project",
"url": "http://localhost:8080",
"pages": ["/", "/about", "/contact"],
"standard": "WCAG21AA",
"checks": ["aria", "color", "keyboard", "structure"]
}
const { AxePuppeteer } = require('@axe-core/puppeteer');
const results = await new AxePuppeteer(page)
.withTags(['wcag2a', 'wcag2aa', 'wcag21aa'])
.analyze();
ARIA:
Color Contrast:
Keyboard:
Structure:
| Impact | Description | WCAG Level | |--------|-------------|------------| | critical | Blocks users entirely | A | | serious | Major barriers | A/AA | | moderate | Difficult to use | AA | | minor | Annoyances | AAA |
{
"skill": "a11y-check",
"status": "pass|fail|warning",
"standard": "WCAG21AA",
"pages_tested": 3,
"summary": {
"critical": 0,
"serious": 2,
"moderate": 5,
"minor": 8
},
"violations": [
{
"id": "color-contrast",
"impact": "serious",
"description": "Elements must have sufficient color contrast",
"wcag": ["1.4.3"],
"nodes": [
{
"target": ".footer-link",
"html": "<a class=\"footer-link\">Privacy</a>",
"failureSummary": "Element has insufficient color contrast of 2.5:1 (foreground: #888, background: #333). Expected ratio of 4.5:1"
}
],
"fix": "Change text color to #bbb or darker background"
}
],
"passes": 45,
"incomplete": 3,
"errors": [],
"next_action": "proceed|fix"
}
| Criterion | Description | Level | |-----------|-------------|-------| | 1.1.1 | Non-text content has alt text | A | | 1.3.1 | Info and relationships | A | | 1.4.3 | Color contrast (4.5:1) | AA | | 2.1.1 | Keyboard accessible | A | | 2.4.1 | Bypass blocks (skip links) | A | | 2.4.4 | Link purpose | A | | 4.1.1 | Parsing (valid HTML) | A | | 4.1.2 | Name, role, value | A |
Any critical violations?
YES → status: "fail", next_action: "fix"
Any serious violations?
YES → status: "fail", next_action: "fix"
Only moderate/minor violations?
YES → status: "warning", next_action: "proceed"
No violations?
YES → status: "pass", next_action: "proceed"
Full accessibility audit:
{
"project_dir": "/projects/oxygen_site",
"url": "http://localhost:8080",
"pages": ["/", "/impact", "/about"],
"standard": "WCAG21AA",
"checks": ["aria", "color", "keyboard", "structure"]
}
Quick color contrast check:
{
"project_dir": "/projects/oxygen_site",
"url": "http://localhost:8080",
"pages": ["/"],
"standard": "WCAG21AA",
"checks": ["color"]
}
Keyboard navigation only:
{
"project_dir": "/projects/oxygen_site",
"url": "http://localhost:8080",
"pages": ["/"],
"checks": ["keyboard"]
}
tools
Generation-time design taste for web UI work. Anti-cliche bans, layout and motion hard rules, and client-intent dials. Advisory only - shapes drafts; declared measured contracts remain the sole gate authority.
development
Scores proposal complexity against codebase surface. Uses proposal text analysis and readiness stats to determine decomposition tier and agent count.
testing
Fast filesystem readiness scan — counts docs, source files, manifests, platform signals. Produces initial ReadinessReport for agent spawning decisions.
testing
Merges bookend agent reports into revised readiness, complexity, and decomposition plan. Produces the final evidence-backed assessment consumed by sprint-architect-agent.