Masterclass su Hermes Agent

@akshay_pachaar
INGLESE2 mesi fa · 13 mag 2026
2.7M
4.2K
470
65
15.7K

TL;DR

Questa masterclass analizza l'architettura di Hermes Agent, incluso il suo sistema di memoria a tre livelli, le competenze auto-evolutive tramite GEPA e le modalità di implementazione di agenti specializzati per la programmazione e la ricerca.

Tutto ciò che devi sapere per comprendere e personalizzare Hermes Agent. Competenze. Competenze auto-evolutive, memoria a tre livelli, ottimizzazione GEPA e come passare da 1 a 10 agenti che lavorano per te 24/7.

Hermes Agent ha superato le 90.000 stelle GitHub in due mesi. Gli sviluppatori stanno silenziosamente costruendo agenti AI personali che imparano il loro flusso di lavoro, ricordano il loro contesto e funzionano 24/7.

Akshay 🚀 - inline image

Ogni agente AI che hai usato ha lo stesso problema: dimentica tutto nel momento in cui la sessione termina.

Le tue preferenze di codifica, le convenzioni di progetto che gli hai corretto tre volte, la soluzione che ha impiegato 10 minuti a trovare ieri. Tutto sparito. Alla prossima sessione, ricominci da capo.

Hermes Agent di Nous Research adotta un approccio fondamentalmente diverso. Include un ciclo di apprendimento che:

  • Ricorda tra una sessione e l'altra
  • Scrive le proprie competenze riutilizzabili
  • Le pota in background
  • E le convalida offline tramite un motore evolutivo chiamato GEPA

Nessun altro agente open-source combina tutte e tre queste funzionalità. Nemmeno OpenClaw.

Questa guida spiega come funziona questo ciclo di apprendimento, cosa fa ogni livello di memoria e come configurare tutto da zero.

Alla fine, avrai tre agenti completamente isolati in esecuzione sulla tua macchina: un programmatore (che usa il tuo Claude Code), un ricercatore approfondito e un designer, ognuno con la propria personalità, memoria, competenze e bot Telegram.

Guarda qui:

Akshay 🚀 - inline image

L'intera configurazione richiede pochi minuti e tutto ciò che è qui è riproducibile sul tuo hardware.

Nota: Tutte le illustrazioni in questa guida sono state progettate da Pixel, uno degli agenti Hermes, uno degli agenti Hermes che imparerai a costruire entro la fine. Osservale mentre leggi.

Iniziamo!

Come Leggere Questa Guida

Due parti: prima la teoria, poi la pratica.

Hai poco tempo? Vai direttamente a "Configurazione e Avvio". I comandi funzionano da soli.

Ma la teoria ripaga. Sapere come le competenze si auto-evolvono, come si compone la memoria e quando GEPA dà il meglio di sé è la differenza tra usare Hermes come un chatbot con note e usarlo come qualcosa che si accumula.

Cosa ti aspetta:

  • Cos'è Realmente Hermes Agent. La presentazione, più un confronto con OpenClaw.
  • Come è Costruito. Architettura in un diagramma.
  • Prima della Memoria: Chi è l'Agente? SOUL.md, il livello di identità.
  • Il Sistema di Memoria. Tre livelli, tre velocità.
  • Competenze Auto-Evolutive. Playbook scritti dall'agente più il Curatore.
  • GEPA. Ottimizzazione offline delle competenze.
  • Configurazione e Avvio. Installazione, Telegram, primo agente.
  • Esecuzione di Più Agenti Multipli Agenti. Profili, tre personalità, riepiloghi programmati.
  • Personalizzazione degli agenti secondo le tue esigenze.

Cos'è Hermes e Cosa lo Rende Diverso dal Punto di Vista Architetturale

La presentazione in una riga: un agente che migliora più lo usi.

Ciò che rende tutto ciò reale è che tre capacità solitamente separate risiedono in un unico framework: apprendimento delle competenze in fase di esecuzione, memoria persistente a più livelli e una pipeline opzionale di addestramento con pesi. Nessun altro agente open-source offre tutte e tre.

Il confronto più vicino nell'ecosistema open è OpenClaw. Entrambi sono persistenti, adatti alla messaggistica, ma fanno scelte architetturali opposte.

Una chiara inquadratura dal blog Kilo lo cattura: "Hermes impacchetta un gateway attorno a un agente che apprende. OpenClaw impacchetta un agente attorno a un gateway di messaggistico."

Akshay 🚀 - inline image

Come è Costruito

Prima che il ciclo di apprendimento abbia senso, hai bisogno di una visione di base di come è strutturato Hermes.

Tutto fluisce attraverso una singola classe AIAgent in uno script run_agent.py. CLI, gateway di messaggistica, esecutore batch, integrazione IDE: sono tutti punti di ingresso nello stesso agente core.

Questo è ciò che rende realmente funzionante la storia dell'agnosticismo della piattaforma.

Akshay 🚀 - inline image

Il ciclo core è in stile ReAct e sincrono. Costruisci il prompt di sistema, controlla se è necessaria la compressione, effettua una chiamata API interrompibile, esegue eventuali chiamate di strumenti, ripeti il ciclo.

Alcuni dettagli che contano in seguito:

  • L'agente può eseguire comandi in sei luoghi diversi. Terminale locale, Docker, SSH, Modal, Daytona o Singularity. Stesso codice, basta cambiare la configurazione. Sposta l'esecuzione dal tuo laptop a un server cloud GPU senza toccare nient'altro.
  • Funziona con quasi tutti i modelli. Un livello di traduzione instrada qualsiasi provider attraverso uno dei tre formati API. Ecco perché puoi passare da Claude a GPT a Gemini a Ollama locale con un comando e nulla si rompe.
  • L'agente ha un limite massimo di 90 turni per attività. Senza di esso, un agente bloccato in un ciclo (ritentando un'API che fallisce, rileggendo lo stesso file) brucerebbe silenziosamente i tuoi crediti. I subagenti condividono lo stesso budget, quindi una catena di deleghe fuori controllo non può passare inosservata.

Abbastanza.

Abbastanza impalcatura. Ora la parte interessante.

Prima della Memoria: Chi è l'Agente?

Prima di arrivare alla memoria e alle competenze auto-evolutive, c'è un livello che sta sopra entrambi: l'identità.

La memoria è ciò che l'agente sa. Le competenze sono come fa le cose. Ma nessuna delle due dice chi è quando si presenta. Senza un livello di identità, ogni agente sembra lo stesso agente con cappelli diversi.

Hermes risolve questo problema con un singolo file: SOUL.md.

Si trova in ~/.hermes/SOUL.md e occupa lo slot #1 nel prompt di sistema, prima di qualsiasi altra cosa. Definisce la personalità, il tono, lo stile di comunicazione e i limiti rigidi dell'agente.

SOUL.md è scritto a mano e statico. Lo scrivi una volta, lo modifichi nel tempo e rimane coerente in ogni progetto e ogni sessione. Se il file manca, Hermes torna a un'identità predefinita incorporata.

Perché questo è importante per la storia dell'auto-miglioramento? Perché tutto ciò che segue (la memoria che l'agente scrive, le competenze che crea, il modo in cui consolida la conoscenza) avviene attraverso la lente di questa identità.

SOUL.md è il fisso. La memoria e le competenze sono le parti mobili al suo interno.

Il Sistema di Memoria: Tre Livelli, Tre Velocità

Hermes non ha una singola "memoria". Ha tre livelli, ciascuno progettato per uno scopo diverso.

Akshay 🚀 - inline image

Livello 1: Due piccoli file Markdown.

Al centro ci sono due file memorizzati su disco:

  • MEMORY.md (max 2.200 caratteri) contiene le note dell'agente sul tuo ambiente, le convenzioni di progetto, stranezze degli strumenti e lezioni apprese.
  • USER.md (max 1.375 caratteri) contiene il tuo profilo: nome, preferenze di comunicazione, livello di abilità e cose da evitare.

Entrambi vengono iniettati nel prompt di sistema come istantanea congelata quando una sessione inizia. Se l'agente scrive una nuova voce di memoria a metà sessione, quella modifica persiste su disco immediatamente ma non apparirà nel prompt di sistema fino alla sessione successiva.

Quando la memoria si riempie (~80% di capacità, mostrata come percentuale nell'intestazione del prompt di sistema), l'agente deve consolidare.

Unisce le voci correlate in versioni più dense e ricche di informazioni, in modo che sopravviva solo informazioni utili.

Livello 2: Ricerca testuale completa nelle sessioni.

Ogni conversazione (CLI e messaggistica) è memorizzata in SQLite con ricerca testuale completa. L'agente può cercare settimane di conversazioni passate da qui.

Il compromesso è chiaro: il Livello 1 è sempre nel contesto ma minuscolo. Il Livello 2 ha capacità illimitata ma richiede una ricerca attiva più una sintesi LLM.

I fatti critici vivono nella memoria. Tutto il resto è ricercabile su richiesta.

Livello 3: Provider di memoria esterni (8 plugin).

Per una memoria persistente più profonda, Hermes include 8 provider collegabili che funzionano insieme alla memoria integrata (senza mai sostituirla). Solo uno può essere attivo alla volta.

Quando un provider esterno è attivo, Hermes recupera automaticamente i ricordi pertinenti prima di ogni turno, sincronizza i turni di conversazione dopo ogni risposta ed estrae i ricordi al termine della sessione.

Akshay 🚀 - inline image

Competenze Auto-Evolutive: L'Agente Scrive i Propri Playbook

La memoria gestisce i fatti. Le competenze gestiscono le procedure.

Le competenze sono file Markdown con frontmatter YAML e funzionano come memoria procedurale dell'agente: non ciò che sa, ma come fa le cose.

Ecco l'anatomia di una competenza:

Per mantenere bassi i costi di token, le competenze usano la divulgazione progressiva:

Akshay 🚀 - inline image
  • Livello 0: L'agente vede solo nomi + descrizioni (~3k token per il catalogo completo)
  • Livello 1: Carica il contenuto completo della competenza quando ne ha effettivamente bisogno
  • Livello 2: Può approfondire file di riferimento specifici specifici all'interno di una competenza

Il ciclo di auto-miglioramento.

Questo è il fattore differenziante principale. L'agente crea autonomamente le proprie competenze utilizzando lo strumento skill_manage. La creazione di competenze si attiva quando:

  • L'agente completa un'attività complessa (5+ chiamate a strumenti)
  • Incontra errori o vicoli ciechi e trova il percorso funzionante
  • L'utente corregge il suo approccio
  • Scopre un flusso di lavoro non banale

Quindi il ciclo funziona così: l'agente incontra un problema → lo risolve per tentativi ed errori → salva l'approccio riuscito come file SKILL.md → la prossima volta che incontra un problema simile, carica la competenza e segue la procedura provata invece di riscoprire l'approccio da zero.

Lo strumento.

Lo strumento supporta sei azioni: crea, patch (correzione mirata, preferita perché efficiente in termini di token), modifica (riscrittura completa), elimina, write_file e remove_file.

Akshay 🚀 - inline image

Il Curatore: raccolta differenziata per le competenze.

Senza manutenzione, le competenze create dall'agente si accumulano. Ti ritrovi con dozzine di playbook ristretti e sovrapposti che sprecano token e inquinano il catalogo.

Il Curatore è un sistema di manutenzione in background che gestisce questo. Viene eseguito su un controllo di inattività (non un demone cron): se sono passati 7 giorni dall'ultima esecuzione e l'agente è stato inattivo per 2+ ore, un fork in background dell'agente in background si avvia con la propria cache di prompt, senza mai toccare la conversazione attiva.

Opera in due fasi:

  1. Transizioni automatiche (deterministiche, senza LLM): Le competenze non utilizzate per 30 giorni diventano diventano obsolete. Le competenze non utilizzate per 90 giorni vengono archiviate.
  2. Revisione LLM (fino a 8 iterazioni): Un agente biforcato esamina tutte le competenze create dall'agente e decide per ciascuna se mantenere, applicare patch, consolidare o archiviare.

Due vincoli importanti:

  • Il Curatore non tocca mai le competenze incluse o installate dall'hub. Solo quelle create dall'agente.
  • Non elimina mai automaticamente. Il peggior risultato è l'archiviazione in ~/.hermes/skills/.archive/, che è recuperabile con un comando.

Prima di ogni passaggio del Curatore, Hermes esegue uno snapshot tar.gz dell'intera directory delle competenze. Il rollback è un comando, e i rollback sono a loro volta reversibili.

Puoi anche fissare le competenze critiche con hermes curator pin <skill> per proteggerle dall'archiviazione e dall'eliminazione. Patch e modifiche vengono comunque applicate, quindi l'agente può migliorare una competenza fissata senza richiedere di rimuovere il pin.

Akshay 🚀 - inline image

GEPA: Evoluzione Offline delle Competenze con Tracce di Esecuzione

Qui diventa interessante.

Il ciclo di apprendimento nell'agente (creazione di competenze + Curatore) ha una debolezza nota:

  • L'agente tende all'autocompiacimento. Pensa quasi sempre di aver performato bene, anche quando non è così. Il feedback della comunità lo ha confermato.
  • Lo stesso sistema che genera automaticamente le competenze può anche sovrascrivere personalizzazioni manuali con versioni peggiori.

Qui entra in gioco GEPA.

GEPA (Genetic-Pareto Prompt Evolution) non è integrato nel runtime di Hermes. Risiede in un repository compagno (NousResearch/hermes-agent-self-evolution) e opera come una pipeline di ottimizzazione offline. Pubblicato come ICLR 2026 Oral paper, con licenza MIT.

L'idea centrale: invece di chiedere all'agente "hai fatto bene?", GEPA legge le tracce di esecuzione per capire perché le cose sono fallito, quindi propone miglioramenti mirati attraverso la ricerca evolutiva.

La pipeline:

  1. Legge la competenza corrente dal repository Hermes
  2. Genera un dataset di valutazione (casi di test sintetici tramite Claude Opus, cronologia sessione reale da SQLite o set d'oro curati manualmente)
  3. Esegue l'ottimizzatore GEPA: legge le tracce di esecuzione → comprende i punti di fallimento → genera varianti candidate
  4. Valuta i candidati
  5. Valuta i candidati utilizzando il punteggio LLM-as-judge con rubriche (non binario pass/fail)
  6. Applica vincoli: la suite di test completa deve passare al 100%, le competenze rimangono sotto i 15KB, la compatibilità della cache è preservata, lo scopo semantico non si sposta
  7. La migliore variante viene inviata come PR contro il repository Hermes. Mai un commit diretto.

Nessuna GPU richiesta. Tutto funziona tramite chiamate API. Costo: circa $2-10 per esecuzione di ottimizzazione.

Questo può essere saltato inizialmente, ma è molto efficace quando incontri un muro e non vuoi spendere tempo e denaro in fine-tuning (RL/GRPO)

Maggiori dettagli in questo repo →

Akshay 🚀 - inline image

Ho recentemente scritto un articolo su GEPA.

È un'ottima alternativa da provare prima di passare a fine-tuning completo o fine-tuning basato su RL.

Akshay 🚀 - inline image

Ok, per riassumere:

SOUL.md imposta l'identità. Il ciclo di runtime cattura l'esperienza. Il Curatore mantiene pulita la libreria. GEPA si assicura che ciò che è nella libreria funzioni effettivamente funzioni.

Questa è tutta la teoria. Ora mettiamola in esecuzione sulla tua macchina.

Configurazione e Avvio

Linux, macOS o WSL2. Python 3.11+ viene con l'installer. 8GB di RAM vanno bene per l'uso basato su API.

Installazione in una riga:

Esegui la procedura guidata di configurazione. Ti guida attraverso provider, chiave API, modello e strumenti:

Inizia a chattare in terminale:

Collegalo a Telegram:

Se vuoi parlare con il tuo agente dal telefono invece del terminale, puntalo a un bot Telegram.

Ottieni un token bot da @BotFather (esegui /newbot), poi ottieni il tuo ID utente Telegram da @userinfobot.

Questo è tutto. Hai un agente funzionante:

Cosa c'è in ~/.hermes/

Subito dopo l'installazione, la tua home directory riceve una nuova cartella.

Vale la pena capire la disposizione perché tutto ciò che fai con Hermes tocca uno di questi percorsi.

Alcuni file meritano uno sguardo più attento.

  • config.yaml è la fonte di verità per tutto ciò che non è segreto. Scelta del modello, backend del terminale, abilitazione degli strumenti, server MCP vivono qui. Modifica con hermes config edit o imposta valori uno alla volta con hermes config set <key> <value>.
  • .env contiene i tuoi segreti. Chiavi API, token bot, password. Hermes instrada automaticamente qui i valori che sembrano segreti.
  • SOUL.md è lo slot #1 nel prompt di sistema, prima di tutto. Livello di identità, coperto in precedenza.
  • skills/ è dove vive l'intero ciclo di apprendimento. Ogni competenza che l'agente crea, più tutto ciò che installi, finisce qui.
  • state.db è il database SQLite che supporta la ricerca nelle sessioni. Sicuro in modalità WAL, indicizzato FTS5. Questo è ciò che rende "cosa abbiamo discusso tre settimane fa?" effettivamente funzionante.

Non modificherai manualmente la maggior parte di questo. Ma conoscere la disposizione fa scattare tutto il resto.

Aggiungere Nuove Competenze

Hermes mantiene il proprio Skills Hub ufficiale con 687 competenze in 18 categorie. La suddivisione:

  • 87 competenze integrate che vengono con l'agente
  • 79 competenze opzionali che puoi attivare su richiesta
  • 16 da Anthropic (frontend-design, pdf, pptx, docx, mcp-builder, ecc.)
  • 505 da LobeHub (contributi della comunità più ampia)
Akshay 🚀 - inline image

Puoi anche aggiungere qualsiasi repository GitHub come tap personalizzato:

Ecco come condivideresti le competenze in un team o manteresti la tua collezione privata.

Passare da 1 a 10 Agenti

Un agente va bene. Multipli agenti specializzati è dove Hermes diventa interessante.

Hermes ha una funzionalità di prima classe per questo chiamata profili. Ogni profilo è un'istanza Hermes completamente isolata con la propria configurazione, memoria, competenze, sessioni e SOUL.md. Non condividono nulla per impostazione predefinita.

Ne configureremo tre: un designer, un programmatore e un ricercatore.

Creare un team

--clone copia la configurazione del tuo profilo predefinito e .env come punto di partenza.

Dare a ciascuno il proprio bot Telegram

Ogni profilo ha bisogno del proprio bot da BotFather. Telegram consente solo una connessione per token, quindi condividere rompe le cose.

Esegui /newbot tre volte con BotFather e salva i tre token. Quindi esegui la procedura guidata del gateway una volta per profilo:

La configurazione è esattamente la stessa di un agente regolare, dove puoi di nuovo creare nuovi bot in BotFather e collegarli ai rispettivi agenti.

Dare a ciascuno una personalità tramite SOUL.md

È qui che gli agenti diventano veramente diversi l'uno dall'altro. Modifica il SOUL di ogni profilo.

Designer in ~/.hermes/profiles/designer/SOUL.md:

Guarda questi esempi:

Akshay 🚀 - inline image

Programmatore in ~/.hermes/profiles/programmer/SOUL.md:

Ricercatore in ~/.hermes/profiles/researcher/SOUL.md:

Personalizzare il programmatore: instradare l'esecuzione tramite Claude Code

Il programmatore è più interessante se non si limita a scrivere codice da solo, ma delega l'esecuzione alla CLI di Claude Code. Hermes orchestra. Claude Code fa le modifiche ai file, esegue comandi, gestisce git. Hermes legge il risultato e decide il passo successivo.

È anche così che eseguo il mio sopra il mio abbonamento Claude Max. Nessuna chiave API separata. Claude Code usa automaticamente le credenziali Max.

Avvia una sessione e invia questo singolo prompt di attivazione:

Ho già un abbonamento Claude Max. Sei il mio ingegnere del personale che mi aiuta con le mie attività di codifica quotidiane, e sotto il co usi Claude Code per tutte le esecuzioni. Configurati di conseguenza.

Il programmatore installerà la competenza autonomous-ai-agents/claude-code da solo, verificherà che claude sia nel PATH e inizierà a usarla per l'esecuzione del codice. Dal messaggio successivo in poi, tutto ciò che riguarda la codifica (leggere file, scrivere codice, eseguire test, fare commit, push) viene instradato tramite Claude Code sotto il co.

Due cose da sapere:

  • Assicurati che claude sia nel tuo PATH prima di attivarlo. which claude dovrebbe stampare un percorso binario reale.
  • Claude Code ha sia una modalità di stampa (one-shot, veloce, senza TUI) che una modalità interattiva (sessione tmux completa). Il programmatore sceglie in base all'attività. Non devi pensarci.

Personalizzare il designer: insegnargli il tuo stile visivo

Il designer diventa veramente utile quando può generare immagini nel tuo stile, non output AI generico. Il modello: fornisci design di riferimento, lascialo studiare, chiedigli di creare una competenza che generi nuove immagini nello stesso stile.

Questo è il ciclo di auto-miglioramento utilizzato come meccanismo di configurazione. Invece di scrivere una competenza a mano, stai mostrando all'agente buoni esempi e chiedendogli di codificare il modello stesso.

Avvia una sessione con il designer e incolla le tue immagini di riferimento (trascina e rilascia in CLI o allega in Telegram). Quindi invia questo prompt:

Il designer studierà i riferimenti, scriverà il SKILL.md, genererà lo script Python, lo salverà in ~/.hermes/profiles/hermes/profiles/designer/skills/my-design-style/ e verificherà che lo script funzioni.

Se hai già eseguito hermes setup e scelto OpenRouter come provider, la chiave è già nel .env del profilo designer grazie a --clone. In caso contrario, aggiungila una volta:

Da quel momento in poi, chiedere al designer una nuova illustrazione attiva la competenza. Scrive un prompt informato dalla tua impronta stilistica, chiama Nano Banana tramite OpenRouter e salva l'output.

Lo stesso modello funziona per qualsiasi output specifico dello stile. Fornisci contenuto di riferimento, chiedi all'agente di costruire una competenza che riproduce il modello. Introduzioni di newsletter, thread X, commenti di revisione del codice, tutto ciò in cui la coerenza è importante.

Pianificazione del Lavoro: Cron in Inglese Semplice

Il SOUL del ricercatore dice che è responsabile di un riepilogo Telegram quotidiano. Ciò implica un lavoro che funziona secondo il proprio programma, senza che tu debba ricordarti di chiederlo. Ecco a cosa serve Hermes cron.

Hermes include un pianificatore integrato. Il demone del gateway ticche ogni 60 secondi, esegue eventuali lavori in scadenza in sessioni sessioni di agente isolate e fornisce l'output alla piattaforma di messaggistica che hai specificato. I lavori sopravvivono ai riavvii. Vivono in ~/.hermes/cron/jobs.json e l'output va a ~/.hermes/cron/output/.

Akshay 🚀 - inline image

La parte interessante: non scrivi espressioni cron. Descrivi ciò che vuoi in inglese e Hermes lo converte.

Collega il riepilogo quotidiano del ricercatore

Apri una sessione con il ricercatore e invia questo prompt:

Il ricercatore crea il lavoro utilizzando il suo strumento cronjob, la destinazione di consegna predefinita è la chat corrente (Telegram in questo caso), e il pianificatore prende il sopravvento da lì. Verifica che sia stato creato:

Dovresti vedere il lavoro con il suo prossimo orario di esecuzione programmato. Domani mattina alle 8, il tuo Telegram si illumina con il riepilogo. Nessuna ulteriore azione necessaria.

Altri modelli utili

La sintassi cron è flessibile. Alcune varianti che vale la pena conoscere:

  • Ritardi one-shot. /cron add 30m "Ricordami di controllare la build" viene eseguito una volta in 30 minuti.
  • Intervalli ricorrenti. /cron add "ogni 2h" "Controlla lo stato del server" viene eseguito ogni due ore.
  • Espressioni cron standard. /cron add "0 9 \ \ 1-5" "..." per un controllo preciso. Nei giorni feriali alle 9, in questo caso.
  • Allegato di competenza. /cron add "ogni 1h" "Riepiloga nuovi elementi del feed" --skill blogwatcher carica una competenza prima di eseguire il prompt.

Puoi anche concatenare i lavori. L'output di un cron diventa l'input del cron successivo tramite un flag context_from. Utile per automazioni in più fasi in cui desideri che un passaggio di ricerca alimenti un passaggio di scrittura.

Questo è tutto.

Grazie per aver letto. Fammi sapere nei commenti cosa vorresti che coprissi la prossima volta.

Se impari meglio dai video, pubblicherò una guida completa su Hermes Agent su YouTube e X tra un paio di giorni.

Rimanete sintonizzati!

Saluti! :)

Save to YouMind

Use YouMind to read viral articles deeply

Save the source, ask focused questions, summarize the argument, and turn a viral article into reusable notes in one AI workspace.

Explore YouMind

Altri pattern da decodificare

Articoli virali recenti

Esplora altri articoli virali