# agents.txt: el estándar que creé para que la IA sepa quién eres y qué puede hacer

> Creé agents.txt: estándar abierto para que agentes IA sepan quién eres y qué pueden hacer. OpenAPI 3.1.0 nativo para tool calling, primera implementación real.

**Autor:** Pedro Luis Cuevas Villarrubia | **Fecha:** 2026-05-14 | **Tags:** IA, tecnología, desarrollo web
**URL:** https://asturwebs.es/blog/agents-txt-openapi-descubrimiento-agentes-ia-2026/

---
Hace una semana, un agente IA visitó mi web y no supo qué hacer con ella. Encontró el `robots.txt` (sabía qué rastrear), el `llms.txt` (sabía quién soy), pero cuando quiso **hacer algo** — preguntar por un servicio, consultar precios, contactar — no encontró nada.

Así nació `agents.txt`.

Este es el tercer post de la serie. En el [primero te conté cómo robots.txt y sitemap](/blog/robots-txt-sitemap-para-que-sirven-2026/) son la base para Google. En el [segundo te expliqué llms.txt](/blog/llms-txt-como-preparar-tu-web-para-ia-2026/) para que los LLMs te entiendan. Ahora vamos al siguiente nivel: un estándar que dice a la IA **quién eres, qué ofreces, y qué puede hacer con ello**.

## El problema que agents.txt resuelve

Cuando un agente IA autónomo (no un chatbot, sino un sistema que actúa por su cuenta) llega a tu web, necesita responder cuatro preguntas:

<div class="not-prose space-y-3 my-8">
  <div class="flex items-start gap-3 bg-white border border-gray-200 rounded-lg p-4">
    <span class="shrink-0 text-xs font-bold px-2 py-1 rounded bg-yellow-100 text-yellow-700">Parcial</span>
    <div>
      <p class="text-sm font-semibold text-gray-900">"¿Quién dirige este negocio?"</p>
      <p class="text-sm text-gray-500">`llms.txt` lo intenta, pero no tiene estructura formal.</p>
    </div>
  </div>
  <div class="flex items-start gap-3 bg-white border border-gray-200 rounded-lg p-4">
    <span class="shrink-0 text-xs font-bold px-2 py-1 rounded bg-yellow-100 text-yellow-700">Limitado</span>
    <div>
      <p class="text-sm font-semibold text-gray-900">"¿Puedo usar estos datos?"</p>
      <p class="text-sm text-gray-500">`robots.txt` solo controla rastreo, no uso.</p>
    </div>
  </div>
  <div class="flex items-start gap-3 bg-white border border-gray-200 rounded-lg p-4">
    <span class="shrink-0 text-xs font-bold px-2 py-1 rounded bg-orange-100 text-orange-700">Manual</span>
    <div>
      <p class="text-sm font-semibold text-gray-900">"¿Qué ofrecen?"</p>
      <p class="text-sm text-gray-500">El agente tiene que parsear tu HTML para averiguarlo.</p>
    </div>
  </div>
  <div class="flex items-start gap-3 bg-white border border-gray-200 rounded-lg p-4">
    <span class="shrink-0 text-xs font-bold px-2 py-1 rounded bg-red-100 text-red-700">Nada</span>
    <div>
      <p class="text-sm font-semibold text-gray-900">"¿Puedo interactuar programáticamente?"</p>
      <p class="text-sm text-gray-500">No existe ningún estándar para esto.</p>
    </div>
  </div>
</div>

**Ningún estándar existente cubre las cuatro.** Yo necesitaba uno. Así que lo creé.

## Qué es agents.txt v2.0

`agents.txt` es un archivo markdown con bloques YAML embebido que se coloca en la raíz de tu web (`/agents.txt`). Tiene seis secciones:

<div class="not-prose grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-4 my-8">
  <div class="bg-white border border-gray-200 rounded-xl p-5 shadow-sm hover:shadow-md transition-shadow">
    <div class="flex items-center gap-2 mb-2">
      <span class="w-3 h-3 rounded-full bg-green-500"></span>
      <span class="text-sm font-semibold text-gray-900">Header</span>
    </div>
    <p class="text-sm text-gray-500">Versión, fecha, licencia.</p>
    <p class="text-xs text-green-600 font-semibold mt-2">Requerida</p>
  </div>
  <div class="bg-white border border-gray-200 rounded-xl p-5 shadow-sm hover:shadow-md transition-shadow">
    <div class="flex items-center gap-2 mb-2">
      <span class="w-3 h-3 rounded-full bg-blue-500"></span>
      <span class="text-sm font-semibold text-gray-900">Discovery</span>
    </div>
    <p class="text-sm text-gray-500">Referencias cruzadas a robots.txt, llms.txt, openapi.json.</p>
    <p class="text-xs text-blue-600 font-semibold mt-2">Recomendada</p>
  </div>
  <div class="bg-white border border-gray-200 rounded-xl p-5 shadow-sm hover:shadow-md transition-shadow">
    <div class="flex items-center gap-2 mb-2">
      <span class="w-3 h-3 rounded-full bg-green-500"></span>
      <span class="text-sm font-semibold text-gray-900">Condiciones de uso</span>
    </div>
    <p class="text-sm text-gray-500">Qué pueden y no pueden hacer los agentes IA.</p>
    <p class="text-xs text-green-600 font-semibold mt-2">Requerida</p>
  </div>
  <div class="bg-white border border-gray-200 rounded-xl p-5 shadow-sm hover:shadow-md transition-shadow">
    <div class="flex items-center gap-2 mb-2">
      <span class="w-3 h-3 rounded-full bg-green-500"></span>
      <span class="text-sm font-semibold text-gray-900">Identity</span>
    </div>
    <p class="text-sm text-gray-500">Nombre, propietario, contacto, ubicación.</p>
    <p class="text-xs text-green-600 font-semibold mt-2">Requerida</p>
  </div>
  <div class="bg-white border border-gray-200 rounded-xl p-5 shadow-sm hover:shadow-md transition-shadow">
    <div class="flex items-center gap-2 mb-2">
      <span class="w-3 h-3 rounded-full bg-gray-400"></span>
      <span class="text-sm font-semibold text-gray-900">Brand voice</span>
    </div>
    <p class="text-sm text-gray-500">Cómo deben representar tu marca.</p>
    <p class="text-xs text-gray-500 font-semibold mt-2">Opcional</p>
  </div>
  <div class="bg-white border border-gray-200 rounded-xl p-5 shadow-sm hover:shadow-md transition-shadow">
    <div class="flex items-center gap-2 mb-2">
      <span class="w-3 h-3 rounded-full bg-blue-500"></span>
      <span class="text-sm font-semibold text-gray-900">Services</span>
    </div>
    <p class="text-sm text-gray-500">Catálogo con precios y URLs.</p>
    <p class="text-xs text-blue-600 font-semibold mt-2">Recomendada</p>
  </div>
  <div class="bg-white border border-gray-200 rounded-xl p-5 shadow-sm hover:shadow-md transition-shadow">
    <div class="flex items-center gap-2 mb-2">
      <span class="w-3 h-3 rounded-full bg-gray-400"></span>
      <span class="text-sm font-semibold text-gray-900">Agentic endpoints</span>
    </div>
    <p class="text-sm text-gray-500">OpenAPI spec para tool calling.</p>
    <p class="text-xs text-gray-500 font-semibold mt-2">Opcional</p>
  </div>
</div>

### Ejemplo real (mi agents.txt)

```markdown
# agents.txt — asturwebs.es
# Version: 2.0
# Updated: 2026-05-12
# License: MIT

## Identity

---yaml
identity:
  name: AsturWebs
  owner: Pedro Luis Cuevas Villarrubia
  website: https://asturwebs.es
  email: pedro@asturwebs.es
  since: 1999
  location: Villaviciosa, Asturias, España
---

## Condiciones de uso

| Agent | Owner | Allowed usage | Conditions |
|-------|-------|---------------|------------|
| Googlebot | Google | Full indexing | — |
| GPTBot | OpenAI | Answer-engine only | Attribute source |
| Bytespider | ByteDance | Denied | — |

## Agentic Endpoints

---yaml
api_schema:
  type: openapi
  version: 3.1.0
  url: https://asturwebs.es/openapi.json
  auth_requirements: API Key required for mutations (POST). Read-only endpoints (GET) are public.
---
```

Un agente IA que lea esto sabe **exactamente** quién soy, qué me permite hacer, qué servicios tengo y cómo puede interactuar con mi API.

<img src="/images/2026-05-central-agents-openapi-conexion.webp" alt="Endpoints hexagonales conectando con un núcleo luminoso" width="832" height="512" />

## OpenAPI 3.1.0 para tool calling nativo

La sección `api_schema` es la que hace la diferencia. Apunta a un archivo `openapi.json` que describe tu API en formato OpenAPI 3.1.0. También acepta **MCP** (Model Context Protocol) como alternativa — el estándar de Anthropic para descubrimiento dinámico de herramientas.

Frameworks como **LangChain, AutoGen, Claude Code, Copilot** pueden consumir esta spec directamente y generar herramientas (tools) para interactuar con tu web:

```json
{
  "openapi": "3.1.0",
  "info": {
    "title": "AsturWebs API",
    "version": "2.3.0"
  },
  "paths": {
    "/api/servicios": {
      "get": {
        "summary": "Listar servicios disponibles",
        "responses": {
          "200": {
            "description": "Lista de servicios con precios y descripciones"
          }
        }
      }
    },
    "/api/contacto": {
      "post": {
        "summary": "Enviar formulario de contacto",
        "security": [{ "apiKey": [] }],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": ["nombre", "email", "mensaje"],
                "properties": {
                  "nombre": { "type": "string" },
                  "email": { "type": "string", "format": "email" },
                  "mensaje": { "type": "string" }
                }
              }
            }
          }
        }
      }
    }
  },
  "components": {
    "securitySchemes": {
      "apiKey": {
        "type": "apiKey",
        "in": "header",
        "name": "X-API-Key"
      }
    }
  }
}
```

Con esto, un agente puede consultar servicios libremente (`GET /api/servicios`, público) y enviar formularios si tiene API key (`POST /api/contacto`, autenticado). Los endpoints de solo lectura se exponen sin autenticación; las mutaciones requieren autenticación — un agente legítimo obtiene su key vía el mecanismo que definas (OAuth, email verification, etc.).

<div class="not-prose my-8 bg-indigo-50 border-l-4 border-indigo-400 rounded-r-lg p-4">
<p class="text-sm font-semibold text-indigo-800 mb-1">Insight</p>
<p class="text-sm text-indigo-700"><strong>Tool calling</strong> es el mecanismo por el cual un LLM decide invocar una función externa. OpenAPI le da el "catálogo" de funciones disponibles. Es como darle a la IA un menú de lo que puede hacer, con los parámetros exactos que necesita.</p>
</div>

## Condiciones de uso: lo que la IA sí y no puede hacer

Esta sección es clave. Define reglas explícitas:

<div class="not-prose grid grid-cols-1 md:grid-cols-2 gap-4 my-8">
  <div class="bg-green-50 border border-green-200 rounded-xl p-5">
    <p class="text-sm font-bold text-green-700 mb-3">Permitido sin condiciones</p>
    <ul class="space-y-2 m-0">
      <li class="flex items-start gap-2">
        <span class="shrink-0 w-2 h-2 rounded-full bg-green-500 mt-1.5"></span>
        <span class="text-sm text-green-700">Responder preguntas sobre mi negocio con datos precisos</span>
      </li>
      <li class="flex items-start gap-2">
        <span class="shrink-0 w-2 h-2 rounded-full bg-green-500 mt-1.5"></span>
        <span class="text-sm text-green-700">Referenciar mi sitio en resultados de búsqueda con atribución</span>
      </li>
      <li class="flex items-start gap-2">
        <span class="shrink-0 w-2 h-2 rounded-full bg-green-500 mt-1.5"></span>
        <span class="text-sm text-green-700">Usar descripciones y precios para informar recomendaciones</span>
      </li>
    </ul>
  </div>
  <div class="bg-red-50 border border-red-200 rounded-xl p-5">
    <p class="text-sm font-bold text-red-700 mb-3">Prohibido</p>
    <ul class="space-y-2 m-0">
      <li class="flex items-start gap-2">
        <span class="shrink-0 w-2 h-2 rounded-full bg-red-500 mt-1.5"></span>
        <span class="text-sm text-red-700">Entrenar modelos fundacionales con mi contenido sin permiso escrito</span>
      </li>
      <li class="flex items-start gap-2">
        <span class="shrink-0 w-2 h-2 rounded-full bg-red-500 mt-1.5"></span>
        <span class="text-sm text-red-700">Scraping masivo o descarga bulk de páginas</span>
      </li>
      <li class="flex items-start gap-2">
        <span class="shrink-0 w-2 h-2 rounded-full bg-red-500 mt-1.5"></span>
        <span class="text-sm text-red-700">Reproducir artículos completos palabra por palabra</span>
      </li>
    </ul>
  </div>
</div>

**Agentes específicos con condiciones:**

<div class="not-prose grid grid-cols-1 sm:grid-cols-3 gap-4 my-8">
  <div class="bg-white border border-gray-200 rounded-xl p-5 shadow-sm">
    <div class="flex items-center gap-2 mb-2">
      <span class="w-3 h-3 rounded-full bg-green-500"></span>
      <span class="text-sm font-semibold text-gray-900">Googlebot</span>
    </div>
    <p class="text-sm text-gray-500">Acceso full. Sin condiciones especiales.</p>
  </div>
  <div class="bg-white border border-gray-200 rounded-xl p-5 shadow-sm">
    <div class="flex items-center gap-2 mb-2">
      <span class="w-3 h-3 rounded-full bg-yellow-500"></span>
      <span class="text-sm font-semibold text-gray-900">GPTBot, ClaudeBot, PerplexityBot</span>
    </div>
    <p class="text-sm text-gray-500">Answer-engine con RAG. Deben atribuir la fuente.</p>
  </div>
  <div class="bg-white border border-gray-200 rounded-xl p-5 shadow-sm">
    <div class="flex items-center gap-2 mb-2">
      <span class="w-3 h-3 rounded-full bg-red-500"></span>
      <span class="text-sm font-semibold text-gray-900">Bytespider (TikTok)</span>
    </div>
    <p class="text-sm text-gray-500">Acceso denegado.</p>
  </div>
</div>

La diferencia entre **RAG** (usar tu contenido para responder preguntas) y **training** (usarlo para entrenar un modelo fundacional) es crucial. En mi agents.txt, RAG está permitido por defecto (`rag: true`) pero el entrenamiento está prohibido (`training: false`). Cada agente puede tener sus propias reglas.

Es un **contrato social** — no tiene fuerza legal, pero establece expectativas claras. Y los principales proveedores de IA están empezando a respetar estos formatos.

<div class="not-prose my-8 px-5 py-4 border-l-4 border-primary/30 bg-primary/5 rounded-r-lg">
<p class="text-sm text-gray-700 m-0">¿Tu web solo habla con Google? Los agentes IA ya están buscando webs con agents.txt y OpenAPI. <a href="/servicios/ia/" class="text-primary font-semibold hover:underline">Puedo preparar tu web para la era de los agentes autónomos</a>.</p>
</div>

## Cómo lo implementé: Single Source of Truth

No mantengo tres versiones de los mismos datos. Todo sale de un archivo:

```text
src/api/lib/business-data.ts  ← SSOT (identidad, servicios, precios, voz)
           │
           ├──→ scripts/generate-manifests.ts
           │       ├── public/agents.txt     (markdown + YAML)
           │       ├── public/openapi.json   (OpenAPI 3.1.0)
           │       └── public/llms.txt       (resumen markdown)
           │
           ├──→ src/api/lib/ai.ts            (system prompt del chatbot)
           │
           └──→ src/api/routes/agents.ts     (API JSON /api/agents)
```

Si cambio un precio en `business-data.ts`, se actualiza en el chatbot, en la API, en agents.txt, en llms.txt y en openapi.json. **Un cambio, seis salidas.**

## De agents.txt a chatbot: datos que trabajan solos

El SSOT no solo alimenta archivos estáticos. Mi chatbot (BytIA) construye su system prompt directamente desde `business-data.ts` — los mismos datos que generan agents.txt, openapi.json y llms.txt.

El truco es separar **comportamiento** de **datos**:

```text
Mensaje 1 (system):  "Eres BytIA, la IA asistente de AsturWebs..."
                     → Comportamiento, personalidad, seguridad, cierre

Mensaje 2 (system):  "## Servicios\n- Diseño web: 600-900€..."
                     → Datos de negocio (lo que agents.txt ya tiene)

Mensaje 3 (system):  "El usuario está en /servicios/seo/"
                     → Contexto de página (auto-detectado por el widget)
```

¿Por qué separarlos? Porque el comportamiento rara vez cambia, pero los precios, servicios y horarios sí. Si actualizo un precio en `business-data.ts`, el chatbot lo refleja al instante — sin tocar el prompt, sin riesgo de inconsistencias.

Esto mismo lo puedes hacer con cualquier chatbot: usa los datos de tu agents.txt como contexto de negocio y manten las instrucciones de comportamiento aparte. Si mañana añades un servicio o cambias un precio, el cambio se propaga a tu web, a la IA que lee tu site, y al chatbot que atiende a tus visitantes. **Un cambio, todas las salidas.**

## El repo público: un estándar abierto

No quería que esto fuera solo para mi web. Así que creé un repositorio público:

<div class="not-prose grid grid-cols-1 sm:grid-cols-2 gap-4 my-8">
  <div class="bg-white border border-gray-200 rounded-xl p-5 shadow-sm hover:shadow-md transition-shadow">
    <p class="text-sm font-bold text-gray-900 mb-1">Repo publico</p>
    <p class="text-sm text-gray-500 mt-1"><a href="https://github.com/asturwebs/agents-txt" class="text-indigo-600 hover:underline">github.com/asturwebs/agents-txt</a></p>
  </div>
  <div class="bg-white border border-gray-200 rounded-xl p-5 shadow-sm hover:shadow-md transition-shadow">
    <p class="text-sm font-bold text-gray-900 mb-1">Licencia MIT</p>
    <p class="text-sm text-gray-500 mt-1">Copia, adapta, integra donde quieras.</p>
  </div>
  <div class="bg-white border border-gray-200 rounded-xl p-5 shadow-sm hover:shadow-md transition-shadow">
    <p class="text-sm font-bold text-gray-900 mb-1">Documentacion trilingue</p>
    <p class="text-sm text-gray-500 mt-1">README en ingles, espanol y chino.</p>
  </div>
  <div class="bg-white border border-gray-200 rounded-xl p-5 shadow-sm hover:shadow-md transition-shadow">
    <p class="text-sm font-bold text-gray-900 mb-1">JSON Schema</p>
    <p class="text-sm text-gray-500 mt-1">Valida tu implementacion con el schema oficial.</p>
  </div>
</div>

La idea es simple: si `robots.txt` es para crawlers y `llms.txt` es para LLMs, `agents.txt` es para **agentes autónomos**. Y debería ser un estándar de la comunidad, no propiedad de nadie.

## Las tres capas juntas

Para que tu web esté preparada para 2026 y más allá, necesitas las tres capas:

<div class="not-prose grid grid-cols-1 sm:grid-cols-3 gap-4 my-8">
  <div class="bg-white border border-gray-200 rounded-xl p-5 shadow-sm hover:shadow-md transition-shadow">
    <div class="flex items-center gap-2 mb-3">
      <span class="w-3 h-3 rounded-full bg-blue-500"></span>
      <span class="text-sm font-semibold text-gray-900">Capa Clasica</span>
    </div>
    <p class="text-sm text-gray-700 font-medium">robots.txt + sitemap</p>
    <p class="text-sm text-gray-500 mt-1"><strong>Para:</strong> Googlebot, Bingbot</p>
    <p class="text-sm text-gray-500"><strong>Resuelve:</strong> Rastreo e indexacion</p>
  </div>
  <div class="bg-white border border-gray-200 rounded-xl p-5 shadow-sm hover:shadow-md transition-shadow">
    <div class="flex items-center gap-2 mb-3">
      <span class="w-3 h-3 rounded-full bg-purple-500"></span>
      <span class="text-sm font-semibold text-gray-900">Capa Contexto</span>
    </div>
    <p class="text-sm text-gray-700 font-medium"><a href="/blog/llms-txt-como-preparar-tu-web-para-ia-2026/" class="text-indigo-600 hover:underline">llms.txt + llms-full.txt</a></p>
    <p class="text-sm text-gray-500 mt-1"><strong>Para:</strong> ChatGPT, Claude, Perplexity</p>
    <p class="text-sm text-gray-500"><strong>Resuelve:</strong> Comprension semantica</p>
  </div>
  <div class="bg-white border border-gray-200 rounded-xl p-5 shadow-sm hover:shadow-md transition-shadow">
    <div class="flex items-center gap-2 mb-3">
      <span class="w-3 h-3 rounded-full bg-green-500"></span>
      <span class="text-sm font-semibold text-gray-900">Capa Agentica</span>
    </div>
    <p class="text-sm text-gray-700 font-medium">agents.txt + openapi.json</p>
    <p class="text-sm text-gray-500 mt-1"><strong>Para:</strong> Agentes autonomos</p>
    <p class="text-sm text-gray-500"><strong>Resuelve:</strong> Identidad + permisos + ejecucion</p>
  </div>
</div>

Si te fijas, cada capa **añade capacidad sin reemplazar la anterior**. No eliminas robots.txt porque tengas agents.txt. Los tres coexisten.

## Un ecosistema en crecimiento

agents.txt no está solo. Hay media docena de estándares emergentes que cubren distintas capas de la interacción IA-web:

<div class="not-prose space-y-3 my-8">
  <div class="flex items-start gap-3 bg-white border border-gray-200 rounded-lg p-4">
    <span class="shrink-0 text-xs font-bold px-2 py-1 rounded bg-green-100 text-green-700">Estándar</span>
    <div>
      <p class="text-sm font-semibold text-gray-900"><strong>robots.txt</strong> (RFC 9309)</p>
      <p class="text-sm text-gray-500">Qué rastrear. Estándar desde 1994.</p>
    </div>
  </div>
  <div class="flex items-start gap-3 bg-white border border-gray-200 rounded-lg p-4">
    <span class="shrink-0 text-xs font-bold px-2 py-1 rounded bg-blue-100 text-blue-700">Adopción rápida</span>
    <div>
      <p class="text-sm font-semibold text-gray-900"><strong>llms.txt</strong></p>
      <p class="text-sm text-gray-500">Qué entender. Answer.AI, 2024.</p>
    </div>
  </div>
  <div class="flex items-start gap-3 bg-white border border-gray-200 rounded-lg p-4">
    <span class="shrink-0 text-xs font-bold px-2 py-1 rounded bg-indigo-100 text-indigo-700">v2.0</span>
    <div>
      <p class="text-sm font-semibold text-gray-900"><strong>agents.txt</strong></p>
      <p class="text-sm text-gray-500">Quién eres + qué pueden hacer. Este estándar.</p>
    </div>
  </div>
  <div class="flex items-start gap-3 bg-white border border-gray-200 rounded-lg p-4">
    <span class="shrink-0 text-xs font-bold px-2 py-1 rounded bg-yellow-100 text-yellow-700">Propuesta</span>
    <div>
      <p class="text-sm font-semibold text-gray-900"><a href="https://github.com/jaspervanveen/agents-brief.txt" class="text-indigo-600 hover:underline">agents-brief.txt</a></p>
      <p class="text-sm text-gray-500">Instrucciones de misión para agentes.</p>
    </div>
  </div>
  <div class="flex items-start gap-3 bg-white border border-gray-200 rounded-lg p-4">
    <span class="shrink-0 text-xs font-bold px-2 py-1 rounded bg-yellow-100 text-yellow-700">Propuesta</span>
    <div>
      <p class="text-sm font-semibold text-gray-900"><a href="https://spawning.ai/ai-txt" class="text-indigo-600 hover:underline">ai.txt</a></p>
      <p class="text-sm text-gray-500">Consentimiento de entrenamiento. Spawning.ai.</p>
    </div>
  </div>
  <div class="flex items-start gap-3 bg-white border border-gray-200 rounded-lg p-4">
    <span class="shrink-0 text-xs font-bold px-2 py-1 rounded bg-yellow-100 text-yellow-700">Propuesta</span>
    <div>
      <p class="text-sm font-semibold text-gray-900"><a href="https://www.reddit.com/r/webdev/comments/1jln4dp/" class="text-indigo-600 hover:underline">operate.txt</a></p>
      <p class="text-sm text-gray-500">Cómo operar la UI. Propuesta comunitaria.</p>
    </div>
  </div>
  <div class="flex items-start gap-3 bg-white border border-gray-200 rounded-lg p-4">
    <span class="shrink-0 text-xs font-bold px-2 py-1 rounded bg-blue-100 text-blue-700">Activo</span>
    <div>
      <p class="text-sm font-semibold text-gray-900"><a href="https://modelcontextprotocol.io/" class="text-indigo-600 hover:underline">Model Context Protocol</a></p>
      <p class="text-sm text-gray-500">Descubrimiento de herramientas en runtime. Anthropic, abierto.</p>
    </div>
  </div>
</div>

La IETF tiene 11 borradores compitiendo en este espacio y ninguno ha logrado adopción. **Los estándares se imponen por uso real, no por comités.** Por eso agents.txt está en producción desde el día uno.

## Cómo empezar

<div class="not-prose space-y-3 my-8">
  <div class="flex items-start gap-3 bg-white border border-gray-200 rounded-lg p-4">
    <span class="shrink-0 w-7 h-7 rounded-full bg-indigo-600 text-white text-xs font-bold flex items-center justify-center">1</span>
    <div>
      <p class="text-sm font-semibold text-gray-900">Ya tienes robots.txt y sitemap</p>
      <p class="text-sm text-gray-500">La mayoria de CMS los generan.</p>
    </div>
  </div>
  <div class="flex items-start gap-3 bg-white border border-gray-200 rounded-lg p-4">
    <span class="shrink-0 w-7 h-7 rounded-full bg-indigo-600 text-white text-xs font-bold flex items-center justify-center">2</span>
    <div>
      <p class="text-sm font-semibold text-gray-900">Crea <code class="text-xs bg-gray-100 px-1.5 py-0.5 rounded">llms.txt</code></p>
      <p class="text-sm text-gray-500">Un markdown con tu resumen de negocio (<a href="/blog/llms-txt-como-preparar-tu-web-para-ia-2026/" class="text-indigo-600 hover:underline">te explique como en el post anterior</a>).</p>
    </div>
  </div>
  <div class="flex items-start gap-3 bg-white border border-gray-200 rounded-lg p-4">
    <span class="shrink-0 w-7 h-7 rounded-full bg-indigo-600 text-white text-xs font-bold flex items-center justify-center">3</span>
    <div>
      <p class="text-sm font-semibold text-gray-900">Crea <code class="text-xs bg-gray-100 px-1.5 py-0.5 rounded">agents.txt</code></p>
      <p class="text-sm text-gray-500">Usa la <a href="https://github.com/asturwebs/agents-txt" class="text-indigo-600 hover:underline">plantilla del repo</a> y adapta identidad, servicios y condiciones.</p>
    </div>
  </div>
  <div class="flex items-start gap-3 bg-white border border-gray-200 rounded-lg p-4">
    <span class="shrink-0 w-7 h-7 rounded-full bg-gray-400 text-white text-xs font-bold flex items-center justify-center">4</span>
    <div>
      <p class="text-sm font-semibold text-gray-900">Opcional: anade <code class="text-xs bg-gray-100 px-1.5 py-0.5 rounded">openapi.json</code></p>
      <p class="text-sm text-gray-500">Si tienes API, describe los endpoints con OpenAPI 3.1.0.</p>
    </div>
  </div>
  <div class="flex items-start gap-3 bg-white border border-gray-200 rounded-lg p-4">
    <span class="shrink-0 w-7 h-7 rounded-full bg-indigo-600 text-white text-xs font-bold flex items-center justify-center">5</span>
    <div>
      <p class="text-sm font-semibold text-gray-900">Conecta todo</p>
      <p class="text-sm text-gray-500">Añade <code class="text-xs bg-gray-100 px-1.5 py-0.5 rounded">&lt;link rel="agent" href="/agents.txt"&gt;</code> en el <code class="text-xs bg-gray-100 px-1.5 py-0.5 rounded">&lt;head&gt;</code> de tu HTML para el descubrimiento.</p>
    </div>
  </div>
</div>

El estándar es nuevo, la adopción está creciendo, y las herramientas de IA están empezando a usarlo. Es el momento de estar preparado.

---

<div class="not-prose my-12 bg-indigo-50 border border-indigo-100 rounded-2xl p-8 text-center">
<p class="text-xl font-semibold text-gray-900 mb-2">¿Quieres que tu web hable con la IA?</p>
<p class="text-gray-600 mb-6">Implemento robots.txt, llms.txt, agents.txt y OpenAPI en tu web para que Google, ChatGPT y los agentes autónomos te encuentren.</p>
<a href="/contacto/" class="inline-block bg-primary text-white px-8 py-3 rounded-lg font-semibold hover:bg-primary-hover transition-colors">Hablemos de tu proyecto →</a>
</div>