Categorie
tecnologia

Come Claude Code lavora nelle grandi codebase

Cosa succede quando un assistente di codice incontra un monorepo da milioni di righe, sistemi legacy di vent’anni e decine di repository, e perché il segreto non è il modello, ma tutto ciò che gli costruisci intorno.

mmagina di assumere una persona molto in gamba e di lasciarla da sola dentro l’archivio di un’azienda enorme: stanze su stanze, faldoni ovunque, documenti di vent’anni fa accanto a quelli di stamattina. Quanto sarà brava non dipende solo da quanto è sveglia. Dipende soprattutto da come hai organizzato l’archivio, dai cartelli che hai appeso e dagli strumenti che le hai messo in mano.

È esattamente la situazione di Claude Code dentro una grande codebase. L’articolo originale raccoglie i pattern ricorrenti nelle aziende che lo usano bene su larga scala. Qui te lo racconto con parole semplici, esempi e qualche disegno.

Come si muove dentro al codice

Claude Code esplora il codice come farebbe uno sviluppatore in carne e ossa: apre cartelle, legge file, usa grep per cercare ciò che gli serve e segue i riferimenti da un file all’altro. Questa parte, la ricerca e la lettura dei file, avviene sulla tua macchina, e non c’è alcun “indice” del codice da costruire, mantenere o caricare su un server esterno.

? Attenzione

Si dice spesso che Claude Code “lavora in locale”. È una mezza verità da maneggiare con cura: locale è l’agente che cerca e legge i fileremota è l’elaborazione. Per ragionare sul codice, le porzioni rilevanti vengono inviate via API (Application Programming Interface, l’interfaccia con cui due programmi si parlano) ai server di Anthropic, dove gira il modello. Il codice a riposo resta da te; il codice nel momento del ragionamento viaggia.

Serve però chiarire un equivoco comune, perché sotto la sigla “RAG” finiscono cose molto diverse. RAG significa Retrieval-Augmented Generation e si compone di tre pezzi che possono stare ciascuno in locale o in remoto: il modello di embedding (che trasforma il codice in vettori), il database vettoriale dove quei vettori vivono, e l’LLM che genera la risposta. A seconda di dove metti questi pezzi ottieni sistemi profondamente diversi.

? Due famiglie di RAG

Un RAG fully-local (embedding, database vettoriale e un LLM open-weight tutti sulla tua macchina) fa davvero tutto in casa: il codice non esce mai. Un RAG API-driven usa embedding o LLM remoti: indicizza in locale, ma poi manda fuori i chunk recuperati, esponendo spesso più codice di Claude Code, perché ha indicizzato tutto in anticipo.

Distinguere questi due assi è la chiave per non confondersi. Il difetto classico del RAG, l’indice che invecchia, non dipende dal locale contro il remoto. Dipende dal fatto che l’indice è precalcolato: appena committi codice nuovo, l’indice è vecchio, che sia su un database vettoriale nella tua sala server o su un servizio in cloud. La ricerca agentica evita questo perché rilegge la versione viva ogni volta. Stiamo quindi rispondendo a due domande diverse, che conviene tenere separate:

Due domande diverse, non una INFERENZA LOCALE INFERENZA REMOTA ? dove gira il modello? (il codice esce o no) RICERCA DAL VIVO INDICE PRECALCOLATO agente con LLM open-weight locale privacy alta · capacità limitata CLAUDE CODE cerca vivo in locale, ragiona in remoto RAG FULLY-LOCAL DB vettoriale + LLM locale · nulla esce RAG API-DRIVEN embedding/LLM remoti · indice che invecchia
L’asse orizzontale è la privacy (il codice esce?); quello verticale è la freschezza (l’indice invecchia?). Sono indipendenti: un RAG fully-local protegge i dati ma il suo indice invecchia comunque.

Ne esce un quadro più giusto. Se la tua priorità è la riservatezza assoluta, un RAG fully-local vince su Claude Code, ma paghi un prezzo: in locale non puoi far girare i modelli di frontiera, quindi rinunci a buona parte della capacità di ragionamento. Se la priorità è freschezza e qualità del ragionamento, la ricerca agentica di Claude Code evita l’indice che invecchia e usa modelli potenti, ma il codice rilevante deve uscire. Ogni architettura è un compromesso tra riservatezza e capacità: la scelta giusta dipende da cosa conta di più nel tuo contesto.

E la sostenibilità?

C’è un terzo asse che il dibattito locale-contro-remoto quasi sempre dimentica: l’impronta energetica e ambientale. E qui l’intuito inganna. “Locale” suona più sobrio, “cloud” suona dispendioso, ma spesso è il contrario.

? Locale e remoto

Un grande datacenter ottimizzato raggiunge valori di efficienza (il PUEPower Usage Effectiveness, cioè il rapporto tra energia totale ed energia utile al calcolo) vicini a 1,1-1,2, sfrutta hardware condiviso ad altissimo utilizzo e può attingere a energia a basse emissioni. Una GPU (Graphics Processing Unit, il processore grafico usato anche per l’AI) che gira un modello locale su una workstation tipicamente lavora a utilizzo basso, senza recupero di calore, su una rete elettrica qualsiasi: per token, può emettere di più.

Ma anche qui non c’è una risposta secca, e vale la pena tenere insieme più fattori prima di concludere. Conta la dimensione del modello (un piccolo modello locale per un compito semplice può battere l’invio di tutto a un modello di frontiera enorme), l’intensità di carbonio della rete elettrica nel luogo e nell’ora in cui il calcolo avviene, l’energia incorporata nell’hardware che acquisti contro quella di infrastruttura condivisa, e, non ultimo, il numero di tentativi: un modello più capace che azzecca la risposta al primo colpo può consumare meno di uno debole che ci riprova cinque volte. La domanda utile, allora, è un’altra: qual è il modello più piccolo che svolge davvero il compito, alimentato dall’energia più pulita disponibile, con il minor numero di ripetizioni? È lo stesso principio del “do less, better” applicato al calcolo.

C’è però un compromesso onesto da dichiarare: l’approccio agentico funziona benissimo se Claude ha abbastanza contesto per sapere dove guardare. Chiedergli di trovare un pattern vago in una codebase da un miliardo di righe lo farà sbattere contro i limiti della finestra di contesto prima ancora di iniziare. Ecco perché chi investe nella preparazione della codebase ottiene risultati molto migliori.

L’imbragatura conta più del motore

L’errore più comune è pensare che le capacità di Claude Code dipendano solo dal modello. Si guardano i benchmark, si confrontano i punteggi nei test. Ma nella pratica conta di più l’ecosistema costruito attorno al modello: quello che l’articolo chiama harness, l’imbracatura.

? Una analogia

Il modello è il motore. L’harness è il resto dell’automobile: volante, cruscotto, navigatore, freni. Un motore potentissimo senza sterzo non ti porta da nessuna parte; un motore onesto dentro una macchina ben fatta ti fa arrivare ovunque.

L’harness si costruisce a strati, e l’ordine conta: ogni strato si appoggia sul precedente. Si parte dalle basi (i file di contesto) e si sale verso le estensioni più sofisticate.

Gli strati dell’harness si costruiscono dal basso verso l’alto 1 · CLAUDE.md i bigliettini di benvenuto su ogni scrivania 2 · Hooks i riflessi automatici e i controlli di qualità 3 · Skills gli specialisti chiamati solo quando servono 4 · Plugins la cassetta degli attrezzi pronta all’uso 5 · MCP server le linee telefoniche verso l’esterno + LSP il navigatore con indirizzi esatti + Subagent lo scout mandato in avanscoperta
Cinque punti di estensione più due capacità aggiuntive (LSP e subagent) completano il quadro.

Cosa fa ciascun pezzo, con un esempio

CLAUDE.md, vengono per primi. Sono file di contesto che Claude legge in automatico a ogni sessione: uno alla radice per il quadro generale, altri nelle sottocartelle per le convenzioni locali. Esempio: nel file della cartella pagamenti/ scrivi “qui i test si lanciano con make test-payments, non con la suite intera”. Siccome si caricano sempre, vanno tenuti snelli: solo ciò che vale in generale e le trappole critiche.

Hooks, rendono il setup capace di migliorarsi da solo. Molti li vedono solo come “blocchi” che impediscono errori, ma il loro uso più prezioso è automatico e continuo. Esempio: un hook di fine sessione può riflettere su cosa è successo e proporre un aggiornamento al CLAUDE.md finché il contesto è fresco. E per linting e formattazione, un hook applica le regole in modo deterministico, più affidabile che sperare che Claude se le ricordi.

Skills, competenza a richiesta senza appesantire ogni sessione. In una codebase con decine di tipi di compiti, non serve avere tutto sempre presente. Esempio: una skill di “security review” si attiva solo quando Claude valuta vulnerabilità; una skill per la documentazione si attiva quando una modifica al codice richiede di aggiornare i documenti. Le skill si possono anche legare a percorsi specifici: il team dei pagamenti aggancia la propria skill di deploy a quella cartella, così non si attiva mai altrove.

Plugins, distribuiscono ciò che funziona. Il rischio nelle grandi aziende è che le buone configurazioni restino “tribali”, note solo a chi le ha inventate. Un plugin impacchetta skill, hook e configurazioni MCP in un unico pacchetto installabile. Esempio: un’azienda retail ha costruito una skill che collega Claude alla propria piattaforma di analytics interna e l’ha distribuita come plugin, così ogni nuovo collega ha le stesse capacità dal primo giorno.

LSP, dà a Claude la stessa precisione di un IDE (Integrated Development Environment, l’ambiente di sviluppo). Il Language Server Protocol è ciò che, nell’editor, fa funzionare “vai alla definizione” e “trova tutti i riferimenti”. Esempio: cercare una funzione con un nome comune via testo restituisce migliaia di risultati e Claude brucia contesto aprendo file a caso; con l’LSP ottiene solo i riferimenti che puntano davvero allo stesso simbolo. Per codebase multi-linguaggio (C, C++…) è uno degli investimenti a più alto valore.

MCP server, estendono tutto. MCP sta per Model Context Protocol: è il modo con cui Claude si collega a strumenti interni, fonti dati e API che altrimenti non raggiungerebbe: documentazione interna, sistemi di ticketing, piattaforme di analytics. I team più maturi costruiscono server MCP che espongono una ricerca strutturata come strumento chiamabile direttamente.

Subagent, separano l’esplorazione dalla modifica. Un subagent è un’istanza isolata di Claude, con la propria finestra di contesto: prende un compito, lo svolge e restituisce solo il risultato finale. Esempio: un subagent in sola lettura mappa un sottosistema e scrive le sue scoperte in un file; poi l’agente principale modifica il codice avendo già il quadro completo, senza essersi intasato il contesto con l’esplorazione.

ComponenteIn una fraseQuando si caricaErrore tipico
CLAUDE.mdFile di contesto letto in automaticoOgni sessioneUsarlo per competenze riusabili (che andrebbero in una skill)
HooksScript che scattano a momenti chiaveSu eventoUsare istruzioni “a voce” per cose che dovrebbero girare da sole
SkillsIstruzioni impacchettate per tipi di compitoA richiesta, quando servonoInfilare tutto nel CLAUDE.md
PluginsSkill, hook e MCP in un pacchettoSempre, una volta configuratoLasciare che i buoni setup restino “tribali”
LSPIntelligenza di codice in tempo realeSempre, una volta configuratoDarlo per scontato come automatico
MCP serverPonti verso strumenti e dati esterniSempre, una volta configuratoCostruirli prima che funzionino le basi
SubagentIstanze separate per compiti specificiQuando invocatiEsplorare e modificare nella stessa sessione

«Non è il modello da solo a fare la differenza, ma tutto ciò che gli costruisci intorno.»

Anthropic’s blog

Tre mosse che funzionano sempre

Pur cambiando ogni codebase, tre pattern sono emersi con costanza nei progetti riusciti.

1. Rendere la codebase navigabile

La capacità di Claude è limitata dalla sua capacità di trovare il contesto giusto. Troppo contesto in ogni sessione ne degrada le prestazioni; troppo poco lo lascia a navigare alla cieca. In mezzo c’è il punto giusto:

  • CLAUDE.md snelli e a strati: radice per il quadro d’insieme, sottocartelle per i dettagli locali. La radice contiene solo puntatori e trappole critiche.
  • Avviare nelle sottocartelle, non alla radice: Claude lavora meglio quando è circoscritto alla parte rilevante. Risale comunque l’albero e carica ogni CLAUDE.md che trova, quindi il contesto della radice non si perde.
  • Comandi di test e lint per sottocartella: lanciare l’intera suite per una modifica a un solo servizio causa timeout e spreca contesto.
  • File .ignore e regole versionate per escludere file generati, artefatti di build e codice di terze parti, così tutti hanno la stessa riduzione di rumore.
  • Mappe della codebase quando la struttura delle cartelle non basta: un semplice file markdown alla radice con una riga di descrizione per ogni cartella di alto livello.
  • Server LSP attivi per cercare per simbolo, non per stringa.
Il punto giusto di contesto TROPPO POCO ? naviga alla cieca, indovina GIUSTO ? snello, a strati, circoscritto TROPPO ? prestazioni degradate
Né cieco né sommerso: il valore sta nel contesto giusto, al momento giusto.

2. Manutenere i CLAUDE.md man mano che i modelli evolvono

Le istruzioni scritte per il modello di oggi possono lavorare contro quello di domani. Esempio dal pezzo: una regola che diceva “spezza ogni refactoring in modifiche a un solo file” aiutava un modello più vecchio a non perdersi, ma impedirebbe a uno più nuovo di fare le modifiche coordinate su più file che ormai gestisce bene. Allo stesso modo, hook e skill nati per compensare vecchi limiti diventano peso morto quando quei limiti spariscono. Consiglio pratico: una revisione della configurazione ogni 3–6 mesi, e comunque dopo ogni rilascio importante di modello.

3. Assegnare una responsabilità chiara

La configurazione tecnica da sola non basta a guidare l’adozione. I rollout più rapidi avevano un investimento dedicato prima dell’accesso diffuso: un piccolo team, a volte una sola persona, che cabla gli strumenti così che, quando gli sviluppatori toccano Claude per la prima volta, sia già integrato nel loro flusso. La prima esperienza è produttiva invece che frustrante, e da lì l’adozione si diffonde.

Sta emergendo una figura nuova, l’agent manager: un ibrido tra PM (project manager) e ingegnere dedicato a gestire l’ecosistema Claude Code. Ma ridurlo a “chi coordina e configura” è limitante. La parte più sottile e più preziosa del ruolo è un’altra: saper leggere gli output con occhio critico e fare adversarial check degli errori. Non basta che Claude produca una risposta plausibile e ben scritta; qualcuno deve chiedersi «è davvero corretta, o solo verosimile?» e provare a smontarla finché non regge. È esattamente la differenza tra accettare “Claude Code lavora in locale” e accorgersi che no: locale è solo la ricerca, l’inferenza è remota. Un agent manager senza questo istinto distribuisce in fretta configurazioni che sembrano funzionare ma propagano errori sottili a tutta l’organizzazione.

Per chi non ha un team dedicato, la versione minima è un DRI (Directly Responsible Individual, la persona direttamente responsabile): qualcuno con la responsabilità (e l’autorità) su configurazione, permessi, marketplace dei plugin e convenzioni dei CLAUDE.md, e con il compito di verificare la qualità di ciò che Claude produce prima che diventi standard. L’adozione dal basso genera entusiasmo, ma senza qualcuno che centralizzi e verifichi criticamente ciò che funziona, la conoscenza resta tribale e gli errori si sedimentano silenziosamente.

C’è un’abilità sotto tutto questo, ed è la più facile da trascurare: per fare bene da agent manager bisogna prima di tutto saper pensare bene. Lo strumento amplifica chi lo guida: se il pensiero è solido, l’LLM lo potenzia; se è pigro, lo rispecchia e lo conferma. La postura giusta è pensare-con il modello, non delegargli il pensiero: tenerlo come interlocutore da interrogare e contraddire, mai come oracolo da firmare. È questa la differenza tra uscire da una sessione più bravi e uscirne solo più veloci.

Per approfondire

Pensare con gli LLM, the Right Way

Potenziamo il pensiero critico usando l’AI generativa senza farci usare.

Non un manuale di prompt engineering, ma un metodo di governance critica: il Triangolo del Pensare-Con (Intento / Avversario / Editore), la pratica socratica e quella avversariale per interrogare e verificare gli output, e le quattro decisioni esplicite — cosa delegare, come verificare, chi è responsabile, qual è la soglia di rinuncia — che sono esattamente il patto operativo di cui un agent manager ha bisogno.

Chiude il cerchio con questo articolo: il libro include una skill open-source adversarial-verify proprio per Claude Code, che cristallizza il metodo dell’adversarial check in un workflow eseguibile.

Leggi su Leanpub ?

di Francesco Fullone · serie “the Right Way”

Da dove partire

Claude Code è pensato per ambienti di sviluppo convenzionali: ingegneri come contributori principali, repository su Git, struttura di cartelle standard. Setup non tradizionali (motori di gioco con grandi asset binari, controllo di versione insolito, non-ingegneri che contribuiscono) richiedono lavoro di configurazione aggiuntivo. Ecco una sequenza di partenza ragionevole:

  1. Scrivi i primi CLAUDE.md: uno alla radice (snello), poi nelle sottocartelle dove lavori davvero.
  2. Aggiungi hook per linting/formattazione e per catturare gli apprendimenti di fine sessione.
  3. Sposta le competenze riusabili in skill, agganciate ai percorsi giusti.
  4. Attiva l’LSP per il tuo linguaggio: cercare per simbolo invece che per stringa.
  5. Impacchetta tutto in plugin e dai una ownership chiara (un DRI o un agent manager).

Per le aziende grandi, soprattutto in settori regolati, le domande di governance arrivano presto: chi controlla quali skill e plugin sono disponibili? come si evita che migliaia di ingegneri ricostruiscano la stessa cosa? come si garantisce che il codice generato dall’AI passi dalla stessa revisione di quello umano? La risposta suggerita è partire con un set definito di skill approvate, revisione del codice obbligatoria e accesso iniziale limitato, allargando man mano che cresce la fiducia.n set definito di skill approvate, revisione del codice obbligatoria e accesso iniziale limitato, allargando man mano che cresce la fiducia.

Nota. Questo è un articolo divulgativo in italiano, sintesi e rielaborazione con parole, esempi e diagrammi miei, basato sull’articolo Anthropic «How Claude Code works in large codebases: Best practices and where to start» (blog Claude, 14 maggio 2026).

Originale: claude.com/blog/how-claude-code-works-in-large-codebases-best-practices-and-where-to-start