Guida

Come rendere un sito pronto per gli agenti AI

«Pronto per gli agenti» significa tre cose diverse per tre tipi diversi di agente AI — e si sommano. Ecco esattamente come abbiamo reso questo validatore pronto per gli agenti, con il codice che abbiamo pubblicato, in modo che tu possa copiare il pattern.

Esistono tre livelli indipendenti. Puoi adottarne uno qualsiasi da solo; insieme coprono un crawler che legge il tuo sito, un agente che controlla la tua interfaccia nel browser e un altro agente che ti chiama attraverso la rete.

Livello 1 — llms.txt: contesto per i crawler

La base di partenza. Un semplice file llms.txt in testo normale nella tua radice indica a un crawler AI di cosa tratta il tuo sito e quali pagine sono importanti, in ordine di priorità. Viene letto al momento del recupero — niente JavaScript, nessun protocollo. Inizia da qui: come crearne uno.

Livello 2 — WebMCP: strumenti per gli agenti nel browser

WebMCP consente a una pagina di esporre strumenti richiamabili a un agente AI in esecuzione nel browser, in modo che l'agente invochi un'azione tipizzata invece di tentare di interpretare il tuo modulo. Esistono due modi, e li adottiamo entrambi.

Dichiarativo — annota un modulo reale e il browser sintetizza uno strumento da esso:

<form toolname="open_llms_txt_report"
      tooldescription="Validate a site's llms.txt and open its report.">
  <input name="url" toolparamdescription="Domain or URL to validate">
</form>

Imperativo — registra uno strumento in JavaScript che restituisce direttamente dati strutturati:

navigator.modelContext?.registerTool({
  name: "validate_llms_txt",
  description: "Validate a website's llms.txt; returns a 0-100 score and findings.",
  inputSchema: { type: "object", properties: { url: { type: "string" } }, required: ["url"] },
  execute: (input) => fetch("/api/validate?url=" + encodeURIComponent(input.url))
    .then(r => r.json())
    .then(data => ({ content: [{ type: "text", text: JSON.stringify(data) }] }))
});

Proteggi la chiamata imperativa con if (navigator.modelContext) in modo che non faccia nulla dove WebMCP è assente. Oggi è un origin trial di Chrome, quindi la copertura reale è ridotta — trattalo come un segnale prospettico, non come traffico.

Livello 3 — A2A: un agente richiamabile da altri agenti

Il protocollo Agent2Agent (A2A) consente ad altri agenti di scoprire e chiamare il tuo servizio. Pubblichi una scheda agente e la supporti con un endpoint JSON-RPC:

// GET /.well-known/agent-card.json
{
  "name": "llms.txt Validator",
  "url": "https://llms-txt-validator.dev/a2a",
  "skills": [{ "id": "validate_llms_txt", "name": "Validate llms.txt" }]
}

L'url deve puntare a un endpoint funzionante che parli A2A — noi implementiamo il metodo sincrono message/send, che racchiude la stessa logica di validazione come skill. La scheda è un contratto, non un meta tag.

La regola fondamentale: non pubblicare un segnale che non puoi supportare

È allettante inserire una scheda agente vuota o annotazioni di moduli false per far diventare verde un audit. Non farlo. Un agente che recupera la tua scheda e chiama un endpoint morto — o invoca uno strumento che non fa nulla — ti darà meno fiducia in seguito. Ogni segnale qui dovrebbe corrispondere a qualcosa di reale. Ecco perché questo validatore riporta un segnale WebMCP o A2A come «presente» solo quando è supportato da un'implementazione funzionante.

Come verificare ogni livello

Continua a leggere

Convalida il tuo llms.txt →