WaveXis Accessibility
Skill2 starsChanged 3 months agoMITView on GitHub
Accessibility auditing with wavexis. a11y tree snapshots, axe-core audits, node traversal, CI gates for WCAG compliance.
- Installs packages
We split this skill into the rules it gives an agent
1 rule. About 0 are common, 1 is distinctive, and 0 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈1
Distinctive · estimate
This author's own choices. Worth a look.
0
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 158
Run axe-core accessibility audits on a page.
≈ “Common” is an estimate: at least 1 in 5 of the 308,232 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
WaveXis Accessibility
Description
Accessibility auditing with wavexis — capture accessibility tree snapshots, inspect individual a11y nodes, traverse ancestors, run axe-core audits, map results to WCAG 2.2 criteria, and enforce CI accessibility gates.
When to Invoke
- Capturing accessibility tree snapshots of a page
- Inspecting individual a11y nodes by ID
- Traversing a11y node ancestors
- Running axe-core accessibility audits
- Mapping audit results to WCAG 2.2 criteria
- Setting up CI accessibility gates
- Checking WCAG compliance for a page
Prerequisites
pip install wavexis[cdp]- Chrome or Edge installed
- Basic familiarity with wavexis CLI (see
wavexis-cli-automationskill)
a11y Commands
a11y_tree — Capture accessibility tree
Capture a full accessibility tree snapshot of the current page or a specific node:
wavexis a11y_tree https://example.coma11y_tree with selector
wavexis a11y_tree https://example.com --selector "main"a11y_tree with output
wavexis a11y_tree https://example.com --output a11y-tree.jsona11y_tree output format
{
"nodes": [
{
"node_id": 1,
"role": "WebArea",
"name": "Example Domain",
"ignored": false,
"child_ids": [2, 3, 4]
},
{
"node_id": 2,
"role": "heading",
"name": "Example Domain",
"level": 1,
"ignored": false,
"child_ids": []
},
{
"node_id": 3,
"role": "link",
"name": "More information...",
"ignored": false,
"child_ids": [],
"focusable": true,
"url": "https://www.iana.org/domains/example"
}
]
}a11y_node — Inspect individual node
Inspect a specific accessibility node by its node ID:
wavexis a11y_node https://example.com --node-id 2a11y_node output
{
"node_id": 2,
"role": "heading",
"name": "Example Domain",
"level": 1,
"ignored": false,
"ignored_reasons": [],
"child_ids": [],
"properties": {
"level": 1,
"browserName": "Example Domain"
}
}a11y_ancestors — Traverse ancestors
Get the ancestor chain of a specific accessibility node:
wavexis a11y_ancestors https://example.com --node-id 3a11y_ancestors output
{
"ancestors": [
{
"node_id": 1,
"role": "WebArea",
"name": "Example Domain"
},
{
"node_id": 5,
"role": "paragraph",
"name": ""
},
{
"node_id": 3,
"role": "link",
"name": "More information..."
}
]
}a11y command options
| Option | Type | Default | Description |
--selector | str | None | CSS selector to scope the tree |
--node-id | int | None | Node ID for a11y_node and a11y_ancestors |
--output | str | stdout | Output file path |
--format | str | json | Output format: json or text |
--wait-for | str | None | Wait for selector before capture |
--timeout | int | 30000 | Timeout in ms |
axe Command — axe-core Audits
Run axe-core accessibility audits on a page.
Basic axe audit
wavexis axe https://example.comaxe with specific rules
wavexis axe https://example.com --rules color-contrast,label,image-altaxe with tags (rule categories)
wavexis axe https://example.com --tags wcag2a,wcag2aa,wcag21aaaxe with output
wavexis axe https://example.com --output axe-results.jsonaxe results format
{
"passes": [
{
"id": "image-alt",
"impact": null,
"tags": ["wcag2a", "cat.images"],
"description": "Images must have alternate text",
"nodes": [
{
"target": ["img.logo"],
"html": "<img src=\"logo.png\" alt=\"Company Logo\">"
}
]
}
],
"violations": [
{
"id": "color-contrast",
"impact": "serious",
"tags": ["wcag2aa", "cat.color"],
"description": "Elements must have sufficient color contrast",
"help": "Elements must meet minimum color contrast ratio thresholds",
"nodes": [
{
"target": [".text-muted"],
"html": "<span class=\"text-muted\">Footer text</span>",
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 3.2:1"
}
]
}
],
"incomplete": [
{
"id": "color-contrast",
"impact": "minor",
"tags": ["wcag2aa"],
"nodes": []
}
],
"inapplicable": [
{
"id": "audio-caption",
"impact": null,
"tags": ["wcag2a"],
"nodes": []
}
]
}axe with assert (CI gate)
wavexis axe https://example.com \
--tags wcag2a,wcag2aa \
--assert \
--output axe-results.jsonExits with code 1 if any violations are found.
axe with impact threshold
# Only fail on serious or critical violations
wavexis axe https://example.com \
--impact-threshold serious \
--assert \
--output axe-results.jsonaxe options
| Option | Type | Default | Description |
--rules | str | all | Comma-separated rule IDs to run |
--tags | str | all | Comma-separated tags to filter rules |
--exclude | str | None | CSS selector to exclude from audit |
--output | str | stdout | Output file path |
--format | str | json | Output format |
--assert | flag | off | Exit 1 if violations found |
--impact-threshold | str | minor | Minimum impact to fail: minor, moderate, serious, critical |
--wait-for | str | None | Wait for selector before audit |
--timeout | int | 30000 | Timeout in ms |
Interpreting a11y Tree Results
Key fields
| Field | Description |
node_id | Unique ID for the node in the tree |
role | ARIA role (e.g., heading, link, button) |
name | Accessible name of the node |
ignored | Whether the node is ignored by assistive tech |
ignored_reasons | Why the node was ignored |
child_ids | Child node IDs |
level | Heading level (for heading roles) |
focusable | Whether the node is focusable |
properties | Additional ARIA properties |
Common roles
| Role | Description | Common elements |
WebArea | Root of the a11y tree | <body> / document |
heading | Heading with level | <h1> - <h6> |
link | Hyperlink | <a> |
button | Button control | <button> |
textbox | Text input | <input type="text">, <textarea> |
image | Image with alt text | <img> |
list | List container | <ul>, <ol> |
listitem | List item | <li> |
navigation | Navigation region | <nav> |
main | Main content region | <main> |
banner | Banner region | <header> |
contentinfo | Content info region | <footer> |
form | Form region | <form> |
combobox | Combo box | <select>, ARIA combobox |
checkbox | Checkbox control | <input type="checkbox"> |
radio | Radio button | <input type="radio"> |
tab | Tab in a tab list | ARIA role="tab" |
dialog | Dialog or modal | ARIA role="dialog" |
Ignored nodes
Nodes can be ignored for several reasons:
| Reason | Description |
notRendered | Element is not visible (display:none, visibility:hidden) |
notVisible | Element is visually hidden |
ariaHidden | Element has aria-hidden="true" |
presentational | Element has a presentational role |
empty | Element has no accessible name or content |
WCAG 2.2 Criteria Mapping
axe-core results map to WCAG 2.2 criteria via tags. Each violation includes tags like wcag2a, wcag2aa, wcag21aa, wcag22aa.
WCAG levels
| Level | Tag | Meaning |
| A | wcag2a, wcag21a, wcag22a | Minimum compliance |
| AA | wcag2aa, wcag21aa, wcag22aa | Standard compliance |
| AAA | wcag2aaa, wcag21aaa | Enhanced compliance |
Common axe-core to WCAG mapping
| axe Rule | WCAG Criterion | Level |
color-contrast | 1.4.3 Contrast (Minimum) | AA |
image-alt | 1.1.1 Non-text Content | A |
label | 3.3.2 Labels or Instructions | A |
heading-order | 1.3.1 Info and Relationships | A |
tabindex | 2.4.3 Focus Order | A |
landmark-one-main | 1.3.1 Info and Relationships | A |
button-name | 4.1.2 Name, Role, Value | A |
link-name | 4.1.2 Name, Role, Value | A |
html-has-lang | 3.1.1 Language of Page | A |
html-lang-valid | 3.1.1 Language of Page | A |
focus-order-semantics | 2.4.3 Focus Order | A |
target-size | 2.5.8 Target Size (Minimum) | AA |
focus-visible | 2.4.7 Focus Visible | AA |
aria-valid-attr | 4.1.2 Name, Role, Value | A |
aria-required-attr | 4.1.2 Name, Role, Value | A |
CI Integration
Accessibility gate in CI
wavexis axe https://staging.example.com \
--tags wcag2a,wcag2aa \
--impact-threshold serious \
--assert \
--output axe-results.jsonGitHub Actions integration
- name: Accessibility audit
run: |
wavexis axe https://staging.example.com \
--tags wcag2a,wcag2aa,wcag21aa,wcag22aa \
--impact-threshold moderate \
--assert \
--output axe-results.json
- name: Upload results
if: always()
uses: actions/upload-artifact@v4
with:
name: a11y-results
path: axe-results.jsonMulti-action YAML for a11y audit
actions:
- navigate:
url: https://example.com
wait_until: networkidle
- a11y_tree:
output: a11y-tree.json
- axe:
tags:
- wcag2a
- wcag2aa
- wcag21aa
- wcag22aa
impact_threshold: moderate
output: axe-results.json
- screenshot:
full_page: trueBest Practices
- Audit all WCAG levels — use
--tags wcag2a,wcag2aa,wcag21aa,wcag22aafor full coverage. - Use
--assertin CI — fail builds on accessibility violations. - Set impact threshold —
--impact-threshold seriousto focus on critical issues first. - Capture a11y tree — use
a11y_treefor debugging specific accessibility issues. - Inspect nodes — use
a11y_nodeanda11y_ancestorsto trace issues to their source. - Exclude non-content — use
--excludeto skip decorative elements or third-party widgets. - Save results —
--outputfor artifacts and trend analysis. - Test after changes — re-run axe after fixing violations to verify.
- Test dynamic content — use
--wait-forfor SPAs and dynamic content. - Map to WCAG — use the tags in results to identify which WCAG criteria failed.
Common Pitfalls
- Only testing A level — AA is the standard for most compliance requirements.
- Ignoring incomplete results —
incompletemeans axe couldn't determine pass/fail; investigate manually. - Excluding too much — overusing
--excludecan hide real issues. - Not testing keyboard navigation — axe checks markup, not actual keyboard behavior; test manually.
- Missing dynamic content — SPA content loaded after audit won't be checked; use
--wait-for. - Ignoring color contrast — most common violation; check with
--rules color-contrast. - Not testing forms — form accessibility is critical; use
--rules label,name,form-field-multiple-labels. - Forgetting
aria-hidden— elements witharia-hidden="true"should not be focusable.
References
In this repository45 other files it gives its agents.
- AGENTS.mdAGENTS.md
- allure-reportsSkill
- android-nativeSkill
- appian-lowcodeSkill
- appium-mobileSkill
- behave-bddSkill
- BiDiWave Cross-BrowserSkill
- BiDiWave Network InterceptionSkill
- CDPWave DebuggingSkill
- CDPWave TestingSkill
- db2-oracleSkill
- ebook-writerSkill
- flask-apiSkill
- flet-desktopSkill
- google-crawling-indexingSkill
- google-ranking-appearanceSkill
- google-seo-fundamentalsSkill
- google-seo-monitoringSkill
- jinja2-templatesSkill
- jmeter-load-testingSkill
- k6-load-testingSkill
- karate-api-testingSkill
- octane-almSkill
- paramiko-sshSkill
- postman-api-automationSkill
- prestashop-moduleSkill
- prompt-engineering-best-practicesSkill
- pytest-advancedSkill
- robot-frameworkSkill
- salesforce-devSkill
- sonarqube-quality-gatesSkill
- sql-serverSkill
- Skill NameSkill
- testcontainersSkill
- wave-ecosystem-guideSkill
- WaveXis CI/CD IntegrationSkill
- wavexis-cli-automationSkill
- wavexis-mcp-agent-integrationSkill
- WaveXis Network TestingSkill
- WaveXis Performance AuditSkill
- WaveXis Session RecordingSkill
- WaveXis Web ScrapingSkill
- webdriverioSkill
- wordpress-themesSkill
- xctest-iosSkill
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
Reviews can't be read right now.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

