ARC/1.0 — Agent-Readable Catalog

Versione specifica ARC/1.0 · Pubblicata il 2026-06-10 · Stato: Stabile
Steward: Save The Brain (KaliCart) · Licenza: CC BY 4.0 · Implementazione di riferimento: KaliCart Bridge ≥ 1.0.114 per WooCommerce

Abstract. ARC definisce come uno storefront e-commerce espone il proprio catalogo come superficie REST leggibile da macchine, in sola lettura, che agenti AI autonomi possono scoprire, di cui possono fidarsi e che possono consumare senza scraping, autenticazione o vendor lock-in. Specifica tre segnali di discovery, un documento di discovery autodescrittivo, un contratto per gli endpoint del catalogo, un oggetto prodotto normativo, un modello di consenso esplicito per l'indicizzazione federata e l'interoperabilità con UCP (/.well-known/ucp). ARC è neutrale rispetto alla piattaforma; questo documento usa esempi WooCommerce.

1. Livelli di conformità e terminologia

Le parole chiave must, must not, should e may vanno interpretate come descritto nell'RFC 2119.

LivelloNomeRequisiti
ARC-READCatalogo leggibile Almeno un segnale di discovery (§2), un documento di discovery valido (§3) e gli endpoint search, products, product e categories (§4) che servono oggetti prodotto (§5). Nessuna autenticazione su nessuna di queste superfici.
ARC-TRUSTCatalogo affidabile ARC-READ, più: quarantena qualità (§5.6), flag di consenso espliciti (§6), metadati di freshness, confidenza dello stock onesta (§5.4) e le regole di verifica prezzo/totale del §5.3.
ARC-CHECKOUTHandoff di checkout ARC-TRUST, più sessioni di checkout (§7). Il pagamento must restare sullo storefront del merchant; le superfici ARC non processano mai pagamenti.

2. Segnali di discovery

Uno storefront conforme must pubblicare almeno uno — e should pubblicarli tutti — dei seguenti segnali, ciascuno risolvibile verso il documento di discovery:

2.1 Link nell'head HTML

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

La relazione rel="kalicart-agent" nell'<head> dello storefront è il segnale primario in-band. Gli agenti che fanno il parsing dell'HTML dello storefront should controllare l'head prima di ricostruire un catalogo dal contenuto della pagina. Le implementazioni may inoltre mostrare un'ancora visibile nel body (badge) che punta a un indice leggibile da umani/agenti; i test sul campo mostrano che le ancore nel body migliorano sensibilmente la discovery da parte di agenti che navigano il DOM.

2.2 Percorsi well-known

Lo storefront should servire /.well-known/agent.json, /.well-known/agent-catalog e un alias con nome dell'implementazione (riferimento: /.well-known/kalicart-bridge), ciascuno contenente come minimo l'URL del documento di discovery e la versione dell'implementazione.

2.3 Superfici di crawl

Lo storefront may pubblicizzare l'URL di discovery nel robots.txt (come voce commento/allow) ed esporre una sitemap orientata agli agenti che enumera gli endpoint del catalogo.

3. Il documento di discovery

Un unico documento JSON autodescrittivo. È il contratto: un agente che lo ha letto non ha bisogno di documentazione fuori banda. Campi normativi:

CampoReq.Significato
document_kindMUSTStringa fissa che identifica la famiglia di documenti (riferimento: kalicart_agent_discovery).
schema_versionMUSTVersione dello schema del documento.
plugin_versionMUSTVersione dell'implementazione (semver).
endpoints{}MUSTURL assoluti per discovery, search, products, product (templato {id}), categories, meta.
authenticationMUST{required:false, scheme:"none"} per tutte le superfici pubbliche del catalogo.
capabilities{}MUSTMappa booleana onesta: search, offers, availability, shipping_policy, coupon_hints, cart, checkout, payments, mutations, read_only. Le capability non implementate must essere false.
crawler_policy{} / intent_flags{}MUST (L2)Modello di consenso — vedi §6.
price_formatMUSTDichiarazione dell'encoding del prezzo — vedi §5.3.
variation_discoveryMUSTDichiara il contratto delle varianti lista-vs-dettaglio — vedi §5.5.
freshnessSHOULD (L2)Se i dati sono live o uno snapshot, e il relativo bound di staleness.
trust{}SHOULDListe di task safe_for[] / not_for[], autorità di checkout, regola prezzo coupon.
ucp_profile_urlSHOULDURL assoluto di /.well-known/ucp — vedi §8.
merchant{}, return_policy, merchant_shipping_policySHOULDVerità di confine esposte come dati strutturati, mai come indicazioni discorsive.
Regola di design — verità di confine. Tutto ciò per cui il merchant è l'autorità (prezzo, disponibilità, spedizione al checkout, politica di reso) must essere esposto come dato strutturato con una nota di autorità esplicita, e must not essere sostituito da valori calcolati o consultivi.

4. Endpoint del catalogo

Tutti gli endpoint sono GET in sola lettura, non autenticati, JSON. Base di riferimento: /wp-json/kalicart/v1/.

EndpointContratto
catalog/searchFiltri: q, category, gender, color, on_sale, in_stock, min_price, max_price. I filtri accettati must essere enumerati da catalog/meta.
catalog/productsLista paginata. La risposta must includere products[], total, page, per_page, total_pages.
catalog/product/{id}Singolo prodotto con variants[] completo (vedi §5.5).
catalog/categoriesAlbero categorie con conteggio prodotti per nodo. Le categorie sono la tassonomia propria del merchant; ARC non impone una tassonomia globale.
catalog/metaFiltri accettati e range di prezzo del catalogo.

5. L'oggetto prodotto

5.1 Identità

id, sku, type (simple|variable), name, slug, url, status, categories[] (ciascuna con un path completo come "Wine > Prosecco"), tags[], barcodes[] (EAN/GTIN/UPC quando presenti — additivo, vuoto quando assenti).

5.2 Provenienza

metadata.bridge_version (versione dell'implementazione che ha emesso l'oggetto) e updated_at/created_at must essere presenti.

5.3 Prezzo

I prezzi del catalogo sono codificati come decimal_major_units (es. 29.99 = 29,99 EUR) e l'encoding must essere dichiarato in price_format. price.current è sempre il prezzo di catalogo del merchant; i coupon sono risparmi condizionali in checkout e must not sostituirlo. list_price porta il prezzo di listino barrato per l'interop UCP. Gli agenti must not citare totali che il checkout del merchant non ha calcolato (regola di verifica del totale).

5.4 Stock

stock.availability_status usa i valori standard UCP (in_stock, out_of_stock, backorder). stock.confidence dichiara onestamente la precisione: numeric_stock_quantity, availability_status_only, oppure variant_dependent. Se quantity è null l'agente must not inventare un inventario numerico.

5.5 Varianti

variants[] è sempre un array, mai null. Nelle risposte di lista e ricerca: un singolo elemento per i prodotti semplici, un array vuoto per i prodotti variabili — le varianti complete arrivano da catalog/product/{id}. Questa asimmetria must essere dichiarata in variation_discovery.list_context_note. Gli agenti must not citare un prezzo finale per un prodotto variabile finché non è stata selezionata una variante.

5.6 Quarantena qualità ARC-TRUST

Ogni prodotto porta quarantine: {in_quarantine, score, flags[]}. Il punteggio parte da 100 con detrazioni per titolo, descrizione, categoria, prezzo, immagine, SKU mancanti. I prodotti messi in quarantena per difetti strutturali (titolo/descrizione/categoria/prezzo) must essere esclusi da qualsiasi indice a valle costruito sul catalogo. Il merchant mantiene una dashboard di salute privata; la superficie pubblica espone solo il verdetto.

5.7 Prontezza all'acquisto

purchase_readiness: {status, blocking_fields[], can_add_to_cart_directly} dice all'agente se un add-to-cart diretto tramite checkout_url è possibile o quali attributi vanno selezionati prima.

7. Sessioni di checkout (opzionale) ARC-CHECKOUT

POST checkout/session crea una sessione carrello per uno o più prodotti e restituisce cart_url / checkout_url. L'umano completa il pagamento sullo storefront del merchant. Le superfici ARC must not catturare pagamenti, memorizzare credenziali di pagamento, o richiedere OAuth per questo handoff. La capability è disattivata di default e il suo stato must essere visibile in capabilities.checkout_sessions.

8. Interoperabilità UCP

Un'implementazione conforme should servire /.well-known/ucp dichiarando catalog.search e catalog.lookup, e collegarlo tramite ucp_profile_url. I contratti availability_status, list_price e variants[] di ARC sono allineati a UCP così che un solo catalogo serva entrambi gli ecosistemi senza traduzione.

9. Considerazioni di sicurezza

Tutte le superfici pubbliche sono in sola lettura; capabilities.mutations must essere false. Nessuna API key sulle superfici pubbliche — i segreti nei contesti agente trapelano. I probe federati must applicare protezioni SSRF (nessun IP letterale, nessun hostname interno, redirect/timeout limitati) e uno User-Agent identificativo. Le superfici admin/health must richiedere controlli di capability della piattaforma. Le implementazioni must not chiamare servizi di terze parti dal server del merchant come effetto collaterale del servire letture del catalogo.

10. Changelog della specifica

VersioneDataNote
ARC/1.02026-06-10Prima release stabile. Codifica il contratto spedito da KaliCart Bridge 1.0.76: tre segnali di discovery, documento di discovery, cinque endpoint del catalogo, oggetto prodotto con quarantena e prontezza all'acquisto, modello di consenso opt-out per l'indicizzazione federata, sessioni di checkout opzionali, interop UCP.

Feedback e report di implementazione: GitHub issues.