<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Blog di Maguyva</title><description>Approfondimenti tecnici sull&apos;intelligenza del codice MCP, l&apos;architettura degli agenti IA e le lezioni imparate costruendo una piattaforma di ricerca del codice multilinguaggio.</description><link>https://maguyva.ai/it/blog</link><language>it</language><atom:link href="https://maguyva.ai/it/rss.xml" rel="self" type="application/rss+xml"/><item><title>Un contesto che ti segue</title><link>https://maguyva.ai/it/blog/context-that-travels</link><guid isPermaLink="true">https://maguyva.ai/it/blog/context-that-travels</guid><description>L&apos;indexer di Cursor è eccellente dentro Cursor. Maguyva è la mappa MCP ospitata che lo stesso agente può interrogare da altri editor, CLI e CI.</description><pubDate>Mon, 07 Sep 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;L’indexer di Cursor è eccellente dentro Cursor. Il completamento automatico, la modifica inline, la chat, e l’agente in quella finestra si appoggiano già su un indice di progetto che Cursor gestisce per lo spazio di lavoro aperto. Se Cursor è l’unica superficie in cui scrivi, e quell’indice trova già i file giusti, resta lì. È il caso onesto del ‘resta dove sei’, e giustamente apre questo articolo.&lt;/p&gt;
&lt;p&gt;Questo articolo parla dell’altra metà di una settimana comune. Lo stesso repository viene anche aperto in Claude Code, interrogato da Codex CLI, revisionato su una seconda macchina, o interrogato da un agente in esecuzione in CI. La domanda non è ‘quale indexer è migliore’. La domanda è se la mappa di cui l’agente si fida in una finestra è la stessa mappa di cui si fida nella successiva.&lt;/p&gt;
&lt;p&gt;Maguyva è quella mappa che ti segue. È un livello di contesto della codebase MCP remoto. L’agente lo interroga nello stesso modo in cui interroga qualsiasi altro strumento MCP. I risultati tornano come percorsi classificati con numeri di riga. Cursor resta l’editor. È il contesto a muoversi.&lt;/p&gt;
&lt;h2 id=&quot;a-cosa-serve-lindexer-di-cursor&quot;&gt;A cosa serve l’indexer di Cursor&lt;/h2&gt;
&lt;p&gt;L’indicizzazione integrata di Cursor esiste affinché chat, agente e ricerca dentro l’editor possano recuperare codice pertinente invece di affidarsi solo a ciò che entra nella finestra di contesto grezza del modello. È il design giusto per un IDE. Questo indice è nativo di Cursor. Non è un server MCP e non è raggiungibile da nessun altro client.&lt;/p&gt;
&lt;p&gt;Ecco come funziona, come descritto nella documentazione pubblica di Cursor e nel racconto dello stesso Cursor al momento della stesura: il percorso di ricerca principale non è più un indice di embedding nel cloud. Il team di Cursor ha dichiarato sul proprio forum della community che la ricerca semantica/basata su embedding dedicata viene progressivamente ridotta a favore di un recupero basato su grep, perché i modelli attuali esplorano già abbastanza bene un albero vivo da soli. Al suo posto c’è Instant Grep, un indice di ricerca locale costruito con n-grammi, liste invertite e filtri di Bloom, mantenuto in una tabella di lookup mappata in memoria, così le query vengono risolte sulla macchina stessa dello sviluppatore invece che su un server.&lt;/p&gt;
&lt;p&gt;L’indice stesso vive dentro la directory &lt;code&gt;.git/cursor/&lt;/code&gt; propria del repository, ancorato a un commit git specifico; le modifiche successive a quel commit si sovrappongono ad esso invece di innescare una nuova scansione, e l’indice viene ricostruito solo quando lo stato locale si è discostato molto da ciò su cui è stato costruito. Poiché si trova dentro &lt;code&gt;.git&lt;/code&gt;, non viene mai tracciato né pushato — cancella la cartella, e l’indice sparisce. &lt;code&gt;.gitignore&lt;/code&gt; viene rispettato per costruzione, dato che solo il contenuto tracciato da git è idoneo, e &lt;code&gt;.cursorignore&lt;/code&gt; viene fatto rispettare sul percorso di lettura. Non c’è più alcun passaggio di embedding lato server né un database vettoriale remoto su quel percorso. La documentazione precedente descriveva un design assistito dal cloud — cifratura dei chunk, sincronizzazione tramite albero di Merkle, riutilizzo dell’indice tra membri del team — e lo stesso team di Cursor ha da allora dichiarato che quel design viene ridotto, quindi questo testo non lo descrive più come attuale.&lt;/p&gt;
&lt;p&gt;Un punto di forza notevole dentro l’editor è il subagente Explore di Cursor. Può avviare più ricerche parallele nella propria finestra di contesto su un modello più veloce e restituire solo i risultati rilevanti, così la conversazione principale non si gonfia di risultati di ricerca. È un vero punto di forza interno all’editor. Mantienilo.&lt;/p&gt;
&lt;p&gt;Gli spazi di lavoro multi-root sono supportati: il contesto di ogni cartella aperta è disponibile per l’Agent. Alcune funzionalità dipendenti da git, come i worktree, sono disabilitate nelle configurazioni multi-root, e i Cloud Agents non supportano affatto gli spazi di lavoro multi-root.&lt;/p&gt;
&lt;p&gt;Niente di tutto questo è un motivo per lasciare Cursor. È una descrizione precisa di una mappa che è eccellente là dove vive.&lt;/p&gt;
&lt;h2 id=&quot;cosa-significa-davvero-seguirti&quot;&gt;Cosa significa davvero ‘seguirti’&lt;/h2&gt;
&lt;p&gt;Una mappa ti segue quando le stesse domande restituiscono lo stesso tipo di risposta, con citazioni che puoi aprire, da più di un client.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;In Cursor: ‘Dove è definito &lt;code&gt;parseConfig&lt;/code&gt;, e chi lo chiama?’&lt;/li&gt;
&lt;li&gt;In Claude Code, sullo stesso repository: la stessa domanda.&lt;/li&gt;
&lt;li&gt;In Codex CLI, su una macchina di revisione che non ha mai aperto la finestra di Cursor: la stessa domanda.&lt;/li&gt;
&lt;li&gt;In un agente CI che parla MCP: la stessa domanda, contro lo stesso snapshot ospitato.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Se ogni superficie costruisce il proprio indice privato, non hai una mappa. Hai diverse cache che divergono. L’indice dell’editor può essere aggiornato per l’albero su disco. La sessione CLI può essere indietro di un giorno. Il job CI può guardare un checkout diverso. E l’agente continuerà comunque a suonare sicuro di sé.&lt;/p&gt;
&lt;p&gt;L’indexer di Cursor non deve risolvere questo. Poiché vive dentro l’editor, il contesto che costruisce è per quell’editor. Un lettore che ha bisogno anche di una CLI, di una pipeline CI, o di un editor diverso, ha bisogno di uno strumento separato per quelle superfici. È un fatto di ambito, non un difetto. Maguyva è quello strumento separato.&lt;/p&gt;
&lt;p&gt;Un numero di lingue pubblicato per l’indexer di Cursor non è indicato nei materiali che questo testo può usare. Maguyva pubblica supporto per oltre 279 lingue e tecnologie basate su testo. Anche i prezzi di Cursor non vengono riportati qui; vedi la loro pagina prezzi. Maguyva addebita per spazio di lavoro, non per posto, con piani pubblicati a $0, $19, $49 e $149 a seconda dell’estensione indicizzata e della dimensione dello spazio di lavoro.&lt;/p&gt;
&lt;h2 id=&quot;una-mappa-ospitata-ogni-client-mcp&quot;&gt;Una mappa ospitata, ogni client MCP&lt;/h2&gt;
&lt;p&gt;Maguyva è un server MCP remoto. Colleghi GitHub, scegli i repository, e la pipeline cloud costruisce simboli, archi del grafo e una mappa classificata. Aggiungi una chiave API alla configurazione MCP del client che già usi. Maguyva ha guide di configurazione per 24 client MCP documentati — incluso Cursor — e può connettersi ad altri client compatibili con MCP che supportano la configurazione standard.&lt;/p&gt;
&lt;p&gt;La &lt;a href=&quot;https://maguyva.ai/it/for-cursor&quot;&gt;pagina di configurazione di Cursor&lt;/a&gt; è il percorso specifico per l’editor se è lì che lavori. Lo stesso server risponde a Claude Code, VS Code, Windsurf, Codex CLI e agli altri. Non cambi editor. Dai a ogni agente la stessa superficie di strumenti: 11 strumenti MCP rivolti al cliente per ricerca, simboli, analisi delle dipendenze, recupero file, contesto del repository e workflow di utilità deterministici. Ricerca semantica, strutturale, a grafo e testuale vengono fuse in risultati classificati.&lt;/p&gt;
&lt;p&gt;Questo è il vantaggio della portabilità. Le citazioni che hai verificato in Cursor stamattina hanno la stessa forma delle citazioni che Codex CLI restituirà stasera. Percorso del file e numero di riga. Aprili. Se sono sbagliate, lo vedi. Se sono corrette, la modifica successiva ha dove atterrare. L’affermazione approvata è meno modifiche allucinate, non la promessa che ogni modifica sia corretta.&lt;/p&gt;
&lt;p&gt;L’aggiornamento è pubblicato. Gli snapshot hanno un timestamp, così l’agente sa quale versione dell’albero sta leggendo. La cadenza di ricostruzione è giornaliera nel piano gratuito e oraria nei piani a pagamento. Il limite onesto è il lavoro locale non sincronizzato: una modifica che esiste solo in un working tree non è ancora nella mappa ospitata. Questo limite è lo stesso indipendentemente dal client da cui interroghi, ed è proprio questo il punto. La deriva tra client non è più un secondo limite nascosto.&lt;/p&gt;
&lt;p&gt;La &lt;a href=&quot;https://maguyva.ai/it/docs&quot;&gt;documentazione&lt;/a&gt; fornisce il ciclo di attivazione che si applica a ogni client: indicizza un repository che già conosci, collega il client, fai una domanda che puoi verificare. Fallo una volta in Cursor. Rifallo dalla CLI che usi davvero nei giorni di revisione. Se entrambe le risposte citano lo stesso handler, la mappa ti ha davvero seguito.&lt;/p&gt;
&lt;h2 id=&quot;come-le-due-mappe-convivono&quot;&gt;Come le due mappe convivono&lt;/h2&gt;
&lt;p&gt;Usale entrambe. Non sono alternative nel senso di una pagina di confronto.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Tieni acceso l’indexer di Cursor per il progetto su disco. Lascia che Explore, Instant Grep e l’agente dentro l’editor lo usino. Quel ciclo è nativo e veloce.&lt;/li&gt;
&lt;li&gt;Aggiungi Maguyva come server MCP in Cursor, così la stessa sessione può anche interrogare la mappa ospitata dello spazio di lavoro. Cursor è un client Maguyva documentato. Non stai scegliendo un indice cancellando l’altro.&lt;/li&gt;
&lt;li&gt;Aggiungi lo stesso server Maguyva a Claude Code, Codex CLI, o qualsiasi altro client MCP che tocca il repository. Un’unica forma di chiave API. Un unico spazio di lavoro.&lt;/li&gt;
&lt;li&gt;Se un agente CI è compatibile con MCP, puntalo allo stesso server. Leggerà lo stesso snapshot con timestamp che ha letto il laptop.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;L’indice dell’editor resta lo strumento migliore per ‘cosa c’è su disco in questa finestra, proprio ora’. La mappa ospitata è lo strumento migliore per ‘come appare questo spazio di lavoro a ogni agente che lo toccherà oggi’. Queste frasi non competono.&lt;/p&gt;
&lt;p&gt;Le quote dello spazio di lavoro sono pubblicate sulla &lt;a href=&quot;https://maguyva.ai/it/pricing&quot;&gt;pagina prezzi&lt;/a&gt;: repository, righe indicizzate e utenti, fatturati per spazio di lavoro. Agenti e umani condividono lo stesso conteggio di utenti. Inizia gratis con un repository che sai già valutare. Aumenta lo spazio di lavoro solo dopo che le citazioni sopravvivono al contatto con l’albero.&lt;/p&gt;
&lt;h2 id=&quot;cosa-non-afferma-questa-pagina&quot;&gt;Cosa non afferma questa pagina&lt;/h2&gt;
&lt;p&gt;Non afferma che l’indexer di Cursor sia debole, incompleto, o un motivo per cambiare editor. La prima frase di questo testo dice il contrario.&lt;/p&gt;
&lt;p&gt;Non afferma che Maguyva sostituisca Instant Grep o il subagente Explore. Sono funzionalità di Cursor. Restano in Cursor.&lt;/p&gt;
&lt;p&gt;Non inventa un numero di lingue, una cifra di latenza, o un risparmio di token per nessuno dei due prodotti. I numeri sconosciuti restano non pubblicati.&lt;/p&gt;
&lt;p&gt;Non finge che il lavoro locale non pushato sia nella mappa ospitata. Gli snapshot con timestamp rendono visibile quel limite. Non lo rimuovono.&lt;/p&gt;
&lt;p&gt;Il test è ordinario. Indicizza un repository che già conosci. Fai una domanda che puoi verificare, prima in Cursor, poi in un secondo client MCP. Un contesto che ti segue è la stessa citazione in entrambi i luoghi.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;// same map, wherever you opened it.&lt;/code&gt;&lt;/p&gt;
</content:encoded><category>Ecosystem</category><category>MCP</category><category>Portability</category></item><item><title>Prima la mappa, poi la revisione</title><link>https://maguyva.ai/it/blog/map-first-review-second</link><guid isPermaLink="true">https://maguyva.ai/it/blog/map-first-review-second</guid><description>Fonda l&apos;agente di coding su una mappa del repository prima che scriva. Lascia che Greptile revisioni la pull request dopo. Una coppia complementare, non una sostituzione.</description><pubDate>Mon, 07 Sep 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Due lavori diversi si trovano ai due lati di una pull request. Prima che l’agente scriva, ha bisogno di una mappa dell’albero che sta per cambiare. Dopo che l’agente apre una PR, qualcosa dovrebbe leggere quella modifica contro il resto del sistema e lasciare commenti su cui un umano può agire.&lt;/p&gt;
&lt;p&gt;Questi lavori sembrano simili da lontano perché entrambi coinvolgono ‘capire la codebase’. Non sono lo stesso prodotto. Uno risponde a ‘dove dovrebbe atterrare questa modifica?’. L’altro risponde a ‘cosa ha rotto questo diff che un linter riga per riga si perderà?’. Confonderli produce una prima bozza peggiore e una revisione più rumorosa.&lt;/p&gt;
&lt;p&gt;Questo articolo è una guida a un workflow congiunto. Maguyva è la mappa che l’agente interroga per primo. Greptile è l’agente di revisione che commenta la PR dopo. La coppia è complementare per costruzione: Maguyva non revisiona pull request, e Greptile non sostituisce il livello di contesto che l’agente ha usato per scriverle.&lt;/p&gt;
&lt;h2 id=&quot;perché-questa-suddivisione-è-utile&quot;&gt;Perché questa suddivisione è utile&lt;/h2&gt;
&lt;p&gt;Un agente di coding che parte da priori di addestramento più qualche file incollato inventerà un percorso plausibile e lo modificherà. Questo è il fallimento del ‘file sbagliato’, ed è un problema di recupero. Maguyva è un livello di contesto della codebase MCP remoto: recupero semantico, strutturale (AST), a grafo/dipendenze e testuale fuso in risultati classificati, più ricerca di simboli e recupero di file. Le risposte fondate tornano come &lt;code&gt;path/file.ext:line&lt;/code&gt;, così puoi rifiutare un errore prima che esista una patch. L’affermazione resta modesta: meno modifiche allucinate. Il modello può ancora indovinare. È solo che il primo passo smette di essere un’indovinello.&lt;/p&gt;
&lt;p&gt;Greptile è un agente di revisione del codice basato su AI. Nelle loro stesse parole, revisiona automaticamente ogni pull request con comprensione completa della codebase, e lo contrappone ai linter tradizionali che controllano i file isolatamente invece che l’intero sistema. La configurazione consiste nell’installare l’app GitHub o GitLab e selezionare i repository. Non c’è nessun indice locale da gestire. L’hosting è Greptile Cloud (dichiarano conformità SOC 2 Type II, con un report disponibile su richiesta), con un’opzione self-hosted offerta alle aziende.&lt;/p&gt;
&lt;p&gt;Il loro flusso numerato è: connettersi e costruire un grafo delle dipendenze di ogni funzione, classe e dipendenza; a ogni pull request, analizzare la modifica usando quel grafo completo del repository e pubblicare i risultati come commenti PR con correzioni suggerite, in circa tre minuti; ogni commento può passare il problema a un agente di coding che il team già usa. Dichiarano anche di leggere nel tempo i commenti umani precedenti sulle PR, per imparare gli standard di codice di un team e ridurre i suggerimenti rumorosi. Il loro sistema di apprendimento, secondo quanto dichiarano, ha bisogno di 2-3 settimane per adattarsi.&lt;/p&gt;
&lt;p&gt;Questa è revisione, non stesura. Il punto di forza di Greptile è il contesto del grafo completo del repository sulla modifica già atterrata in una PR, seguito da un ciclo chiuso che invia il risultato a Claude Code, Codex, Conductor, Cursor, o Devin. Il punto di forza di Maguyva è la mappa classificata che l’agente ha interrogato prima che quella modifica venisse scritta. Usali entrambi. Non chiedere a nessuno dei due di fare il lavoro dell’altro.&lt;/p&gt;
&lt;p&gt;Un’integrazione di prodotto di prima parte tra Maguyva e Greptile non è dichiarata. Non ti serve neanche. Maguyva parla con l’agente via MCP. Greptile parla con GitHub o GitLab tramite la propria app. Si incontrano alla pull request. Nessuno script collante, nessun cron che collega uno strumento all’altro. La coppia fa a meno di bash perché ogni prodotto sta già sulla superficie che gli appartiene.&lt;/p&gt;
&lt;h2 id=&quot;cosa-non-è-questo&quot;&gt;Cosa non è questo&lt;/h2&gt;
&lt;p&gt;Questa non è una demolizione di Greptile. Non è una pagina ‘cambia revisore’. Greptile è stato lanciato su Hacker News il 5 marzo 2024 come azienda Y Combinator W24, e quel thread è come molte persone hanno conosciuto per la prima volta il prodotto. Se è così che li hai trovati, continua a usarli. Questa pagina è la metà anteriore mancante di quel ciclo: fondare l’agente in anticipo, così che la PR vista da Greptile miri già ai file giusti.&lt;/p&gt;
&lt;p&gt;I materiali di marketing di Greptile guidano con affermazioni su velocità di revisione e cattura di bug. Trattale come affermazioni proprie di Greptile, non come numeri verificati in modo indipendente. Questo testo non le ripete come fatti.&lt;/p&gt;
&lt;p&gt;La copertura linguistica è lo stesso tipo di onestà. Greptile inquadra il supporto come copertura di tutti i linguaggi di programmazione invece che come un elenco enumerato; un numero preciso non è indicato. Maguyva pubblica supporto per oltre 279 lingue e tecnologie basate su testo, con una suddivisione tecnica (AST supportato da parser contro solo testo) sul sito quando la domanda è tecnica. Sono prodotti diversi che fanno affermazioni diverse. Non mescolarle.&lt;/p&gt;
&lt;p&gt;I prezzi di Greptile non sono indicati nei materiali che questo testo può usare. I piani a pagamento esistono; vedi la loro pagina prezzi. Maguyva addebita per spazio di lavoro, non per posto. I piani iniziano gratis. La &lt;a href=&quot;https://maguyva.ai/it/pricing&quot;&gt;pagina prezzi&lt;/a&gt; elenca i livelli pubblicati se ti servono i numeri dello spazio di lavoro.&lt;/p&gt;
&lt;h2 id=&quot;workflow&quot;&gt;Workflow&lt;/h2&gt;
&lt;p&gt;Tre fasi con un nome. Eseguile in questo ordine. Non saltarne nessuna la prima volta che provi la coppia.&lt;/p&gt;
&lt;h3 id=&quot;1-contesto-maguyva&quot;&gt;1. Contesto Maguyva&lt;/h3&gt;
&lt;p&gt;Indicizza un repository che già conosci. Collega il client MCP in cui già scrivi — Claude Code, Cursor, Codex CLI, VS Code, Windsurf, o un altro client compatibile con MCP. Maguyva ha guide di configurazione per 24 client MCP documentati e può connettersi ad altri client che supportano la configurazione MCP standard.&lt;/p&gt;
&lt;p&gt;Fai una domanda che puoi valutare prima che chiunque scriva una riga. ‘Dove viene gestita la scadenza della sessione, e cosa la chiama?’ è una prima mossa migliore di ‘sistema l’autenticazione’. Esigi citazioni. Apri i risultati &lt;code&gt;file.ext:line&lt;/code&gt;. Segui il simbolo. Conferma la dipendenza che stai per toccare.&lt;/p&gt;
&lt;p&gt;Maguyva espone 11 strumenti MCP rivolti al cliente per ricerca, simboli, analisi delle dipendenze, recupero file, contesto del repository e workflow di utilità deterministici. Quattro modalità di recupero vengono fuse in risultati classificati; &lt;code&gt;find_symbol&lt;/code&gt; è uno strumento separato quando già conosci il nome. La &lt;a href=&quot;https://maguyva.ai/it/docs&quot;&gt;documentazione&lt;/a&gt; descrive il percorso più breve: iniziare gratis, indicizzare un repository che già conosci, collegare il client, poi fare una domanda che puoi verificare.&lt;/p&gt;
&lt;p&gt;Gli snapshot hanno un timestamp, così l’agente può dire quale versione dell’albero sta leggendo. Il limite onesto è il lavoro locale non sincronizzato. Se la modifica esiste solo in un working tree e non è stata pushata, la mappa ospitata ancora non la contiene. I file di istruzioni (&lt;code&gt;CLAUDE.md&lt;/code&gt;, &lt;code&gt;AGENTS.md&lt;/code&gt;) trovano ancora posto qui, per convenzioni e per ciò che non va toccato. Non sono una mappa viva. Usali per il comportamento. Usa Maguyva per i fatti.&lt;/p&gt;
&lt;p&gt;Non lasciare che l’agente apra una PR prima che le citazioni sopravvivano al contatto con il repository. Quel cancello è tutto il senso di questa fase.&lt;/p&gt;
&lt;h3 id=&quot;2-pr-dellagente&quot;&gt;2. PR dell’agente&lt;/h3&gt;
&lt;p&gt;Lo stesso agente ora scrive la modifica nel client per cui già paghi. Maguyva non è un editor né un revisore. L’agente continua a produrre il diff. Tu continui ad aprire la pull request su GitHub o GitLab come già fai.&lt;/p&gt;
&lt;p&gt;Ciò che dovrebbe essere diverso è il primo file. La PR dovrebbe nominare l’handler che implementa davvero il comportamento, il chiamante che si romperà, e il test che fallirà se la modifica è sbagliata. Se la fase 1 è stata saltata, la fase 3 spenderà i suoi commenti su una modifica atterrata nel pacchetto sbagliato. Greptile può comunque trovare problemi sistemici. Non dovrebbe anche doversi riprendere da un percorso allucinato.&lt;/p&gt;
&lt;p&gt;Tieni la PR circoscritta. Un primo file fondato non è una licenza per riscrivere il modulo. Questa coppia complementare funziona quando l’agente ha fatto un lavoro con una mappa, e poi ha chiesto a un revisore di fare un altro lavoro su un diff delimitato.&lt;/p&gt;
&lt;h3 id=&quot;3-revisione-greptile&quot;&gt;3. Revisione Greptile&lt;/h3&gt;
&lt;p&gt;Greptile è già connesso al repository tramite l’app GitHub o GitLab. Sulla nuova pull request analizza la modifica usando il grafo completo del repository che ha costruito, e pubblica i risultati come commenti con correzioni suggerite. I loro materiali collocano questo passaggio a circa tre minuti.&lt;/p&gt;
&lt;p&gt;Leggi i commenti come leggeresti un collega attento: apri la posizione citata, decidi se il risultato è reale, poi agisci. Dove Greptile offre ‘Fix with your Agent’, invia il problema — percorsi di file, numeri di riga, codice suggerito — a Claude Code, Codex, Conductor, Cursor, o Devin. ‘Fix All’ invia tutti i problemi della revisione in una volta. Forniscono anche un Greptile MCP e un plugin per Claude Code per quel passaggio. Maguyva non è su quella lista di destinazioni nominate; quell’assenza non è un problema. Maguyva ha già fatto il suo lavoro nella fase 1. L’agente di coding che ha scritto la PR è quello che dovrebbe ricevere il payload di correzione.&lt;/p&gt;
&lt;p&gt;Aspettati rumore nelle prime 2-3 settimane mentre il sistema di apprendimento di Greptile si adatta ai commenti che il tuo team lascia davvero. Questo è il loro programma dichiarato, non un difetto della coppia. La revisione umana resta nel ciclo. Greptile è il primo passaggio automatizzato, non il pulsante di merge.&lt;/p&gt;
&lt;p&gt;Se un commento di Greptile punta a un file che l’agente non ha mai interrogato nella fase 1, è un segnale utile. O la mappa ha perso un chiamante, o l’agente ha saltato una citazione. Correggi la bozza in base al commento. Non disattivare il revisore.&lt;/p&gt;
&lt;h2 id=&quot;come-mantenere-onesto-questo-complemento&quot;&gt;Come mantenere onesto questo complemento&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Maguyva sempre prima. Una revisione di una PR con il file sbagliato resta comunque una revisione del file sbagliato.&lt;/li&gt;
&lt;li&gt;Greptile sempre dopo. Una bozza ben citata ha comunque bisogno di una lettura del diff a livello dell’intero sistema.&lt;/li&gt;
&lt;li&gt;Non chiedere a Maguyva di pubblicare commenti sulle PR. Non lo fa.&lt;/li&gt;
&lt;li&gt;Non chiedere a Greptile di essere il primo livello di recupero dell’agente mentre sta ancora scegliendo un percorso. Non è il lavoro per cui è collegata la loro app GitHub o GitLab.&lt;/li&gt;
&lt;li&gt;Non inventare una pipeline bash che li ‘sincronizza’. La PR è l’interfaccia.&lt;/li&gt;
&lt;li&gt;Verifica entrambi i lati in modo indipendente. Indicizza un repository che già conosci. Fai una domanda che puoi verificare. Poi apri una piccola PR e leggi cosa commenta davvero Greptile.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Il ciclo è ordinario una volta che gli si dà un nome. Prima la mappa. Poi la PR dell’agente. Poi la revisione. Ogni prodotto resta sul lato della pull request in cui è bravo.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;// map first. review second. in that order.&lt;/code&gt;&lt;/p&gt;
</content:encoded><category>Ecosystem</category><category>Workflow</category><category>Code Review</category></item><item><title>Dare a un agente AI il contesto di un repository grande senza un indexer locale</title><link>https://maguyva.ai/it/blog/large-repo-context-without-a-local-indexer</link><guid isPermaLink="true">https://maguyva.ai/it/blog/large-repo-context-without-a-local-indexer</guid><description>Come dare a un agente di coding una mappa interrogabile di un repository grande dal cloud, senza eseguire un indexer locale sul tuo laptop.</description><pubDate>Fri, 14 Aug 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Un repository grande non entra in una finestra di contesto, e se hai mai puntato un indexer da laptop su un vero monorepo, sai che non entra comodamente nemmeno lì — la RAM schizza, la prima indicizzazione richiede un’ora, e il tuo agente inizia comunque la sessione successiva indovinando quali file contano.&lt;/p&gt;
&lt;p&gt;La risposta abituale è eseguire un indexer accanto all’editor, e per un repository che entra comodamente in una macchina, è una buona risposta. Se il tuo monorepo si indicizza già velocemente in Cursor e quello è l’unico posto in cui ti serve la mappa, questo articolo non ha nulla da aggiungere — saltalo.&lt;/p&gt;
&lt;p&gt;Questo articolo parla dell’altro caso — quando un agente ha bisogno di una mappa interrogabile di un repository grande, e non vuoi eseguire un indexer locale per ottenerla.&lt;/p&gt;
&lt;h2 id=&quot;quando-un-indexer-locale-è-lo-strumento-sbagliato&quot;&gt;Quando un indexer locale è lo strumento sbagliato&lt;/h2&gt;
&lt;p&gt;Un indice locale presume che il codice viva sulla macchina che lo interroga, e alla scala di un vero monorepo questa presunzione si tende anche dentro un singolo editor. Il repository è semplicemente più grande di quanto tu voglia tenere ‘caldo’ su un laptop: lavori in un pacchetto mentre il raggio d’impatto si trova tre directory più in là, e una prima indicizzazione a freddo di un albero da due milioni di righe non è qualcosa che vuoi affrontare due volte — né sulla tua macchina, né su un runner CI che non ha mai clonato prima quell’albero. Oppure un collega dovrebbe poter interrogare la stessa mappa che usi tu, senza aspettare che la propria macchina si faccia strada attraverso lo stesso indice.&lt;/p&gt;
&lt;p&gt;Niente di tutto questo è un motivo per buttare via un buon indexer dell’editor. È un motivo per avere anche una mappa ospitata che qualsiasi tuo agente può interrogare via MCP.&lt;/p&gt;
&lt;p&gt;E il problema di scala va più a fondo di ‘troppi file da incollare’. Su un albero grande, la domanda interessante non è quasi mai ‘mostrami questo file’ — è quale file, quale simbolo, quali chiamanti, quali test. Un agente che inizia elencando &lt;code&gt;src/&lt;/code&gt; e leggendo i primi tre risultati mancherà allegramente l’handler in &lt;code&gt;apps/api&lt;/code&gt; e il client generato in &lt;code&gt;packages/sdk&lt;/code&gt;. Ciò di cui hai bisogno è un recupero costruito dall’intero albero, poi classificato, poi citato.&lt;/p&gt;
&lt;h2 id=&quot;cosa-significa-davvero-contesto-di-un-repository-grande&quot;&gt;Cosa significa davvero ‘contesto di un repository grande’&lt;/h2&gt;
&lt;p&gt;Riversare file nel prompt non è contesto — è una copia più piccola e peggiore dell’albero. Ciò di cui il tuo agente ha davvero bisogno è porre domande e ricevere risposte citate: dove è definito questo simbolo e chi lo chiama, cosa dipende dal modulo che sto per cambiare, quale file di test copre questo comportamento, e come appare l’albero &lt;em&gt;adesso&lt;/em&gt;, non lo scorso trimestre.&lt;/p&gt;
&lt;p&gt;Queste risposte devono provenire da un indice costruito sul tuo repository, non dalla memoria del modello sui repository altrui, e l’indice deve vivere da qualche parte al di fuori della finestra di contesto dell’agente. Per questo problema, dovrebbe vivere anche da qualche parte al di fuori del tuo laptop.&lt;/p&gt;
&lt;p&gt;Un’altra cosa che i file di istruzioni non possono fare per te: &lt;code&gt;CLAUDE.md&lt;/code&gt; e &lt;code&gt;AGENTS.md&lt;/code&gt; sono il posto giusto per convenzioni e comportamento, ma non sono una mappa viva, classificata, interrogabile di un albero da due milioni di righe. Usa le regole per il comportamento; usa l’intelligenza del repository per i fatti.&lt;/p&gt;
&lt;h2 id=&quot;costruiamo-la-mappa-nel-cloud-la-interroghiamo-da-qualsiasi-client&quot;&gt;Costruiamo la mappa nel cloud, la interroghiamo da qualsiasi client&lt;/h2&gt;
&lt;p&gt;Maguyva è un livello di contesto della codebase MCP remoto. Colleghi GitHub, scegli i tuoi repository, e puoi andartene mentre le pipeline cloud analizzano l’albero, costruiscono simboli e archi del grafo, e mantengono una mappa classificata — mai un indexer locale.&lt;/p&gt;
&lt;p&gt;Quando fai push del codice, i file modificati vengono analizzati in modo incrementale, e i livelli di grafo e ranking vengono ricostruiti secondo una pianificazione: giornaliera nel piano gratuito, oraria in quelli a pagamento. Ogni snapshot ha un timestamp, così il tuo agente può dire quale versione dell’albero sta leggendo. Il limite onesto qui è il lavoro locale non sincronizzato — una modifica che esiste solo nel tuo working tree, mai pushata, non è ancora nella mappa ospitata.&lt;/p&gt;
&lt;p&gt;Poi colleghi qualsiasi client tu già usi aggiungendo una chiave API alla sua configurazione MCP. Esistono guide di configurazione per 24 client MCP documentati, e qualsiasi altro client compatibile con MCP che supporta la configurazione standard può connettersi anch’esso. Se Cursor è casa tua, la &lt;a href=&quot;https://maguyva.ai/it/for-cursor&quot;&gt;pagina Cursor&lt;/a&gt; percorre quella strada; lo stesso server risponde a Claude Code, VS Code, Windsurf, Codex CLI e agli altri.&lt;/p&gt;
&lt;p&gt;Non cambi editor. Dai al tuo agente una superficie di strumenti — 11 strumenti MCP per ricerca, simboli, analisi delle dipendenze, recupero file e contesto del repository — con copertura di oltre 279 lingue e tecnologie basate su testo, il che conta più di quanto pensi su un monorepo che ha smesso di essere una sola lingua anni fa.&lt;/p&gt;
&lt;p&gt;Le risposte tornano fondate, come percorsi di file con numeri di riga. Ricerca semantica, strutturale, a grafo e testuale vengono fuse in risultati classificati, così una domanda come ‘cosa dipende da parseConfig’ non ti dà né un dump grep né un singolo frammento semantico, ma la manciata di posti che davvero contano.&lt;/p&gt;
&lt;h2 id=&quot;una-guida-concreta&quot;&gt;Una guida concreta&lt;/h2&gt;
&lt;p&gt;Non iniziare indicizzando l’intera azienda. Ecco il percorso che funziona:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Scegli un repository che già conosci bene — un pacchetto che puoi valutare a mano vale più del più grande albero che hai.&lt;/li&gt;
&lt;li&gt;Inizia gratis: 3 repository, 50mila righe indicizzate, tutti gli 11 strumenti, nessuna quota mensile di query. Se il tuo repository rappresentativo è più grande, la &lt;a href=&quot;https://maguyva.ai/it/pricing&quot;&gt;pagina prezzi&lt;/a&gt; elenca i livelli di spazio di lavoro ($0, $19, $49, $149) per estensione indicizzata — non per numero di posti.&lt;/li&gt;
&lt;li&gt;Collega GitHub e attendi che la prima indicizzazione finisca. Non stai compilando nulla localmente.&lt;/li&gt;
&lt;li&gt;Collega il client MCP — poche righe di configurazione. Maguyva è un server MCP remoto, quindi non ci sono plugin, né estensioni, né un secondo editor da adottare.&lt;/li&gt;
&lt;li&gt;Fai una domanda che puoi verificare. ‘Cosa dipende da parseConfig?’ oppure ‘Dove viene gestita la scadenza della sessione di login?’ Poi apri i risultati citati &lt;code&gt;file.ext:line&lt;/code&gt; e confrontali con l’albero di fronte a te.&lt;/li&gt;
&lt;li&gt;Solo dopo che le citazioni sopravvivono a quel contatto lasci che l’agente modifichi.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Se il primo repository si adatta bene e il tuo albero è grande, aumenta lo spazio di lavoro per adattarlo alle righe indicizzate e alla cadenza di ricostruzione. Umani e agenti condividono lo stesso conteggio di utenti — Maguyva addebita per spazio di lavoro, non per posto — quindi aggiungere un terzo agente al ciclo non ti costa nulla.&lt;/p&gt;
&lt;p&gt;Il test di attivazione è lo stesso che la &lt;a href=&quot;https://maguyva.ai/it/docs&quot;&gt;documentazione&lt;/a&gt; raccomanda per qualsiasi prima esecuzione: indicizza un repository che già conosci, fai una domanda che puoi verificare. Un repository grande non cambia il test; rende solo più costoso un primo file sbagliato.&lt;/p&gt;
&lt;h2 id=&quot;cosa-osservare-dopo-il-collegamento&quot;&gt;Cosa osservare dopo il collegamento&lt;/h2&gt;
&lt;p&gt;Tieni d’occhio tre cose. Aggiornamento: i piani a pagamento si ricostruiscono ogni ora, quelli gratuiti ogni giorno, e il lavoro locale non pushato non sarà nella mappa — è il compromesso che accetti. Ambito: indicizza un insieme rappresentativo di repository, non ogni fork archiviato; il livello gratuito è dimensionato apposta per scoprire se le risposte valgono la pena di essere mantenute. E verifica: una mappa di un repository grande che non può citare percorsi e numeri di riga è solo un motore di indovinelli più lento, quindi fai mostrare al tuo agente il posto prima che consegni la patch.&lt;/p&gt;
&lt;p&gt;Poi esegui lo stesso test che eseguiresti su un repository piccolo. Indicizza un repository che già conosci. Fai una domanda che puoi verificare. Se la mappa è reale, il tuo agente smette di partire da un albero freddo.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;// no laptop got hot building this map.&lt;/code&gt;&lt;/p&gt;
</content:encoded><category>AI Agents</category><category>MCP</category><category>Indexing</category><category>Monorepos</category></item><item><title>Perché il tuo agente di coding AI allucina i percorsi dei file</title><link>https://maguyva.ai/it/blog/why-ai-coding-agents-hallucinate-file-paths</link><guid isPermaLink="true">https://maguyva.ai/it/blog/why-ai-coding-agents-hallucinate-file-paths</guid><description>Gli agenti di coding AI inventano percorsi di file quando non hanno una mappa reale del repository. Ecco perché succede, e come la fondatezza porta a meno modifiche allucinate.</description><pubDate>Fri, 14 Aug 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Il segnale non è un corpo di funzione sbagliato. È una modifica sicura di sé a un file che non esiste, o a un file che esiste ma non è quello che implementa il comportamento.&lt;/p&gt;
&lt;p&gt;Hai chiesto una correzione della scadenza di sessione. L’agente ha aperto &lt;code&gt;src/auth/session.ts&lt;/code&gt;. Quel percorso è plausibile. È anche sbagliato. L’handler vero vive in &lt;code&gt;apps/api/src/middleware/expiry.ts&lt;/code&gt;, rinominato due refactoring fa. L’agente non ti ha mentito. Ha completato una stringa a forma di percorso a partire da priori di addestramento più qualsiasi cosa fosse già nella finestra di contesto.&lt;/p&gt;
&lt;p&gt;Questo è il modello di fallimento comune su un repository reale. Il modello sa scrivere codice. L’errore sta nello scegliere il posto sbagliato in cui scriverlo.&lt;/p&gt;
&lt;h2 id=&quot;perché-gli-agenti-inventano-percorsi&quot;&gt;Perché gli agenti inventano percorsi&lt;/h2&gt;
&lt;p&gt;Un agente di coding è un modello di previsione del token successivo dotato di strumenti. Quando dici ‘sistema la scadenza di sessione’, deve nominare un file prima di poter leggere o applicare una patch a qualsiasi cosa. Se non ha già una mappa fondata, costruisce un percorso a partire da:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Convenzioni di denominazione che ha visto in altri repository. &lt;code&gt;src/auth/session.ts&lt;/code&gt; è una forma frequente.&lt;/li&gt;
&lt;li&gt;File già presenti nella conversazione, che potrebbero essere quelli che hai incollato la settimana scorsa, non quelli che contano ora.&lt;/li&gt;
&lt;li&gt;Elenchi di directory che ha eseguito per caso, incompleti su un albero grande.&lt;/li&gt;
&lt;li&gt;File di istruzioni. &lt;code&gt;CLAUDE.md&lt;/code&gt; e &lt;code&gt;AGENTS.md&lt;/code&gt; dicono all’agente come comportarsi. Non sono un indice vivo di simboli, chiamanti, o percorsi attuali.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Nessuna di queste fonti è una mappa di questo repository, oggi. Il modello riempie il vuoto nello stesso modo in cui riempie qualsiasi vuoto: con una continuazione ad alta probabilità. Quella continuazione spesso sembra un percorso reale. A volte il file esiste ed è vicino a quello giusto. A volte esisteva su un branch unito il mese scorso. A volte non è mai esistito.&lt;/p&gt;
&lt;p&gt;Grep non ti salva qui se l’agente non cerca affatto la stringa giusta. L’agente ha indovinato un percorso, poi ha letto ciò che quel percorso restituiva, poi lo ha modificato. Il primo passo sbagliato è stato il percorso, non la patch.&lt;/p&gt;
&lt;p&gt;Leggere i file non è nemmeno lo stesso che trovare quelli giusti. Claude Code, Cursor, Codex, e strumenti simili possono aprire qualsiasi cosa tu indichi loro. La domanda è se trovano in modo affidabile i file giusti, i simboli importanti, le dipendenze, i test, e il raggio d’impatto prima di modificare. L’accesso ai file senza una mappa inizia comunque con un’indovinello.&lt;/p&gt;
&lt;h2 id=&quot;la-modifica-del-file-sbagliato-è-un-problema-di-recupero&quot;&gt;La modifica del file sbagliato è un problema di recupero&lt;/h2&gt;
&lt;p&gt;Tratta il percorso inventato come un errore di recupero, non come un difetto di personalità.&lt;/p&gt;
&lt;p&gt;Se l’agente dovesse restituire &lt;code&gt;path/file.ext:line&lt;/code&gt; prima di poter modificare, accadrebbero due cose. Primo, potresti aprire la citazione e rifiutare il lavoro in dieci secondi. Secondo, l’agente dovrebbe interrogare qualcosa che conosce davvero l’albero.&lt;/p&gt;
&lt;p&gt;Questo è il lavoro di un livello di contesto della codebase. La sola ricerca semantica non basta. Un frammento che ‘suona come scadenza di sessione’ può comunque atterrare in un pacchetto deprecato. Ti serve anche testo esatto quando conosci la stringa, ricerca di simboli quando conosci il nome, ricerca strutturale quando conosci la forma, e un grafo delle dipendenze quando ti servono i chiamanti e il raggio d’impatto.&lt;/p&gt;
&lt;p&gt;Maguyva è quel livello per gli agenti di coding compatibili con MCP. Non è un editor. Claude Code, Cursor, Codex CLI, VS Code, Windsurf, e altri client MCP restano dove sono. L’agente interroga una mappa classificata prima di toccare una riga.&lt;/p&gt;
&lt;p&gt;L’affermazione è deliberatamente modesta: meno modifiche allucinate. Maguyva non toglie al modello la capacità di indovinare. Cambia il primo passo predefinito da ‘inventare un percorso plausibile’ a ‘chiedere posizioni classificate e citate’.&lt;/p&gt;
&lt;h2 id=&quot;come-appare-una-risposta-fondata&quot;&gt;Come appare una risposta fondata&lt;/h2&gt;
&lt;p&gt;Una risposta utile a ‘dove viene gestita la scadenza di sessione’ non è un paragrafo. È un breve elenco di posizioni:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;apps/api/src/middleware/expiry.ts:48&lt;/code&gt; - l’handler&lt;/li&gt;
&lt;li&gt;&lt;code&gt;apps/web/src/lib/auth-client.ts:112&lt;/code&gt; - il chiamante&lt;/li&gt;
&lt;li&gt;&lt;code&gt;apps/api/tests/expiry.test.ts:20&lt;/code&gt; - il test che fallirà se la modifica è sbagliata&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Puoi aprire queste righe. Se sono sbagliate, ti fermi. Se sono corrette, l’agente può modificare. La verifica è il punto, non uno slogan.&lt;/p&gt;
&lt;p&gt;Maguyva espone 11 strumenti MCP rivolti al cliente per ricerca, simboli, analisi delle dipendenze, recupero file, contesto del repository e workflow di utilità deterministici. Quattro modalità di recupero (semantica, strutturale, a grafo/dipendenze e testuale) vengono fuse in risultati classificati; la ricerca di simboli è uno strumento MCP separato (&lt;code&gt;find_symbol&lt;/code&gt;). Le risposte fondate tornano con percorsi di file e numeri di riga, così puoi valutarle rispetto all’albero di fronte a te.&lt;/p&gt;
&lt;p&gt;La &lt;a href=&quot;https://maguyva.ai/it/docs&quot;&gt;documentazione&lt;/a&gt; descrive il percorso più breve: iniziare gratis, indicizzare un repository che già conosci, collegare il client, poi fare una domanda che puoi verificare.&lt;/p&gt;
&lt;h2 id=&quot;un-ciclo-che-cambia-la-prima-modifica&quot;&gt;Un ciclo che cambia la prima modifica&lt;/h2&gt;
&lt;p&gt;Non ti serve una nuova religione del workflow. Ti serve un passo in più prima della prima scrittura.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Fai una domanda che già puoi valutare. ‘Quale codice gestisce il login e la scadenza di sessione?’ è meglio di ‘sistema l’autenticazione’.&lt;/li&gt;
&lt;li&gt;Esigi citazioni. Percorso del file e numero di riga, non un riassunto del ‘modulo di autenticazione’.&lt;/li&gt;
&lt;li&gt;Apri i file citati. Segui il simbolo. Conferma la dipendenza che stai per toccare.&lt;/li&gt;
&lt;li&gt;Solo allora lascia che l’agente applichi la patch.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Se il passo 2 non restituisce nulla di utile, l’agente non ha il diritto di improvvisare un percorso. Cerca di nuovo, oppure glielo indichi tu. Proprio questo unico cancello produce meno modifiche allucinate. Il modello è lo stesso modello. È la mappa che è cambiata.&lt;/p&gt;
&lt;p&gt;I file di istruzioni contano ancora. Mantienili. Usali per convenzioni, regole di revisione, e per ciò che non va toccato. Non chiedere loro di essere l’indice. Un &lt;code&gt;CLAUDE.md&lt;/code&gt; che elenca tre directory importanti sarà obsoleto la settimana dopo una divisione di pacchetto. Una mappa interrogabile si aggiorna quando si aggiorna il repository.&lt;/p&gt;
&lt;p&gt;Un fallimento correlato è il file quasi giusto: l’agente apre &lt;code&gt;auth.ts&lt;/code&gt; quando il comportamento vive in &lt;code&gt;auth-client.ts&lt;/code&gt;, oppure applica una patch a un file generato invece che alla sorgente, oppure modifica la copia in &lt;code&gt;packages/legacy&lt;/code&gt; perché il nome corrispondeva. Le citazioni non rendono impossibili questi errori. Li rendono visibili prima che il diff atterri.&lt;/p&gt;
&lt;h2 id=&quot;cosa-non-ti-risolverà-una-mappa&quot;&gt;Cosa non ti risolverà una mappa&lt;/h2&gt;
&lt;p&gt;Sii lucido su cosa ottieni. Una mappa fondata non renderà corretta ogni modifica — il tuo agente può comunque scrivere una patch sbagliata esattamente nel file giusto. Se la tua codebase si affida a dispatch dinamico, reflection, o monkey-patching, alcune ricerche di simboli torneranno più magre di quanto vorresti, perché è quello che l’indirezione a runtime fa a qualsiasi indice statico. E se speri in una percentuale — ‘percorsi allucinati ridotti del X%’ — non la troverai qui, perché nessuno può misurare onestamente quel numero per il tuo repository tranne te.&lt;/p&gt;
&lt;p&gt;Ciò che puoi aspettarti è più stretto e più utile: l’agente smette di aprire le sue modifiche con un percorso indovinato. Quel primo passo diventa fondato in una mappa reale, ed è da lì che vengono le modifiche meno allucinate. Tutto ciò che viene dopo la citazione — leggere il diff, giudicare la patch — resta comunque il tuo lavoro, come è sempre stato.&lt;/p&gt;
&lt;p&gt;Il test non ti costa quasi nulla: indicizza un repository che già conosci e fai una domanda che puoi verificare. Inizia con un percorso da cui sei già stato scottato. Se le citazioni sono sbagliate, lo vedrai subito. Se sono corrette, la prossima modifica del tuo agente avrà un posto migliore dove atterrare.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;// it doesn&apos;t know the file. it knows how to find it.&lt;/code&gt;&lt;/p&gt;
</content:encoded><category>AI Agents</category><category>Hallucination</category><category>Retrieval</category><category>MCP</category></item><item><title>Perché abbiamo aggiornato la ricerca sul codice a voyage-4-large</title><link>https://maguyva.ai/it/blog/upgrading-code-search-to-voyage-4-large</link><guid isPermaLink="true">https://maguyva.ai/it/blog/upgrading-code-search-to-voyage-4-large</guid><description>Abbiamo spostato i nostri embedding del codice su voyage-4-large — attualmente in cima alla classifica pubblica RTEB per il retrieval di codice. La versione onesta: il compromesso che facciamo, cosa indicizziamo davvero, e perché paghiamo per embedding premium.</description><pubDate>Tue, 09 Jun 2026 00:00:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;I numeri di benchmark in questo articolo riflettono le classifiche RTEB al momento della pubblicazione (giugno 2026). Le classifiche si muovono; considera i ranking come uno scatto istantaneo, non un fatto permanente.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;La ricerca semantica vale solo quanto gli embedding che ha sotto.&lt;/p&gt;
&lt;p&gt;Quando un agente chiede a Maguyva “dove gestiamo i retry”, non sta facendo grep della parola “retry”. Sta chiedendo il &lt;em&gt;significato&lt;/em&gt; - il loop di backoff, il circuit breaker, la cosa che avvolge una chiamata instabile. A quella domanda risponde un modello vettoriale che trasforma il codice in un punto nello spazio e trova i vicini. Scegli un modello migliore e ogni query semantica nel prodotto diventa silenziosamente più precisa.&lt;/p&gt;
&lt;p&gt;Quindi abbiamo cambiato il nostro. A partire da giugno 2026, gli embedding del codice di Maguyva girano su &lt;strong&gt;&lt;code&gt;voyage-4-large&lt;/code&gt;&lt;/strong&gt;, sostituendo &lt;code&gt;voyage-code-3&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id=&quot;il-benchmark&quot;&gt;Il benchmark&lt;/h2&gt;
&lt;p&gt;Non abbiamo preso questa decisione a sensazione. Il pubblico &lt;a href=&quot;https://embedding-benchmark-rteb.hf.space/code&quot;&gt;Retrieval Embedding Benchmark (RTEB)&lt;/a&gt; classifica i modelli di embedding su task di retrieval reali, e sulla sua classifica &lt;strong&gt;Code&lt;/strong&gt; &lt;code&gt;voyage-4-large&lt;/code&gt; si trova al &lt;strong&gt;#1 assoluto (90,86)&lt;/strong&gt; - davanti a &lt;code&gt;gemini-embedding-2-preview&lt;/code&gt; (90,26) e, in modo significativo, davanti al modello che stavamo già usando, &lt;code&gt;voyage-code-3&lt;/code&gt; (89,73, #3).&lt;/p&gt;
&lt;p&gt;È un piccolo divario assoluto. Ma è un divario nella direzione giusta, su un benchmark pubblico, esattamente sul task a cui teniamo: recuperare codice per significato.&lt;/p&gt;
&lt;h2 id=&quot;il-compromesso-che-accettiamo-quantizzazione-binaria&quot;&gt;Il compromesso che accettiamo: quantizzazione binaria&lt;/h2&gt;
&lt;p&gt;Ecco la parte che la maggior parte degli articoli “abbiamo aggiornato il nostro modello” tralascia.&lt;/p&gt;
&lt;p&gt;Maguyva non archivia vettori a piena precisione. Archiviamo embedding &lt;strong&gt;quantizzati binariamente&lt;/strong&gt;: ogni vettore a 2048 dimensioni collassa in una firma a 2048 bit - &lt;strong&gt;256 byte per vettore&lt;/strong&gt;. Quelle firme vengono cercate con la distanza di Hamming, indicizzate e partizionate per tenant.&lt;/p&gt;
&lt;p&gt;È un compromesso deliberato. La quantizzazione binaria rinuncia a un po’ di precisione di retrieval in cambio di uno storage drasticamente più piccolo e di calcoli di distanza veloci ed economici senza dover gestire un database vettoriale separato. Per un prodotto che indicizza interi repository per workspace, quell’economia conta più che spremere l’ultima frazione di punto di benchmark.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;voyage-4-large&lt;/code&gt; si adatta a questo design senza forzare una migrazione del layer di storage: produce un output a 2048 dimensioni, come &lt;code&gt;voyage-code-3&lt;/code&gt;, quindi le nostre colonne &lt;code&gt;bit(2048)&lt;/code&gt; e il percorso di ricerca Hamming non sono cambiati. Il modello è migliorato; lo schema è rimasto fermo.&lt;/p&gt;
&lt;h2 id=&quot;il-codice-era-solo-linizio&quot;&gt;Il codice era solo l’inizio&lt;/h2&gt;
&lt;p&gt;Maguyva è uno strumento di intelligenza del codice. Ma siamo anche il cliente zero, e lo puntiamo anche su qualcos’altro: il markdown che vive nei nostri repository accanto al codice. Record di decisioni architetturali, runbook, contratti, documenti di finanza e policy - tutto versionato in Git, tutto dietro lo stesso server MCP, un indice semantico sui &lt;em&gt;documenti&lt;/em&gt;, non solo sul codice sorgente.&lt;/p&gt;
&lt;p&gt;Ecco esattamente perché conta l’ampiezza di voyage-4-large. Sulla stessa famiglia di classifiche RTEB è &lt;strong&gt;#1 in finanza, #1 in sanità, e #1 nel retrieval testuale complessivo&lt;/strong&gt; - davanti a Gemini Embedding di Google, Embed v4 di Cohere, e text-embedding-3-large di OpenAI. (Voyage è co-creatore di RTEB, quindi lo leggiamo come un forte segnale pubblico piuttosto che come un arbitro perfettamente neutrale - ma viene confrontato testa a testa con ogni modello commerciale importante, su set di hold-out privati.) Lo stesso indice che trova la funzione giusta per un agente trova la clausola giusta in un contratto o la riga giusta in una policy - e su quei domini, voyage-4-large non è un compromesso, è il leader.&lt;/p&gt;
&lt;h2 id=&quot;perché-paghiamo-per-embedding-premium&quot;&gt;Perché paghiamo per embedding premium&lt;/h2&gt;
&lt;p&gt;C’è un modo più economico di fare ricerca, e gran parte è gratuita. La ricerca lessicale - BM25 e i suoi simili - fa il match delle parole chiave, gira localmente, e non costa nulla. I modelli di embedding open-source come BGE, Nomic, ed embeddinggemma offrono un retrieval semantico genuinamente &lt;em&gt;decente&lt;/em&gt;, e puoi ospitarli tu stesso al prezzo di una GPU. Anche Maguyva usa il lato gratuito: ogni query fonde ricerca testuale, AST, a grafo, e semantica. Ciò su cui non risparmiamo è il layer semantico.&lt;/p&gt;
&lt;p&gt;Paghiamo per token per embedding premium - &lt;code&gt;voyage-4-large&lt;/code&gt; - invece di ospitare noi stessi un modello gratuito, per due motivi. Primo, la sola ricerca per parole chiave non può rispondere a “dove gestiamo i retry” quando il codice dice &lt;code&gt;backoff&lt;/code&gt; e &lt;code&gt;circuit breaker&lt;/code&gt; e non dice mai la parola “retry” - rappresentare il significato è la ragion d’essere dell’embedding, e sui domini che serviamo i modelli open restano indietro rispetto a quelli premium: un paio di punti indietro sul testo generale, e ancora più indietro in nicchie come codice, contratti, e finanza. Secondo, nella nostra esperienza la qualità del retrieval plasma la risposta finale più di quanto faccia il modello dall’altra parte - un agente forte a cui viene dato il contesto sbagliato risponde comunque male, e non vede mai il documento che non gli è mai stato dato.&lt;/p&gt;
&lt;p&gt;Quindi gli embedding premium sono un costo per token che cresce con ogni repository e documento che indicizziamo - e lo sosteniamo consapevolmente. Per il risultato che ottengono i nostri utenti, la funzione giusta o la clausola giusta, pensiamo che quel compromesso valga la pena.&lt;/p&gt;
&lt;h2 id=&quot;la-parte-onesta&quot;&gt;La parte onesta&lt;/h2&gt;
&lt;p&gt;La documentazione stessa di Voyage etichetta ancora &lt;code&gt;voyage-code-3&lt;/code&gt; come il modello ottimizzato per il codice. Allora perché passare al nuovo?&lt;/p&gt;
&lt;p&gt;Perché leggiamo il benchmark pubblico, non solo la tabella dei modelli del vendor, e il benchmark ha messo &lt;code&gt;voyage-4-large&lt;/code&gt; in cima per il retrieval di codice. Questa è stata una scommessa lungimirante: prendere il modello più nuovo e generalmente più forte e validarlo contro una classifica pubblica sui task che contano. Siamo a nostro agio a fare quella scommessa perché l’evidenza è ampia - voyage-4-large non vince solo sul codice, guida anche in finanza, sanità, e retrieval complessivo.&lt;/p&gt;
&lt;h2 id=&quot;le-fondamenta-dietro-le-quinte&quot;&gt;Le fondamenta dietro le quinte&lt;/h2&gt;
&lt;p&gt;Ogni strumento che esponiamo - ricerca semantica, raccolta del task-context, domande e risposte fondate - alla fine si riduce al retrieval. Quando il retriever migliora, l’agente dall’altra parte ottiene prove migliori, prende meno decisioni sbagliate, e ancora le sue risposte al codice giusto - o alla clausola giusta, o alla policy giusta. Un modello di embedding più preciso non è una feature vistosa. È la base su cui poggia tutto il resto, e l’abbiamo appena migliorata. Non te ne accorgerai. Questo è il punto.&lt;/p&gt;
</content:encoded><category>Embeddings</category><category>Search</category><category>Architecture</category></item><item><title>Miglioramento ricorsivo del supporto ai linguaggi: affinare l&apos;intelligenza del codice su ~280 linguaggi</title><link>https://maguyva.ai/it/blog/autonomous-quality-loops-language-grind</link><guid isPermaLink="true">https://maguyva.ai/it/blog/autonomous-quality-loops-language-grind</guid><description>Supportiamo l&apos;intelligenza del codice per ~280 linguaggi. Nessun essere umano può controllarli a mano uno per uno. Così abbiamo costruito un loop di miglioramento ricorsivo del supporto ai linguaggi — campionamento, LLM come giudice, correggi una cosa, rivalida — e lo facciamo girare con una flotta di agenti isolati finché l&apos;estrazione non è davvero corretta, non solo verde.</description><pubDate>Tue, 26 May 2026 00:00:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;I numeri in questo articolo riflettono il sistema al momento della pubblicazione (maggio 2026). Consulta la nostra &lt;a href=&quot;https://maguyva.ai/it/team&quot;&gt;pagina del team&lt;/a&gt; per le cifre attuali.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Maguyva estrae simboli, riferimenti e un grafo delle dipendenze dal codice sorgente in circa 280 linguaggi. Ogni linguaggio è un handler tree-sitter su misura — query, euristiche, casi limite — e ogni handler può essere sottilmente sbagliato a modo suo. Una chiamata a metodo emessa come una lettura. Una funzione attribuita allo scope contenitore sbagliato. Una relazione che semplicemente non esiste.&lt;/p&gt;
&lt;p&gt;Questo non lo puoi controllare a mano. Nessun team può leggere l’output di estrazione su 280 grammatiche e individuare gli edge sbagliati. Quindi la domanda interessante non è “la nostra estrazione è corretta” — è “come &lt;em&gt;scopri&lt;/em&gt; che è sbagliata, a questa ampiezza, senza un essere umano in ogni loop.” La nostra risposta è il miglioramento ricorsivo del supporto ai linguaggi: un loop di qualità guidato da agenti specializzati nei linguaggi, un LLM che agisce da giudice, e una regola che continuiamo a reimparare: verde non è lo stesso di corretto.&lt;/p&gt;
&lt;h2 id=&quot;verde-non-è-corretto&quot;&gt;Verde non è corretto&lt;/h2&gt;
&lt;p&gt;Ogni linguaggio ha una suite di fixture, e un gate di rilascio lo valuta su cinque dimensioni — accuratezza, integrità strutturale, completezza, qualità e performance. Un linguaggio diventa &lt;strong&gt;VERDE&lt;/strong&gt; solo quando, sulle sue fixture, precisione ≥ 0,95, recall ≥ 0,99, e F1 ≥ 0,97, con almeno 20 edge attesi per confidenza statistica. Sotto quella soglia è GIALLO o ROSSO, e non viene rilasciato.&lt;/p&gt;
&lt;p&gt;Quel gate è necessario ma non sufficiente. Le fixture validano contro fixture &lt;em&gt;che abbiamo scritto noi&lt;/em&gt;. Codificano i casi a cui abbiamo già pensato. Un handler può essere impeccabile sulle sue fixture e comunque devastare un pattern che compare solo nel codice reale — un idioma da macro, un metodo con vincoli sui tipi generici, una feature del linguaggio per cui nessuno ha scritto una fixture. VERDE significa che le fixture passano. Non significa che un repository reale venga estratto in modo pulito. Quindi il loop deve lasciarsi alle spalle le fixture ed esaminare il codice reale.&lt;/p&gt;
&lt;h2 id=&quot;il-loop-interno-campiona-giudica-correggi-dimostra&quot;&gt;Il loop interno: campiona, giudica, correggi, dimostra&lt;/h2&gt;
&lt;p&gt;Il loop centrale gira un linguaggio alla volta:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;text&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        ┌──────────────────────────────────────────────────────────┐&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        │                                                          │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        ▼                                                          │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  1. corpus run ── clone real-world repos, extract relationships   │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        │                                                          │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        ▼                                                          │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  2. spot-check 100 edges (seed 42, then seed 123 to cross-check)  │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        │                                                          │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        ▼                                                          │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  3. LLM judge classifies every sampled edge:                      │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        CORRECT · FALSE_POSITIVE · TYPE_ERROR ·                    │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        SCOPE_ERROR · METADATA_ERROR                               │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        │                                                          │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        ▼                                                          │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  4. fix ONE thing — handler .py, .scm query, or config           │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        │                                                          │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        ▼                                                          │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  5. re-validate — F1 + re-classify + manifest diff (no regressions)│&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        │                                                          │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;   better? ──no──► revert, try a different fix ────────────────────┤&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        │ yes                                                       │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        ▼                                                           │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  6. promote the fix into fixtures (a permanent regression guard) ──┘&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Alcune cose fanno funzionare tutto questo invece di farlo arrancare a vuoto.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Il giudice è l’agente, non una chiamata API.&lt;/strong&gt; Quando diciamo “LLM come giudice”, intendiamo che l’agente specializzato nel linguaggio confronta ogni edge campionato con il codice sorgente reale e lo classifica con una griglia di valutazione fissa a cinque categorie: questo edge è corretto, un falso positivo, la relazione giusta con il tipo sbagliato, attaccato allo scope sbagliato, o porta metadati sbagliati? Quella griglia di valutazione è fondamentale — “23% di tasso di errore” non significa nulla finché non sai se sono difetti reali o il giudice che conta male.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Correggi una cosa, poi dimostralo.&lt;/strong&gt; Ogni iterazione modifica esattamente un asset modificabile, poi riesegue i test con un harness fisso e mantiene la modifica solo se F1 migliora e la riclassificazione sembra migliore. Se non è così, va in rollback. Nessun lotto di modifiche speculative, nessun “dovrebbe essere meglio”. Una modifica si guadagna il suo posto o sparisce. E quando una correzione regge, viene promossa nella suite di fixture — così il bug che ha corretto non può mai tornare silenziosamente. Quel passaggio di promozione è ciò che rende il loop &lt;em&gt;ricorsivo&lt;/em&gt; invece di semplicemente ripetitivo: ogni passata rafforza l’oracolo contro cui la passata successiva valida.&lt;/p&gt;
&lt;h2 id=&quot;la-lezione-che-continuiamo-a-reimparare-le-metriche-sovrastimano&quot;&gt;La lezione che continuiamo a reimparare: le metriche sovrastimano&lt;/h2&gt;
&lt;p&gt;Ecco la trappola, e ci siamo caduti dritti. Le metriche secondarie del corpus — con che frequenza un target estratto non ha un simbolo risolvibile, quanti simboli sembrano “orfani”, e così via — sovrastimano enormemente i problemi. Sono per lo più &lt;em&gt;artefatti del paradigma&lt;/em&gt;, non bug.&lt;/p&gt;
&lt;p&gt;L’esempio più pulito: &lt;code&gt;llvm&lt;/code&gt; una volta mostrava un tasso del 73% di “sorgente senza simbolo” e fu bollato come catastrofico. Abbiamo scavato. L’accuratezza reale era del &lt;strong&gt;98,5%&lt;/strong&gt;. I “simboli mancanti” erano quasi tutti riferimenti esterni legittimi — chiamate nella libreria standard, in framework, in codice che vive fuori dal repository. La metrica stava misurando una proprietà del linguaggio, non un difetto dell’handler. Linguaggi come Zig, COBOL e Odin mostrano tassi di “orfani” del 65-70% e sono completamente corretti; COBOL aveva zero errori reali.&lt;/p&gt;
&lt;p&gt;Se avessimo lasciato che quei numeri guidassero il lavoro, avremmo passato settimane a “correggere” handler già corretti e a ignorare i linguaggi con bug reali e silenziosi. La conclusione è netta: le metriche aggregate sono al massimo un rozzo segnale di triage. &lt;strong&gt;Il vero segnale di qualità è il controllo a campione con classificazione degli edge&lt;/strong&gt; — guardare gli edge reali in repository reali e giudicarli uno per uno. Dati sopra l’intuizione, ma solo una volta che sai quali dati dicono la verità.&lt;/p&gt;
&lt;h2 id=&quot;il-loop-esterno-una-flotta-non-una-maratona&quot;&gt;Il loop esterno: una flotta, non una maratona&lt;/h2&gt;
&lt;p&gt;Procedere un linguaggio alla volta richiederebbe un’eternità per coprirne 280, quindi il loop interno è avvolto in uno esterno che ne fa girare molti in parallelo.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;text&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;   pick a wave of near-GREEN / high-error languages&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        ▼&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;   fan out 10–15 agents, each ISOLATED in its own git worktree,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;   each grinding ONE language, committing to its own branch&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        ▼&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;   orchestrator integrates serially: file-scoped apply, then&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;   `manifest diff` — any cross-language regression blocks the batch&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        ▼&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;   gated push (reviewed and confirmed) ──► rotate to the next wave&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Ogni agente lavora in un worktree usa-e-getta così da non pestarsi i piedi a vicenda. L’orchestratore integra le loro correzioni una alla volta, ciascuna dietro un controllo di regressione a manifest completo: una modifica che aiuta il suo linguaggio ma silenziosamente ne rompe altri tre non viene integrata. L’integrazione è vincolata e confermata prima che qualcosa venga pushato — il gate di regressione decide cosa è &lt;em&gt;sicuro&lt;/em&gt;, un essere umano decide ancora cosa &lt;em&gt;viene rilasciato&lt;/em&gt;. Poi il pool ruota verso il prossimo gruppo di linguaggi e tutto il processo si ripete.&lt;/p&gt;
&lt;h2 id=&quot;cosa-resta-imperfetto&quot;&gt;Cosa resta imperfetto&lt;/h2&gt;
&lt;p&gt;Il giudice può sbagliare, e l’errore ha una direzione: un agente che gira con troppo poco contesto &lt;em&gt;sovrastima&lt;/em&gt;. In un lotto, otto linguaggi sono stati segnalati con un errore del 5-20%; all’ispezione solo uno di quei linguaggi presentava un bug reale — il resto erano errori del giudice dovuti a non aver colto la semantica propria del linguaggio (una riga sorgente che legittimamente emette più edge, binding di parametri modellati come assegnazioni, linguaggi con riferimento-per-identificatore). Ecco perché campioniamo con due seed e facciamo cross-check, e perché un disaccordo tra il giudice e le fixture è trattato come il segnale &lt;em&gt;più&lt;/em&gt; interessante, non un verdetto definitivo — a volte è la fixture a essere sbagliata.&lt;/p&gt;
&lt;p&gt;Siamo anche onesti sull’obiettivo. Il traguardo è zero errori reali, punto e basta — ma “zero” è un obiettivo verso cui lavoriamo con costanza, linguaggio per linguaggio, non una casella da spuntare. C’è sempre un altro repository con un altro idioma.&lt;/p&gt;
&lt;h2 id=&quot;dimostrato-con-il-lavoro-non-solo-dichiarato&quot;&gt;Dimostrato con il lavoro, non solo dichiarato&lt;/h2&gt;
&lt;p&gt;Tutto ciò che Maguyva fa per un agente — trovare un simbolo, tracciare una dipendenza, rispondere a una domanda con codice citato — poggia sul fatto che l’estrazione sottostante sia corretta. Su 280 linguaggi, la correttezza non può essere soltanto dichiarata; deve essere continuamente &lt;em&gt;dimostrata&lt;/em&gt; sul codice reale. Il loop è il modo in cui ce la guadagniamo: un ciclo autonomo di campionamento-e-correzione che tratta le proprie metriche con sospetto, dimostra ogni modifica, e trasforma ogni correzione in una guardia contro la prossima regressione. Non è affascinante. È il lavoro che ci permette di dire “supportiamo il tuo linguaggio” e intenderlo davvero. Verde è facile. La correttezza si conquista con il lavoro.&lt;/p&gt;
</content:encoded><category>Architecture</category><category>Languages</category><category>Agents</category></item><item><title>Ricerca a fusione multi-modale: scegliere il retriever giusto per ogni query</title><link>https://maguyva.ai/it/blog/multi-modal-fusion-search</link><guid isPermaLink="true">https://maguyva.ai/it/blog/multi-modal-fusion-search</guid><description>Una query come &apos;dove è definito parseConfig&apos; vuole una ricerca diversa da &apos;come funziona l&apos;auth&apos;. Maguyva classifica l&apos;intento, pesa di conseguenza quattro modalità di retrieval, e fonde i risultati con una Reciprocal Rank Fusion pesata.</description><pubDate>Wed, 15 Apr 2026 00:00:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;Nota sul design storico: questo articolo dell’aprile 2026 descrive il design del routing di allora, non il comportamento predefinito attuale. La correzione di settembre riportata sotto riguarda esclusivamente un’affermazione su una misurazione. Per il routing attuale, i preset e i controlli espliciti delle modalità, si veda &lt;a href=&quot;https://maguyva.ai/it/docs/how-it-works&quot;&gt;Come funziona&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Una query di ricerca non è una cosa sola.&lt;/p&gt;
&lt;p&gt;“dove è definito &lt;code&gt;parseConfig&lt;/code&gt;” vuole un simbolo esatto — una posizione precisa, veloce. “come funziona l’autenticazione” vuole significato — la distesa di codice correlato che spiega un concetto. “cosa si rompe se cambio questa funzione” vuole il grafo delle dipendenze. “trova la stringa &lt;code&gt;ECONNREFUSED&lt;/code&gt;” vuole un match letterale, niente di furbo.&lt;/p&gt;
&lt;p&gt;Grep è eccellente per i match letterali e utile per alcune cacce ai riferimenti, ma non è un grafo delle dipendenze e non capisce il significato. Gli embedding coprono il lato semantico, ma sono lo strumento sbagliato per stringhe esatte e analisi d’impatto. La maggior parte degli strumenti di ricerca sul codice sceglie un solo motore e impone quella scelta a ogni query. Maguyva non sceglie. Capisce che tipo di domanda hai fatto, poi combina quattro retriever nella proporzione che quella domanda merita.&lt;/p&gt;
&lt;h2 id=&quot;quattro-modalità&quot;&gt;Quattro modalità&lt;/h2&gt;
&lt;p&gt;Sotto il cofano ci sono quattro modi indipendenti per trovare codice:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;semantica&lt;/strong&gt; — ricerca vettoriale su embedding binari Voyage; trova codice per significato.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;testuale&lt;/strong&gt; — matching a trigrammi; trova letterali, stringhe di errore, identificatori esatti.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;strutturale&lt;/strong&gt; — query AST; trova definizioni, firme, e costrutti del linguaggio.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;a grafo&lt;/strong&gt; — il grafo delle dipendenze; trova chiamanti, chiamati, e raggio d’impatto.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Ognuna eccelle su una classe diversa di domanda. Il trucco sta nel decidere quanto fidarsi di ciascuna per la query che hai davanti.&lt;/p&gt;
&lt;h2 id=&quot;classificazione-dellintento&quot;&gt;Classificazione dell’intento&lt;/h2&gt;
&lt;p&gt;Prima che parta qualsiasi retrieval, un classificatore leggero smista la query in una di sei categorie di intento, con un punteggio di confidenza. È deliberatamente economico — euristiche ordinate, vince il primo match — perché gira sul percorso critico e aggiunge solo un millisecondo o due:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;inizia con &lt;code&gt;def &lt;/code&gt;, &lt;code&gt;class &lt;/code&gt;, &lt;code&gt;func &lt;/code&gt;, &lt;code&gt;import &lt;/code&gt;… → &lt;strong&gt;find_definition&lt;/strong&gt; (confidenza 0,95)&lt;/li&gt;
&lt;li&gt;“who calls”, “usages of”, “references to” (chi chiama, usi di, riferimenti a) → &lt;strong&gt;find_references&lt;/strong&gt; (0,90)&lt;/li&gt;
&lt;li&gt;“impact”, “blast radius”, “what depends on” (impatto, raggio d’impatto, cosa dipende da) → &lt;strong&gt;impact_analysis&lt;/strong&gt; (0,90)&lt;/li&gt;
&lt;li&gt;una &lt;code&gt;&quot;string&quot;&lt;/code&gt; tra virgolette o un token di errore come &lt;code&gt;traceback&lt;/code&gt; → &lt;strong&gt;exact_match&lt;/strong&gt; (0,85–0,90)&lt;/li&gt;
&lt;li&gt;un identificatore &lt;code&gt;CamelCase&lt;/code&gt; o &lt;code&gt;snake_case&lt;/code&gt; → &lt;strong&gt;find_definition&lt;/strong&gt; (0,60–0,80)&lt;/li&gt;
&lt;li&gt;“how”, “why”, “explain”, “architecture” (come, perché, spiega, architettura) → &lt;strong&gt;understand_code&lt;/strong&gt; (0,75)&lt;/li&gt;
&lt;li&gt;niente corrisponde → &lt;strong&gt;understand_code&lt;/strong&gt;, bassa confidenza (0,40)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Ogni intento porta un profilo di peso sulle quattro modalità. Questi sono i numeri reali:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Intento&lt;/th&gt;
&lt;th&gt;semantica&lt;/th&gt;
&lt;th&gt;testuale&lt;/th&gt;
&lt;th&gt;strutturale (AST)&lt;/th&gt;
&lt;th&gt;a grafo&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;find_definition&lt;/td&gt;
&lt;td&gt;0,2&lt;/td&gt;
&lt;td&gt;0,1&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;0,6&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;0,1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;find_references&lt;/td&gt;
&lt;td&gt;0,1&lt;/td&gt;
&lt;td&gt;0,2&lt;/td&gt;
&lt;td&gt;0,2&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;0,5&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;understand_code&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;0,5&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;0,2&lt;/td&gt;
&lt;td&gt;0,2&lt;/td&gt;
&lt;td&gt;0,1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;find_similar&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;0,4&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;0,3&lt;/td&gt;
&lt;td&gt;0,2&lt;/td&gt;
&lt;td&gt;0,1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;impact_analysis&lt;/td&gt;
&lt;td&gt;0,1&lt;/td&gt;
&lt;td&gt;0,1&lt;/td&gt;
&lt;td&gt;0,1&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;0,7&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;exact_match&lt;/td&gt;
&lt;td&gt;0,0&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;0,9&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;0,1&lt;/td&gt;
&lt;td&gt;0,0&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Quindi “dove è definito &lt;code&gt;parseConfig&lt;/code&gt;” pesa forte sull’AST (0,6). “come funziona l’auth” pesa sui vettori semantici (0,5). “cosa dipende da questo” è quasi tutto grafo (0,7). “trova &lt;code&gt;ECONNREFUSED&lt;/code&gt;” è quasi tutto trigrammi (0,9), con il modello di embedding completamente spento — perché la similarità semantica è esattamente lo strumento sbagliato per una stringa esatta.&lt;/p&gt;
&lt;h2 id=&quot;il-percorso-rapido-e-il-percorso-fuso&quot;&gt;Il percorso rapido, e il percorso fuso&lt;/h2&gt;
&lt;p&gt;Quando il classificatore è sicuro — punteggio ≥ 0,85 — e la query è di tipo normale, Maguyva salta del tutto la fusione e instrada direttamente verso la singola modalità dominante. “dove è definito X” non ha bisogno di quattro retriever; ha bisogno dell’indice AST, subito. Quel percorso diretto viene riportato indietro come &lt;code&gt;fusion_strategy: &quot;direct&quot;&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Tutto ciò che è ambiguo passa attraverso la fusione. Le quattro modalità (o tre, sul preset predefinito) girano in parallelo, ciascuna restituendo la propria lista ordinata, e le combiniamo.&lt;/p&gt;
&lt;h2 id=&quot;reciprocal-rank-fusion-pesata&quot;&gt;Reciprocal Rank Fusion pesata&lt;/h2&gt;
&lt;p&gt;Fondere retriever eterogenei è più difficile di quanto sembri: una similarità coseno di 0,82 e un punteggio a trigrammi di 137 e una centralità di grafo di 0,004 non sono sulla stessa scala, quindi non puoi semplicemente sommarli. La Reciprocal Rank Fusion aggira il problema scartando i punteggi grezzi e mantenendo solo il &lt;strong&gt;rank&lt;/strong&gt; che ogni motore ha assegnato. Il contributo di un risultato da una modalità è:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;text&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;contribution = weight × 1 / (k + rank + 1)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;dove &lt;code&gt;rank&lt;/code&gt; è la sua posizione nella lista di quella modalità e &lt;code&gt;k&lt;/code&gt; è una costante di smoothing. I contributi vengono sommati tra le modalità per qualsiasi risultato che più di un motore ha trovato — l’accordo tra i retriever sale naturalmente in cima. Usiamo &lt;strong&gt;k = 40&lt;/strong&gt; sul preset predefinito e 60 su &lt;code&gt;thorough&lt;/code&gt; (&lt;code&gt;quick&lt;/code&gt; gira solo in modalità semantica, quindi la fusione lì non entra mai in gioco). Il lavoro originale su RRF è arrivato a k = 60 per il retrieval general-purpose; il nostro default è leggermente più aggressivo, il che dà un po’ più peso all’accordo tra le modalità nei risultati meglio classificati — e non consigliamo di regolarlo a mano.&lt;/p&gt;
&lt;p&gt;Oltre a questo, i risultati portano un &lt;strong&gt;boost di importanza del grafo&lt;/strong&gt;. Un hub — una funzione su cui si appoggia tutto il codebase — dovrebbe superare in classifica un nodo foglia poco noto anche a parità di rilevanza testuale, quindi moltiplichiamo ogni contributo per:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;text&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;boost = min(1 + 0.3 × ln(1 + centrality), 1.5)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;La centralità arriva dalle metriche PageRank/degree precalcolate dalla pipeline, e il boost è limitato a un massimo di 1,5× così che una funzione popolare non possa seppellire completamente una più rilevante ma oscura. Infine retrocediamo i risultati da percorsi vendor, build, e archive, e deduplichiamo al miglior chunk per file.&lt;/p&gt;
&lt;h2 id=&quot;cosa-resta-imperfetto&quot;&gt;Cosa resta imperfetto&lt;/h2&gt;
&lt;p&gt;Il classificatore dell’intento è un insieme di regex, non un modello addestrato. Gestisce le forme di query comuni con euristiche, mentre una query ambigua ricade su &lt;code&gt;understand_code&lt;/code&gt; e su una combinazione orientata alla semantica. Una versione precedente di questo articolo descriveva come raggiunta una riduzione del tasso di ricerche senza risultati da circa il 15% a meno del 5%. La proposta del dicembre 2025 riportava in realtà una stima iniziale e un obiettivo; non viene fornito alcun insieme di query o resoconto delle misurazioni a supporto. Ritiriamo quell’affermazione di miglioramento raggiunto; si vedano le &lt;a href=&quot;https://maguyva.ai/evidence/search-quality.md&quot;&gt;evidenze della fonte e la correzione&lt;/a&gt;. Non abbiamo sostituito il classificatore con un modello addestrato perché la versione economica è veloce e sufficientemente valida per il ruolo di routing previsto, e perché un classificatore sicuro di sé ma in errore è peggiore di un fallback onesto. I pesi stessi sono prior scelti a mano, non appresi da dati sui clic che non raccogliamo.&lt;/p&gt;
&lt;h2 id=&quot;fai-la-domanda-senza-dover-scegliere-lo-strumento&quot;&gt;Fai la domanda, senza dover scegliere lo strumento&lt;/h2&gt;
&lt;p&gt;Un agente non dovrebbe dover sapere se ricorrere a grep o agli embedding o al call graph — dovrebbe fare la sua domanda in termini semplici e ottenere la risposta giusta. La fusione multi-modale è ciò che permette a &lt;code&gt;find_symbol&lt;/code&gt;, alla ricerca semantica, e all’analisi delle dipendenze di stare dietro un’unica interfaccia di query: il sistema legge la forma della domanda e assembla silenziosamente il retriever giusto per essa. Il modello che valuta gli embedding conta, ma conta anche sapere quando &lt;em&gt;non&lt;/em&gt; usarli. Scegliere lo strumento giusto per ogni query è un tipo di qualità a sé, ed è uno che preferiamo possedere noi piuttosto che scaricare su chi chiama.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;// you bring the question. it brings the tools.&lt;/code&gt;&lt;/p&gt;
</content:encoded><category>Search</category><category>Architecture</category></item><item><title>Osservabilità degli agenti: hook, Alloy e Grafana</title><link>https://maguyva.ai/it/blog/agent-observability-hooks-alloy-grafana</link><guid isPermaLink="true">https://maguyva.ai/it/blog/agent-observability-hooks-alloy-grafana</guid><description>Abbiamo collegato Claude Code e Codex a un unico stack Grafana con OpenTelemetry e Alloy, poi abbiamo usato trace e log per trovare e correggere i problemi di comportamento degli agenti alla fonte.</description><pubDate>Tue, 24 Mar 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;I sistemi ad agenti falliscono in modi strani.&lt;/p&gt;
&lt;p&gt;A volte il problema è il modello. A volte è lo strumento. A volte il tuo server MCP funziona benissimo, ma l’agente ha scelto lo specialista sbagliato, oppure ha passato metà della sessione a fare lavoro di shell che non ti aspettavi, oppure ha silenziosamente bruciato budget in un loop che dall’esterno sembrava produttivo.&lt;/p&gt;
&lt;p&gt;Se non riesci a vedere la differenza, non stai davvero gestendo un sistema ad agenti. Stai tirando a indovinare.&lt;/p&gt;
&lt;p&gt;Così abbiamo costruito uno stack di observability per il nostro stesso workflow: Claude Code, Codex, eventi hook di Claude, eventi notify di Codex, OpenTelemetry nativo, Grafana Alloy e Grafana Cloud dall’altra parte.&lt;/p&gt;
&lt;p&gt;La parte interessante non è “abbiamo fatto una dashboard”. La parte interessante è che abbiamo dovuto dividere la telemetria in due flussi diversi perché nessun singolo feed ci dava il quadro completo.&lt;/p&gt;
&lt;h2 id=&quot;il-problema-la-telemetria-degli-agenti-è-frammentata&quot;&gt;Il problema: la telemetria degli agenti è frammentata&lt;/h2&gt;
&lt;p&gt;Gli agenti di coding moderni emettono già una certa telemetria. Aiuta, ma non basta.&lt;/p&gt;
&lt;p&gt;L’OTEL nativo è bravo a rispondere a domande come:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Quante richieste abbiamo fatto?&lt;/li&gt;
&lt;li&gt;Quanto è costata una sessione?&lt;/li&gt;
&lt;li&gt;Dove sono gli span e le trace?&lt;/li&gt;
&lt;li&gt;C’è stato un picco di latenza?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;È molto meno bravo a rispondere a domande come:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Su quale server MCP si è appoggiato l’agente?&lt;/li&gt;
&lt;li&gt;Questo fallimento era in &lt;code&gt;Bash&lt;/code&gt;, in uno strumento file integrato, o in una chiamata MCP?&lt;/li&gt;
&lt;li&gt;Quale skill si è effettivamente attivata?&lt;/li&gt;
&lt;li&gt;Quale tipo di subagent è stato dispatchato?&lt;/li&gt;
&lt;li&gt;La sessione stava facendo lavoro utile, o stava solo arrancando a vuoto?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Quella seconda classe di domande vive più vicino agli hook che alle trace.&lt;/p&gt;
&lt;p&gt;Ma è vero anche l’inverso: alcune delle domande di performance più importanti vivono più vicino alle trace che agli hook.&lt;/p&gt;
&lt;p&gt;Se vuoi sapere dove si è effettivamente accumulata la latenza, quali span erano lenti, o se la sessione ha bruciato tempo nelle chiamate al modello piuttosto che nell’esecuzione degli strumenti, ti servono i dati di trace oltre agli eventi semantici.&lt;/p&gt;
&lt;h2 id=&quot;larchitettura-a-cui-siamo-arrivati&quot;&gt;L’architettura a cui siamo arrivati&lt;/h2&gt;
&lt;p&gt;Facciamo girare due percorsi di telemetria in parallelo.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;text&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Claude Code&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  native OTEL -&amp;gt; Alloy -&amp;gt; Grafana Cloud&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  hooks        -&amp;gt; send_event.py -&amp;gt; Grafana Cloud Loki&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Codex&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  native OTEL -&amp;gt; Alloy -&amp;gt; Grafana Cloud&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  notify hook -&amp;gt; codex_notify.py -&amp;gt; shared Loki schema&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Quella divisione è deliberata.&lt;/p&gt;
&lt;p&gt;Ed è anche asimmetrica. Claude Code ci offre un’interfaccia di hook del ciclo di vita molto più ricca. Codex ci offre OTEL nativo più un’interfaccia notify, quindi normalizziamo eventi di completamento turno meno dettagliati nello stesso schema di log, invece di far finta che entrambi i runtime espongano gli stessi controlli.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;L’OTEL nativo&lt;/strong&gt; ci dà lo stream di base: log e trace dal runtime stesso, più metriche dove il runtime le emette effettivamente.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Gli eventi hook e notify&lt;/strong&gt; ci danno il layer semantico: cose come &lt;code&gt;PreToolUse&lt;/code&gt;, &lt;code&gt;PostToolUse&lt;/code&gt;, &lt;code&gt;PostToolUseFailure&lt;/code&gt;, &lt;code&gt;UserPromptSubmit&lt;/code&gt;, &lt;code&gt;SubagentStop&lt;/code&gt;, &lt;code&gt;SkillActivated&lt;/code&gt;, e i metadati classificati a cui teniamo davvero quando facciamo debug sul comportamento degli agenti. Claude Code fornisce qui lo stream di eventi più ricco. Codex fornisce uno stream normalizzato meno dettagliato ma comunque utile.&lt;/p&gt;
&lt;h2 id=&quot;perché-esistono-gli-hook&quot;&gt;Perché esistono gli hook&lt;/h2&gt;
&lt;p&gt;La nostra pipeline di hook arricchisce gli eventi prima che arrivino a Loki.&lt;/p&gt;
&lt;p&gt;Invece di dire semplicemente “è girato uno strumento”, classifichiamo l’evento in campi come:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;tool_type&lt;/code&gt;: builtin, mcp, skill, agent, bash&lt;/li&gt;
&lt;li&gt;&lt;code&gt;mcp_server&lt;/code&gt;: quale backend MCP ha gestito la chiamata&lt;/li&gt;
&lt;li&gt;&lt;code&gt;bash_cli&lt;/code&gt;: la famiglia di comandi shell&lt;/li&gt;
&lt;li&gt;&lt;code&gt;subagent_type&lt;/code&gt;: che tipo di specialista è stato dispatchato&lt;/li&gt;
&lt;li&gt;&lt;code&gt;agent_tool&lt;/code&gt;: se la sorgente era Claude Code o Codex&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Questo significa che possiamo fare domande che contano operativamente:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;text&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;{service_name=&quot;claude-code-hooks&quot;} | agent_tool=&quot;codex-cli&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;{service_name=&quot;claude-code-hooks&quot;} | tool_type=&quot;mcp&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;{service_name=&quot;claude-code-hooks&quot;} | json | bash_cli=&quot;git&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Non sono campi messi lì per fare scena. Sono la differenza tra “l’agente sembrava lento” e “l’agente ha passato gli ultimi dieci minuti in operazioni git pesanti di shell con un alto tasso di fallimento degli strumenti”.&lt;/p&gt;
&lt;p&gt;Un dettaglio implementativo che sembra più strano di quanto sia: lo stream Loki condiviso usa ancora &lt;code&gt;service_name=&quot;claude-code-hooks&quot;&lt;/code&gt; come label anche quando l’evento arriva da Codex. La vera separazione tra runtime avviene su &lt;code&gt;agent_tool&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id=&quot;perché-alloy-sta-nel-mezzo&quot;&gt;Perché Alloy sta nel mezzo&lt;/h2&gt;
&lt;p&gt;Grafana Alloy in questa configurazione non è solo un forwarder. È il punto in cui vengono applicate le policy.&lt;/p&gt;
&lt;p&gt;Puntiamo lo stream OTEL nativo di Claude Code e Codex verso un proxy Alloy locale su &lt;code&gt;localhost:4318&lt;/code&gt;, poi lasciamo che Alloy ripulisca il payload prima di inoltrarlo a Grafana Cloud.&lt;/p&gt;
&lt;p&gt;Questo conta perché la telemetria grezza degli agenti è piena di campi ad alta cardinalità che sono utili per l’analisi ma pessimi come label indicizzate:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;session_id&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;prompt_id&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;conteggi di token&lt;/li&gt;
&lt;li&gt;durate&lt;/li&gt;
&lt;li&gt;blob di parametri degli strumenti&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Se indicizzi tutto, ottieni un’esplosione di label e una brutta giornata.&lt;/p&gt;
&lt;p&gt;Quindi Alloy fa tre cose per noi:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Mantiene indicizzato un set molto piccolo di label a bassa cardinalità.&lt;/li&gt;
&lt;li&gt;Sposta i campi rumorosi ma utili in metadati strutturati.&lt;/li&gt;
&lt;li&gt;Scarta completamente il rumore puro.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;L’idea importante è semplice: &lt;strong&gt;osserva di più, indicizza di meno&lt;/strong&gt;.&lt;/p&gt;
&lt;h2 id=&quot;perché-lo-stream-degli-hook-bypassa-alloy&quot;&gt;Perché lo stream degli hook bypassa Alloy&lt;/h2&gt;
&lt;p&gt;Lo stream degli hook è già modellato per Loki.&lt;/p&gt;
&lt;p&gt;Nel momento in cui &lt;code&gt;send_event.py&lt;/code&gt; invia un evento, abbiamo già deciso quali campi meritano il trattamento da label e quali appartengono al corpo JSON strutturato. Quello stream va dritto al gateway OTLP di Grafana Cloud invece di passare di nuovo attraverso Alloy.&lt;/p&gt;
&lt;p&gt;Quindi il sistema ha una chiara divisione del lavoro:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Alloy&lt;/strong&gt; doma lo stream OTEL nativo grezzo.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;L’arricchimento hook&lt;/strong&gt; rende gli eventi semantici interrogabili.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Questo mantiene l’architettura più semplice rispetto a cercare di far passare tutto attraverso un unico percorso.&lt;/p&gt;
&lt;h2 id=&quot;cosa-mostra-davvero-la-dashboard&quot;&gt;Cosa mostra davvero la dashboard&lt;/h2&gt;
&lt;p&gt;Lo screenshot qui sotto proviene da una delle dashboard di observability dietro il nostro workflow ad agenti. Non è un benchmark, e i numeri sono solo uno spaccato in un punto nel tempo. Il punto è la forma dei dati: feed di attività, chiamate agli strumenti, fallimenti, prompt, e ripartizioni per agente, strumenti integrati, uso di MCP, comandi shell e skill.&lt;/p&gt;
&lt;p&gt;La parte utile è che questa dashboard vive sullo stesso stack Grafana del resto della telemetria degli agenti. Possiamo filtrare per agente sorgente e famiglia di strumenti e guardare attraverso i runtime senza inventare una storia di observability diversa per ogni sistema.&lt;/p&gt;
&lt;figure class=&quot;feature-figure feature-figure--wide&quot;&gt;
  &lt;a
    href=&quot;https://maguyva.ai/blog/agent-observability-dashboard.png&quot;
    target=&quot;_blank&quot;
    rel=&quot;noreferrer&quot;
    aria-label=&quot;Apri lo screenshot della dashboard di observability a piena risoluzione&quot;
  &gt;
    &lt;img
      src=&quot;https://maguyva.ai/blog/agent-observability-dashboard.png&quot;
      alt=&quot;Dashboard Grafana che mostra un feed di attività, il conteggio delle chiamate agli strumenti, i fallimenti, i prompt e le ripartizioni per agente, strumenti integrati, uso di MCP, comandi CLI e skill per un workflow ad agenti.&quot;
    /&gt;
  &lt;/a&gt;
  &lt;figcaption&gt;
    Una delle dashboard live dietro il nostro workflow ad agenti. Questo screenshot è solo uno spaccato di uno stack Grafana condiviso che riceve telemetria anche dagli altri nostri runtime e sistemi ad agenti. Clicca sull&apos;immagine per la versione a piena risoluzione.
  &lt;/figcaption&gt;
&lt;/figure&gt;
&lt;h2 id=&quot;perché-le-trace-contano-più-di-quanto-sembri-a-prima-vista&quot;&gt;Perché le trace contano più di quanto sembri a prima vista&lt;/h2&gt;
&lt;p&gt;I log ci dicono che categoria di lavoro è stata svolta. Le trace ci dicono come il lavoro si è svolto nel tempo.&lt;/p&gt;
&lt;p&gt;Quella distinzione conta nei sistemi ad agenti perché “lento” è troppo generico per essere utile.&lt;/p&gt;
&lt;p&gt;Una trace può dirci se il rallentamento è stato causato da:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;latenza del modello&lt;/li&gt;
&lt;li&gt;tempo di esecuzione degli strumenti&lt;/li&gt;
&lt;li&gt;retry ripetuti&lt;/li&gt;
&lt;li&gt;un’interazione MCP particolarmente costosa&lt;/li&gt;
&lt;li&gt;una lunga coda di piccole operazioni che sembravano innocue prese isolatamente&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In pratica usiamo insieme lo stream degli hook e le trace di Tempo.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;I log degli hook&lt;/strong&gt; rispondono: che tipo di cosa è successa?&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Le trace&lt;/strong&gt; rispondono: dove è andato il tempo?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;La combinazione è ciò che trasforma l’observability da una dashboard in una spiegazione.&lt;/p&gt;
&lt;h2 id=&quot;dove-si-inserisce-codex&quot;&gt;Dove si inserisce Codex&lt;/h2&gt;
&lt;p&gt;Codex fa parte dello stesso stack, ma non è identico a Claude Code.&lt;/p&gt;
&lt;p&gt;Per Codex colleghiamo due elementi:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;OTEL nativo da Codex verso Alloy&lt;/li&gt;
&lt;li&gt;Un webhook notify verso &lt;code&gt;codex_notify.py&lt;/code&gt;, che mappa i completamenti dei turni nello stesso schema Loki che usiamo per gli eventi hook&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Questo ci dà un filtro unificato come &lt;code&gt;agent_tool=&quot;codex-cli&quot;&lt;/code&gt; all’interno dello stesso stream di log.&lt;/p&gt;
&lt;p&gt;L’avvertenza onesta: il payload notify di Codex oggi è meno dettagliato del payload hook di Claude Code perché non è lo stesso tipo di interfaccia di integrazione. Nella nostra configurazione attuale, i completamenti dei turni di Codex possono essere normalizzati nello schema condiviso, ma l’estrazione ricca strumento per strumento è ancora migliore nello stream OTEL nativo che nel bridge notify.&lt;/p&gt;
&lt;p&gt;Questo non è un motivo per evitare l’articolo. È il punto dell’articolo. I sistemi di observability reali sono assemblati a partire da segnali imperfetti.&lt;/p&gt;
&lt;h2 id=&quot;grafana-su-mcp-cambia-le-regole-del-gioco&quot;&gt;Grafana su MCP cambia le regole del gioco&lt;/h2&gt;
&lt;p&gt;Il cambiamento più grande è che Grafana non è solo un posto che gli umani visitano nel browser.&lt;/p&gt;
&lt;p&gt;In questo repo esponiamo anche Grafana tramite MCP. Questo significa che un agente può interrogare Loki, Prometheus e Tempo direttamente, invece di aspettare che un umano ispezioni manualmente le dashboard per primo.&lt;/p&gt;
&lt;p&gt;Questo trasforma l’observability in un input attivo per il workflow.&lt;/p&gt;
&lt;p&gt;Un agente può chiedere:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Quali famiglie di strumenti hanno fallito di più nell’ultima ora?&lt;/li&gt;
&lt;li&gt;Quale server MCP ha dominato una sessione?&lt;/li&gt;
&lt;li&gt;Le modifiche recenti hanno ridotto i fallimenti degli strumenti o hanno solo spostato il lavoro su percorsi più pesanti di shell con gli stessi errori?&lt;/li&gt;
&lt;li&gt;Quali trace mostrano la latenza più alta o retry ripetuti?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Una volta che hai questo, sei molto vicino a un loop di auto-miglioramento.&lt;/p&gt;
&lt;h2 id=&quot;dalla-dashboard-al-loop-di-feedback&quot;&gt;Dalla dashboard al loop di feedback&lt;/h2&gt;
&lt;p&gt;Questa è la parte che troviamo più interessante.&lt;/p&gt;
&lt;p&gt;Una volta che lo stack di observability è interrogabile dal layer degli agenti, la telemetria smette di essere uno strumento di reportistica passiva e diventa un segnale di controllo.&lt;/p&gt;
&lt;p&gt;Il loop funziona così:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;L’attività dell’agente emette trace, metriche e log hook arricchiti.&lt;/li&gt;
&lt;li&gt;Grafana archivia le prove in Loki, Tempo e Prometheus dove esistono le metriche.&lt;/li&gt;
&lt;li&gt;Gli agenti interrogano quelle prove tramite Grafana MCP.&lt;/li&gt;
&lt;li&gt;Il sistema identifica mix di strumenti scadenti, skill fragili, routing debole, o workflow pesanti di shell che continuano a produrre errori evitabili.&lt;/li&gt;
&lt;li&gt;Agenti o operatori aggiustano prompt, configurazioni degli agenti, descrizioni delle skill, regole di routing, o accesso agli strumenti.&lt;/li&gt;
&lt;li&gt;La sessione successiva produce una nuova forma di telemetria, e il ciclo si ripete.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Così si passa da “dashboard interessante” a “sistema di miglioramento misurabile”.&lt;/p&gt;
&lt;p&gt;L’obiettivo non è massimizzare una categoria di strumenti. È arrivare al giusto mix di CLI, strumenti integrati, chiamate MCP e skill per il lavoro effettivamente svolto.&lt;/p&gt;
&lt;h2 id=&quot;a-cosa-ci-permette-di-rispondere&quot;&gt;A cosa ci permette di rispondere&lt;/h2&gt;
&lt;p&gt;Una volta che entrambi i runtime finiscono nello stesso stack Grafana, possiamo rispondere a domande operative molto più velocemente:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;I fallimenti sono concentrati in una famiglia di strumenti?&lt;/li&gt;
&lt;li&gt;I workflow pesanti di shell stanno creando errori evitabili dove dovrebbe esistere uno strumento di livello superiore?&lt;/li&gt;
&lt;li&gt;Quali server MCP stanno portando il carico di lavoro?&lt;/li&gt;
&lt;li&gt;Stiamo pagando per attività di agenti che non producono progressi significativi?&lt;/li&gt;
&lt;li&gt;Una sessione presenta problemi per colpa del modello, degli strumenti, o del layer di orchestrazione?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Questo è particolarmente utile nei workflow multi-agente, dove “l’agente era impegnato” non ti dice quasi niente.&lt;/p&gt;
&lt;p&gt;Se uno specialista continua a essere dispatchato e a produrre alti tassi di fallimento, è un problema di routing o di formulazione dei prompt.&lt;/p&gt;
&lt;p&gt;Se un server MCP domina tutte le chiamate, potrebbe essere una buona architettura o un segnale che tutto il resto è peso morto.&lt;/p&gt;
&lt;p&gt;Se i fallimenti degli strumenti aumentano mentre il costo resta alto, hai un problema operativo, non un problema di qualità.&lt;/p&gt;
&lt;p&gt;Se il lavoro di shell continua a fallire in modi prevedibili ed evitabili dove dovrebbe esistere uno strumento di livello superiore, quello è un segnale di prodotto.&lt;/p&gt;
&lt;p&gt;Se una skill si attiva di continuo ma non migliora i risultati, quello è un segnale di prompt o di routing.&lt;/p&gt;
&lt;h2 id=&quot;la-vera-lezione&quot;&gt;La vera lezione&lt;/h2&gt;
&lt;p&gt;La lezione più profonda qui è che l’observability degli agenti richiede sia &lt;strong&gt;telemetria di runtime&lt;/strong&gt; che &lt;strong&gt;telemetria di workflow&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;La telemetria di runtime ti dice cosa ha fatto il sistema.&lt;/p&gt;
&lt;p&gt;La telemetria di workflow ti dice cosa l’agente pensava di stare facendo.&lt;/p&gt;
&lt;p&gt;Ci servono entrambe.&lt;/p&gt;
&lt;p&gt;Se tieni solo trace e contatori, perdi il layer semantico. Se tieni solo eventi hook, perdi latenza, span, e il quadro più ampio del runtime.&lt;/p&gt;
&lt;p&gt;E se tieni entrambi ma non li reintroduci mai nel layer degli agenti, hai monitoraggio, non adattamento.&lt;/p&gt;
&lt;p&gt;La combinazione è ciò che rende il sistema abbastanza spiegabile da poter essere gestito e abbastanza regolabile da poter essere migliorato.&lt;/p&gt;
&lt;h2 id=&quot;cosa-resta-imperfetto&quot;&gt;Cosa resta imperfetto&lt;/h2&gt;
&lt;p&gt;Ci sono ancora spigoli da smussare.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Non tutti gli eventi hook includono i dati di durata e token che vorremmo.&lt;/li&gt;
&lt;li&gt;Alcune delle migliori viste temporali arrivano ancora dalle trace di Tempo, non dai log degli hook.&lt;/li&gt;
&lt;li&gt;Codex oggi è meno ricco semanticamente di Claude Code nello stream di eventi arricchiti.&lt;/li&gt;
&lt;li&gt;Lo screenshot della dashboard è una superficie operativa live, non un artefatto di marketing rifinito.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Quest’ultimo punto è intenzionale. Preferiamo mostrare il vero pannello di controllo piuttosto che far finta che i sistemi ad agenti si spieghino magicamente da soli.&lt;/p&gt;
&lt;h2 id=&quot;perché-questo-conta-per-maguyva&quot;&gt;Perché questo conta per Maguyva&lt;/h2&gt;
&lt;p&gt;Maguyva punta a dare agli agenti una migliore intelligenza del codice. Ma una volta che gli agenti stanno effettivamente facendo lavoro utile, emerge subito un nuovo requisito: devi vedere come si stanno comportando.&lt;/p&gt;
&lt;p&gt;Qualità della ricerca, qualità del routing, selezione degli strumenti, ed efficienza del contesto diventano tutti problemi osservabili.&lt;/p&gt;
&lt;p&gt;Ecco perché pensiamo valga la pena scriverne. Lo stack degli agenti del futuro non è solo prompt e strumenti. È prompt, strumenti, e il layer di strumentazione che ti dice se tutto l’insieme sta funzionando.&lt;/p&gt;
&lt;p&gt;Se stai costruendo workflow ad agenti seri, l’observability non è infrastruttura opzionale. È parte del prodotto.&lt;/p&gt;
</content:encoded><category>Observability</category><category>Grafana</category><category>OpenTelemetry</category><category>Architecture</category></item><item><title>Estrarre conoscenza per chiudere il loop: come le modifiche diventano memoria istituzionale</title><link>https://maguyva.ai/it/blog/mining-workflow-closing-the-loop</link><guid isPermaLink="true">https://maguyva.ai/it/blog/mining-workflow-closing-the-loop</guid><description>I commit git diventano voci di changelog strutturate e record di decisioni architetturali, poi rientrano negli agenti AI come memoria istituzionale interrogabile.</description><pubDate>Tue, 03 Feb 2026 00:00:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;I numeri in questo articolo riflettono il sistema al momento della pubblicazione (febbraio 2026). Consulta la nostra &lt;a href=&quot;https://maguyva.ai/it/team&quot;&gt;pagina del team&lt;/a&gt; per le cifre attuali.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Ogni team di ingegneria affronta la stessa sfida: le modifiche avvengono di continuo, ma il &lt;em&gt;perché&lt;/em&gt; dietro quelle modifiche scompare. Sei mesi dopo, qualcuno chiede “perché abbiamo adottato DuckDB per gli stage della pipeline?” e la risposta vive solo nella testa di chi ha preso quella decisione — se è ancora in giro.&lt;/p&gt;
&lt;p&gt;Abbiamo costruito un workflow di mining che chiude questo ciclo. Le modifiche fluiscono attraverso i commit git, vengono elaborate dalla nostra pipeline di mining, diventano voci di changelog strutturate e record di decisioni architetturali, e poi rientrano nei nostri agenti AI tramite query da CLI. Il risultato: una memoria istituzionale a cui possono accedere sia gli esseri umani che l’AI.&lt;/p&gt;
&lt;h2 id=&quot;il-problema-le-decisioni-evaporano&quot;&gt;Il problema: le decisioni evaporano&lt;/h2&gt;
&lt;p&gt;Considera uno scenario tipico. Uno sviluppatore fa il commit di:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;feat(canonical): add DuckDB runtime for pipeline stages&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Questo commit rappresenta una scelta architetturale significativa. Il team ha valutato le opzioni, considerato i trade-off, e optato per DuckDB per motivi specifici. Ma tutto quel contesto vive in:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Un thread Slack (probabilmente cancellato)&lt;/li&gt;
&lt;li&gt;La memoria di qualcuno (che sicuramente sbiadisce)&lt;/li&gt;
&lt;li&gt;Un commento nel codice (forse, se sei fortunato)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Tre mesi dopo, un nuovo membro del team chiede: “Dovrei usare DuckDB o SQLite per questo nuovo stage?” Senza memoria istituzionale, o reinventa la ruota o fa scelte incoerenti.&lt;/p&gt;
&lt;h2 id=&quot;il-loop-dai-commit-al-contesto&quot;&gt;Il loop: dai commit al contesto&lt;/h2&gt;
&lt;p&gt;Il nostro workflow di mining trasforma la cronologia git in conoscenza interrogabile:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Git Commits&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    ▼&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;┌─────────────────────┐&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;│  mine sync          │  ← Build index from git history&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;└─────────────────────┘&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    ▼&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;┌─────────────────────┐&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;│  mine candidates    │  ← Surface commits for review&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;└─────────────────────┘&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    ▼&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;┌─────────────────────┐&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;│  Classification     │  ← Human or LLM assessment&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;│  (changelog or ADR) │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;└─────────────────────┘&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    ├──────────────────────┐&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    ▼                      ▼&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;┌─────────────┐    ┌───────────────┐&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;│ Changelog   │    │ Decisions     │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;│ Ledger      │    │ Registry      │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;│ (JSONL)     │    │ (YAML files)  │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;└─────────────┘    └───────────────┘&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    │                      │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    ▼                      ▼&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;┌─────────────┐    ┌───────────────┐&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;│ CHANGELOG.md│    │ orkestra CLI  │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;│ per package │    │ queries       │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;└─────────────┘    └───────────────┘&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    │                      │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    └──────────────────────┘&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;              │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;              ▼&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      ┌───────────────┐&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      │ AI Agents     │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      │ (via CLI)     │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      └───────────────┘&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;L’intuizione chiave: sia i changelog che le decisioni architetturali fluiscono dalla stessa cronologia git, elaborata attraverso una pipeline unificata. Questo garantisce che nulla sfugga.&lt;/p&gt;
&lt;h2 id=&quot;come-funziona-il-mining&quot;&gt;Come funziona il mining&lt;/h2&gt;
&lt;h3 id=&quot;passo-1-sincronizza-lindice&quot;&gt;Passo 1: sincronizza l’indice&lt;/h3&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; mine&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; sync&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Questo comando scansiona la cronologia git e costruisce un indice di tutti i commit. Estrae segnali strutturati da ogni commit:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Tipo secondo Conventional Commits (&lt;code&gt;feat&lt;/code&gt;, &lt;code&gt;fix&lt;/code&gt;, &lt;code&gt;chore&lt;/code&gt;, &lt;code&gt;docs&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Scope (quale package o area)&lt;/li&gt;
&lt;li&gt;Marcatori di breaking change&lt;/li&gt;
&lt;li&gt;File toccati e metriche di complessità&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;passo-2-controlla-lo-stato-di-copertura&quot;&gt;Passo 2: controlla lo stato di copertura&lt;/h3&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; mine&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; status&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Ecco come appare il nostro stato attuale:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Mining Status&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;=============&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Decisions&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;---------&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  Coverage:        100.0%&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    Processed:     15637  (of 15637)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    Extracted:       476&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    Skipped:       15161&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Changelog&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;---------&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  Coverage:        100.0%&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    Processed:     15637  (of 15637)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    Released:       6799&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    Skipped:        8838&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;15.637 commit elaborati. 476 sono diventati decisioni architetturali. 6.799 sono diventate voci di changelog. Ogni commit classificato.&lt;/p&gt;
&lt;h3 id=&quot;passo-3-ottieni-i-candidati-per-la-revisione&quot;&gt;Passo 3: ottieni i candidati per la revisione&lt;/h3&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; mine&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; candidates&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --limit&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 50&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --full&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Questo fa emergere i commit non ancora elaborati, con il contesto completo per la classificazione:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;json&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;sha&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;90571786d99166c0039ca2e80e4d9cd96184bd85&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;date&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;2026-01-26&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;subject&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;feat(canonical): add DuckDB runtime for pipeline stages&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;signals&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;    &quot;commit_type&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;feat&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;    &quot;scope&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;canonical&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;    &quot;breaking&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;false&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;    &quot;is_releasable_type&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;    &quot;domains_affected&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: [&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;pipeline&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;data-architecture&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;body&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;Establishes DuckDB as canonical in-process analytical database...&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;files_changed&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: [&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;packages/canonical/pipelines/stages/duckdb_runtime.py&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;...&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;],&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;stats&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: {&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;&quot;files&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;8&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;&quot;insertions&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;450&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;&quot;deletions&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;120&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;I segnali aiutano a guidare la classificazione: &lt;code&gt;is_releasable_type: true&lt;/code&gt; suggerisce che questo dovrebbe apparire nel changelog. Il grande numero di inserimenti e i file infrastrutturali suggeriscono che potrebbe anche essere una decisione architetturale.&lt;/p&gt;
&lt;h3 id=&quot;passo-4-classifica-i-commit&quot;&gt;Passo 4: classifica i commit&lt;/h3&gt;
&lt;p&gt;Qui i percorsi si dividono in due: voci di changelog e decisioni architetturali.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Per le voci di changelog:&lt;/strong&gt;&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; mine&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; classify&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; abc123&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --changelog&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; added&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Questo registra che il commit &lt;code&gt;abc123&lt;/code&gt; dovrebbe apparire nel changelog sotto la categoria “Added”.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Per le decisioni architetturali:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Prima, ottieni un ID di decisione reale:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; registry&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; decisions&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; new&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --domain&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; pipeline&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --dry-run&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# Returns: DEC-PL-143&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Poi classifica con l’ID di decisione:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; mine&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; classify&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; abc123&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --decision&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; DEC-PL-143&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Questo collega il commit a un record di decisione che verrà creato o aggiornato.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Per l’elaborazione batch (quello che facciamo davvero):&lt;/strong&gt;&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# Generate classifications file with LLM assistance&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; mine&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; commit&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --input&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; classifications.jsonl&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Il formato JSONL supporta entrambi i domini in un solo passaggio:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;jsonl&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;&quot;sha&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;abc123&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;&quot;domain&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;changelog&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;&quot;action&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;release&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;&quot;category&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;added&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;&quot;summary&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;Add DuckDB runtime for pipeline stages&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;&quot;sha&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;abc123&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;&quot;domain&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;decisions&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;&quot;action&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;extract&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;&quot;decision_id&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;DEC-PL-142&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;&quot;sha&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;def456&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;&quot;domain&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;changelog&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;&quot;action&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;skip&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;&quot;reason&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;Chore: dependency update&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;passo-5-renderizza-gli-output&quot;&gt;Passo 5: renderizza gli output&lt;/h3&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; registry&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; changelog&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; render&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --package&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; &amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;pk&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;g&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Questo genera file &lt;code&gt;CHANGELOG.md&lt;/code&gt; per package a partire dal ledger. I changelog sono artefatti derivati — cancellali e si rigenerano perfettamente dal ledger sorgente.&lt;/p&gt;
&lt;h2 id=&quot;la-struttura-del-record-di-decisione&quot;&gt;La struttura del record di decisione&lt;/h2&gt;
&lt;p&gt;Le decisioni estratte diventano file YAML con metadati ricchi:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;DEC-PL-142&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;title&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;Adopt DuckDB as Canonical Processing Runtime for Pipeline Stages&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;domain&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;pipeline&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;status&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;active&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;created&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&apos;2026-01-26&apos;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;summary&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;|&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;  Establishes DuckDB as the canonical in-process analytical database for pipeline&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;  stage transformations. Provides a shared runtime module that resolves settings&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;  from pipeline defaults with stage-level overrides.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;context&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;|&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;  Pipeline stages performing data transformations each independently configured&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;  DuckDB connections. This led to inconsistent settings, duplicated configuration&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;  code, and no way to tune DuckDB globally for a pipeline run.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;rationale&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;DuckDB provides efficient in-process OLAP with zero configuration deployment&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;Centralized runtime module eliminates duplicated DuckDB setup across stages&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;Hierarchical settings enable global tuning with stage-level overrides&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;Memory limits and thread counts can be adjusted per-pipeline&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;impact&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  positive&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;Consistent DuckDB configuration across all pipeline stages&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;Single point of control for memory/thread tuning&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;Reduced code duplication in conversion and export stages&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  negative&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;Adds dependency on shared runtime module&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;Stages must adopt new configuration pattern&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;source_commits&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;sha&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;90571786d99166c0039ca2e80e4d9cd96184bd85&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    message&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&apos;feat(canonical): add DuckDB runtime for pipeline stages&apos;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    date&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&apos;2026-01-26&apos;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    role&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;primary&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;files&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;packages/canonical/pipelines/stages/duckdb_runtime.py&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;packages/canonical/pipelines/runner.py&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;packages/canonical/pipelines/stages/convert_hdx_admin_boundaries_to_geoparquet.py&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;related&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;DEC-DA-014&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;  # Data architecture decisions that influenced this&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Ogni decisione rimanda ai suoi commit sorgente. Ogni decisione specifica quali file interessa. Le relazioni tra decisioni sono esplicite.&lt;/p&gt;
&lt;h2 id=&quot;integrazione-cli-interrogare-la-memoria-istituzionale&quot;&gt;Integrazione CLI: interrogare la memoria istituzionale&lt;/h2&gt;
&lt;p&gt;È qui che il loop si chiude. Gli agenti possono interrogare le decisioni tramite la CLI:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# Search by topic&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; registry&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; decisions&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; search&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --query&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; &quot;retry&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Restituisce decisioni sulla logica di retry, gestione degli errori, pattern di recupero.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# Get full details on a specific decision&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; registry&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; decisions&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; info&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; DEC-PL-142&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Restituisce il record di decisione completo con contesto, motivazione e impatto.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# List recent decisions for context&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; registry&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; decisions&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; list&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --limit&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 15&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Mostra quali scelte architetturali sono state fatte di recente.&lt;/p&gt;
&lt;h3 id=&quot;come-gli-agenti-usano-questo&quot;&gt;Come gli agenti usano questo&lt;/h3&gt;
&lt;p&gt;Le istruzioni di base del nostro orchestratore includono:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;markdown&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8;font-weight:bold&quot;&gt;**Essential CLI commands:**&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; `orkestra registry decisions search &quot;X&quot;`&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; — Find architectural decisions&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Quando a un agente viene chiesto di implementare qualcosa legato a DuckDB, può prima controllare:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; registry&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; decisions&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; search&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --query&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; &quot;DuckDB&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;E scoprire DEC-PL-142, imparando:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Perché abbiamo scelto DuckDB (context)&lt;/li&gt;
&lt;li&gt;Come usarlo correttamente (agent_guidance)&lt;/li&gt;
&lt;li&gt;Quali file guardare (files)&lt;/li&gt;
&lt;li&gt;Quali decisioni correlate esistono (related)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;L’agente non reinventa la ruota. Si basa su pattern già stabiliti.&lt;/p&gt;
&lt;h2 id=&quot;il-test-delle-tre-domande&quot;&gt;Il test delle tre domande&lt;/h2&gt;
&lt;p&gt;Non ogni commit merita un record di decisione. Usiamo il test delle tre domande per filtrare:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;È stata una decisione difficile da prendere?&lt;/strong&gt; Ha richiesto un’analisi significativa, una valutazione dei trade-off, o un dibattito?&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;È una decisione costosa da cambiare?&lt;/strong&gt; Invertire questa decisione richiederebbe una quantità significativa di lavoro da rifare?&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ha un impatto a livello di sistema?&lt;/strong&gt; Interessa più package o stabilisce pattern che altri seguiranno?&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Se un commit risponde “sì” ad almeno una di queste domande, è un candidato per l’estrazione di una decisione. Il nostro tasso tipico: 1-4 decisioni ogni 100 commit (circa l’1-4%).&lt;/p&gt;
&lt;p&gt;Per le voci di changelog, la soglia è più bassa: ogni modifica visibile all’utente (feature, correzioni, miglioramenti) viene registrata. Le faccende interne, gli aggiornamenti di documentazione, e i refactor tipicamente vengono saltati. Il nostro tasso tipico: 30-50 voci di changelog ogni 100 commit.&lt;/p&gt;
&lt;h2 id=&quot;archiviazione-dei-dati-ledger-append-only&quot;&gt;Archiviazione dei dati: ledger append-only&lt;/h2&gt;
&lt;p&gt;Il sistema di mining usa ledger JSONL append-only per un funzionamento multi-agente senza conflitti:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;packages/orchestration/ai_assets/reference/changelog/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── commits_processed.jsonl  # Classification ledger (both domains)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── release_notes.jsonl      # Changelog entries&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;└── commits_index.yaml       # Derived index (gitignored)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;packages/orchestration/ai_assets/reference/decisions/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── registry.yaml            # Decision index&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;└── records/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    ├── DEC-AD-001.yaml&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    ├── DEC-AD-002.yaml&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    └── ...&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Il formato JSONL con &lt;code&gt;merge=union&lt;/code&gt; in &lt;code&gt;.gitattributes&lt;/code&gt; significa che più agenti possono classificare i commit simultaneamente senza conflitti di merge. Ogni riga è indipendente.&lt;/p&gt;
&lt;h2 id=&quot;gate-di-validazione&quot;&gt;Gate di validazione&lt;/h2&gt;
&lt;p&gt;Prima di ogni sessione di mining, eseguiamo la validazione:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; mine&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; validate&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --quick&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Questo controlla:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Validità del formato SHA&lt;/li&gt;
&lt;li&gt;Conformità del formato dell’ID di decisione&lt;/li&gt;
&lt;li&gt;Nessuna voce duplicata per lo stesso SHA&lt;/li&gt;
&lt;li&gt;Le decisioni referenziate esistono davvero&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Dopo la classificazione, validiamo di nuovo prima di fare il commit delle modifiche.&lt;/p&gt;
&lt;h2 id=&quot;perché-questo-conta&quot;&gt;Perché questo conta&lt;/h2&gt;
&lt;p&gt;Il loop di feedback che abbiamo costruito risolve diversi problemi:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Per i nuovi membri del team:&lt;/strong&gt; invece di chiedere “perché abbiamo fatto X?”, possono cercare nel registro delle decisioni. Il contesto è preservato.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Per gli agenti AI:&lt;/strong&gt; non operano nel vuoto. Possono interrogare la conoscenza istituzionale prima di fare raccomandazioni. Quando viene chiesto di aggiungere un nuovo stage alla pipeline, possono scoprire il pattern DuckDB e seguirlo.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Per la coerenza architetturale:&lt;/strong&gt; le decisioni sono esplicite e ricercabili. Quando qualcuno propone un approccio che contraddice una decisione esistente, il sistema può far emergere il conflitto.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Per la generazione del changelog:&lt;/strong&gt; le note di rilascio non sono una corsa dell’ultimo minuto. Sono un sottoprodotto della classificazione continua durante lo sviluppo.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Per l’onboarding:&lt;/strong&gt; i nuovi agenti ereditano il contesto completo del codebase. Non vedono solo il codice — vedono le decisioni che lo hanno plasmato.&lt;/p&gt;
&lt;h2 id=&quot;stato-attuale&quot;&gt;Stato attuale&lt;/h2&gt;
&lt;p&gt;Ad oggi:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;15.637 commit&lt;/strong&gt; elaborati attraverso la pipeline&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;476 decisioni architetturali&lt;/strong&gt; estratte e documentate&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;6.799 voci di changelog&lt;/strong&gt; registrate&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;100% di copertura&lt;/strong&gt; su entrambi i domini&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Ogni commit da quando abbiamo iniziato è stato classificato. La memoria istituzionale è completa e interrogabile.&lt;/p&gt;
&lt;h2 id=&quot;come-iniziare&quot;&gt;Come iniziare&lt;/h2&gt;
&lt;p&gt;Se vuoi implementare qualcosa di simile:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Inizia con lo standard Conventional Commits.&lt;/strong&gt; La pipeline di mining funziona meglio quando i commit hanno prefissi strutturati (&lt;code&gt;feat:&lt;/code&gt;, &lt;code&gt;fix:&lt;/code&gt;, &lt;code&gt;chore:&lt;/code&gt;).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Definisci i tuoi domini.&lt;/strong&gt; Noi usiamo domini come &lt;code&gt;pipeline&lt;/code&gt;, &lt;code&gt;agent-design&lt;/code&gt;, &lt;code&gt;observability&lt;/code&gt;, &lt;code&gt;data-modeling&lt;/code&gt;. Questi organizzano le decisioni per area.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Costruisci l’abitudine alla classificazione.&lt;/strong&gt; Il mining funziona quando i team classificano regolarmente i commit. L’elaborazione batch con assistenza LLM aiuta a scalare.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Rendi le decisioni interrogabili.&lt;/strong&gt; Il valore si moltiplica quando gli agenti possono cercare le decisioni via CLI. Struttura il tuo output per il consumo automatico.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Chiudi il loop.&lt;/strong&gt; Le decisioni dovrebbero influenzare il lavoro futuro. Includi riferimenti alle decisioni nelle istruzioni per gli agenti e nelle checklist di code review.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;L’obiettivo non è una documentazione perfetta. È rendere il &lt;em&gt;perché&lt;/em&gt; dietro le modifiche accessibile sia agli esseri umani che all’AI, oggi e tra sei mesi. Quando le modifiche diventano memoria istituzionale, i team si basano su pattern stabiliti invece di reinventarli.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;Il workflow di mining fa parte del nostro motore di orchestrazione, in particolare del modulo del motore di contesto nel nostro package di orchestrazione.&lt;/em&gt;&lt;/p&gt;
</content:encoded><category>Architecture</category><category>Workflows</category></item><item><title>Skill mining: da 3.500 candidate a 466 capacità</title><link>https://maguyva.ai/it/blog/skill-mining-3500-and-counting</link><guid isPermaLink="true">https://maguyva.ai/it/blog/skill-mining-3500-and-counting</guid><description>Abbiamo esaminato 3.500 skill candidate e ne abbiamo adottate 466. Un loop sistematico di mining e ingestione per costruire su larga scala una libreria di skill per agenti AI coerente.</description><pubDate>Tue, 27 Jan 2026 00:00:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;I numeri in questo articolo riflettono il sistema al momento della pubblicazione (gennaio 2026). Consulta la nostra &lt;a href=&quot;https://maguyva.ai/it/team&quot;&gt;pagina del team&lt;/a&gt; per le cifre attuali.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&quot;il-problema-delle-3500-skill&quot;&gt;Il problema delle 3.500 skill&lt;/h2&gt;
&lt;p&gt;Quando abbiamo iniziato a costruire un sistema di orchestrazione di agenti, abbiamo affrontato una sfida interessante: ci sono migliaia di skill potenziali sparse per l’ecosistema AI. Repository GitHub, documentazione dei vendor, progetti della community, pattern interni - le skill esistono ovunque. Ma quali contano? Quali funzionano? E come mantieni una libreria di skill coerente che gli agenti possano davvero usare?&lt;/p&gt;
&lt;p&gt;La nostra risposta: un loop sistematico di mining e ingestione.&lt;/p&gt;
&lt;h2 id=&quot;i-numeri-di-oggi&quot;&gt;I numeri di oggi&lt;/h2&gt;
&lt;p&gt;Poco più di tre mesi dopo che Anthropic ha lanciato Agent Skills il 16 ottobre 2025, ecco a che punto eravamo quando questo articolo è stato pubblicato il 27 gennaio 2026:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Metrica&lt;/th&gt;
&lt;th&gt;Conteggio&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Candidati identificati&lt;/td&gt;
&lt;td&gt;3.500+&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Skill adottate&lt;/td&gt;
&lt;td&gt;466&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Skill dei vendor&lt;/td&gt;
&lt;td&gt;373&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Skill interne&lt;/td&gt;
&lt;td&gt;93&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Vendor attivi&lt;/td&gt;
&lt;td&gt;25+&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Token medi per skill&lt;/td&gt;
&lt;td&gt;2.834&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Strumenti referenziati&lt;/td&gt;
&lt;td&gt;89&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tag unici&lt;/td&gt;
&lt;td&gt;635&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Abbiamo esaminato oltre 3.500 skill candidate. Ne abbiamo adottate 466. È un tasso di adozione del 13% - e quella selettività è voluta.&lt;/p&gt;
&lt;h2 id=&quot;il-sistema-a-livelli-di-conoscenza&quot;&gt;Il sistema a livelli di conoscenza&lt;/h2&gt;
&lt;p&gt;Non tutte le skill sono uguali. Le organizziamo in cinque livelli di conoscenza (K0-K4), ciascuno che rappresenta un ambito di applicabilità diverso:&lt;/p&gt;
&lt;h3 id=&quot;k0-fondamenta-universale&quot;&gt;K0: Fondamenta (universale)&lt;/h3&gt;
&lt;p&gt;Skill che ogni agente dovrebbe avere. Rappresentano capacità da “buon pensatore” che funzionano ovunque.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;foundations/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── test-first-discipline       # TDD: Red-Green-Refactor&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── evidence-based-completion   # Verify before claiming done&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── systematic-debugging        # Root cause methodology&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── structured-planning         # Break work into tasks&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;└── context-budget-awareness    # Manage token consumption&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Le skill K0 sono portabili in qualsiasi progetto, qualsiasi dominio, qualsiasi stack. Codificano pattern cognitivi universali.&lt;/p&gt;
&lt;h3 id=&quot;k1-identità-disciplina&quot;&gt;K1: Identità (disciplina)&lt;/h3&gt;
&lt;p&gt;Skill da “buon ingegnere” o “buon ricercatore” che si applicano tra progetti all’interno di una disciplina.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;identities/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── research-workflows          # Multi-source research&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── web-extraction-playbook     # Content extraction&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── code-review                 # PR review patterns&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;└── cli-interface-standards     # CLI design patterns&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;k2-domini-competenza-sulla-materia&quot;&gt;K2: Domini (competenza sulla materia)&lt;/h3&gt;
&lt;p&gt;Skill da “buon esperto di database” o “buon ingegnere della sicurezza” portabili all’interno di un campo.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;domains/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── schema-migration-workflow   # Safe migration patterns&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── rpc-validation-checklist    # RPC health checks&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── auth-validation-checklist   # JWT/OAuth patterns&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;└── secrets-audit-checklist     # Credential scanning&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;k3-stack-tecnologia&quot;&gt;K3: Stack (tecnologia)&lt;/h3&gt;
&lt;p&gt;Skill da “buon utente Supabase” o “buon sviluppatore Cloudflare” per stack tecnologici specifici.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;stacks/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── maguyva-quickstart          # Our semantic search patterns&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── cloudflare-deployment       # Workers/Pages deployment&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;└── mcp-tool-best-practices     # MCP tool selection&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;k4-progetto-organizzazione&quot;&gt;K4: Progetto (organizzazione)&lt;/h3&gt;
&lt;p&gt;Skill specifiche della nostra organizzazione e dei nostri workflow.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;project/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── agent-creation-workflow     # How we build agents&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── skill-authoring-workflow    # How we write skills&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── mining-session-workflow     # This very process&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;└── vendor-skill-evaluation     # Evaluation rubrics&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;il-loop-di-mining&quot;&gt;Il loop di mining&lt;/h2&gt;
&lt;h3 id=&quot;fase-1-scoperta&quot;&gt;Fase 1: scoperta&lt;/h3&gt;
&lt;p&gt;Le skill arrivano da ovunque:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Repository dei vendor&lt;/strong&gt;: AWS, Anthropic, Cloudflare, Supabase, e collaboratori della community pubblicano collezioni di skill. Tracciamo oltre 25 vendor root.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Progetti della community&lt;/strong&gt;: GitHub è pieno di template per Claude Code, pattern di agenti, e definizioni di workflow.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Pattern interni&lt;/strong&gt;: man mano che il nostro team risolve problemi, emergono pattern. Questi vengono formalizzati in skill.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Mining della documentazione&lt;/strong&gt;: la documentazione tecnica spesso contiene skill implicite - procedure, checklist, alberi decisionali.&lt;/p&gt;
&lt;p&gt;La scoperta è continua. Usiamo un backlog di skill per tracciare i candidati prima della valutazione formale.&lt;/p&gt;
&lt;h3 id=&quot;fase-2-valutazione&quot;&gt;Fase 2: valutazione&lt;/h3&gt;
&lt;p&gt;Ogni candidato passa attraverso la stessa griglia di valutazione:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;adoption_criteria&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;fills_real_gap&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;      # We lack this capability&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;well_structured&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;     # Progressive disclosure&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;actively_maintained&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt; # Commits in last 6 months&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;portable&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;            # Not hyper-specific&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;tested&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;              # Evidence of usage&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Tutti e cinque i criteri di prodotto devono essere soddisfatti. Ecco perché l’87% dei candidati viene respinto.&lt;/p&gt;
&lt;p&gt;Poi ogni candidato passa attraverso una verifica separata dell’affidabilità. Non trattiamo un repository ufficiale di un vendor, un maintainer noto della community, e un repository GitHub casuale come fonti di verità equivalenti.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;trust_review&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  vendor_credibility&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;ownership_verified&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;       # Official vendor, known maintainer, or internal source&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;maintenance_signal&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;       # Recent commits, issue response, release history&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;adoption_signal&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;          # Evidence of real use, stars alone are not enough&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;provenance_clear&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;         # We can trace where the skill came from&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  prompt_injection_scan&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;hidden_instruction_check&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt; # Buried &quot;ignore previous instructions&quot; patterns&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;exfiltration_check&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;       # Prompts that try to leak files, secrets, or context&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;authority_check&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;          # Claims of priority over system or developer rules&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  script_audit&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;inspect_scripts&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;          # Read shell/python/js helpers before adoption&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;network_and_exec_review&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;  # curl|bash, remote downloads, subprocess execution&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;file_and_secret_review&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;   # Env vars, credential access, broad file writes&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;destructive_action_check&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt; # rm, reset, overwrite, or unsafe automation&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;I vendor fidati ottengono una revisione di provenienza più leggera, ma non un lasciapassare gratuito. Le fonti non fidate o sconosciute ottengono un audit manuale più approfondito, e non eseguiamo gli script inclusi prima di averli letti, averne definito l’ambito operativo e averli classificati come sicuri.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Analisi delle lacune&lt;/strong&gt;: prima di adottare, cerchiamo nel nostro registro:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; skills&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; search&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; &quot;&amp;lt;capability&amp;gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Se ce l’abbiamo già, non ci serve. Se abbiamo qualcosa di simile, potremmo unire invece di adottare.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Punteggio di profondità e standard&lt;/strong&gt;: valutiamo anche quanto pienamente un candidato usa il modello agent-skill. Un singolo &lt;code&gt;SKILL.md&lt;/code&gt; può comunque essere utile, ma le skill più profonde hanno più valore quando separano istruzioni da riferimenti, script, e asset come raccomandato da &lt;code&gt;agentskills.io&lt;/code&gt;.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;skill_depth&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;level_1&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;SKILL.md only&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;                     # Single instruction file&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;level_2&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;SKILL.md + strong description&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;     # Clear triggers and scope&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;level_3&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;adds references/&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;                  # Load docs only when needed&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;level_4&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;adds atomic scripts/&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;              # Small, reviewable helpers&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;level_5&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;adds assets/examples/templates&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;    # Full progressive disclosure&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;depth_signals&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;standards_adherence&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;        # Structure aligns with agentskills.io conventions&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;reference_quality&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;          # Curated references, not giant context dumps&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;script_atomicity&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;           # Focused helpers, not opaque monoliths&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;tool_boundary_clarity&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;      # Clear limits on what the skill can execute&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;community_signal&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;           # Stars/forks/users help, but only as a weak boost&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Le stelle GitHub possono alzare un po’ un punteggio di credibilità, ma non salvano mai una skill superficiale o non sicura. Un repository con molte stelle e un &lt;code&gt;SKILL.md&lt;/code&gt; vago e script opachi ottiene un punteggio inferiore a un repository più piccolo con una descrizione precisa, materiali di riferimento selezionati in &lt;code&gt;references/&lt;/code&gt;, e helper atomici che sfruttano davvero la piena capacità della skill.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Analisi strutturale&lt;/strong&gt;: controlliamo la qualità della skill:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;wc&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; -l&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; vendor/&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;rep&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;o&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;skil&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;l&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;/SKILL.md&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;  # Size check&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;ls&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; vendor/&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;rep&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;o&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;skil&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;l&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;/scripts/&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;     # Supporting files&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;ls&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; vendor/&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;rep&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;o&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;skil&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;l&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;/references/&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;  # Bundled docs&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Se un candidato include script, quella revisione diventa più stringente. Una buona skill non è solo utile; deve essere leggibile, delimitata, e sicura da affidare a un agente. Solo quel filtro di sicurezza squalifica una fetta significativa di candidati altrimenti interessanti.&lt;/p&gt;
&lt;h3 id=&quot;fase-3-ingestione&quot;&gt;Fase 3: ingestione&lt;/h3&gt;
&lt;p&gt;Quando una skill supera la valutazione, entra nel registro. Ma le skill non vengono mai adottate senza modifiche. Vengono adattate al nostro sistema.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Modifiche all’adozione&lt;/strong&gt;:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Normalizzazione dei metadati&lt;/strong&gt;: ogni skill ottiene il nostro schema di frontmatter&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Assegnazione del livello K&lt;/strong&gt;: le skill vengono collocate nel livello di conoscenza appropriato&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Arricchimento dei tag&lt;/strong&gt;: vengono aggiunti tag per la scopribilità&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Dichiarazione degli strumenti&lt;/strong&gt;: gli strumenti consentiti vengono dichiarati esplicitamente&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Allineamento delle sezioni&lt;/strong&gt;: il contenuto viene ristrutturato per corrispondere al nostro template&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Una tipica skill YAML dopo l’ingestione:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;metadata&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  identifier&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;vendor-skill-evaluation&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  name&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;vendor-skill-evaluation&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  description&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;Systematic evaluation of vendor skills for adoption.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  type&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;workflow&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  layer&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;K4&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  semantic_folder&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;project&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  source&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;core&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  last_updated&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&apos;2026-01-17&apos;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;frontmatter&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  tags&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;agents&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;meta&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;skill-adoption&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;vendor&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  allowed_tools&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;Bash&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;Read&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;Write&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;Edit&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;Grep&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;Glob&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;Task&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;fase-4-assegnazione-dellambito&quot;&gt;Fase 4: assegnazione dell’ambito&lt;/h3&gt;
&lt;p&gt;Le skill vengono assegnate ad ambiti - categorie che determinano quali agenti caricano quali skill:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;scopes&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  database&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    primary_skills&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;domains/schema-migration-workflow&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;domains/rpc-validation-checklist&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;vendor/supabase/supabase-database&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;vendor/supabase/supabase-auth&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  research&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    primary_skills&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;identities/research-workflows&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;identities/web-extraction-playbook&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;identities/dataset-discovery-quickstart&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Gli agenti dichiarano i propri ambiti, e le skill vengono assegnate automaticamente:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# Agent definition&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;scopes&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: [&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;database&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;research&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# Gets: all database skills + all research skills + universal skills&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;fase-5-materializzazione&quot;&gt;Fase 5: materializzazione&lt;/h3&gt;
&lt;p&gt;Le skill non vivono come YAML in produzione. Vengono renderizzate in file SKILL.md che Claude Code può caricare:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; sync&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Questo comando:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Legge tutte le definizioni YAML delle skill&lt;/li&gt;
&lt;li&gt;Le renderizza attraverso template Jinja&lt;/li&gt;
&lt;li&gt;Scrive i file SKILL.md in &lt;code&gt;.claude/skills/&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Organizza per livello K (foundations/, identities/, domains/, stacks/, project/)&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;La struttura di output finale:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;.claude/skills/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── foundations/     # K0: Universal&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── identities/      # K1: Discipline&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── domains/         # K2: Subject&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── stacks/          # K3: Technology&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── project/         # K4: Organization&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;└── vendor/          # External skills&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;il-pattern-dellambito-dormiente&quot;&gt;Il pattern dell’ambito dormiente&lt;/h2&gt;
&lt;p&gt;Uno dei nostri pattern più potenti è quello delle skill “adottate ma non caricate”. Le chiamiamo ambiti dormienti.&lt;/p&gt;
&lt;p&gt;Considera le skill di calcolo scientifico dal repository k-dense-scientific. Abbiamo adottato oltre 120 skill che coprono bioinformatica, chimica, calcolo quantistico, e informatica clinica. Ma la maggior parte dei nostri agenti non ha bisogno di docking molecolare o analisi dell’espressione genica.&lt;/p&gt;
&lt;p&gt;Invece di caricare tutte le 120 skill in ogni agente (gonfiando le finestre di contesto), noi:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Adottiamo&lt;/strong&gt; le skill con un ambito specifico (es. &lt;code&gt;bioinformatics&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Le manteniamo &lt;strong&gt;dormienti&lt;/strong&gt; - registrate ma non caricate&lt;/li&gt;
&lt;li&gt;Le &lt;strong&gt;attiviamo&lt;/strong&gt; solo quando un agente dichiara quell’ambito&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# In scopes.yaml - dormant scope&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;bioinformatics&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  description&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;Bioinformatics and genomics&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  primary_skills&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: []  &lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# Empty - skills exist but aren&apos;t loaded&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# When an agent needs bioinformatics:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# Agent YAML&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;scopes&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: [&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;research&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;bioinformatics&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;]  &lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# Now loads bioinformatics skills&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Questo pattern ci permette di avere 466 skill nel registro mentre gli agenti tipici ne caricano solo 40-60 rilevanti.&lt;/p&gt;
&lt;h2 id=&quot;tipi-di-skill&quot;&gt;Tipi di skill&lt;/h2&gt;
&lt;p&gt;Le skill si presentano in tre pattern cognitivi:&lt;/p&gt;
&lt;h3 id=&quot;workflow&quot;&gt;Workflow&lt;/h3&gt;
&lt;p&gt;Passi procedurali ordinati: “1. Fai X, 2. Poi Y, 3. Infine Z”&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;type&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;workflow&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# Examples: schema-migration-workflow, mining-session-workflow&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;disciplina&quot;&gt;Disciplina&lt;/h3&gt;
&lt;p&gt;Guardrail comportamentali: “Fai sempre X”, “Non fare mai Y”, “Preferisci Z”&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;type&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;discipline&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# Examples: test-first-discipline, evidence-based-completion&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;checklist&quot;&gt;Checklist&lt;/h3&gt;
&lt;p&gt;Criteri di verifica: “Conferma X”, “Verifica Y”, “Controlla Z”&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;type&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;checklist&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# Examples: auth-validation-checklist, secrets-audit-checklist&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;gate-di-qualità&quot;&gt;Gate di qualità&lt;/h2&gt;
&lt;p&gt;Ogni skill deve superare la validazione prima di essere rilasciata:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;validation&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  file_exists&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;           # Skill file at declared path&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  frontmatter_valid&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;     # Frontmatter parses correctly&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  sections_complete&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;     # Expected sections present&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  tools_registered&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;      # Declared tools exist in registry&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Le descrizioni devono essere lunghe 50-400 caratteri con frasi di attivazione (“Usa quando…”, “Quando hai bisogno di…”) così che Claude Code sappia quando suggerirle.&lt;/p&gt;
&lt;p&gt;Validiamo continuamente:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; validate&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --show-warnings&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;lecosistema-dei-vendor&quot;&gt;L’ecosistema dei vendor&lt;/h2&gt;
&lt;p&gt;Le nostre 373 skill di vendor arrivano da:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Provider&lt;/th&gt;
&lt;th&gt;Skill&lt;/th&gt;
&lt;th&gt;Dominio&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;AWS Agent&lt;/td&gt;
&lt;td&gt;19&lt;/td&gt;
&lt;td&gt;Servizi cloud&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Anthropic&lt;/td&gt;
&lt;td&gt;12&lt;/td&gt;
&lt;td&gt;Generazione documenti&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cloudflare&lt;/td&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;td&gt;Edge computing&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Supabase&lt;/td&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;Database&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;k-dense&lt;/td&gt;
&lt;td&gt;100+&lt;/td&gt;
&lt;td&gt;Calcolo scientifico&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;silvainfm&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;Data science&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Java Developer Kit&lt;/td&gt;
&lt;td&gt;45+&lt;/td&gt;
&lt;td&gt;Spring/Java&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Vercel&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;Automazione browser&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Ogni vendor root è dichiarato in metadata.yaml:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;vendor_roots&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;path&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;vendor/aws-agent-skills&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    provider&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;aws&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;path&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;vendor/k-dense-scientific/scientific-skills&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    provider&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;k-dense&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;path&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;vendor/supabase-skills&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    provider&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;supabase&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Quando &lt;code&gt;orkestra sync&lt;/code&gt; viene eseguito, le skill dei vendor vengono collegate con symlink in &lt;code&gt;.claude/skills/vendor/&lt;/code&gt; con il proprio namespace del provider.&lt;/p&gt;
&lt;h2 id=&quot;cosa-abbiamo-imparato&quot;&gt;Cosa abbiamo imparato&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;La selettività ripaga.&lt;/strong&gt; È allettante adottare tutto ciò che sembra utile. Ma ogni skill costa token. Con 2.834 token medi per skill, il sovraccarico di contesto si fa sentire presto. Il nostro tasso di adozione del 13% mantiene gli agenti snelli.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;La struttura abilita la scopribilità.&lt;/strong&gt; Il sistema a livelli K non è solo organizzazione - riguarda la portabilità. Le skill K0 possono essere riutilizzate ovunque. Le skill K4 sono intenzionalmente specifiche del progetto. Questa chiarezza aiuta sia gli esseri umani che gli agenti a trovare ciò di cui hanno bisogno.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Gli ambiti dormienti scalano.&lt;/strong&gt; Puoi adottare centinaia di skill senza caricarle tutte. Gli ambiti ti permettono di costruire un registro completo mantenendo gestibili le finestre di contesto dei singoli agenti.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;La modifica all’adozione è essenziale.&lt;/strong&gt; Le skill grezze dei vendor raramente si adattano al tuo sistema. Il processo di ingestione - aggiungere metadati, assegnare livelli, arricchire i tag - fa funzionare internamente le skill esterne.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Il mining è continuo.&lt;/strong&gt; Il numero 3.500 continua a crescere. Compaiono nuovi repository di vendor. Emergono pattern della community. I workflow interni si consolidano. Il loop non si ferma mai.&lt;/p&gt;
&lt;h2 id=&quot;cosa-viene-dopo&quot;&gt;Cosa viene dopo&lt;/h2&gt;
&lt;p&gt;Stiamo lavorando su diversi miglioramenti:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Rilevamento automatico delle lacune&lt;/strong&gt;: avvisa quando fallimenti comuni degli agenti potrebbero essere risolti da una skill non ancora adottata&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Workflow di deprecazione delle skill&lt;/strong&gt;: processo formale per ritirare skill superate o non utilizzate&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Dipendenze tra skill&lt;/strong&gt;: dichiarazione esplicita dei prerequisiti delle skill&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Analisi di utilizzo&lt;/strong&gt;: traccia quali skill gli agenti invocano davvero rispetto a quelle che si limitano a caricare&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Il loop di mining delle skill è infrastruttura. Non è affascinante. Ma è ciò che fa funzionare 41 agenti in modo coerente con 466 capacità pur restando entro i limiti di contesto.&lt;/p&gt;
&lt;p&gt;Questa è la storia di come 3.500 diventano 466. Non ignorandone 3.000 - valutandoli sistematicamente e adottando solo ciò che funziona.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;Vuoi vedere il sistema di skill in azione? Dai un’occhiata a &lt;code&gt;uv run orkestra skills list&lt;/code&gt; per esplorare il nostro registro attuale.&lt;/em&gt;&lt;/p&gt;
</content:encoded><category>Architecture</category><category>Skills</category></item><item><title>Progressive disclosure: finestre CLI sui sistemi ad agenti</title><link>https://maguyva.ai/it/blog/progressive-disclosure-cli-into-agents</link><guid isPermaLink="true">https://maguyva.ai/it/blog/progressive-disclosure-cli-into-agents</guid><description>I sistemi ad agenti sono opachi per default. La progressive disclosure offre agli operatori viste CLI a livelli, dai controlli rapidi di stato fino ai dettagli interni completi degli agenti e alle tracce delle decisioni.</description><pubDate>Tue, 20 Jan 2026 00:00:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;I numeri in questo articolo riflettono il sistema al momento della pubblicazione (gennaio 2026). Consulta la nostra &lt;a href=&quot;https://maguyva.ai/it/team&quot;&gt;pagina del team&lt;/a&gt; per le cifre attuali.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I sistemi ad agenti sono opachi per design. Prendono decisioni, invocano strumenti, e coordinano lavoro attraverso dozzine di specialisti. Ma quando qualcosa va storto — o quando semplicemente vuoi capire cosa sta succedendo — dove guardi?&lt;/p&gt;
&lt;p&gt;La risposta è la progressive disclosure: un’interfaccia a livelli che rivela esattamente tanta complessità quanta te ne serve, esattamente quando ti serve.&lt;/p&gt;
&lt;h2 id=&quot;il-problema-dellopacità&quot;&gt;Il problema dell’opacità&lt;/h2&gt;
&lt;p&gt;Un moderno sistema di orchestrazione ad agenti potrebbe avere:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;40+ agenti specialisti, ciascuno con capacità distinte&lt;/li&gt;
&lt;li&gt;700+ skill che spaziano tra automazione interna e integrazioni con vendor&lt;/li&gt;
&lt;li&gt;470+ decisioni architetturali che plasmano il comportamento&lt;/li&gt;
&lt;li&gt;Dozzine di server di strumenti MCP che forniscono capacità esterne&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Questa complessità è intenzionale. Gli agenti hanno bisogno di accesso a un contesto ricco — conoscenza di dominio, intelligenza del codice, schemi di database — per prendere buone decisioni. Ma quella stessa ricchezza crea un problema di visibilità.&lt;/p&gt;
&lt;p&gt;Come fai a sapere quale agente gestisce le migrazioni di database? Quali decisioni hanno plasmato il comportamento di ranking del sistema di ricerca? A quali strumenti ha accesso il consulente di architettura?&lt;/p&gt;
&lt;p&gt;Senza un accesso strutturato, ti ritrovi a leggere il codice sorgente o a sperare che la documentazione sia aggiornata.&lt;/p&gt;
&lt;h2 id=&quot;la-progressive-disclosure-come-architettura&quot;&gt;La progressive disclosure come architettura&lt;/h2&gt;
&lt;p&gt;La progressive disclosure non è solo un pattern di UI. È un principio architetturale: organizza le informazioni in livelli, ciascuno più profondo del precedente, così gli utenti possono fermarsi al livello che risponde alla loro domanda.&lt;/p&gt;
&lt;p&gt;Per i sistemi ad agenti, questo si traduce in comandi CLI a profondità crescenti:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Livello&lt;/th&gt;
&lt;th&gt;Comando&lt;/th&gt;
&lt;th&gt;Domanda a cui risponde&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;code&gt;orkestra system status&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Va tutto bene?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;&lt;code&gt;orkestra agents list&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Quali agenti esistono?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;&lt;code&gt;orkestra agents info &amp;lt;name&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Cosa fa questo agente?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;&lt;code&gt;orkestra decisions search&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Perché funziona in questo modo?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;Strumenti MCP di Maguyva&lt;/td&gt;
&lt;td&gt;Mostrami il codice.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Ogni livello risponde a una naturale domanda di follow-up. Raramente devi saltare direttamente al livello 5.&lt;/p&gt;
&lt;h2 id=&quot;livello-1-salute-del-sistema&quot;&gt;Livello 1: salute del sistema&lt;/h2&gt;
&lt;p&gt;La prima domanda è sempre: funziona tutto?&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;$&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; system&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; status&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;json&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;agents&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;40&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;skills_internal&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;466&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;skills_vendor&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;240&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;skills_total&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;706&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;commands&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;17&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Un comando. Quattro numeri. Sufficiente per sapere che il sistema è configurato e i registri sono popolati.&lt;/p&gt;
&lt;p&gt;Se il conteggio degli agenti scende inaspettatamente o le skill non si caricano, lo vedi qui per primo. Nessun bisogno di scavare nei log.&lt;/p&gt;
&lt;h2 id=&quot;livello-2-inventario-degli-agenti&quot;&gt;Livello 2: inventario degli agenti&lt;/h2&gt;
&lt;p&gt;Una volta che sai che il sistema è in salute, la prossima domanda è: cosa è disponibile?&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;$&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; agents&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; list&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Questo restituisce dati strutturati — nomi degli agenti, descrizioni, preferenze di modello, copertura di dominio. L’output è JSON per default, il che rende facile incanalarlo in &lt;code&gt;jq&lt;/code&gt; per il filtraggio:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;$&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; agents&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; list&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; |&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; jq&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; &apos;.agents[] | select(.model == &quot;opus&quot;) | .name&apos;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Vuoi agenti che gestiscono lavoro sui database? Il comando di ricerca restringe i risultati:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;$&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; agents&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; search&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; &quot;database&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Questo scansiona nomi, descrizioni, e capacità. Trovi lo specialista giusto senza leggere 40 definizioni di agenti.&lt;/p&gt;
&lt;h2 id=&quot;livello-3-approfondimento-sullagente&quot;&gt;Livello 3: approfondimento sull’agente&lt;/h2&gt;
&lt;p&gt;Hai trovato un agente che sembra rilevante? Il comando &lt;code&gt;info&lt;/code&gt; rivela tutto:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;$&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; agents&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; info&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; architecture-advisor&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;L’output include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Metadati&lt;/strong&gt;: nome, categoria, preferenza di modello, descrizione&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Domini&lt;/strong&gt;: quali aree di conoscenza copre questo agente&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Identità&lt;/strong&gt;: tratti caratteriali (architect, strategist, knowledge-architect)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Guide agli strumenti&lt;/strong&gt;: quale documentazione degli strumenti viene iniettata nel contesto&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Strumenti&lt;/strong&gt;: l’elenco completo degli strumenti MCP disponibili per questo agente&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Ecco un campione di ciò che vedi:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;jsonc&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;metadata&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;    &quot;name&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;architecture-advisor&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;    &quot;model&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;opus&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;    &quot;description&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;Strategic decision-making and architectural guidance...&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;domains&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: [&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    &quot;product&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    &quot;development/architecture&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    &quot;meta/strategy&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  ],&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;tools&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;    &quot;mcp_tools&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: [&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;      &quot;mcp__maguyva__intelligent_search&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;      &quot;mcp__maguyva__analyze_dependencies&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;      &quot;mcp__supabase__execute_sql&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FDAEB7;font-style:italic&quot;&gt;      ...&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    ]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Questo ti dice esattamente cosa può fare l’agente. Nessun codice sorgente richiesto.&lt;/p&gt;
&lt;h2 id=&quot;livello-4-archeologia-delle-decisioni&quot;&gt;Livello 4: archeologia delle decisioni&lt;/h2&gt;
&lt;p&gt;Gli agenti si comportano secondo decisioni documentate. Quando hai bisogno di capire &lt;em&gt;perché&lt;/em&gt; qualcosa funziona in un modo particolare, il registro delle decisioni è la fonte di verità.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;$&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; decisions&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; search&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; &quot;agent&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Questo restituisce le decisioni architetturali corrispondenti:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;json&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;results&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: [&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;      &quot;id&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;DEC-SR-049&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;      &quot;title&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;AI-Agent-First Defaults with Graph Intelligence&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;      &quot;domain&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;search&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;      &quot;status&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;active&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  ]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Ogni decisione ha una provenienza completa — quando è stata presa, perché, quali trade-off sono stati considerati, quali commit l’hanno implementata:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;$&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; decisions&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; info&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; DEC-SR-049&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;json&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;id&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;DEC-SR-049&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;title&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;AI-Agent-First Defaults with Graph Intelligence&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;summary&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;Changes default values for search tools to AI-agent-optimal behavior...&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;rationale&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: [&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    &quot;AI agents work better with pre-ranked, importance-weighted results&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    &quot;Graph metrics already computed by pipeline - leverage them&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    &quot;Community context helps agents understand feature scope in single query&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  ],&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;source_commits&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: [&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;      &quot;sha&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;156a880d05eae295669ef7c194b039023f245511&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;      &quot;message&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;feat(maguyva): enable boost_by_importance...&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  ]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Questa è documentazione architetturale che rimane aggiornata perché viene estratta dai commit, non mantenuta manualmente.&lt;/p&gt;
&lt;h2 id=&quot;livello-5-intelligenza-del-codice-diretta&quot;&gt;Livello 5: intelligenza del codice diretta&lt;/h2&gt;
&lt;p&gt;Quando hai bisogno di vedere l’implementazione reale — non i metadati su di essa — gli strumenti MCP di Maguyva forniscono accesso diretto.&lt;/p&gt;
&lt;p&gt;Dall’interno di una sessione agente:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;mcp__maguyva__intelligent_search&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  query: &quot;agent context loading&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Questo instrada automaticamente tra ricerca semantica, testuale, e AST per trovare codice rilevante. Per simboli specifici:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;mcp__maguyva__find_symbol&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  symbol_name: &quot;load_agent_context&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Per l’analisi delle dipendenze:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;mcp__maguyva__analyze_dependencies&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  target: &quot;packages/orchestration/core/agents.py&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Questi non sono solo sostituti di grep. Sono consapevoli del grafo, indicizzati semanticamente, e integrati con la stessa intelligenza del codice che alimenta gli agenti stessi.&lt;/p&gt;
&lt;h2 id=&quot;ricerca-unificata-tra-i-registri&quot;&gt;Ricerca unificata tra i registri&lt;/h2&gt;
&lt;p&gt;A volte non sai quale registro contiene la risposta. La ricerca unificata copre tutto:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;$&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; search&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; &quot;database&quot;&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --summary&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;json&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;query&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;database&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;total&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;254&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;counts&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;    &quot;agents&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;40&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;    &quot;skills&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;59&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;    &quot;decisions&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;476&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;    &quot;truths&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;    &quot;packages&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;1&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;254 corrispondenze su cinque registri. Il riepilogo ti dice dove approfondire. Rimuovi &lt;code&gt;--summary&lt;/code&gt; per risultati dettagliati, o aggiungi &lt;code&gt;--limit 5&lt;/code&gt; per mantenere l’output gestibile.&lt;/p&gt;
&lt;h2 id=&quot;perché-questo-conta&quot;&gt;Perché questo conta&lt;/h2&gt;
&lt;p&gt;La progressive disclosure non riguarda solo la comodità. Cambia il modo in cui interagisci con sistemi complessi.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Il debugging diventa gestibile.&lt;/strong&gt; Quando un agente prende una decisione inaspettata, non fai grep nei log. Controlli a quali strumenti ha accesso (&lt;code&gt;agents info&lt;/code&gt;), quali decisioni plasmano il suo comportamento (&lt;code&gt;decisions search&lt;/code&gt;), e tracci l’implementazione se necessario (&lt;code&gt;intelligent_search&lt;/code&gt;).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;L’onboarding accelera.&lt;/strong&gt; I nuovi membri del team non devono leggere l’intero codebase. Iniziano con &lt;code&gt;system status&lt;/code&gt;, esplorano con &lt;code&gt;agents list&lt;/code&gt;, e vanno più a fondo solo quando incontrano qualcosa che non capiscono.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;La documentazione resta aggiornata.&lt;/strong&gt; Poiché la CLI legge dagli stessi registri che configurano gli agenti, l’output è sempre accurato. Non c’è disallineamento tra ciò che dice la documentazione e ciò che fa il sistema.&lt;/p&gt;
&lt;h2 id=&quot;la-cli-come-interfaccia&quot;&gt;La CLI come interfaccia&lt;/h2&gt;
&lt;p&gt;Avremmo potuto costruire una dashboard web. Avremmo potuto scrivere documentazione estesa. Invece, abbiamo costruito una CLI che legge dalla fonte di verità.&lt;/p&gt;
&lt;p&gt;La CLI ha dei vantaggi:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Componibile&lt;/strong&gt;: incanala l’output attraverso &lt;code&gt;jq&lt;/code&gt;, integra con gli script&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Scriptabile&lt;/strong&gt;: automatizza controlli, genera report&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Veloce&lt;/strong&gt;: nessun caricamento di pagina, nessun flusso di autenticazione&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Accurata&lt;/strong&gt;: legge la configurazione reale, non una rappresentazione in cache&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Per i sistemi dove la correttezza conta più dell’estetica, vince la CLI.&lt;/p&gt;
&lt;h2 id=&quot;costruire-la-tua-progressive-disclosure&quot;&gt;Costruire la tua progressive disclosure&lt;/h2&gt;
&lt;p&gt;Se stai costruendo sistemi ad agenti, considera come gli utenti li ispezioneranno:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Inizia con i controlli di salute.&lt;/strong&gt; Un comando che ti dice se le cose funzionano.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Fornisci viste di inventario.&lt;/strong&gt; Elenca cosa esiste prima di spiegare cosa fa.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Abilita query mirate.&lt;/strong&gt; La ricerca batte la navigazione su larga scala.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Esponi la provenienza.&lt;/strong&gt; Lascia che gli utenti traccino le decisioni fino alle loro origini.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Connetti all’intelligenza del codice.&lt;/strong&gt; Alla fine, gli utenti devono vedere l’implementazione.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Ogni livello risponde a una domanda di follow-up. Costruiscili in ordine di frequenza — la maggior parte degli utenti si ferma al livello 2 o 3. Solo gli utenti esperti raggiungono il livello 5.&lt;/p&gt;
&lt;p&gt;L’obiettivo non è esporre tutto. È esporre esattamente ciò che serve, esattamente quando serve. Questa è la progressive disclosure applicata all’architettura degli agenti.&lt;/p&gt;
</content:encoded><category>Architecture</category><category>CLI</category><category>Tooling</category></item><item><title>Verità di base: ancorare gli agenti AI alla realtà</title><link>https://maguyva.ai/it/blog/ground-truths-anchoring-ai-to-reality</link><guid isPermaLink="true">https://maguyva.ai/it/blog/ground-truths-anchoring-ai-to-reality</guid><description>Gli agenti AI hanno allucinazioni con sicurezza. Le verità di base sono fatti versionati e delimitati che ancorano il comportamento degli agenti alla realtà. Ecco come le abbiamo costruite e come le facciamo rispettare.</description><pubDate>Tue, 13 Jan 2026 00:00:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;I numeri in questo articolo riflettono il sistema al momento della pubblicazione (gennaio 2026). Consulta la nostra &lt;a href=&quot;https://maguyva.ai/it/team&quot;&gt;pagina del team&lt;/a&gt; per le cifre attuali.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Gli agenti AI sono straordinariamente capaci. Sanno ragionare, sintetizzare e generare. Ma hanno una debolezza fondamentale: si inventano le cose. Non in malafede, ma con sicurezza. Un agente può inventare parametri API che non esistono, fare riferimento a configurazioni mai definite, o applicare pattern dai suoi dati di addestramento che contraddicono la tua architettura reale.&lt;/p&gt;
&lt;p&gt;La mitigazione standard è “dare all’agente più contesto”. Ma il contesto può essere contraddittorio. La documentazione si scosta dall’implementazione. I commenti mentono. Persino il codice può fuorviare se letto senza capire l’intento.&lt;/p&gt;
&lt;p&gt;Ci serviva qualcosa di più esplicito. Qualcosa che non potesse essere ignorato o frainteso. Qualcosa che ancorasse gli agenti a una realtà verificabile.&lt;/p&gt;
&lt;p&gt;Le chiamiamo Verità di Base.&lt;/p&gt;
&lt;h2 id=&quot;cosè-una-verità-di-base&quot;&gt;Cos’è una Verità di Base?&lt;/h2&gt;
&lt;p&gt;Una verità di base è un’affermazione di fatto esplicita e versionata che gli agenti devono rispettare. Non è documentazione. Non è un commento. È un’entità di primo livello nel sistema, con:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Un identificatore univoco&lt;/strong&gt; (come &lt;code&gt;GT-MAG-015&lt;/code&gt; o &lt;code&gt;GT-MAG-036&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Uno stato di ciclo di vita&lt;/strong&gt; (corrente, provvisorio, o deprecato)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Un ambito&lt;/strong&gt; (piattaforma intera, specifico per package, o vincolato a un dominio)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Prove&lt;/strong&gt; (percorsi di file, URL, o riferimenti che dimostrano l’affermazione)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Indicazioni per l’agente&lt;/strong&gt; (istruzioni esplicite su cosa fare/evitare)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Ecco un esempio dalla nostra piattaforma di intelligenza del codice Maguyva:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;- &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;GT-MAG-015&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  status&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;current&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  scope&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;package&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  statement&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;|&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    Fuzzy symbol matching is opt-in via `find_similar=true`.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    Default behavior returns empty results for non-existent symbols;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    `exact_match=true` enforces strict matching and disables all fuzzy fallbacks.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  rationale&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;|&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    Deterministic defaults prevent agents from receiving misleading results.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    Typos should fail explicitly rather than silently returning unrelated symbols.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  evidence&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;packages/maguyva/server/src/maguyva/services/code_analysis_service.py&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;packages/maguyva/server/docs/quick_reference/parameters.md&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  last_verified&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;2026-01-25&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  tags&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;product&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;ai_first&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;principle&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Questa non è prosa. È un contratto. Quando un agente incontra questa verità di base, sa:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Il default è deterministico (risultati vuoti, non ipotesi approssimative)&lt;/li&gt;
&lt;li&gt;Ci sono parametri specifici (&lt;code&gt;find_similar&lt;/code&gt;, &lt;code&gt;exact_match&lt;/code&gt;) con comportamenti definiti&lt;/li&gt;
&lt;li&gt;Esistono prove in file specifici che possono essere verificati&lt;/li&gt;
&lt;li&gt;L’affermazione è stata verificata a una data specifica&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&quot;lanatomia-di-un-registro-di-verità-di-base&quot;&gt;L’anatomia di un registro di Verità di Base&lt;/h2&gt;
&lt;p&gt;Le verità di base vivono in registri YAML sotto &lt;code&gt;ai_assets/reference/ground_truths.yaml&lt;/code&gt;. Ogni package o dominio può avere il proprio registro. La struttura è:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;metadata&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  title&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;Maguyva Ground Truths&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  summary&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;Foundational constraints and principles that guide Maguyva.&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  last_updated&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;2026-01-26&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  owner&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;maguyva&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  render&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    include_statuses&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: [&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;current&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;tentative&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    show_deprecated&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;true&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    groups&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      - &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;title&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;Product Principles&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;        tags&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: [&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;product&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;principle&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;brand&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      - &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;title&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;Architecture &amp;amp; Boundaries&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;        tags&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: [&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;architecture&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;boundaries&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;cqrs&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;statements&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;GT-MAG-001&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    status&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;current&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    scope&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;package&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    statement&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;Maguyva is read-only with respect to user repositories...&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;    ...&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Il registro include metadati sulla collezione stessa, configurazione di rendering per la generazione della documentazione, e le affermazioni stesse. Ogni affermazione segue uno schema rigoroso validato da modelli Pydantic:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;python&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;class&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; GroundTruthStatement&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;BaseModel&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;    id&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;str&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    status: GTStatus  &lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# current, tentative, deprecated&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    source: GTSource &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;|&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; None&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;  # claude-code, orkestra, discipline&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    scope: GTScope  &lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# platform, package, domain&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    statement: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;str&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    rationale: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;str&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; |&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; None&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    evidence: list[&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;str&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    last_verified: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;str&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; |&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; None&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    tags: list[&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;str&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    agent_guidance: AgentGuidance &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;|&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; None&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;come-gli-agenti-accedono-alle-verità-di-base&quot;&gt;Come gli agenti accedono alle Verità di Base&lt;/h2&gt;
&lt;p&gt;Le verità di base sono esposte attraverso più canali:&lt;/p&gt;
&lt;h3 id=&quot;1-documentazione-renderizzata&quot;&gt;1. Documentazione renderizzata&lt;/h3&gt;
&lt;p&gt;Il comando &lt;code&gt;orkestra sync&lt;/code&gt; trasforma i registri YAML in markdown leggibile:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; sync&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Questo genera file &lt;code&gt;GROUND_TRUTHS.md&lt;/code&gt; inclusi nel contesto dell’agente. L’output renderizzato raggruppa le affermazioni per stato e categoria:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;markdown&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF;font-weight:bold&quot;&gt;## Current&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF;font-weight:bold&quot;&gt;### Product Principles&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; Maguyva is read-only with respect to user repositories... (GT-MAG-001)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; Design tool responses for AI agents first... (GT-MAG-009)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF;font-weight:bold&quot;&gt;### Architecture &amp;amp; Boundaries&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; Pipeline and Maguyva boundaries are intentional... (GT-MAG-006)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;2-ricerca-da-cli&quot;&gt;2. Ricerca da CLI&lt;/h3&gt;
&lt;p&gt;Gli agenti con accesso shell possono cercare le verità di base programmaticamente:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; registry&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; truths&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; search&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; &quot;embedding&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; registry&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; truths&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; search&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --tag&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; security&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; registry&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; truths&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; list&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --status&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; current&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;La funzione di ricerca assegna un punteggio ai risultati su più campi con rilevanza pesata:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;python&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;def&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; truth_fields&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(gt: GroundTruthStatement) -&amp;gt; list[FieldSpec]:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;    return&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; [&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;        FieldSpec(&lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;id&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;weight&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;6&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;values&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;[gt.id]),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;        FieldSpec(&lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;statement&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;weight&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;5&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;values&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;[gt.statement]),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;        FieldSpec(&lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;rationale&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;weight&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;4&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;values&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;[gt.rationale] &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; gt.rationale &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;else&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; []),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;        FieldSpec(&lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;tags&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;weight&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;3&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;values&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;gt.tags &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;or&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; []),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;        FieldSpec(&lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;evidence&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;weight&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;values&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;gt.evidence &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;or&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; []),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    ]&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;3-composizione-del-contesto&quot;&gt;3. Composizione del contesto&lt;/h3&gt;
&lt;p&gt;Quando gli agenti vengono renderizzati da definizioni YAML, il loro contesto può fare riferimento ai registri di verità di base:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;context_composition&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  domain_knowledge&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;packages/maguyva/ai_assets/reference/ground_truths.yaml&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Questo garantisce che le verità di base rilevanti vengano caricate prima che l’agente inizi il lavoro.&lt;/p&gt;
&lt;h2 id=&quot;categorie-di-verità-di-base&quot;&gt;Categorie di Verità di Base&lt;/h2&gt;
&lt;p&gt;Osservando i nostri registri, le verità di base si raggruppano in diversi pattern:&lt;/p&gt;
&lt;h3 id=&quot;principi-di-prodotto&quot;&gt;Principi di prodotto&lt;/h3&gt;
&lt;p&gt;Vincoli su cosa il prodotto è e non è:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;“Maguyva è di sola lettura rispetto ai repository degli utenti; l’unico asset non ricostruibile è la cache di embedding a pagamento.” (GT-MAG-001)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&quot;confini-architetturali&quot;&gt;Confini architetturali&lt;/h3&gt;
&lt;p&gt;Dove vivono le responsabilità e perché:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;“I confini tra pipeline e Maguyva sono intenzionali: la pipeline è riutilizzabile, Maguyva contiene la logica specifica del codice, e CQRS separa le operazioni di scrittura degli stage della pipeline dalle letture del server.” (GT-MAG-006)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&quot;regole-anti-allucinazione&quot;&gt;Regole anti-allucinazione&lt;/h3&gt;
&lt;p&gt;Regole esplicite che mantengono i contratti degli strumenti deterministici invece che inferiti:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;“Il matching fuzzy dei simboli è opt-in tramite &lt;code&gt;find_similar=true&lt;/code&gt;. Il comportamento predefinito restituisce risultati vuoti per simboli inesistenti; &lt;code&gt;exact_match=true&lt;/code&gt; impone un matching rigoroso e disabilita tutti i fallback fuzzy.” (GT-MAG-015)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&quot;gate-di-qualità&quot;&gt;Gate di qualità&lt;/h3&gt;
&lt;p&gt;Standard che devono essere mantenuti:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;“Le modifiche all’infrastruttura condivisa (post_filters.py, estrattori di relazioni, handler condivisi) DEVONO essere validate contro TUTTI i linguaggi supportati tramite generazione del manifest completo prima del commit. Una validazione a linguaggio singolo non è sufficiente per il codice condiviso.” (GT-MAG-036)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&quot;pattern-di-codice&quot;&gt;Pattern di codice&lt;/h3&gt;
&lt;p&gt;Requisiti di implementazione:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;“Usa &lt;code&gt;asyncio.to_thread()&lt;/code&gt; per lavoro CPU-bound in contesti async; il pattern deprecato &lt;code&gt;loop.run_in_executor()&lt;/code&gt; non deve essere usato in nuovo codice.” (GT-MAG-018)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&quot;il-ciclo-di-vita-di-una-verità-di-base&quot;&gt;Il ciclo di vita di una Verità di Base&lt;/h2&gt;
&lt;p&gt;Le verità di base non sono statiche. Evolvono attraverso un ciclo di vita definito:&lt;/p&gt;
&lt;h3 id=&quot;provvisoria&quot;&gt;Provvisoria&lt;/h3&gt;
&lt;p&gt;Una verità proposta in fase di valutazione. L’affermazione è registrata ma può cambiare:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;- &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;GT-MAG-044&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  status&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;tentative&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  statement&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;|&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    get_file with include_metadata=false may still return metadata in the&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    response because middleware may re-inject it for AI agent disambiguation.&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;corrente&quot;&gt;Corrente&lt;/h3&gt;
&lt;p&gt;Una verità verificata che gli agenti devono rispettare. Le prove sono state convalidate:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;- &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;GT-MAG-017&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  status&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;current&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  last_verified&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;2026-01-26&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  evidence&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;packages/maguyva/server/src/maguyva/services/supabase.py&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;deprecata&quot;&gt;Deprecata&lt;/h3&gt;
&lt;p&gt;Una verità che non si applica più. Conservata come riferimento storico con un puntatore a ciò che l’ha sostituita:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;- &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;GT-MAG-099&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  status&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;deprecated&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  superseded_by&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;GT-MAG-015&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  notes&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;Replaced when we moved to explicit matching behavior&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;perché-non-semplice-documentazione&quot;&gt;Perché non semplice documentazione?&lt;/h2&gt;
&lt;p&gt;La documentazione serve a uno scopo diverso. Spiega. Insegna. Può essere vaga, può usare qualificatori come “generalmente” o “tipicamente”.&lt;/p&gt;
&lt;p&gt;Le verità di base non possono essere vaghe. Sono asserzioni. O si applicano o non si applicano.&lt;/p&gt;
&lt;p&gt;Considera la differenza:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Documentazione:&lt;/strong&gt; “L’API generalmente restituisce risultati vuoti quando un simbolo non viene trovato, sebbene il matching fuzzy possa essere abilitato in alcune configurazioni.”&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Verità di base:&lt;/strong&gt; “Il comportamento predefinito restituisce risultati vuoti per simboli inesistenti; &lt;code&gt;exact_match=true&lt;/code&gt; impone un matching rigoroso e disabilita tutti i fallback fuzzy.”&lt;/p&gt;
&lt;p&gt;La prima è utile per gli esseri umani che imparano il sistema. La seconda fornisce indicazioni applicabili agli agenti che prendono decisioni.&lt;/p&gt;
&lt;h2 id=&quot;indicazioni-per-lagente-fare-ed-evitare&quot;&gt;Indicazioni per l’agente: fare ed evitare&lt;/h2&gt;
&lt;p&gt;Alcune verità di base includono indicazioni esplicite per l’agente:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;- &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;GT-MAG-022&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  statement&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;|&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    Accuracy fixes must happen at extraction time via production code,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    never via validator filters.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  agent_guidance&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    do&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;Fix extraction bugs in YAML config, handlers, or tree-sitter queries&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;Add test cases at the layer where the fix lives&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    avoid&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;Adding validator filters to mask production bugs&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;Creating test-only workarounds for extraction issues&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Questo elimina l’ambiguità. Un agente che legge questo sa non solo cosa è vero, ma quali azioni quella verità implica.&lt;/p&gt;
&lt;h2 id=&quot;verifica-e-manutenzione&quot;&gt;Verifica e manutenzione&lt;/h2&gt;
&lt;p&gt;Le verità di base richiedono manutenzione. Tracciamo:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;last_verified&lt;/strong&gt;: quando qualcuno ha confermato che l’affermazione è ancora valida&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;evidence&lt;/strong&gt;: file che dimostrano l’affermazione (può essere verificata la loro esistenza)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;source&lt;/strong&gt;: da dove ha origine la verità (ispezione da CLI, revisione architetturale, apprendimento post-incidente)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Una verità di base con date di verifica obsolete o link di prova rotti è un segnale da indagare. O la verità è ancora valida e necessita una riverifica, oppure la realtà è cambiata e la verità va aggiornata.&lt;/p&gt;
&lt;h2 id=&quot;esempi-reali-dalla-produzione&quot;&gt;Esempi reali dalla produzione&lt;/h2&gt;
&lt;h3 id=&quot;confine-di-sicurezza&quot;&gt;Confine di sicurezza&lt;/h3&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;- &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;GT-MAG-014&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  statement&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;|&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    Maguyva queries are search patterns, not executable code.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    SQL injection prevention is handled by PostgREST parameterization;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    application-layer SQL keyword blocking must never be added.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  rationale&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;|&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    Blocking SQL keywords breaks legitimate code search. Users search FOR&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    code containing patterns like &apos;DROP TABLE&apos;, they don&apos;t execute them.&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Questa verità di base previene una classe di “miglioramenti di sicurezza” mal indirizzati che romperebbero il prodotto.&lt;/p&gt;
&lt;h3 id=&quot;accuratezza-al-momento-dellestrazione&quot;&gt;Accuratezza al momento dell’estrazione&lt;/h3&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;- &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;GT-MAG-022&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  statement&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;|&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    Accuracy fixes must happen at extraction time via production code&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    (YAML config, handlers, queries), never via validator filters.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  rationale&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;|&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    Validator filters only run during tests. They can hide extractor bugs&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    while production responses remain wrong.&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Questa è nata da un’esperienza dolorosa. Gli agenti riparavano i language pack falliti aggiungendo filtri solo-validatore che facevano sembrare più verde il test harness, mentre l’estrattore Maguyva live continuava a emettere gli edge sbagliati. La regola costringe le correzioni a tornare sul percorso reale: config YAML, query, o handler.&lt;/p&gt;
&lt;h3 id=&quot;filtraggio-multi-livello&quot;&gt;Filtraggio multi-livello&lt;/h3&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;- &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;GT-MAG-023&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  statement&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;|&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    Language engine uses three-tier filtering: external_method_patterns&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    (builtins/stdlib), allowlists (legitimate idioms), and expected_call_targets&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    (validation-time deduplication). Each tier serves a distinct purpose.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  rationale&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;|&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    Conflating filter purposes leads to either over-filtering (missing real&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    relationships) or under-filtering (noise).&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Questo impedisce agli agenti di aggiungere filtri nel posto sbagliato, un errore comune che causava regressioni di accuratezza.&lt;/p&gt;
&lt;h2 id=&quot;integrazione-con-il-sistema-di-orchestrazione&quot;&gt;Integrazione con il sistema di orchestrazione&lt;/h2&gt;
&lt;p&gt;Le verità di base sono un livello di un sistema di contesto più ampio:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Decisioni architetturali (ADR)&lt;/strong&gt; - Registrano perché abbiamo scelto l’approccio A invece di B&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Verità di base&lt;/strong&gt; - Affermano cosa è accertato come vero in questo momento&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Pattern di dominio&lt;/strong&gt; - Descrivono come fare le cose correttamente&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Anti-pattern&lt;/strong&gt; - Descrivono cosa evitare e perché&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Un agente che lavora nel sistema ha accesso a tutti e quattro. Le verità di base forniscono l’ancora fattuale, mentre le decisioni spiegano la storia, i pattern guidano l’implementazione, e gli anti-pattern avvertono delle insidie.&lt;/p&gt;
&lt;h2 id=&quot;misurare-limpatto&quot;&gt;Misurare l’impatto&lt;/h2&gt;
&lt;p&gt;Da quando abbiamo introdotto le verità di base, abbiamo osservato:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Meno cicli di “correggere la correzione allucinata”&lt;/li&gt;
&lt;li&gt;Un processo decisionale degli agenti più sicuro quando i fatti sono chiari&lt;/li&gt;
&lt;li&gt;Revisioni delle PR migliori perché le aspettative sono esplicite&lt;/li&gt;
&lt;li&gt;Tempi di onboarding ridotti per i nuovi agenti (e per gli esseri umani)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;L’investimento nel mantenere le verità di base ripaga in meno debugging e confini di sistema più chiari.&lt;/p&gt;
&lt;h2 id=&quot;come-iniziare&quot;&gt;Come iniziare&lt;/h2&gt;
&lt;p&gt;Per aggiungere una verità di base al tuo sistema:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Crea un &lt;code&gt;ground_truths.yaml&lt;/code&gt; nella directory &lt;code&gt;ai_assets/reference/&lt;/code&gt; del tuo package&lt;/li&gt;
&lt;li&gt;Definisci metadati e configurazione di rendering&lt;/li&gt;
&lt;li&gt;Aggiungi affermazioni seguendo lo schema&lt;/li&gt;
&lt;li&gt;Esegui &lt;code&gt;uv run orkestra sync&lt;/code&gt; per generare la documentazione&lt;/li&gt;
&lt;li&gt;Includi il registro nella composizione del contesto dell’agente&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Inizia dai fatti che causano più confusione o dai vincoli che vengono violati più spesso. Quelle sono le tue verità di base a più alto valore.&lt;/p&gt;
&lt;h2 id=&quot;conclusione&quot;&gt;Conclusione&lt;/h2&gt;
&lt;p&gt;Gli agenti AI avranno allucinazioni. È nella loro natura. Ma possiamo creare ambienti in cui l’allucinazione è vincolata, in cui certi fatti non sono negoziabili, in cui gli agenti possono confrontare le proprie ipotesi con una realtà verificata.&lt;/p&gt;
&lt;p&gt;Le verità di base non sono una soluzione completa. Richiedono manutenzione. Possono diventare obsolete. Aggiungono overhead al processo di sviluppo.&lt;/p&gt;
&lt;p&gt;Ma offrono qualcosa di prezioso: un vocabolario condiviso di fatti di cui sia gli esseri umani che gli agenti possono fidarsi. In un mondo in cui gli agenti partecipano sempre di più allo sviluppo software, quella base condivisa diventa essenziale.&lt;/p&gt;
&lt;p&gt;L’alternativa sono cicli infiniti di agenti che commettono errori con sicurezza e di esseri umani che li correggono. Le verità di base rompono quel ciclo rendendo le correzioni esplicite e durature.&lt;/p&gt;
&lt;p&gt;I tuoi agenti meritano di sapere cosa è vero. Diglielo.&lt;/p&gt;
</content:encoded><category>Architecture</category><category>Grounding</category></item><item><title>Orkestra: orchestrare agenti AI su larga scala</title><link>https://maguyva.ai/it/blog/orkestra-agent-orchestration</link><guid isPermaLink="true">https://maguyva.ai/it/blog/orkestra-agent-orchestration</guid><description>Un orchestratore instrada il lavoro verso agenti AI specialisti, ciascuno con skill e memoria distinte. Come Orkestra coordina 46 agenti e 466 skill in produzione.</description><pubDate>Tue, 06 Jan 2026 00:00:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;I numeri in questo articolo riflettono il sistema al momento della pubblicazione (gennaio 2026). Consulta la nostra &lt;a href=&quot;https://maguyva.ai/it/team&quot;&gt;pagina del team&lt;/a&gt; per le cifre attuali.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Quando abbiamo iniziato a costruire con Claude Code, ci siamo imbattuti in un problema che ogni team che usa assistenti AI per il coding finisce per affrontare: un singolo agente non può fare tutto bene.&lt;/p&gt;
&lt;p&gt;Puoi istruire un agente a essere uno specialista di database. O un auditor di sicurezza. O un ingegnere frontend. Ma nel momento in cui gli chiedi di essere tutti e tre insieme, la qualità ne risente. Il contesto si diluisce. Le istruzioni entrano in conflitto. L’agente diventa un generalista mediocre in tutto.&lt;/p&gt;
&lt;p&gt;Quindi abbiamo costruito Orkestra.&lt;/p&gt;
&lt;h2 id=&quot;cosè-orkestra&quot;&gt;Cos’è Orkestra?&lt;/h2&gt;
&lt;p&gt;Orkestra è un sistema di orchestrazione di agenti per Claude Code e strumenti AI di coding simili. Coordina più agenti specializzati, ciascuno con competenze distinte, sotto un unico orchestratore che instrada il lavoro allo specialista giusto.&lt;/p&gt;
&lt;p&gt;Pensalo come un’agenzia di collocamento per agenti AI. L’orchestratore riceve un task, identifica quale specialista dovrebbe gestirlo, e delega con il contesto giusto. Quando il lavoro è finito, i risultati rifluiscono verso l’orchestratore per la sintesi.&lt;/p&gt;
&lt;p&gt;I numeri raccontano la storia:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Componente&lt;/th&gt;
&lt;th&gt;Conteggio&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Agenti specialisti&lt;/td&gt;
&lt;td&gt;46&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Skill riutilizzabili&lt;/td&gt;
&lt;td&gt;466&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Archetipi di identità&lt;/td&gt;
&lt;td&gt;27&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Mindset&lt;/td&gt;
&lt;td&gt;11&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Stili di comunicazione&lt;/td&gt;
&lt;td&gt;10&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Domini di conoscenza&lt;/td&gt;
&lt;td&gt;21&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&quot;il-sistema-dei-personaggi-dd-per-gli-agenti&quot;&gt;Il sistema dei personaggi: D&amp;amp;D per gli agenti&lt;/h2&gt;
&lt;p&gt;L’intuizione centrale dietro Orkestra è che il comportamento dell’agente emerge da tre primitive componibili:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;L’identità&lt;/strong&gt; definisce &lt;em&gt;cosa&lt;/em&gt; è l’agente. Un architetto progetta strutture di sistema. Un debugger risale dai fallimenti alle cause profonde. Un guardiano fa rispettare compliance e confini di sicurezza. Abbiamo 27 archetipi di identità che possono essere combinati.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Il mindset&lt;/strong&gt; definisce &lt;em&gt;come&lt;/em&gt; pensa l’agente. Un mindset analitico ancora le asserzioni alle prove e quantifica l’incertezza. Un mindset scettico mette in discussione le assunzioni e cerca prove che le smentiscano. Un mindset esplorativo abbraccia l’ambiguità e prova approcci multipli.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Lo stile&lt;/strong&gt; definisce &lt;em&gt;come&lt;/em&gt; comunica l’agente. Uno stile tecnico include valori esatti e fa riferimento a file specifici. Uno stile conciso taglia i fronzoli e parte dalla risposta. Uno stile diplomatico bilancia onestà e tatto.&lt;/p&gt;
&lt;p&gt;Un agente combina queste primitive:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# architecture-advisor.yaml&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;identity&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;knowledge-architect&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;architect&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;strategist&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;mindset&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;analytical&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;style&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;concise&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Questa composizione crea un agente che progetta sistemi (architect), connette conoscenza tra domini (knowledge-architect), fissa la direzione strategica (strategist), ragiona sulla base di prove e dati (analytical), e comunica senza fronzoli (concise).&lt;/p&gt;
&lt;p&gt;La potenza sta nell’esplosione combinatoria. 27 identità per 11 mindset per 10 stili producono quasi 3.000 possibili personalità di agente. Ma definisci solo le combinazioni che contano per il tuo lavoro.&lt;/p&gt;
&lt;h2 id=&quot;skill-moduli-di-capacità-riutilizzabili&quot;&gt;Skill: moduli di capacità riutilizzabili&lt;/h2&gt;
&lt;p&gt;Le skill sono la conoscenza e i workflow che gli agenti possono invocare. Seguono un sistema a livelli basato sull’ambito:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Livello&lt;/th&gt;
&lt;th&gt;Nome&lt;/th&gt;
&lt;th&gt;Ambito&lt;/th&gt;
&lt;th&gt;Esempio&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;K0&lt;/td&gt;
&lt;td&gt;Fondamenta&lt;/td&gt;
&lt;td&gt;Metodologia universale&lt;/td&gt;
&lt;td&gt;Disciplina test-first, completamento basato su prove&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;K1&lt;/td&gt;
&lt;td&gt;Identità&lt;/td&gt;
&lt;td&gt;Workflow basati sul ruolo&lt;/td&gt;
&lt;td&gt;Standard di interfaccia CLI, performance playbook&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;K2&lt;/td&gt;
&lt;td&gt;Domini&lt;/td&gt;
&lt;td&gt;Conoscenza specifica del dominio&lt;/td&gt;
&lt;td&gt;Pattern di migrazione database, validazione dell’autenticazione&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;K3&lt;/td&gt;
&lt;td&gt;Stack&lt;/td&gt;
&lt;td&gt;Specifico per tecnologia&lt;/td&gt;
&lt;td&gt;Deployment su Cloudflare, operazioni Supabase&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;K4&lt;/td&gt;
&lt;td&gt;Progetto&lt;/td&gt;
&lt;td&gt;Solo questo codebase&lt;/td&gt;
&lt;td&gt;Workflow e convenzioni specifici del progetto&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Le skill sono caricate in modo lazy. Un agente vede nomi e descrizioni delle skill all’avvio, ma il contenuto completo della skill si carica solo quando viene attivato. Questo mantiene il contesto snello rendendo al contempo centinaia di skill scopribili.&lt;/p&gt;
&lt;p&gt;Ogni skill include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Condizioni di attivazione chiare (“Usa quando fai la migrazione degli schemi database”)&lt;/li&gt;
&lt;li&gt;Guida passo per passo&lt;/li&gt;
&lt;li&gt;Strumenti consentiti per il workflow&lt;/li&gt;
&lt;li&gt;Criteri di successo e percorsi di recupero dal fallimento&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Le 466 skill nel nostro registro coprono tutto, dall’isolamento dei worktree git ai workflow di ricerca web fino alla validazione della salute dei deployment.&lt;/p&gt;
&lt;h2 id=&quot;perché-lorchestrazione-conta&quot;&gt;Perché l’orchestrazione conta&lt;/h2&gt;
&lt;p&gt;Le architetture a singolo agente sbattono contro muri rapidamente:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Diluizione del contesto.&lt;/strong&gt; Una finestra di contesto da 200k token sembra grande finché non ci carichi schemi di database, documentazione API, fixture di test, e conoscenza di dominio. Gli specialisti possono lavorare con contesto mirato.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Conflitti di istruzioni.&lt;/strong&gt; Dire a un agente di “essere approfondito ma veloce” e “verificare tutto ma senza over-engineering” crea tensione. Gli specialisti risolvono questo avendo un ambito chiaro.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Profondità di competenza.&lt;/strong&gt; Un agente generalista sa un po’ di tutto. Un agente specialista, composto con l’identità e le skill giuste, conosce il suo dominio a fondo.&lt;/p&gt;
&lt;p&gt;Orkestra implementa un’orchestrazione piatta: un orchestratore coordina più specialisti. Gli specialisti non possono generare sub-specialisti. Questo previene l’esplosione di complessità permettendo al contempo il lavoro parallelo.&lt;/p&gt;
&lt;p&gt;L’orchestratore ha accesso a 2,2 milioni di token di capacità effettiva: la propria finestra da 200k più 10 subagent concorrenti da 200k ciascuno. Lavoro che esaurirebbe un singolo agente gira comodamente attraverso la flotta.&lt;/p&gt;
&lt;h2 id=&quot;la-pipeline-di-rendering&quot;&gt;La pipeline di rendering&lt;/h2&gt;
&lt;p&gt;Le definizioni degli agenti vivono in YAML. Claude Code legge Markdown. Orkestra colma questo divario con una pipeline di rendering deterministica:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;YAML Registries → Jinja Templates → .claude/agents/*.md&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Gli operatori modificano la sorgente YAML. Eseguono &lt;code&gt;orkestra sync&lt;/code&gt;. Il Markdown renderizzato appare in &lt;code&gt;.claude/agents/&lt;/code&gt;. Claude Code recepisce le modifiche.&lt;/p&gt;
&lt;p&gt;Questa separazione serve pubblici diversi:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;La &lt;strong&gt;sorgente YAML&lt;/strong&gt; include metadati di ciclo di vita, tag, regole di validazione, e note di deprecazione per il tooling&lt;/li&gt;
&lt;li&gt;Il &lt;strong&gt;Markdown renderizzato&lt;/strong&gt; include solo ciò di cui il modello ha bisogno: descrizione, strumenti, skill, e guida comportamentale&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;La pipeline compone identità, mindset, stili, e skill in un unico prompt coerente. Un agente architect-analytical-concise ottiene un system prompt molto diverso da un agente debugger-skeptical-technical, anche se condividono alcune skill sottostanti.&lt;/p&gt;
&lt;h2 id=&quot;conoscenza-di-dominio-il-pattern-a-quattro-file&quot;&gt;Conoscenza di dominio: il pattern a quattro file&lt;/h2&gt;
&lt;p&gt;Ogni dominio di conoscenza segue una struttura coerente:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;domain-name/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  decisions.md      # Key choices, rationale, consequences&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  patterns.md       # Step-by-step guidance and examples&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  anti-patterns.md  # Failure modes and remediation&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  evolution.md      # Dated log of changes&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Questa struttura serve il caricamento del contesto dell’agente. Un agente che lavora sull’autenticazione carica &lt;code&gt;authentication/patterns.md&lt;/code&gt; per la guida e &lt;code&gt;authentication/anti-patterns.md&lt;/code&gt; per evitare le insidie conosciute. I file sono dimensionati per un caricamento efficiente del contesto: abbastanza mirati da essere utili, abbastanza completi da essere autorevoli.&lt;/p&gt;
&lt;p&gt;Manteniamo 21 domini di primo livello tra cui analytics, autenticazione, data science, infrastruttura, machine learning, performance, sicurezza, e altro ancora. Ogni dominio può avere sotto-domini per una granularità più fine.&lt;/p&gt;
&lt;h2 id=&quot;valori-il-sistema-operativo&quot;&gt;Valori: il sistema operativo&lt;/h2&gt;
&lt;p&gt;Tutti gli agenti condividono un livello di base di valori che definisce come operano:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Semplicità prima di tutto.&lt;/strong&gt; Usa la soluzione più semplice che funziona. Aggiungi complessità solo quando è giustificata.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Correggi le cause profonde.&lt;/strong&gt; Non aggirare mai i problemi con soluzioni di ripiego. Se una pipeline fallisce, fai debug della pipeline. Se un test fallisce, correggi il codice o il test.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Basato su prove.&lt;/strong&gt; Etichetta le affermazioni come “verificate” (con benchmark) o “stimate” (con assunzioni). Un pattern rilevato non equivale a un problema confermato.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Economia del contesto.&lt;/strong&gt; Gli strumenti MCP costano lo 0,1% del contesto. Le letture di file costano il 2% ciascuna. Applica la competenza di dominio prima di esplorare il codice.&lt;/p&gt;
&lt;p&gt;Questi valori si propagano a ogni specialista attraverso la pipeline di rendering. Un agente non può aggirarli tramite composizione.&lt;/p&gt;
&lt;h2 id=&quot;cli-il-piano-di-controllo&quot;&gt;CLI: il piano di controllo&lt;/h2&gt;
&lt;p&gt;Orkestra include una CLI per gestire l’ecosistema di agenti:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# Discovery&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; agents&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; search&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; &quot;database&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; agents&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; info&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; database-architect&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# Validation&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; validate&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --show-warnings&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# Rendering&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; sync&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --dry-run&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; sync&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# Skills&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; skills&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; list&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; skills&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; info&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; schema-migration-workflow&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# Decisions&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; decisions&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; search&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; &quot;authentication&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;La CLI è la fonte di verità su quali agenti esistono, quali skill hanno, e se il sistema è in salute. Esegue la validazione prima della sincronizzazione per intercettare i problemi in anticipo.&lt;/p&gt;
&lt;h2 id=&quot;considerazioni-sullopen-source&quot;&gt;Considerazioni sull’open source&lt;/h2&gt;
&lt;p&gt;Abbiamo costruito Orkestra per risolvere il nostro stesso problema: coordinare agenti AI su larga scala per un codebase complesso. I pattern che abbiamo scoperto non sono specifici del nostro dominio.&lt;/p&gt;
&lt;p&gt;Il sistema di composizione dei personaggi (identità + mindset + stile) si applica a qualsiasi team che definisce personalità di agente.&lt;/p&gt;
&lt;p&gt;Il sistema a livelli delle skill (K0-K4) fornisce un modello mentale per organizzare capacità riutilizzabili per ambito.&lt;/p&gt;
&lt;p&gt;Il pattern della pipeline di rendering (sorgente YAML + template + artefatti generati) separa le responsabilità tra tooling e consumo da parte del modello.&lt;/p&gt;
&lt;p&gt;Il modello di orchestrazione piatta (un coordinatore, molti specialisti) evita la complessità pur abilitando il parallelismo.&lt;/p&gt;
&lt;p&gt;Se Orkestra diventerà open source dipende dal fatto che questi pattern abbiano valore per altri che costruiscono con Claude Code. Se stai sbattendo contro i muri che abbiamo descritto, l’architettura potrebbe aiutare.&lt;/p&gt;
&lt;h2 id=&quot;cosa-abbiamo-imparato&quot;&gt;Cosa abbiamo imparato&lt;/h2&gt;
&lt;p&gt;Costruire Orkestra ci ha insegnato che l’orchestrazione non riguarda il rendere gli agenti più intelligenti. Riguarda il renderli più focalizzati.&lt;/p&gt;
&lt;p&gt;Un singolo agente con istruzioni perfette esaurisce comunque il contesto. Un singolo agente con tutte le skill si confonde comunque su quale applicare. Un singolo agente che cerca di essere tutto produce risultati mediocri ovunque.&lt;/p&gt;
&lt;p&gt;Quaranta specialisti, ciascuno eccellente nel proprio dominio, coordinati da un orchestratore che sa quando delegare: è così che rilasciamo il software.&lt;/p&gt;
&lt;p&gt;I numeri contano meno dell’architettura. Potresti aver bisogno di cinque agenti o cinquanta. Il principio resta: privilegiare la composizione rispetto alle singole capacità, la specializzazione rispetto alla generalizzazione e il coordinamento rispetto agli eroismi individuali.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;Orkestra alimenta l’ecosistema di agenti dietro Maguyva, la nostra piattaforma di intelligenza del codice. Vuoi saperne di più? Contatta il team.&lt;/em&gt;&lt;/p&gt;
</content:encoded><category>Architecture</category><category>Open Source</category></item></channel></rss>