A Claude Code skill that installs a three-layer WCAG 2.1 A/AA accessibility gate into your project. Same axe-core rule set as Vercel's Accessibility Audit Tool. Blocks commits and pushes with a11y issues before they ship.
Three enforcement points, each catching a class of issue the others can't:
| Layer | Trigger | Catches | Speed |
|---|---|---|---|
| Pre-commit | git commit |
Source-level violations: missing alt, no label, bad ARIA, palette failures. | ~1–3s |
| Pre-push | git push |
Rendered-DOM rules via Playwright + axe-core against the built site, sweeping configured color modes. | ~30–90s |
| CI | PR / push | Same as pre-push, enforced server-side. --no-verify cannot bypass. |
~1–5min |
Static checks support React, Next.js, Solid, Preact, Vue, Nuxt, Svelte, SvelteKit, Angular, Astro, and plain HTML. The rendered audit is framework-agnostic; it runs against whatever you build and serve.
The skill lives at ~/.claude/skills/icansee/:
git clone https://github.com/vxcozy/icansee.git ~/.claude/skills/icanseeOr symlink from a development checkout:
ln -s /path/to/your/checkout ~/.claude/skills/icanseeSee docs/how-to/install-the-icansee-skill.md for symlink, project-scoped, and skills.sh installation paths.
Inside any git repo you want to gate:
~/.claude/skills/icansee/scripts/install.shThe installer detects your framework(s), installs the right ESLint
plugin(s) as devDependencies, drops flat-config files into .icansee/,
wires the pre-commit and pre-push hooks (husky if present, plain git
hooks otherwise), and copies a GitHub Actions workflow.
To opt out of any layer:
~/.claude/skills/icansee/scripts/install.sh --no-pre-push # skip the rendered audit hook
~/.claude/skills/icansee/scripts/install.sh --no-ci # skip the GH workflow
~/.claude/skills/icansee/scripts/install.sh --no-hook # skip the pre-commit hookThe getting-started tutorial walks you through installing the gate in a sandbox project, watching it block a broken commit, fixing the issue, and seeing it pass.
Check a contrast pair without installing anything:
~/.claude/skills/icansee/scripts/contrast.py check "#777" "#fff" --human
# #777 on #fff: 4.48:1 ... AA normal FAIL, AA large PASS, ...Get a hue-preserving suggestion that meets AAA:
~/.claude/skills/icansee/scripts/contrast.py suggest "#777" "#fff" --target 7.0
# {"suggested": "#595959", "suggested_ratio": 7.0}Audit a palette of design tokens:
~/.claude/skills/icansee/scripts/palette_audit.py matrix tokens.jsonFull docs are in docs/, organized via the
Diátaxis framework:
- Tutorials for learning the skill
- How-to guides for specific tasks
- Reference for looking up flags, env vars, exit codes, and rules
- Explanation for design rationale
Start at docs/README.md.
axe-core is the engine; icansee is the operating envelope around it. Specifically:
- Pre-commit static checks that fire before code is committed, without needing a build or browser.
- Pre-push rendered checks that close the rendered-DOM gap locally before code leaves your machine.
- CI enforcement at the merge boundary so
--no-verifycan't slip past. - Framework detection so the right ESLint plugin runs for each file type without manual config.
- Idempotent installer that translates the same setup across React/Vue/Svelte/Angular/Astro projects.
The rule set comes from axe-core. The shape of the gate is icansee's.
- Claude Code as a SKILL.md skill.
- skills.sh marketplace format.
- macOS and Linux for the installer scripts (
bash+python33.8+). - Node 18+ in the project being gated, for the ESLint and Playwright + axe-core layers. Playwright bundles its own Chromium; no separate browser install required.
MIT. See LICENSE.
Built on axe-core by Deque Systems. Documentation organized via the Diátaxis framework.