About scan
scan is a skill for auditing a live page and reporting accessibility violations with their locations and evidence. It suits developers who need to identify issues without changing the page.
Key features
- 01Audits a URL or configured target
- 02Reports impact counts and violations
- 03Includes selectors and available source locations
- 04Suggests mechanical fixes or human review
- 05Stops managed Chrome after the audit
Use cases
- 01Check a development page for accessibility issues
- 02Audit a Storybook target
- 03Locate violations before assigning remediation
Install
Copy the command and run it in a terminal.
npx skills add https:/ / github.com/ accesslint/ skills --skill scanAfter installing, type/scanin Claude Code to confirm it loaded.
Details
From the project READMEAudit a live page and report what's broken and where. Locate; don't fix.
$ARGUMENTS is a URL, a config target name (dev, storybook, …), or empty to audit the default target from accesslint.config.json. If it's empty and no config exists, ask for a URL or suggest npx @accesslint/cli init to set targets up.
1. Audit
PORT=$(npx -y @accesslint/chrome@latest ensure | node -e 'process.stdin.on("data",d=>process.stdout.write(""+JSON.parse(d).port))')
npx -y @accesslint/cli@latest scan <target> --port "$PORT" --format json
<target> is the URL or config target name from $ARGUMENTS; omit it (don't pass "") to audit the config's default target. Flags as needed: --selector, --wait-for "<selector>", --include-aaa, --disable <rules> — or pin them per-target in accesslint.config.json.
2. Report
Counts by impact, then one entry per violation:
- where — selector verbatim +
file:line (symbol)ifsourceis present — never fabricate. If no violation hassource, note "source mapping unavailable — located by selector only". - evidence — contrast ratio, missing attribute, empty name
- fix — mechanical change or
NEEDS HUMAN
Don't edit. For fixes: apply mechanical ones then re-run to verify; for bulk work hand off to accesslint:audit.
3. Tear down
npx -y @accesslint/chrome@latest stop --all # skip if ensure reported "managed":false
Gotchas
ensurealways determines the port — never hardcode 9222.- CLI exit 2 = bad URL/target or page never loaded; check the dev server. An unknown target name makes the CLI list the available targets from
accesslint.config.json.