Saltar al contenido principal

Primeros pasos

Trabajar con IA

Qué puede leer un agente de programación con IA, cómo comprobar lo que ha escrito y qué revisor de accesibilidad puedes darle.

Esta traducción la ha escrito una IA y todavía no la ha revisado ninguna persona. Leer esta página en inglés

Dale LUZ a tu agente

LUZ usa HTML y CSS sin más, así que un agente de programación con IA puede escribirlo si conoce los nombres de clase disponibles. Pega este prompt en tu agente.

Indica al agente los archivos que aparecen abajo y le pide que ejecute el comprobador sobre lo que ha escrito. En Lo que no hace se explica qué no comprueba.

Prompt
Use LUZ for the markup. Read https://nandovejer.github.io/luz/llms.txt first and use only the classes in each package's classes.json. After you write HTML or CSS, run `npx @luz-ds/check@0.3.0` on the files and fix every finding before you answer.

Empezar un sitio

Para un sitio nuevo, o para pasar uno a LUZ, dale a un LLM el prompt largo. Te pregunta por el proyecto en rondas cortas, te enseña el plan y no escribe nada hasta que dices "go".

Abrir el prompt

Para un tipo de sitio concreto, su página tiene un prompt hecho para él y las recetas de sus partes: una landing page, un blog o un periódico, una aplicación web o un sitio de documentación.

Qué puede leer un agente

La compilación de este sitio genera cada archivo a partir de las páginas que estás leyendo, así que tanto un agente como una persona obtienen la misma información. Dale al agente la URL de llms.txt: ahí se enumeran los demás archivos.

Archivos que puede leer un agente
ArchivoURLDescripciónGenerado por
llms.txt
https://nandovejer.github.io/luz/llms.txt
El índice de la documentación para un agente: todas las páginas con su descripción, en orden de lectura.
scripts/docs-site/ai.js, durante la compilación de las páginas
llms-full.txt
https://nandovejer.github.io/luz/llms-full.txt
Las mismas páginas en texto sin formato: el marcado, las variantes, cuándo usar cada una y su uso con el teclado.
scripts/docs-site/ai.js, durante la compilación de las páginas
prompts/start.txt
https://nandovejer.github.io/luz/prompts/start.txt
El prompt general: pégalo en cualquier LLM para empezar un sitio o pasar uno a LUZ; pregunta por el proyecto en rondas antes de escribir nada.
scripts/docs-site/prompts.js, durante la compilación de las páginas
prompts/landing.txt
https://nandovejer.github.io/luz/prompts/landing.txt
El prompt para una landing page: el general, con las partes y las clases de una landing page.
scripts/docs-site/prompts.js, durante la compilación de las páginas
prompts/blog.txt
https://nandovejer.github.io/luz/prompts/blog.txt
El prompt para un blog o un periódico, sea cual sea el CMS: el general, con las partes y las clases de un blog.
scripts/docs-site/prompts.js, durante la compilación de las páginas
prompts/app.txt
https://nandovejer.github.io/luz/prompts/app.txt
El prompt para una aplicación web: el general, con las partes y las clases de una app.
scripts/docs-site/prompts.js, durante la compilación de las páginas
prompts/docs.txt
https://nandovejer.github.io/luz/prompts/docs.txt
El prompt para un sitio de documentación: el general, con las partes y las clases de un sitio de documentación.
scripts/docs-site/prompts.js, durante la compilación de las páginas
examples/<area>/<slug>.html
https://nandovejer.github.io/luz/examples/components/button.html
El marcado de una página de componente o patrón, con estilos de LUZ; cada página que tenga una sección de marcado dispone del suyo en /examples/.
scripts/docs-site/ai.js, durante la compilación de las páginas
manifests/tokens/classes.json
https://nandovejer.github.io/luz/manifests/tokens/classes.json
Todas las clases, propiedades personalizadas y atributos de enganche del paquete: los nombres que puede usar un agente. Paquete: @luz-ds/tokens.
scripts/ai-manifests.js, durante la compilación de cada paquete
manifests/core/classes.json
https://nandovejer.github.io/luz/manifests/core/classes.json
Todas las clases, propiedades personalizadas y atributos de enganche del paquete: los nombres que puede usar un agente. Paquete: @luz-ds/core.
scripts/ai-manifests.js, durante la compilación de cada paquete
manifests/core/custom-elements.json
https://nandovejer.github.io/luz/manifests/core/custom-elements.json
Los elementos personalizados que define o declara el paquete, con los atributos que lee cada uno. Paquete: @luz-ds/core.
scripts/ai-manifests.js, durante la compilación de cada paquete
manifests/catalog/classes.json
https://nandovejer.github.io/luz/manifests/catalog/classes.json
Todas las clases, propiedades personalizadas y atributos de enganche del paquete: los nombres que puede usar un agente. Paquete: @luz-ds/catalog.
scripts/ai-manifests.js, durante la compilación de cada paquete
manifests/catalog/custom-elements.json
https://nandovejer.github.io/luz/manifests/catalog/custom-elements.json
Los elementos personalizados que define o declara el paquete, con los atributos que lee cada uno. Paquete: @luz-ds/catalog.
scripts/ai-manifests.js, durante la compilación de cada paquete

Comprueba lo que ha escrito un agente

npx @luz-ds/check@0.3.0 lee sin conexión el HTML y el CSS de un proyecto e indica qué clases, elementos, orden de carga y tokens de color de LUZ son incorrectos. Lee archivos, pero no escribe nada.

Necesita Node 20 o posterior.

Shell
npx @luz-ds/check@0.3.0
npx @luz-ds/check@0.3.0 index.html css/site.css
npx @luz-ds/check@0.3.0 src --json

Indica npx @luz-ds/check@0.3.0 y el ámbito. Una ruta puede ser un archivo, una carpeta (la lectura es recursiva: .html, .htm y .css) o un patrón glob entre comillas, como "src/**/*.html".

Si no indicas ninguna ruta, lee la carpeta actual.

Opciones del comando
OpciónQué hace
--json
Muestra el informe como JSON
--strict
Falla tanto si hay un aviso como si hay un hallazgo bloqueante
--config <file>
Lee esta configuración en lugar de luz-check.json
--theme <file.css>
Indica una hoja de estilos que define tokens de color cuyos colores se miden; repítelo para cada archivo, en el orden en que los carga la página
--ext <list>
También lee como HTML archivos con estas extensiones, como .astro,.vue
--version
Muestra la versión
--help
Muestra las opciones y los límites del comando

Un archivo luz-check.json en la carpeta desde la que ejecutas el comando configura ignore, rules, themes y strict. Desde ahí puedes desactivar una regla que avisa; una regla bloqueante solo se silencia con ignore. El resumen indica cuántos hallazgos se han ignorado y cuántas reglas están desactivadas.

Códigos de salida

Códigos de salida del comando
CódigoSignificado
0
No hay bloqueos. Puede que se hayan mostrado avisos.
1
Hay al menos un hallazgo bloqueante o, con --strict, se ha encontrado un aviso.
2
El comando se ha usado de forma incorrecta, no se puede leer una configuración o no hay nada que leer.

Qué muestra

Una línea por cada hallazgo, en el orden de los archivos y las líneas: un símbolo (✗ bloquea, ! avisa), la ubicación, la regla y una frase que explica qué está mal y qué hacer. Después de un hallazgo sobre un token de color aparecen las líneas donde se definieron los colores.

La última línea cuenta los hallazgos encontrados en los archivos que ha leído.

Output
✗ index.html:14:8 class/unknown  .luz-btn-primary is not a LUZ class; the closest is .luz-btn--primary
✗ index.html:22:5 load/package-missing  <luz-announcement> is in @luz-ds/catalog/components/announcement.css; add it after core
! site.css:8:3 css/literal-colour  color is set to #1a5fb4; use a token, such as var(--luz-brand-fill)
✗ theme.css:3:3 theme/contrast  light: --luz-text-secondary on surface-page is 2.8:1, needs 4.5:1 (text); change one of the two
    --luz-text-secondary: #999999 is set in theme.css:3
✗ 3 blocking and 1 warning in 3 files (manifests: @luz-ds/core 0.1.0 from node_modules)

La parte (manifests: …) indica con qué versión de LUZ se han comprobado los nombres y de dónde procede: de tu node_modules o de la copia incluida con el comando.

El informe JSON

--json muestra un objeto con estos campos. Si un campo no aparece en esta tabla, no forma parte del informe.

Campos del informe JSON
CampoTipoQué es
tool
cadena
Siempre @luz-ds/check
version
cadena
La versión del comprobador
ok
booleano
Verdadero si no hay bloqueos ni avisos con --strict. No es un resultado de accesibilidad
files
lista de cadenas
Los archivos que ha leído, ordenados
manifests
lista de objetos
Los datos de LUZ con los que ha comprobado el proyecto, una entrada por paquete
manifests[].package
cadena
El paquete, como @luz-ds/core
manifests[].version
cadena
La versión de los datos de ese paquete
manifests[].source
cadena
node_modules si tu proyecto tiene el paquete; bundled si se ha usado la copia del propio comando
summary
objeto
Los recuentos de la ejecución
summary.files
número
Cuántos archivos ha leído
summary.blocking
número
Cuántos hallazgos bloquean
summary.warnings
número
Cuántos hallazgos generan avisos
summary.skipped
número
Cuántas rutas no ha leído
summary.ignored
número
Cuántos hallazgos ha eliminado ignore en la configuración
summary.off
número
Cuántas reglas ha desactivado la configuración
summary.truncated
booleano
Verdadero si se ha truncado la lista de hallazgos; los recuentos anteriores están completos
config
objeto
La configuración que se ha leído
config.file
cadena o null
El archivo de configuración o null si no había ninguno
config.off
lista de cadenas
Las reglas que ha desactivado la configuración
findings
lista de objetos
Lo que ha encontrado, en el orden de los archivos y las líneas
findings[].rule
cadena
La regla, como class/unknown
findings[].severity
cadena
block o warn
findings[].file
cadena
La ruta, relativa a la carpeta desde la que ejecutaste el comando
findings[].line
número o null
La línea, si el hallazgo tiene una ubicación en el archivo
findings[].column
número o null
La columna, si el hallazgo tiene una ubicación en el archivo
findings[].message
cadena
La frase en inglés que explica qué está mal y qué hacer
findings[].suggestion
cadena o null
El nombre de LUZ más parecido, si hay alguno suficientemente cercano
findings[].docs
cadena
La URL de la página que explica la regla
findings[].details
objeto
Solo en algunos hallazgos. Un hallazgo sobre un token de color indica el modo, los colores, la proporción y dónde se definieron los colores
skipped
lista de objetos
Las rutas que no ha leído
skipped[].file
cadena
La ruta
skipped[].reason
cadena
Motivo: es un enlace, no es un archivo normal, supera 1 MiB, no se ha podido abrir o se ha alcanzado un límite de la ejecución

Lo mismo ocurre con el texto y con JSON: las rutas y los nombres que contienen caracteres no habituales se escriben con escapes, y el comando nunca cita el contenido de tus archivos.

Qué bloquea y sobre qué avisa check

Cada regla tiene un id, como class/unknown, que aparece en todos los hallazgos. Una regla bloqueante hace que el código de salida sea 1.

Una regla que avisa no lo hace, salvo que pases --strict. Las dos tablas se generan a partir de la lista de reglas del comando.

Catalog 0.3 cambió el nombre de sus clases, elementos, archivos y módulos, y los nombres antiguos no hacen nada. names/renamed encuentra una clase, una etiqueta, un enlace a un archivo de componente o un módulo con el nombre antiguo, y da el nombre nuevo. No dice nada en una página que enlaza catalog 0.0 a 0.2, donde los nombres antiguos son los correctos.

Rules that block
RuleWhat it findsSeverity
a11y/slider-no-name
A <luz-theme-time variant="bar"> with no data-luz-label-scrub on it or an ancestor, so its slider has no accessible name: the script writes no English text.
block
class/unknown
A class starting with luz- that no classes.json lists, or an o- or u- class a typo away from one LUZ has.
block
element/unknown
A <luz-*> tag that no custom-elements.json declares and that is not the block of a class.
block
element/unknown-attribute
An attribute on a LUZ element that its custom-elements.json does not declare; global, aria-*, data-* and framework attributes are left alone.
block
load/layer-statement
A <style> that declares the layers after the first LUZ stylesheet, when the order of the layers is already fixed.
block
load/package-missing
A class or tag from a package whose stylesheet the page does not load, such as a site class with no site stylesheet.
block
load/tokens-missing
A page that links core, catalog or a package for one kind of site and does not link @luz-ds/tokens.
block
misuse/host-element
A class on an element it is not made for, such as a button class on a <div>; classes.json lists each class's elements.
block
misuse/modifier-alone
A modifier such as luz-btn--primary on an element that does not also have the class it modifies.
block
names/renamed
A class, element or file of catalog that has its old name from before 0.3 (luz-landing-hero, <luz-mode>, <luz-color-mode>, luz-mode-btn, landing-hero.css): the finding gives the new name.
block
parse/error
A file that ends inside a comment, tag, string or brace, so the rest of it cannot be read.
block
theme/contrast
A foreground and background pair in your colour token files that is under its WCAG contrast minimum in light, dark or high contrast.
block
theme/unreadable
A LUZ colour token, in a file that sets colour tokens, whose value cannot be read as an sRGB colour, so its contrast cannot be measured.
block
Rules that warn
RuleWhat it findsSeverity
a11y/link-no-href
An <a> that has a class made for links and no href, so it is not a link and a keyboard cannot reach it.
warn
a11y/role-on-generic
A widget role, or onclick, on a <div> or <span> where a native element such as <button> does the same with the keyboard.
warn
attr/unknown-hook
A data-luz-* attribute on an element that no package reads: usually a misspelling of one it does.
warn
class/reserved-prefix
A stylesheet of yours that defines a class starting with luz-, the prefix LUZ keeps for itself.
warn
class/unknown-in-css
A selector in your stylesheet that names a .luz-* class no classes.json lists.
warn
css/important
!important in a declaration, in a custom property too; a rule outside the layers already wins over LUZ.
warn
css/knob-in-px
--luz-type-base or --luz-space-unit set in px, which ignores the text size the reader chose.
warn
css/literal-colour
A colour written out in a declaration (hex, rgb, hsl and the other functions) instead of a token.
warn
css/literal-size
A px or rem length in font-size, margin, padding, gap or border-radius instead of a space, text or radius token.
warn
css/private-token
A --luz-* property that one component sets for itself, set or read outside that component.
warn
css/unknown-token
A --luz-* property that no package declares, set or read: usually a misspelling.
warn
file/skipped
A path the check did not read, such as a symlink or a file that is too large; the finding says why.
warn
load/no-stylesheet
Checked files that load no LUZ stylesheet at all, so a class can only be told from your own by its name.
warn
load/order
LUZ stylesheets linked out of order; the order is tokens, core, catalog, then the package for your kind of site.
warn
misuse/part-orphan
A part such as luz-card__title with no element of its block around it.
warn
misuse/state-class
An is-* class that LUZ's own script sets, written in the markup.
warn
theme/advisory
A note on how the colour check ran: the file order it used, a token no colour mode can place, a wide-gamut colour it does not measure, or sets of colour tokens past its limit.
warn

El revisor de accesibilidad

El mismo paquete muestra una definición de agente para un asistente de programación con IA: un revisor que lee el código fuente de una página y ofrece recomendaciones de accesibilidad. Cópiala en tu proyecto.

Shell
npx @luz-ds/check@0.3.0 agent > .claude/agents/luz-accessibility-reviewer.md
  • Sobrescribe archivos. El operador > sustituye un archivo existente. Si lo has editado, usa otra ruta o guarda antes tu copia en el control de versiones.
  • Es de solo lectura. Tiene tres herramientas, Read, Grep y Glob: lee, busca y enumera archivos, pero no escribe nada. Solo lectura no significa que sea inofensivo, porque Read no limita las rutas. Lee el archivo antes de usarlo y revisa cualquier cambio como harías con el código.
  • Ofrece recomendaciones. Revisa el código fuente según el nivel AA de WCAG 2.2 y EN 301 549, y etiqueta cada hallazgo como confirmado en el código fuente o como algo que requiere un navegador o tecnología de asistencia. Sus hallazgos son sugerencias basadas en la lectura del código, no resultados de pruebas.
  • No usa tecnología de asistencia. No abre páginas ni ejecuta scripts, y no observa cómo se representa una página, así que no sustituye una prueba con teclado y lector de pantalla.

El archivo también está en el paquete como @luz-ds/check/agents/accessibility.md, para que un paso de compilación lo copie.

Lo que no hace

Una ejecución sin hallazgos indica lo que el comprobador no ha encontrado en los archivos que ha leído. No es una prueba de la página.

  • No ejecuta un navegador. Lee archivos, así que no detecta nada que dependa de cómo se representa una página, como la maquetación, el orden del foco o los colores que calcula el navegador.
  • Solo mide el contraste de tus tokens. Mide los colores --luz-* que defines en tu propio archivo de tokens de color. No compara los colores escritos directamente en una regla con ningún otro. En Comprobación del contraste se explica cómo lee los pares.
  • No detecta las clases creadas en tiempo de ejecución. Un nombre construido en un script, como "luz-" + name, o escrito por una plantilla, no está en el archivo, así que no se comprueba.
  • No comprueba nombres, etiquetas, texto alternativo, encabezados ni el idioma. No analiza si un botón tiene nombre, si una imagen tiene una alternativa útil, si los encabezados están ordenados ni si la página tiene un idioma. Una ejecución sin hallazgos no dice nada sobre estos aspectos.
  • No sustituye las pruebas con lector de pantalla. Ni el comando ni el revisor utilizan tecnología de asistencia. Lo que no se ha probado se enumera en la declaración de accesibilidad.
  • No accede a la red. Se ejecuta sin conexión, con los datos de tu node_modules o de su propio paquete.
  • El descubrimiento mediante llms.txt se hace con un enlace. Este sitio no está en la raíz de un host, así que el agente no encuentra el archivo por sí solo: dale la URL, como hace el prompt anterior.
  • El código de salida 0 no es un resultado de accesibilidad. Indica que ninguna de las reglas anteriores bloquea los archivos leídos.
  • Los mensajes están en inglés. No se traducen, sea cual sea el idioma de la página.