## ¿Qué es llms.txt?

llms.txt es un archivo Markdown de texto plano servido en la raíz de tu dominio (`/llms.txt`) que describe tu servicio a los modelos de lenguaje grandes en prosa legible por humanos. Donde [OpenAPI](/kb/es/openapi) ofrece a las máquinas una especificación estructurada y [robots.txt](/kb/es/robots-txt) dice a los rastreadores qué obtener, llms.txt da al LLM el *contexto narrativo* que necesita para entender qué hace tu servicio, cuándo un agente debería usarlo y qué endpoints importan — en el formato que los LLMs ya procesan mejor.

La especificación fue propuesta por Jeremy Howard (fast.ai, Answer.AI) en septiembre de 2024. Es intencionadamente ligera: sin validación de esquema, sin análisis JSON, sin versionado. Un archivo Markdown con un encabezado H1 y un resumen de una línea. La simplicidad es la característica — cualquiera puede crear uno en cinco minutos, y cualquier LLM puede leerlo sin herramientas especiales.

## Por qué importa llms.txt

Los LLMs que navegan por la web tienen un problema de triaje. Una sola página de un sitio moderno puede ser 200KB de HTML con la mayoría del texto significativo detrás de JavaScript que el rastreador del agente no puede renderizar. Incluso cuando el agente puede renderizar JS, la relación señal-ruido es pobre — navegación, anuncios, banners de cookies y scripts de seguimiento dominan los bytes.

llms.txt es lo contrario: un único documento, texto plano, cabe en pocos KB, lidera con lo que importa. Un agente que recupere `https://example.com/llms.txt` obtiene:

- Qué es el servicio, en una oración
- Los endpoints o páginas que importan, listados
- Reglas de autenticación/pago en prosa
- Ejemplos de llamadas que el agente puede copiar

Esta es la diferencia entre "el agente tiene que averiguar tu sitio" y "el agente puede decidir si tu sitio es relevante en una sola petición". Para sitios que quieren ser citados por ChatGPT, Claude, Perplexity, o cualquier sistema aumentado con recuperación, llms.txt es la affordance más barata posible.

## Cómo funciona

No hay negociación de protocolo. Los agentes solicitan `/llms.txt` igual que solicitan `/robots.txt`, esperan `text/markdown` o `text/plain` de vuelta y analizan el Markdown. El archivo DEBE empezar con un encabezado H1; todo lo demás es convención.

Un llms.txt mínimo válido:

```markdown
# Nombre de tu Servicio

> Descripción de una línea de lo que hace el servicio.

## Resumen

Para qué sirve tu servicio, en 2-3 oraciones. Lidera con el caso de uso
que le importaría a un agente, no con la historia de tu empresa.

## Endpoints

- `GET /api/search?q=` — Buscar el catálogo (gratis)
- `POST /api/order` — Realizar un pedido (pagado: x402)
- `GET /api/status` — Verificación de salud (gratis)

## Autenticación

Los endpoints gratuitos no necesitan auth. Los endpoints pagados devuelven
HTTP 402 con un desafío de pago x402. Liquida en USDC en Base.

## Ejemplos

Buscar zapatos:
  GET /api/search?q=shoes

Realizar un pedido:
  POST /api/order {"sku": "ABC123", "qty": 1}
```

Esa es toda la especificación. Los encabezados más allá de H1 son opcionales. Listas con viñetas, bloques de código cercados y enlaces funcionan porque son Markdown — los agentes los analizan con la biblioteca de Markdown que ya usan.

## llms.txt vs otros archivos de legibilidad para agentes

| Archivo | Propósito | Formato | Quién lo lee |
|---|---|---|---|
| `/llms.txt` | Contexto narrativo para LLMs | Markdown | LLMs, agentes navegadores |
| `/llms-full.txt` | Corpus de texto completo, un archivo | Markdown / texto plano | Pipelines RAG, agentes integrados |
| `/robots.txt` | Permisos de rastreo | Directivas de texto plano | Rastreadores, bots |
| `/sitemap.xml` | Índice de URLs para rastreadores | XML | Motores de búsqueda |
| `/openapi.json` | Especificación programática de API | JSON/YAML | Generadores de código, clientes API |
| `/.well-known/mcp` | Protocolo servidor de herramientas | JSON-RPC | Agentes con MCP |

llms.txt no reemplaza ninguno de estos — llena la brecha entre robots.txt (directivas de máquina) y OpenAPI (especificaciones de máquina) con una capa optimizada para los modelos de *lenguaje* que necesitan razonar sobre para qué sirve tu sitio.

## El compañero: llms-full.txt

La especificación llmstxt.org define un archivo hermano opcional: [llms-full.txt](/kb/es/llms-full-txt). La convención es la misma — Markdown, servido en la raíz — pero el contenido es diferente. llms.txt es el *directorio* (un breve resumen con punteros). llms-full.txt es el *corpus* (el contenido de texto completo concatenado de tu sitio en un único archivo).

¿Por qué ambos? Dos consumidores diferentes:

- **Agentes navegadores** con ventanas de contexto limitadas quieren el directorio — eligen qué obtener a continuación basándose en llms.txt.
- **Agentes no navegadores** (pipelines RAG, recuperación de un solo disparo, agentes integrados en apps móviles) quieren el corpus — ingieren llms-full.txt una vez y responden preguntas sin hacer más peticiones HTTP.

Envía ambos si puedes. llms.txt es el escaparate; llms-full.txt es la base de conocimiento.

## Quién publica llms.txt

La adopción ha sido amplia en infraestructura de IA, herramientas para desarrolladores y plataformas de contenido:

- **Anthropic** publica llms.txt en [docs.anthropic.com/llms.txt](https://docs.anthropic.com/llms.txt) listando cada página de los docs para desarrolladores.
- **Cloudflare** publica uno en [developers.cloudflare.com/llms.txt](https://developers.cloudflare.com/llms.txt) para los docs de Workers y la plataforma.
- **Stripe** publica uno para la referencia de la API.
- **Vercel, Mintlify, Netlify, Supabase y Fly.io** publican llms.txt para su documentación de desarrolladores.
- **Muchos proyectos de código abierto** envían llms.txt automáticamente a través de generadores de documentación (Mintlify y Docusaurus tienen plugins).

El patrón que ha surgido: las plataformas de docs publican llms.txt para su *documentación*, y los sitios de producto publican llms.txt para su *superficie de API*. Ambos son útiles — los agentes que descubren un producto por primera vez leen el llms.txt de marketing, luego profundizan en el llms.txt de docs cuando necesitan detalles de integración.

## Cómo añadir llms.txt a tu servicio

### 1. Decide qué necesita saber un agente

Omite todo lo que un agente no necesita: la historia de tu empresa, filosofía de diseño, texto de marketing. Lidera con lo que el servicio *hace* y qué endpoints existen. Si no puedes escribir el resumen en una oración, tu servicio es demasiado amplio — divídelo.

### 2. Crea el archivo

Crea `/llms.txt` como Markdown plano. Requerido: un encabezado H1 en la primera línea y un resumen en blockquote. Recomendado: una sección "Endpoints", una sección "Autenticación" y 2-3 peticiones de ejemplo. Mantén todo el archivo por debajo de 10KB.

### 3. Sírvelo en la raíz

El archivo DEBE estar en `/llms.txt` — no `/.well-known/llms.txt`, no `/docs/llms.txt`. Los agentes prueban la raíz directamente. La mayoría de los hosts de sitios estáticos te permiten dejar un archivo en `public/` o `static/` y servirlo tal cual.

Establece `Content-Type: text/markdown` o `text/plain`. Algunos agentes rechazan `application/octet-stream`.

### 4. Enlázalo desde tu página principal

Añade un enlace `rel="alternate"` en tu HTML head para que los agentes y rastreadores lo descubran:

```html
<link rel="alternate" type="text/markdown" href="/llms.txt" title="Descripción amigable para LLM">
```

### 5. Envía también llms-full.txt

Concatena tus páginas de documentación en un único archivo Markdown en `/llms-full.txt`. La mayoría de los generadores de docs pueden emitir esto. Si lo haces a mano, un paso de build que recorra tus fuentes Markdown y las una con separadores H1 es suficiente.

## Errores comunes y depuración

- **Archivo servido como HTML.** Los hosts estáticos a veces envuelven archivos de texto en su plantilla. Verifica que `curl https://tu-dominio.com/llms.txt` devuelva el Markdown crudo, no una página HTML que lo contenga.
- **Falta H1 en la primera línea.** La especificación requiere que el documento empiece con `#`. Los archivos que comienzan con un blockquote, frontmatter o comentario HTML fallan en analizadores que esperan el H1.
- **La negociación de contenido sobrescribe.** Algunos servidores devuelven HTML a navegadores y Markdown a agentes — pero si el encabezado `Accept` es incorrecto, los agentes obtienen HTML. Sirve el archivo directamente; no lo escondas tras negociación de contenido.
- **llms.txt obsoleto.** Los autores publican el archivo una vez y nunca lo actualizan. Los agentes que vuelven a obtener en un horario ven endpoints obsoletos. Trata llms.txt como un artefacto de build — regéneralo cuando cambie la API.
- **Demasiado largo.** Los archivos de más de 50KB son truncados por algunos agentes. Si tu llms.txt es así de largo, en realidad quieres llms-full.txt — divide en el directorio y el corpus.

El escáner de agentgrade prueba `/llms.txt` directamente y verifica que el archivo existe, comienza con un H1 y tiene contenido no trivial.

## Preguntas frecuentes

### ¿Es llms.txt lo mismo que robots.txt?

No. robots.txt son directivas para *rastreadores* (qué URLs pueden obtener). llms.txt es *contexto* para LLMs (qué es tu servicio y cómo usarlo). Un sitio puede y debe publicar ambos.

### ¿Los motores de búsqueda leen llms.txt?

Algunos sí, informalmente. Google no se ha comprometido con nada oficial. Los consumidores principales son las herramientas potenciadas por LLM — navegación de ChatGPT, Claude con búsqueda web, Perplexity, @web de Cursor — que recuperan llms.txt al resumir o citar tu servicio.

### ¿Debería crear llms.txt a mano o generarlo?

Crea a mano el llms.txt de nivel superior — es corto (10-50 líneas) y el juicio editorial importa. Genera llms-full.txt desde tu pipeline de build de docs — es largo y mecánico.

### ¿Qué pasa si mi servicio tiene endpoints pagados?

Describe el pago en prosa ("Los endpoints pagados devuelven HTTP 402 con un desafío de pago x402"). No intentes codificar metadatos de pago en llms.txt — eso es para lo que sirven [x402](/kb/es/x402) y `x-payment-info` de [OpenAPI](/kb/es/openapi).

### ¿llms.txt reemplaza a OpenAPI?

No. OpenAPI es una especificación estricta de máquina — los generadores de código la consumen directamente. llms.txt es narrativo — los LLMs lo leen para entender la intención. Envía ambos: OpenAPI para tooling, llms.txt para contexto.

### ¿En qué se diferencia llms.txt de un SKILL.md?

[SKILL.md](/kb/es/skills) es *instructivo* — un manual que el agente sigue para realizar una tarea. llms.txt es *descriptivo* — contexto sobre para qué sirve el servicio. Los SKILLs viven dentro de runtimes de agentes (Claude Code, Cursor, etc.) y le dicen a un agente *cómo operar*. llms.txt se sienta en tu sitio y le dice a *cualquier* LLM *qué eres*.

### ¿El archivo tiene que ser Markdown?

La especificación dice Markdown. En la práctica, el texto plano funciona — la mayoría de los LLMs ignoran la sintaxis Markdown de todos modos. Pero Markdown es el formato recomendado porque los encabezados dan estructura que los agentes pueden usar para saltar a la sección relevante.

### ¿Publicar llms.txt ayudará a mi SEO?

Indirectamente. Los motores de búsqueda tradicionales no clasifican páginas por la presencia de llms.txt. Pero AI Overviews, Perplexity, búsqueda de ChatGPT y las respuestas generativas de Bing cada vez más citan fuentes — y un llms.txt claro y bien estructurado te convierte en una fuente más citable. Eso es GEO (optimización de motores generativos), la práctica adyacente a AEO que ha surgido junto con la búsqueda potenciada por LLM.

## Madurez de la especificación

**Estándar comunitario.** Definido en [llmstxt.org](https://llmstxt.org/) por Jeremy Howard, septiembre de 2024. Sin organismo de gobierno formal, pero ampliamente adoptado por los principales proveedores de infraestructura de IA (Anthropic, Cloudflare, Stripe, Vercel) y plataformas de docs (Mintlify, Docusaurus). La especificación es corta y estable — no se esperan cambios disruptivos.

## Aprende más

- [llmstxt.org](https://llmstxt.org/) — Especificación
- [llms-full.txt](/kb/es/llms-full-txt) — El compañero de contenido completo
- [Anthropic llms.txt](https://docs.anthropic.com/llms.txt) — Implementación de referencia
- [Agent Readiness](/agent-readiness) — Cómo encaja llms.txt en el panorama más amplio


## Referencias cruzadas {#cross-references}

Si tu sitio también sirve OpenAPI, MCP, SKILL.md, x402, A2A o WebMCP, menciónalos dentro de `llms.txt`. El propósito de llms.txt es ser el *único documento* que un agente lee para entender tu servicio: si al leerlo no descubre que tienes una API de pago o un endpoint MCP, el agente tendrá que sondear rutas well-known al azar. La mayoría no lo hará.

Una buena referencia cruzada es una viñeta de una línea con la URL que el agente puede solicitar:

- `POST /api/order` — Realizar un pedido (pago vía x402 — ver `/.well-known/x402.json`)
- Servidor MCP: `/mcp`
- Corpus completo para RAG: `/llms-full.txt`
- Especificación OpenAPI: `/openapi.json`
- SKILL.md (manual del agente): `/skill.md`
- Tarjeta de agente A2A: `/.well-known/agent.json`
- Manifiesto WebMCP: `/.well-known/webmcp.json`

No se requiere una sección especial — las menciones en línea cuentan. El escaneo de AgentGrade emite una sub-verificación opcional por cada recurso que tu sitio expone: si el escáner detectó tu endpoint `/mcp` pero `llms.txt` nunca dice "mcp", eso es un fallo suave que señala la brecha.

Estas verificaciones son opcionales: no reducen tu puntuación global, pero muestran dónde tu llms.txt es *menos útil de lo que podría ser* para los agentes que lo leen.


## Qué cuenta como contenido significativo {#meaningful-content}

La especificación llms.txt solo requiere un H1, pero un archivo con solo un título no le enseña nada a un agente. La comprobación *Contenido significativo* de AgentGrade confirma que el archivo tiene al menos una de tres señales estructurales que le dan a un agente algo accionable:

1. **Una lista de enlaces markdown** — al menos tres viñetas con el formato `- [Título](url)`. Esta es la forma de directorio de documentación que usan Anthropic, Stripe, Cloudflare, Vercel, Mintlify y la mayoría de los llms.txt de plataformas. Cada enlace apunta al agente hacia contenido real que puede obtener y leer.
2. **Un bloque de código con cercas** — cualquier cosa envuelta en triple-backticks. Un ejemplo de `curl`, una respuesta JSON de muestra, un fragmento que muestre cómo autenticarse. Esta es la forma de superficie de API: un archivo describe un servicio con un ejemplo funcional.
3. **Una sección operativa con nombre** — un encabezado H2 como `## Endpoints`, `## API`, `## Routes`, `## Authentication`, `## Examples`, `## Usage`, o `## Quick Start`. Estos nombres indican "este es contenido operativo para agentes" en lugar de texto de marketing.

Con **cualquiera** de los tres es suficiente para pasar. La mayoría de los llms.txt bien formados cumplen al menos dos.

### Qué falla

Un pie de página de marketing disfrazado como llms.txt: quince líneas, pero sin enlaces markdown, sin bloque de código, sin sección operativa. Un agente leyendo esto se entera de que Acme existe — pero no encuentra nada a lo que pueda navegar. Falla la comprobación de *Contenido significativo*.

### Por qué importan los enlaces

llms.txt es un archivo de enrutamiento, no un archivo de contenido (para eso está [llms-full.txt](/kb/llms-full-txt)). Su trabajo es señalar a los agentes las URLs que deben obtener a continuación. Las viñetas de texto plano como `- Acerca de` le dan al agente una etiqueta sin URL — no puede seguir la pista. Un enlace markdown como `- [Acerca de](/about) — información de la empresa` le da una URL más una descripción de una línea para que pueda decidir si vale la pena obtener la página.

La solución más simple cuando falla esta comprobación: convierte tus viñetas de texto plano en enlaces markdown, o añade un ejemplo con cercas mostrando a un agente cómo llamar a tu servicio.
