llms.txt Skills Specification
Draft v0.4 — Especificación para publicar y consumir Agent Skills a través de llms.txt.
TL;DR — ¿Qué es esto?
Un estándar de dos caras:
- Publisher: cualquier sitio web puede anunciar skills descargables añadiendo una sección
## Skills a su llms.txt. No requiere servidor, proceso persistente, ni autenticación.
- Consumer: cualquier agente puede descubrir esas skills automáticamente consultando
/llms.txt antes de interactuar con un dominio. Una skill de referencia (llms-txt-aware) documenta exactamente cómo hacerlo.
El problema dual
Para los publishers
Hoy, si eres desarrollador de un sitio web y quieres que los agentes de IA sepan cómo interactuar contigo, tus opciones son:
- MCP: necesitas un servidor persistente. Excesivo para un blog en GitHub Pages o una API REST simple.
/.well-known/skills/: solo permite una skill por dominio.
- Nada: el agente lee
llms.txt pero no sabe que existe una skill.
Para los consumers (agentes)
Hoy, cuando un usuario dice "usa https://img.automators.work/", el agente:
- No busca automáticamente
/llms.txt.
- No descubre que el sitio publica una skill
placeholder.
- No sabe que podría delegar la tarea al servicio remoto.
- En su lugar, crea una imagen local con Python/PIL, ignorando la URL por completo.
Este es el execution gap: el sitio publica la skill, pero el runtime no la consume.
La solución (lado publisher)
Añadir una sección ## Skills dentro de llms.txt. Una sola línea de markdown por skill:
## Skills
- [placeholder](/skills/placeholder/SKILL.md): generate SVG placeholder image URLs for UI mockups. <!-- skill: {"version":"1.0.0"} -->
El agente que ya leyó llms.txt ahora sabe que existe una skill y dónde encontrarla. El metadata inline solo lleva version como hint rápido. Para verificación de integridad (sha256) y metadata completa (licencia, costo), el agente consulta /.well-known/agent-skills/index.json si está disponible.
La solución (lado consumer)
Antes de interactuar con cualquier dominio, el agente debe ejecutar este flujo:
1. Extraer el origen de la URL mencionada
2. HEAD /llms.txt (o leer Link header de una request previa)
3. Si 200 OK: leer el archivo COMPLETO (no solo ## Skills)
4. Aplicar constraints, endpoints, parámetros y ejemplos canónicos
5. Si existe ## Skills: listarlas al usuario y pedir opt-in
6. Si el usuario aprueba: descargar SKILL.md y seguir sus instrucciones exactas
7. Cachear por sesión
Implementamos este flujo como skill de referencia: llms-txt-aware.
¿Por qué usar la skill llms-txt-aware?
| Sin la skill | Con la skill |
|---|
| Usuario: "Crea imagen verde en img.automators.work" → agente crea PNG local con PIL | Usuario: "Crea imagen verde en img.automators.work" → agente busca /llms.txt → descubre skill placeholder → genera URL correcta /600x50?bg=22c55e |
| Usuario: "Busca teclados en demoshop" → agente abre browser sin saber qué hacer | Usuario: "Busca teclados en demoshop" → agente busca /llms.txt → descubre product-search → sabe exactamente qué endpoint llamar |
| Cada sitio requiere investigación manual | Un solo procedimiento cubre cualquier dominio |
La skill no inventa protocolos: usa lo que el sitio publica. Si el sitio no tiene llms.txt, falla silenciosamente y sigue con herramientas locales.
¿Por qué usar este estándar?
Para publishers (developers)
| Antes | Después |
|---|
| "Mi API existe pero los agentes no saben cómo usarla" | "Añadí 3 líneas a mi llms.txt y cualquier agente compatible puede descubrir la skill" |
| "Necesito mantener un servidor MCP" | "No necesito nada, es un sitio estático" |
| "La skill vive en un marketplace externo" | "La skill vive en mi repo, se despliega con mi API" |
| "Solo puedo publicar una skill" | "Puedo publicar tantas como necesite" |
Para consumers (agentes / runtimes)
| Antes | Después |
|---|
| Cada sitio requiere código custom o prompting manual | Un solo procedimiento (llms-txt-aware) cubre cualquier dominio |
| URLs en prompts se interpretan como decorativas | URLs en prompts disparan descubrimiento automático de skills |
| No sabemos qué versión de la skill usar | Metadatos inline indican versión; sha256 y licencia en .well-known |
| Sin contexto de cuándo usar la skill | La descripción del item de lista lo dice |
Para los usuarios
| Antes | Después |
|---|
| "¿Cómo hago que el agente use esta API?" | El agente detecta automáticamente la skill disponible |
| Instalar skills manualmente desde marketplaces | Skills descubiertas y validadas en el momento |
Comparación con soluciones actuales