Intégration : où ultra11y se branche
Le même moteur sert à deux moments : pendant le développement, pour relire chaque changement, et en recette, pour auditer tout le site. Deux skills se partagent ces deux moments.
Deux skills, un même moteur
Une skill est un mode d’emploi qu’un agent de code (Claude Code, Codex, OpenCode…) charge quand la tâche s’y prête. Les deux skills embarquent le même moteur, sans installation.
review-a11yLa revue de code
- Question
- « Ce changement est-il accessible ? »
- Périmètre
- Le diff : fichiers indexés (staged), branche, pull request
- Déclenchement
- Automatique : un hook avant commit, push et pull request
- Résultat
- Une revue classée par gravité, avec fichier et ligne
ultra11yL’audit de conformité RGAA
- Question
- « Ce site est-il conforme au RGAA ? »
- Périmètre
- Le dépôt, le site, un échantillon de pages
- Déclenchement
- À la demande
- Résultat
- Rapport daté, grille RGAA, backlog, tickets
Règle commune : ne jamais inventer une non-conformité, ni une conformité.
Les quatre moments
review-a11y · boucle courte, sur le changement
ultra11y · audit complet
- J’écris du codedans mon agent (Claude Code, Codex…)
git commitoupushle hook audite le diff et bloque une seule fois- Pull requestla GitHub Action annote le diff
- Recette ou auditrapport RGAA daté, backlog, tickets
Aussi : checkA11y(page) dans les tests Playwright ou Cypress, et un serveur MCP.
review-a11y couvre les trois premiers, en boucle courte sur le changement : pendant l’écriture du code, au commit ou au push, sur la pull request. La skill ultra11y prend le relais au quatrième, pour l’audit complet de recette.Chaque moment est détaillé dans la suite de cette page.
1. Pendant que j’écris du code
Installé comme extension (plugin) de l’agent, ultra11y fournit les deux skills et un hook : un petit programme que l’agent exécute avant certaines commandes.
/plugin marketplace add SocialGouv/ultra11y # Claude Code, dans la conversation
/plugin install ultra11y@ultra11y
codex plugin marketplace add SocialGouv/ultra11y # Codex CLI, dans le terminal
codex plugin add ultra11y@ultra11y
npx ultra11y install --opencode # OpenCode
Pas à pas, depuis zéro : installer la skill dans Claude Code ou Codex.
2. Au commit et au push
Quand l’agent lance git commit, git push ou gh pr create, le hook audite le diff. S’il trouve un problème, il bloque la commande une seule fois et transmet les constats à l’agent, qui lance alors review-a11y. Une nouvelle tentative passe toujours : le hook ne bloque jamais deux fois pour les mêmes constats.
Ce que le hook ne fait pas :
- Il ne force pas l’agent à lancer la skill. Il bloque et explique ; c’est l’agent qui agit.
- Il ne s’active pas tout seul : c’est l’installation de l’extension qui l’active.
npx ultra11y statusdit ce qui est réellement branché. - Sur un agent sans système de hooks (Cursor, Zed, Gemini CLI…), rien n’est automatique.
npx ultra11y init --hookinstalle alors un hook git classique, qui bloque le commit lui-même.
Pour le couper : SKIP_A11Y=1 pour une commande, ULTRA11Y_HOOK=off pour une session, ou "hook": { "failOn": "off" } dans .ultra11yrc.json pour le dépôt.
3. Sur la pull request
La GitHub Action audite le diff de la pull request et annote les lignes concernées. Elle peut aussi ouvrir les pages servies dans un vrai navigateur.
- uses: actions/checkout@v4
with: { fetch-depth: 0 } # le diff a besoin de la branche de base
- uses: SocialGouv/ultra11y@v5
with:
since: auto # compare à la branche de base de la PR
standard: rgaa
fail-on: blocking # échoue seulement sur les défauts bloquants
Le détail (annotations SARIF, commentaire de PR, audit page par page, pages derrière une connexion) est dans references/ci.md.
4. En recette ou pour l’audit
Pour un audit de conformité, on demande à l’agent : « audite ce site selon le RGAA ». La skill ultra11y déroule alors la boucle complète décrite sur la page Audit.
Dans vos tests de bout en bout : Playwright et Cypress
La commande scan ouvre son propre navigateur, sans l’état que vos tests ont construit : pas de session connectée, pas de formulaire rempli, pas de fenêtre modale ouverte. checkA11y audite au contraire la page telle que votre test l’a laissée.
import { test } from "@playwright/test";
import { checkA11y } from "ultra11y/playwright"; // Cypress : "ultra11y/cypress"
test("tableau de bord", async ({ page }) => {
await page.goto("/tableau-de-bord");
await checkA11y(page, { as: "tableau-de-bord" });
});
failOn règle le seuil d’échec du test. failOn: false enregistre sans faire échouer : pratique pour démarrer sur un projet qui a déjà une dette. Sans dépendance npm, npx ultra11y render --e2e écrit des fixtures équivalentes. Voir references/e2e.md.
Comme serveur MCP
MCP est un protocole qui permet à un agent d’appeler un outil directement, avec des entrées et des sorties typées, au lieu de lancer des commandes et d’en lire la sortie.
claude mcp add ultra11y -- npx -y ultra11y mcp
Le serveur expose l’audit (audit, rapport, garde-fous, grille par page) et le référentiel (texte officiel d’un critère, glossaire, plan de travail). L’outil à appeler en premier est ultra11y_method : il dit ce que le moteur tranche, ce qui demande une page affichée et ce qui revient au jugement. Le scan navigateur n’est pas disponible par MCP ; il se lance en ligne de commande. Voir references/mcp.md.
Pendant le développement d’une page
Sur un projet Next.js, npx ultra11y dev --next ajoute un composant d’une ligne, puis npx ultra11y dev affiche un panneau flottant dans l’application en développement. Ce panneau liste les non-conformités de la page affichée ; chacune ouvre son fichier et sa ligne dans l’éditeur. Rien n’est rendu en production. Voir references/devtools.md.