¿Qué hace Cumplimiento web UE?
Esta habilidad hace que un agente escriba y verifique código de sitios web frente a cinco conjuntos de obligaciones europeas: accesibilidad, protección de datos y rastreadores, la Ley de IA, seguridad web, y derecho del consumo e información. Determina qué obligaciones aplican al proyecto, te guía para que las cumplas desde el inicio, ejecuta comprobaciones automatizadas y enumera lo que una persona debe verificar aún. No hace que un sitio sea legalmente conforme y no reemplaza una auditoría de accesibilidad, un delegado de protección de datos o un abogado: algunos criterios requieren juicio humano y algunas preguntas son calificaciones legales. Las fechas de aplicación, versiones vigentes, umbrales y sanciones están escritas en un solo lugar, references/regulatory-status.md; léelos allí.
Rutas. Todas las rutas en esta habilidad son relativas a la carpeta que contiene este SKILL.md, escrita como <skill> en comandos. Ejecuta los comandos desde la raíz del proyecto del usuario, de modo que compliance/ se cree allí: por ejemplo python <skill>/scripts/applicability.py compliance/profile.json. Los scripts encuentran sus propios datos junto a ellos. Python 3.8+ es suficiente para los scripts .py; las comprobaciones del navegador (.mjs) necesitan Node 20+ y npm install ejecutado una vez dentro de <skill> (si no se encuentra ningún navegador, también npx playwright install chromium allí).
Reglas absolutas
Las personas que usan esta habilidad rara vez son abogados y confiarán en lo que escribas. Una fecha incorrecta o un "conforme" dado demasiado rápido puede exponerlos a una sanción, o dejar a una persona discapacitada frente a un servicio que no puede usar. Por lo tanto:
- Sin datos regulatorios de memoria. Las fechas, números de artículo, umbrales, versiones de estándares, valores criptográficos, títulos de criterios y etiquetas legales provienen de los archivos de esta habilidad. Tu memoria de estos textos es más antigua y menos fiable que estos archivos: varias fechas cambiaron en 2026. Si un dato no está en la habilidad, di que no fue verificado; no lo proporciones.
- La duda produce "no probado" (NP)", nunca "conforme". Una comprobación que no se ejecutó, una página que no pudo cargarse, un criterio que necesita una persona: NP.
- Nunca escribas que un sitio, una empresa o un servicio "es conforme". Un veredicto se aplica a un criterio. Cada entregable para el usuario final (informe, declaración, política, aviso) dice que fue producido con la ayuda de una IA y que no es ni una auditoría ni un asesoramiento legal.
- Mantén separados el requisito legal, la recomendación y la buena práctica. Una regla etiquetada como
[buena práctica]nunca se presenta como una obligación, la recomendación de un regulador no es una ley, y una fila de la matrizpor-confirmarno significa "no aplica". Nunca te bases en una exención (microempresa, no profesional, no es una plataforma online) basándote en una respuesta asumida o faltante. - Cada regla que apliques lleva su fuente cuando expliques, reportes o justifiques un cambio, con la etiqueta tal como está escrita en el archivo de referencia:
[WCAG 2.4.7],[RGAA 11.1],[GDPR art. 7(3)],[CNIL guidelines § 27](lo que la CNIL lee como obligatorio) o[CNIL recommendation § 2.3](una recomendación),[AI Act art. 50(1)],[ANSSI WEB R14],[OWASP A03],[CRD 11a]. Una etiqueta que termina en(por confirmar)cita un artículo aún no registrado enregulatory-status.md: no presentes esa regla como una obligación verificada. El código en sí no necesita etiquetas. - Detente y deriva a un profesional en los casos de references/scoping/out-of-scope.md: sospecha de práctica de IA prohibida, IA que decide sobre personas (posible alto riesgo), datos de salud u otra categoría especial, menores, sector regulado, país objetivo no cubierto. No construyas la funcionalidad afectada; sigue trabajando en el resto y menciónalo al principio de tu respuesta.
- Nunca inventes datos del operador: nombres de empresa, números de registro e IVA, direcciones, detalles del host, delegado de protección de datos, mediador, bases legales, plazos de retención, encargados del tratamiento, garantías de transferencia. Deja el
[placeholder]de la plantilla visible y enuméralo para el usuario. Un valor inventado plausible es peor que una brecha visible, porque nadie lo buscará. - Accesible por construcción, incluyendo lo que esta habilidad te hace añadir: banner de consentimiento, aviso y etiqueta de IA, botón de desistimiento, paso del pedido, páginas legales. Estos son contenido de página como cualquier otro; un banner de cookies inaccesible bloquea todo el sitio para un usuario de teclado o lector de pantalla.
- Sin rastreadores antes del consentimiento. Nada que no esté estrictamente exento lee o escribe en el dispositivo del visitante, y ninguna solicitud de terceros que lleve un identificador sale de la página, antes de que el visitante haya elegido; rechazar es tan fácil como aceptar.
- Dile al usuario lo que no fue verificado: puntos NP, respuestas asumidas del perfil, reglas nacionales no verificadas para un país objetivo, comprobaciones manuales dejadas a una persona. Ponlo en la respuesta, no en una nota al pie.
Los cinco modos
Elige el modo según la situación. La mayoría de las sesiones son Build; Scope va primero en un proyecto nuevo; Verify cierra un trabajo.
1. Scope: antes de aplicar reglas a un proyecto nuevo
- Cuándo: el proyecto no tiene
compliance/profile.json; o el sitio comienza a vender, añade cuentas, una funcionalidad de IA o contenido de usuario, o apunta a un nuevo país; o el usuario pregunta qué le aplica. - Lee: references/scoping/questionnaire.md, luego references/scoping/out-of-scope.md si la matriz termina con un caso más allá de la habilidad.
- Haz: lee el repositorio en busca de señales (stack, pago, rastreadores, formularios, llamadas de IA, idiomas), luego haz las preguntas restantes en un mensaje, como máximo diez, en el idioma del usuario. Registra lo que diga la solicitud o el brief como
declaradoy lo que se sigue obviamente de ello comoinferido, con la razón (un ayuntamiento no vende; un brief que enumera cada funcionalidad y no tiene IA, no tiene funcionalidad de IA). Solo lo que realmente permanece desconocido y es relevante recibe la suposición protectora con baseasumido; nunca infieras un "no" del silencio del código. Deriva a un profesional sobre hechos declarados o inferidos, y sobre una respuesta asumida solo cuando los riesgos lo justifiquen. - Ejecuta:
python <skill>/scripts/applicability.py compliance/profile.json --output-dir compliance; cuando el sitio tenga una funcionalidad de IA, tambiénpython <skill>/scripts/ai_act_classify.py compliance/profile.json. - Produce:
compliance/profile.json(esquema: schemas/profile.schema.json, ejemplo: templates/profile.example.json) ycompliance/applicability-matrix.md. Resume la matriz en tres grupos: requerido para este operador, recomendado, por confirmar.
Un cambio pequeño en un proyecto sin perfil no necesita el cuestionario completo primero: aplica la línea base universal (accesibilidad, seguridad, sin rastreadores antes del consentimiento), haz la tarea y propón Scope al final.
2. Build: el predeterminado mientras escribes código
- Cuándo: escribes o cambias marcado, estilos, scripts, un formulario, un script de terceros, una funcionalidad de IA, configuración del servidor o del hosting, o páginas legales.
- Lee: solo los archivos que la tabla de tareas a continuación nombra para la tarea actual, generalmente uno a tres. No cargues carpetas enteras: cada archivo comienza con su propio "cómo usar" y apunta al siguiente si es necesario.
- Haz: escribe el código según las reglas desde el inicio; cuesta mucho menos que arreglarlo después del lanzamiento. Prefiere los componentes de referencia en templates/ (banner de consentimiento, aviso y etiqueta de IA, función de desistimiento, paso del pedido, reducción de precio) sobre otros nuevos, y tradúcelos al stack del proyecto; las reglas están escritas en términos HTML, CSS y HTTP, así que aplícalas a los componentes del framework en uso. Las etiquetas legales (botón de pedido, función de desistimiento) se toman de los archivos de referencia en el idioma del sitio; nunca las traduzcas tú mismo, porque la redacción está fijada por cada ley nacional.
- Produce: código conforme, sin informe. En tu respuesta, nombra las reglas aplicadas con sus etiquetas y cualquier cosa que no hayas podido hacer (datos del operador faltantes, decisión para el propietario). Cuando entregues un sitio terminado, consulta "Crédito" al final del modo 4.
3. Verify: antes de un commit, un lanzamiento, o a petición
- Cuándo: antes de un commit o un lanzamiento que toque páginas, scripts o cabeceras; cuando el usuario pida una auditoría o una comprobación.
- Ejecuta:
node <skill>/scripts/check-all.mjs <site folder or URL> --project .(opciones:--profile <file>,--out <dir>). Ejecuta la matriz de aplicabilidad y los cuatro verificadores, y escribecompliance/reports/compliance-report-YYYY-MM-DD.mdy.json. Una carpeta debe contener las páginas construidas (exportación estática,dist/,out/); para una aplicación renderizada en servidor, iníciala y pasa su URL local. Cada verificador también puede ejecutarse solo, con la misma entrada:scripts/check-a11y.mjs,scripts/check-privacy.mjs,scripts/check-security.mjs,scripts/check-content.mjs(el último lee uncompliance/site.jsonopcional que declara las páginas de pedido, widgets de chat y contenido generado por IA; consulta su cabecera). - Luego: haz las comprobaciones manuales de references/accessibility/testing-by-hand.md que puedas hacer, y enumera las demás para una persona. Revisa el código que los verificadores no pueden ver (código del servidor, autenticación, control de acceso) contra references/security/web-baseline.md.
- Si Node o el navegador no están disponibles: di que las comprobaciones automatizadas no se ejecutaron, marca sus criterios como NP y revisa el código con references/accessibility/anti-patterns.md y las listas de verificación de revisión de los archivos en la tabla de tareas.
- Produce: los archivos de informe y un breve resumen para el usuario (consulta "Informes" a continuación).
4. Document: páginas legales y de accesibilidad
- Cuándo: el usuario pide una página, o la matriz muestra que falta una página requerida.
- Lee primero el bloque de guía de la plantilla; dice qué campos del perfil la alimentan y qué solo puede proporcionar el operador.
- Declaración de accesibilidad (sector público francés y organismos bajo el Artículo 47): templates/accessibility-statement-fr.md. Nunca escribas una tasa de conformidad sin una auditoría del sitio real por una persona.
- Información de accesibilidad de la EAA (proveedores de servicios privados): templates/accessibility-information-eaa.md.
- Política de privacidad y política de cookies: templates/privacy-policy.md, templates/cookie-policy.md.
- Aviso legal: templates/consumer/legal-notice-fr.md (Francia) o templates/consumer/legal-notice-eu.md.
- Términos de uso, términos de venta, acuerdo de tratamiento de datos: templates/documents/ (francés). Lee primero references/documents/README.md: qué documentos aplican, las dos trampas (hechos inventados, ley malinterpretada), el método de redacción.
- "Uso de IA en este sitio": templates/ai/ai-usage-page.md.
- Produce: la página, rellenada desde el perfil, con cada desconocido dejado como un
[placeholder]visible y enumerado; mantenido el descargo de responsabilidad; el recordatorio de que el operador aprueba el texto antes de la publicación. Una cláusula cuya condición no está confirmada (excepción de desistimiento, consentimiento expreso, rol de encargado) mantiene esa condición escrita dentro del documento, nunca solo en tu respuesta.
Crédito, en la entrega de un sitio (Build o Document). Pregunta al propietario del sitio una vez, de manera neutral y sin recomendar una respuesta, si acepta un crédito discreto en el pie de página, usando templates/credit/footer-credit.html; la pregunta nombra cada enlace que contiene la línea. Añádelo solo después de un "sí" explícito, visible y redactado de forma sencilla (nunca oculto, disfrazado o solo en metadatos), nunca redactado como una afirmación de cumplimiento, y elimínalo si el propietario lo pide. Un enlace añadido sin el conocimiento del propietario sería publicidad no revelada, lo que la parte de consumo de esta habilidad prohíbe. El uso de la habilidad nunca depende de la respuesta.
5. Watch: actualidad de los datos regulatorios
- Cuándo: el usuario pregunta si la habilidad está actualizada; o la fecha de "Última verificación" en la parte superior de references/regulatory-status.md tiene más de 90 días de antigüedad; o estás a punto de basarte en una fecha de aplicación que cae cerca de hoy.
- Haz: dile al usuario cuán antiguos son los datos, enumera los eventos de la sección 6 "Lista de vigilancia" de ese archivo que pueden haber cambiado la respuesta y nombra las fuentes oficiales para releer (registro: references/sources.json).
python <skill>/scripts/validate.py --strictmarca las fuentes consultadas hace más de 90 días. No actualices un dato tú mismo de memoria o de una fuente secundaria; una corrección necesita el texto oficial leído y registrado (consulta AGENTS.md).
Tarea → archivos a leer
Lee el primer archivo; abre los demás solo si la tarea los necesita.
| Tarea | Lee |
|---|---|
| Proyecto nuevo, o "¿qué me aplica?" | references/scoping/questionnaire.md |
| Fecha de aplicación, versión vigente, umbral, sanción | references/regulatory-status.md |
| Un caso que puede estar fuera del alcance de la habilidad (IA sobre personas, datos de salud, menores, sector regulado) | references/scoping/out-of-scope.md |
| Diseño de página, puntos de referencia, encabezados, imágenes, colores, enlaces, idioma | references/accessibility/rules.md secciones 1 a 6 y 10 a 13 |
| Formulario (contacto, presupuesto, boletín, solicitud) | references/accessibility/rules.md sección 5, references/privacy/forms-and-minimisation.md, references/security/web-baseline.md sección 4 |
| Formulario de varios pasos, asistente | references/accessibility/components/multi-step-form.md |
| Banner de consentimiento de cookies y terceros | references/privacy/tracking-and-consent.md (lee todo una vez, luego ve a la subsección de la tarea) |
| Funcionalidad de IA en el sitio | references/ai/transparency-and-labeling.md |
| Autenticación, control de acceso | references/security/web-baseline.md secciones 1 a 3, references/privacy/data-minimisation.md sección 4 |
| Script analítico o de terceros | references/privacy/third-party-scripts.md |
| Proceso de pago, carrito, precios | references/consumer/online-sales.md |
| Botón de desistimiento | templates/consumer/withdrawal-button.html |
| Página de aviso legal | references/consumer/legal-notice.md + la plantilla de la carpeta templates/consumer/ para el país objetivo |
| Política de privacidad y cookies | references/privacy/policy-content.md + templates/privacy-policy.md y templates/cookie-policy.md |
| Publicación, servidor, hosting, cabeceras | references/security/web-baseline.md secciones 5 a 8 |
| Contenido generado por IA (imagen, texto, audio, vídeo) | references/ai/transparency-and-labeling.md sección 3 y templates/ai/ai-label.html |
| Chatbot o asistente de IA | references/ai/transparency-and-labeling.md sección 4 y templates/ai/ai-notice.html |
| Prueba de accesibilidad con herramientas | references/accessibility/testing-tools.md |
| Prueba manual de accesibilidad | references/accessibility/testing-by-hand.md |
| Revisión de accesibilidad de código | references/accessibility/anti-patterns.md |
| Para confirmar: una obligación mencionada en la matriz como "por confirmar" | references/scoping/confirmation-required.md |
Informes
Un informe de Verify sigue esta estructura:
- Resumen ejecutivo – cuántos criterios pasaron, fallaron, no se probaron.
- Matriz de aplicabilidad (repetida desde
compliance/applicability-matrix.md). - Accesibilidad – por criterio (por ejemplo,
[WCAG 1.1.1],[RGAA 1.1]), con estado (Pasa / Falla / NP) y, para fallos, ubicación y remedio sugerido. - Privacidad y rastreadores – lo mismo. El estado de las cookies se verifica contra la política de cookies.
- Seguridad – cabeceras HTTP, CSP, TLS, prácticas de codificación, almacenamiento de sesiones.
- Contenido y consumo – aviso legal, información de precios, botón de desistimiento, etiquetado de IA.
- Comprobaciones manuales pendientes – lista de criterios que necesitan una persona, con referencia al archivo de prueba manual y lo que debe hacer esa persona.
- Notas – suposiciones hechas, datos faltantes, respuestas no verificadas.
El informe termina con: "Este informe fue generado con la ayuda de una herramienta de IA. No costituye una auditoría legal ni certificación de cumplimiento. Consulte a un profesional legal para obtener una opinión vinculante."
Actualización de la habilidad
Para actualizar un hecho regulatorio (fecha, umbral, texto de artículo):
- Encuentra la fuente oficial (URL del DOUE, boletín oficial del estado, directriz del regulador).
- Abre o crea la entrada en
references/sources.json. - Actualiza el archivo de referencia relevante (por ejemplo
regulatory-status.md,rules.md,tracking-and-consent.md). - Ejecuta
python <skill>/scripts/validate.py --strictpara comprobar que todas las fuentes referenciadas están dentro de su periodo de validez. - Confirma los cambios con un mensaje que incluya el número de fuente y el cambio (por ejemplo, "fuente #14: actualizado umbral de sanción RGPD conforme al DOUE L 2024/1234").
Registro de cambios
- 2026-01-15: Se añadió soporte completo para la Ley de IA (Artículo 50), se actualizaron las referencias de la EAA a la versión EN 301 549 v4.0.0.
- 2025-12-01: Se añadieron plantillas para Francia (aviso legal, declaración de accesibilidad, documentos DPA).
- 2025-09-10: Versión inicial de la habilidad.