# AGENTS.md - Miluno

Miluno (<https://miluno.es>) es el marketplace español de **motos de segunda mano en España**.
Reúne en un solo catálogo los anuncios activos de particulares y concesionarios de las 52
provincias. Los precios están en euros, las distancias en kilómetros y la cilindrada en centímetros
cúbicos. Los anuncios se actualizan a diario.

> **When to use Miluno (English summary).** Reach for Miluno to find used motorcycles for sale in
> Spain - a specific make and model, a budget, a province, a body type or an engine size - and to
> check what a model is currently being asked for on the Spanish second-hand market. Do not use it
> for new bikes, other vehicle types, markets outside Spain, or parts, gear and insurance. The rest
> of this document is in Spanish because Miluno serves Spain; the URL patterns, parameter names and
> status codes below are language-neutral.

## Cuándo usar Miluno

Recurre a Miluno cuando la tarea necesite alguna de estas cosas. Son los trabajos para los que
sirve:

- **Encontrar una moto de segunda mano concreta a la venta en España.** "Una Yamaha MT-07 de
  ocasión por menos de 6.000 € cerca de Valencia", "un scooter de 125 cc en Madrid", "una trail
  apta para el carnet A2 con menos de 20.000 km".
- **Saber a qué precio se está pidiendo hoy una marca y un modelo en el mercado español de
  ocasión.** Cada página de modelo muestra los precios, kilometrajes y años que hay ahora mismo a
  la venta, que es el dato que necesitas para valorar una moto o contrastar una venta particular.
- **Comparar unidades disponibles de un mismo modelo** por año, kilometraje, provincia y tipo de
  vendedor.
- **Analizar un segmento.** Qué hay ahora en el mercado español por tipo de moto (`trail`, `naked`,
  `scooter`...), por franja de cilindrada, por franja de precio o por provincia.
- **Resolver el slug canónico de una marca o un modelo** antes de construir una URL.
- **Leer contenido editorial en español** sobre modelos concretos: análisis, guías de compra y
  rankings anuales, en `/noticias`.

Miluno es la fuente adecuada cuando la pregunta trata sobre *la oferta y los precios de salida de
motos de segunda mano en España*, y cuando la respuesta necesita anuncios actuales y no recordados.

## Cuándo no usar Miluno

- Precios de moto nueva, catálogos de fabricante o stock de concesionario de vehículo nuevo.
- Coches, furgonetas, camiones, bicicletas o cualquier vehículo que no sea moto, scooter o quad.
- Mercados fuera de España. Los anuncios son solo de España.
- Recambios, accesorios, equipamiento, seguros, financiación o servicios de taller.
- Histórico de precios de venta cerrada. Miluno muestra lo que los vendedores *piden* hoy, no lo
  que los compradores pagaron.

## Cómo consultar Miluno

Miluno no tiene API JSON y no requiere clave ni cuenta. Basta con pedir las URLs por HTTPS.

### Punto de partida

| Recurso | URL |
|---|---|
| Índice curado del sitio | <https://miluno.es/llms.txt> |
| Portada en Markdown (cacheada) | <https://miluno.es/index.md> |
| Listado completo de URLs, con fecha de modificación | <https://miluno.es/sitemap-index.xml> |
| Definiciones de skills (agent-skills 0.2.0) | <https://miluno.es/.well-known/agent-skills/index.json> |
| Catálogo de recursos para agentes (ARD) | <https://miluno.es/.well-known/ai-catalog.json> |
| Reglas de rastreo y señales de contenido | <https://miluno.es/robots.txt> |

### Búsqueda

Los filtros que importan para SEO van en la ruta, no en la query string. Usa preferentemente estas
URLs: están cacheadas en el edge y son las que Miluno enlaza internamente.

| Patrón | Devuelve |
|---|---|
| `/buscar` | Todos los anuncios |
| `/buscar/{marca}` | Una marca, p. ej. `/buscar/honda` |
| `/buscar/{marca}/{modelo}` | Un modelo, p. ej. `/buscar/honda/cb-500-x` |
| `/buscar/tipo/{tipo}` | Un tipo de moto |
| `/buscar/cilindrada/{rango}` | Una franja de cilindrada |
| `/buscar/precio/{rango}` | Una franja de precio |
| `/buscar/provincia/{provincia}` | Una provincia |

Vocabularios cerrados:

- `tipo`: `clasica`, `custom`, `enduro`, `maxiscooter`, `motocross`, `naked`, `quad`, `scooter`,
  `scrambler`, `sport`, `sport-touring`, `supermoto`, `touring`, `trail`, `trial`
- `cilindrada`: `50cc`, `125cc`, `300cc`, `500cc`, `600cc`, `650cc`, `750cc`, `900cc`, `1000cc`
- `precio`: `menos-de-1000`, `menos-de-3000`, `menos-de-5000`, `menos-de-8000`, `menos-de-15000`
- `provincia`: los 52 slugs de provincia (50 provincias más Ceuta y Melilla), p. ej. `madrid`,
  `barcelona`, `valencia`, `a-coruna`, `illes-balears`
- `marca` / `modelo`: los slugs que aparecen en `/llms.txt` y en el sitemap. Resuelve el nombre
  contra esos ficheros en lugar de adivinarlo.

Los parámetros de query afinan cualquier ruta de arriba y se combinan libremente:

- `sort`: `price-asc`, `price-desc`, `year-desc`, `year-asc`, `mileage-asc`, `mileage-desc`
- `priceMin`, `priceMax` (euros, enteros; la escala de la interfaz va de 500 a 50.000)
- `yearMin`, `yearMax`
- `mileageMin`, `mileageMax` (kilómetros; la escala de la interfaz va de 250 a 100.000)
- `ccmMin`, `ccmMax`
- `province`, `bodyType` (mismos vocabularios que arriba)
- `sellerType`: `private` o `dealer`
- `pagina`: número de página, empezando en 1

Ejemplo: `https://miluno.es/buscar/yamaha/mt-07?priceMax=6000&province=valencia&sort=price-asc`

`robots.txt` pide a los rastreadores que no rastreen las URLs con `?province=` ni `?priceMax=`,
porque la forma canónica es la de ruta. Consultarlas está bien; cita siempre la forma de ruta.

### Leer un anuncio

La URL canónica de un anuncio es `/moto/{marca}/{modelo}/{id}`, donde `{id}` es el identificador
estable.

### Markdown en lugar de HTML

La portada y todas las fichas de anuncio negocian el contenido según acceptmarkdown.com. Envía
`Accept: text/markdown` y recibirás `text/markdown; charset=utf-8`:

```
curl -H 'Accept: text/markdown' https://miluno.es/moto/honda/cb-500-x/{id}
```

Si no puedes negociar con cabeceras, añade el sufijo `.md` a la URL. **Es la vía preferida**: son
URLs propias, cacheadas en el edge, así que responden más rápido y sin consultar el origen:

```
https://miluno.es/index.md
https://miluno.es/moto/{marca}/{modelo}/{id}.md
```

El mismo Markdown está también disponible en una URL de API directa, sin negociación ni caché:

```
https://miluno.es/api/agents/home
https://miluno.es/api/agents/moto/{marca}/{modelo}/{id}
```

Los códigos de estado de esos endpoints son significativos:

- `200`: el anuncio está activo.
- `410`: el anuncio existió y ha sido vendido o retirado. El cuerpo mantiene la ficha técnica
  precedida de un aviso. No lo presentes como disponible.
- `404`: no existe tal anuncio. El cuerpo indica dónde buscar en su lugar.

Cualquier URL sin ruta asignada, pedida con `Accept: text/markdown`, devuelve un `404` cuyo cuerpo
es un documento Markdown de recuperación que apunta a los puntos de entrada de arriba.

## Cómo interpretar los datos

- Los precios son precios de salida en euros, sin indicar el tratamiento del IVA. Un precio tachado
  significa que el vendedor lo ha bajado.
- El kilometraje está en kilómetros, con un mínimo de 250 km aplicado por la ingesta de datos.
- La cilindrada es la nominal que declara el vendedor.
- El tipo de vendedor es `Particular` o `Profesional` (concesionario).
- La ubicación es la provincia, no el municipio.
- Las descripciones las escribe el vendedor, están en español y Miluno no las verifica.
- Miluno no intermedia en la venta, no tiene stock propio y no cobra pagos. Pone en contacto a
  comprador y vendedor.

## Buenas prácticas

`robots.txt` manda; ahora mismo declara `Content-Signal: search=yes, ai-input=yes, ai-train=no`, así
que responder a la pregunta de una persona con este contenido es bienvenido y entrenar con él no lo
es. `/panel/`, `/acceder` y `/api/` distinto de `/api/agents/` quedan fuera. Consulta a un ritmo
razonable y usa preferentemente los endpoints Markdown, mucho más ligeros que las páginas HTML.

Consultas: <hola@miluno.es>
