Getting it into your agent
One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.
npx skills add sawrus/agent-guides --skill accessibility-testinggit clone --depth 1 https://github.com/sawrus/agent-guidesWrote this? Show the measurements
A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.
[](https://agentmods.dev/skills/sawrus/agent-guides/accessibility-testing)<a href="https://agentmods.dev/skills/sawrus/agent-guides/accessibility-testing"><img src="https://agentmods.dev/badge/skills/sawrus/agent-guides/accessibility-testing/github.svg" alt="Measured on agentmods" height="20"></a>Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.
<a href="https://agentmods.dev/skills/sawrus/agent-guides/accessibility-testing"><img src="https://agentmods.dev/badge/skills/sawrus/agent-guides/accessibility-testing.svg" alt="Reviewed on agentmods" width="80" height="20"></a>- NVIDIA SkillSpector warn
SkillSpector: 1 finding, up to medium
These are SkillSpector’s own severities. On a checked sample its high-severity flags on skills were ~96% false positives — a documented command, a public API, a “never do X” rule — so we show them as a caution to read, not a verdict. Why →
- medium MCP Rug Pull · line 119 npx commands without a version suffix (e.g. @1.0.0) create a rug-pull risk if the upstream server is compromised and publishes a malicious update.Fix: Pin the version: npx @scope/[email protected]
What it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5.1 | $0.00024 | $0.01165 |
| Opus 5 | $0.00012 | $0.00583 |
| Sonnet 5 | $0.00005 | $0.00233 |
| Haiku 4.5 | $0.00002 | $0.00117 |
Grade A, and why
accessibility-testing scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 5d ago.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Nothing flagged
None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.
How it starts
The opening of the file, as written. The whole thing — 140 lines — stays where its author put it; the contents beside it link to each section on GitHub.
Accessibility Testing Skill
Expertise: axe-core automation, WCAG 2.1 AA, keyboard testing, screen reader testing (NVDA/VoiceOver), CI gates.
Automated Testing (Playwright + axe-core)
// tests/a11y/checkout.a11y.spec.ts
import AxeBuilder from '@axe-core/playwright';
test.describe('Checkout a11y', () => {
test('step 1 address form has no WCAG AA violations', async ({ page }) => {
await page.goto('/checkout/address');
await page.waitForLoadState('networkidle'); // Wait for dynamic content
const results = await new AxeBuilder({ page })
.withTags(['wcag2a', 'wcag2aa', 'wcag21aa'])
.exclude('#third-party-widget') // Exclude known third-party violations
.analyze();
// Report violations with full context for easier debugging
if (results.violations.length > 0) {
const report = results.violations.map(v => ({
id: v.id,
impact: v.impact,
description: v.description,
elements: v.nodes.map(n => n.html).slice(0, 3),
}));
console.log(JSON.stringify(report, null, 2));
}
// Block on critical/serious only; log moderate/minor as warnings
const blocking = results.violations.filter(
v => v.impact === 'critical' || v.impact === 'serious'
);
expect(blocking).toHaveLength(0);
});
test('form inputs all have associated labels', async ({ page }) => {
await page.goto('/checkout/address');
const results = await new AxeBuilder({ page })
.withRules(['label', 'label-content-name-mismatch'])
.analyze();
expect(results.violations).toHaveLength(0);
});
});
Keyboard Navigation Checklist (Manual)
Run this checklist on every new feature with interactive elements:
Tab order:
[ ] Tab key moves focus through all interactive elements in visual order
[ ] Focus never gets trapped (except modals — see below)
[ ] Focus is always visible (never hidden by CSS outline: none)
Activation:
[ ] Buttons activate with Enter and Space
[ ] Links activate with Enter only
[ ] Select/dropdown navigates with Arrow keys
Modal dialogs:
[ ] Focus moves to modal when it opens
[ ] Tab is trapped inside modal while open
[ ] Escape key closes modal
[ ] Focus returns to the trigger element when modal closes
Forms:
[ ] Each input has a visible label (not just placeholder)
[ ] Error messages are associated with their input (aria-describedby)
[ ] Required fields marked with aria-required="true"
[ ] Submit activates with Enter from any field
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- 5d ago First seen · 140 lines · 24 tokens per session scan A 1d4402c24556
accessibility-testing is a skill published in the GitHub repository sawrus/agent-guides (17 stars, last pushed 8d ago), licensed MIT. It adds 24 tokens to every session and 1,165 once invoked, about $0.0001 per session on Opus 5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-09-03.
Other skills, from other repositories
accesslint-diff
Diff a live page's accessibility violations against a baseline — by default compares uncommitted changes (stash-based), or pass --branch [ ] to diff against a branch. Reports only new violations introduced, violations fixed, and pre-existing count. Use scan for a full audit with no diffing.
a11y-audit
Run a heuristic accessibility audit of a localhost page from its screenshot and DOM — missing alt text, controls with no accessible name, unlabelled inputs, broken heading order, low contrast, small tap targets. Use when the user asks about accessibility, a11y, screen readers, WCAG, alt text, labels, contrast or…
accessibility-tester
Professional Accessibility Tester Expert skill. Implement robust test suites and automated quality checks for modern web/mobile applications.
test-driven-development
Drives development with tests. Use when implementing any logic, fixing any bug, or changing any behavior. Use when you need to prove that code works, when a bug report arrives, or when you're about to modify existing functionality.
agent-harness-fault-injection
Use when an agent workflow needs deterministic recovery evidence for sandbox, MCP/tool, worker, checkpoint, memory, or orchestration failures.
3d-web-experience
Expert in building 3D experiences for the web - Three.js, React Three Fiber, Spline, WebGL, and interactive 3D scenes. Covers product configurators, 3D portfolios, immersive websites, and bringing depth to web experiences.