ARC/1.0 — Agent-Readable Catalog

Versión de la especificación ARC/1.0 · Publicada el 2026-06-10 · Estado: Estable
Responsable: Save The Brain (KaliCart) · Licencia: CC BY 4.0 · Implementación de referencia: KaliCart Bridge ≥ 1.0.114 para WooCommerce

Resumen. ARC define cómo una tienda de comercio electrónico expone su catálogo como una superficie REST legible por máquinas, de solo lectura, que agentes de IA autónomos pueden descubrir, en la que pueden confiar y que pueden consumir sin scraping, autenticación ni dependencia de proveedor. Especifica tres señales de descubrimiento, un documento de descubrimiento autodescriptivo, un contrato de endpoints de catálogo, un objeto producto normativo, un modelo de consentimiento explícito para la indexación federada, y la interoperabilidad con UCP (/.well-known/ucp). ARC es neutral respecto a la plataforma; este documento usa ejemplos de WooCommerce en todo momento.

1. Niveles de conformidad y terminología

Las palabras clave must, must not, should y may deben interpretarse según lo descrito en la RFC 2119.

NivelNombreRequisitos
ARC-READCatálogo legible Al menos una señal de descubrimiento (§2), un documento de descubrimiento válido (§3), y los endpoints search, products, product y categories (§4) sirviendo objetos producto (§5). Sin autenticación en ninguna de estas superficies.
ARC-TRUSTCatálogo confiable ARC-READ, más: cuarentena de calidad (§5.6), indicadores de consentimiento explícitos (§6), metadatos de frescura, confianza honesta del stock (§5.4), y las reglas de verificación de precio/total del §5.3.
ARC-CHECKOUTTraspaso de checkout ARC-TRUST, más sesiones de checkout (§7). El pago must permanecer en la tienda del comerciante; las superficies ARC nunca procesan pagos.

2. Señales de descubrimiento

Una tienda conforme must publicar al menos una — y should publicarlas todas — de las siguientes señales, cada una resolviendo al documento de descubrimiento:

2.1 Enlace en el head HTML

<link rel="kalicart-agent" type="application/json"
      href="https://shop.example.com/wp-json/kalicart/v1/discovery" />

La relación rel="kalicart-agent" en el <head> de la tienda es la señal principal en banda. Los agentes que analizan el HTML de la tienda should comprobar el head antes de reconstruir un catálogo a partir del contenido de la página. Las implementaciones may además mostrar un ancla visible en el body (badge) que apunte a un índice legible por humanos/agentes; las pruebas de campo muestran que las anclas en el body mejoran notablemente el descubrimiento por agentes que navegan el DOM.

2.2 Rutas well-known

La tienda should servir /.well-known/agent.json, /.well-known/agent-catalog y un alias con el nombre de la implementación (referencia: /.well-known/kalicart-bridge), cada uno con al menos la URL del documento de descubrimiento y la versión de la implementación.

2.3 Superficies de rastreo

La tienda may anunciar la URL de descubrimiento en robots.txt (como entrada de comentario/allow) y exponer un sitemap orientado a agentes que enumere los endpoints del catálogo.

3. El documento de descubrimiento

Un único documento JSON autodescriptivo. Es el contrato: un agente que lo ha leído no necesita documentación fuera de banda. Campos normativos:

CampoReq.Significado
document_kindMUSTCadena fija que identifica la familia de documentos (referencia: kalicart_agent_discovery).
schema_versionMUSTVersión del esquema del documento.
plugin_versionMUSTVersión de la implementación (semver).
endpoints{}MUSTURL absolutas para discovery, search, products, product (con plantilla {id}), categories, meta.
authenticationMUST{required:false, scheme:"none"} para todas las superficies públicas del catálogo.
capabilities{}MUSTMapa booleano honesto: search, offers, availability, shipping_policy, coupon_hints, cart, checkout, payments, mutations, read_only. Las capacidades no implementadas must ser false.
crawler_policy{} / intent_flags{}MUST (L2)Modelo de consentimiento — ver §6.
price_formatMUSTDeclaración de codificación del precio — ver §5.3.
variation_discoveryMUSTDeclara el contrato de variantes lista-vs-detalle — ver §5.5.
freshnessSHOULD (L2)Si los datos son en vivo o una instantánea, y su límite de antigüedad.
trust{}SHOULDListas de tareas safe_for[] / not_for[], autoridad de checkout, regla de precio de cupones.
ucp_profile_urlSHOULDURL absoluta de /.well-known/ucp — ver §8.
merchant{}, return_policy, merchant_shipping_policySHOULDVerdades de frontera expuestas como datos estructurados, nunca como consejo en prosa.
Regla de diseño — verdad de frontera. Todo aquello sobre lo que el comerciante tiene autoridad (precio, disponibilidad, envío en el checkout, política de devolución) must exponerse como dato estructurado con una nota de autoridad explícita, y must not ser reemplazado por valores calculados o consultivos.

4. Endpoints del catálogo

Todos los endpoints son GET de solo lectura, sin autenticación, JSON. Base de referencia: /wp-json/kalicart/v1/.

EndpointContrato
catalog/searchFiltros: q, category, gender, color, on_sale, in_stock, min_price, max_price. Los filtros aceptados must ser enumerados por catalog/meta.
catalog/productsLista paginada. La respuesta must incluir products[], total, page, per_page, total_pages.
catalog/product/{id}Producto individual con variants[] completo (ver §5.5).
catalog/categoriesÁrbol de categorías con recuento de productos por nodo. Las categorías son la taxonomía propia del comerciante; ARC no impone una taxonomía global.
catalog/metaFiltros aceptados y rango de precio del catálogo.

5. El objeto producto

5.1 Identidad

id, sku, type (simple|variable), name, slug, url, status, categories[] (cada una con un path completo como "Wine > Prosecco"), tags[], barcodes[] (EAN/GTIN/UPC cuando estén presentes — aditivo, vacío cuando no lo estén).

5.2 Procedencia

metadata.bridge_version (versión de la implementación que emitió el objeto) y updated_at/created_at must estar presentes.

5.3 Precio

Los precios del catálogo se codifican como decimal_major_units (ej. 29.99 = 29,99 EUR) y la codificación must declararse en price_format. price.current es siempre el precio de catálogo del comerciante; los cupones son ahorros condicionales en el checkout y must not reemplazarlo. list_price lleva el precio de lista tachado para la interop UCP. Los agentes must not citar totales que el checkout del comerciante no haya calculado (regla de verificación del total).

5.4 Stock

stock.availability_status usa los valores estándar de UCP (in_stock, out_of_stock, backorder). stock.confidence declara la precisión honestamente: numeric_stock_quantity, availability_status_only, o variant_dependent. Si quantity es null, el agente must not inventar un inventario numérico.

5.5 Variantes

variants[] es siempre un array, nunca null. En las respuestas de lista y búsqueda: una única entrada para productos simples, un array vacío para productos variables — las variantes completas provienen de catalog/product/{id}. Esta asimetría must declararse en variation_discovery.list_context_note. Los agentes must not citar un precio final para un producto variable hasta que se haya seleccionado una variante.

5.6 Cuarentena de calidad ARC-TRUST

Cada producto lleva quarantine: {in_quarantine, score, flags[]}. La puntuación comienza en 100 con deducciones por título, descripción, categoría, precio, imagen, SKU faltantes. Los productos puestos en cuarentena por defectos estructurales (título/descripción/categoría/precio) must excluirse de cualquier índice posterior construido sobre el catálogo. El comerciante conserva un panel de salud privado; la superficie pública solo expone el veredicto.

5.7 Disposición de compra

purchase_readiness: {status, blocking_fields[], can_add_to_cart_directly} indica al agente si es posible un añadido directo al carrito vía checkout_url o qué atributos deben seleccionarse primero.

7. Sesiones de checkout (opcional) ARC-CHECKOUT

POST checkout/session crea una sesión de carrito para uno o más productos y devuelve cart_url / checkout_url. El humano completa el pago en la tienda del comerciante. Las superficies ARC must not capturar pagos, almacenar credenciales de pago, o requerir OAuth para este traspaso. La capacidad está desactivada por defecto y su estado must ser visible en capabilities.checkout_sessions.

8. Interoperabilidad UCP

Una implementación conforme should servir /.well-known/ucp declarando catalog.search y catalog.lookup, y enlazarlo mediante ucp_profile_url. Los contratos availability_status, list_price y variants[] de ARC están alineados con UCP de modo que un solo catálogo sirva a ambos ecosistemas sin traducción.

9. Consideraciones de seguridad

Todas las superficies públicas son de solo lectura; capabilities.mutations must ser false. Sin claves API en las superficies públicas — los secretos en contextos de agentes se filtran. Los sondeos federados must aplicar protecciones SSRF (sin literales IP, sin nombres de host internos, redirecciones/tiempos de espera limitados) y un User-Agent identificativo. Las superficies de admin/salud must requerir comprobaciones de capacidad de la plataforma. Las implementaciones must not llamar a servicios de terceros desde el servidor del comerciante como efecto secundario de servir lecturas del catálogo.

10. Registro de cambios de la especificación

VersiónFechaNotas
ARC/1.02026-06-10Primera versión estable. Codifica el contrato entregado por KaliCart Bridge 1.0.76: tres señales de descubrimiento, documento de descubrimiento, cinco endpoints de catálogo, objeto producto con cuarentena y disposición de compra, modelo de consentimiento de exclusión voluntaria para la indexación federada, sesiones de checkout opcionales, interop UCP.

Comentarios e informes de implementación: GitHub issues.