Claude Code /compact: come gestire il contesto e tagliare i costi nelle sessioni lunghe
Quando una sessione di Claude Code va avanti per ore, prima o poi le risposte peggiorano: l'assistente dimentica una decisione presa all'inizio, rilegge file che aveva già visto, gira a vuoto. Quasi sempre la causa è una sola — la finestra di contesto si è riempita. Il comando /compact serve esattamente a questo: riassume la conversazione e la ricarica come nuovo punto di partenza, conservando ciò che conta e buttando il resto. In questo articolo guardo cosa fa /compact sotto il cofano, perché la compattazione automatica a volte scatta nel momento sbagliato, e il flusso preciso che uso ogni giorno per restare lucido e spendere meno.
Cosa fa /compact e perché il contesto è il collo di bottiglia
La finestra di contesto è lo spazio in cui Claude Code tiene tutto: la cronologia della conversazione, i file aperti, l'output dei comandi, il CLAUDE.md, le skill caricate e le istruzioni di sistema. Man mano che lavoro, quello spazio si riempie. Quando è pieno non resta margine per ragionare: il contesto è la risorsa scarsa, non l'intelligenza del modello.
Il comando /compact prende la conversazione, la riassume e sostituisce la cronologia lunga con quel riassunto. È diverso da /clear, che invece azzera tutto e riparte da zero. Con /compact mantengo il filo — le richieste chiave e gli snippet di codice importanti restano — mentre con /clear butto via anche la memoria di cosa stavo facendo.
La distinzione conta perché buttare il contesto sbagliato costa caro. Se azzero a metà di un refactoring perdo le decisioni prese; se non compatto mai, ogni messaggio successivo trascina con sé migliaia di token inutili. /compact è la via di mezzo: alleggerisce senza farmi ricominciare.
Compattazione automatica: cosa succede quando il contesto si riempie
Claude Code non aspetta che intervenga io. Quando il contesto si avvicina al limite gestisce lo spazio da solo: prima scarta gli output più vecchi dei tool, poi, se non basta, riassume la conversazione. Le mie richieste e gli snippet di codice chiave vengono preservati; le istruzioni di dettaglio date all'inizio possono andare perse.
La soglia non è fissa. Storicamente l'auto-compattazione scattava intorno al 95% di riempimento, con appena il 25% di spazio residuo, ma nel corso del 2025 il meccanismo è stato reso più prudente, anticipando in alcuni casi al 64-75% per evitare compattazioni fallite. Da inizio 2026 l'operazione è anche diventata istantanea, dove prima bloccava la sessione per qualche secondo.
C'è un caso limite da conoscere: se un singolo file o output è così grosso che il contesto si riempie di nuovo subito dopo ogni riassunto, Claude Code smette di compattare dopo qualche tentativo e mostra un errore invece di entrare in loop. Quando lo vedo, è il segnale che sto dando in pasto troppo materiale in un colpo solo: meglio spezzare il lavoro o filtrare l'input.
- 01Contesto quasi pienoClaude Code rileva che lo spazio disponibile sta finendo, senza che tu debba fare nulla.
- 02Scarto degli output vecchiVengono rimossi per primi gli output dei tool meno recenti, i meno utili da conservare.
- 03Riassunto della conversazioneSe non basta, la cronologia viene riassunta: richieste e codice chiave restano.
- 04La sessione prosegueSi riparte con il contesto alleggerito, ma le istruzioni iniziali di dettaglio possono essersi perse.
Fonte: documentazione ufficiale Claude Code (How Claude Code works, Manage costs).
/compact con focus: l'istruzione che cambia tutto
Il /compact da solo lascia decidere all'assistente cosa conservare. Ma posso dirglielo io passando un focus: scrivo /compact Focus on code samples and API usage e il riassunto privilegia esattamente quello. È la differenza tra un riassunto generico e uno che tiene ciò che mi serve per i passi successivi.
Quando voglio che la regola valga per tutta la sessione non la ripeto ogni volta: la metto nel CLAUDE.md del progetto, in una sezione Compact instructions. Lì scrivo, ad esempio, di concentrarsi sull'output dei test e sulle modifiche al codice. Da quel momento ogni compattazione, manuale o automatica, segue quella priorità.
In pratica uso il focus in tre situazioni ricorrenti, dove so già cosa conta e cosa è rumore:
- Refactoring lungo: focus sulle decisioni di design e sui file già toccati, così non rilegge tutto da capo.
- Debugging: focus sull'output dei test e sui messaggi di errore, il resto lo posso buttare.
- Integrazione API: focus su endpoint, payload e formati di risposta, che sono ciò che riuso nei passi successivi.
Quando uso /compact e quando /clear
La domanda che mi faccio prima di premere invio è semplice: sto continuando lo stesso lavoro o ne sto iniziando un altro?. Se è lo stesso, /compact. Se cambio del tutto argomento, /clear — perché trascinare il contesto di un task chiuso fa solo sprecare token su ogni messaggio successivo.
Un'abitudine che fa la differenza è compattare mentre la cache è ancora calda. Il prompt caching di Claude Code abbatte il costo dei contenuti ripetuti, e una compattazione fatta al momento giusto preserva quei risparmi. Prima di azzerare con /clear uso /rename per ritrovare la sessione e /resume per tornarci se serve.
/compact — stesso lavoro
- Riassume la conversazione e la ricarica
- Conserva richieste e snippet di codice chiave
- Mantiene il filo del task in corso
- Ideale a metà di un refactoring o di un debug
/clear — lavoro nuovo
- Azzera del tutto la cronologia
- Riparte da un contesto vuoto
- Da usare quando cambi argomento
- Abbinato a /rename e /resume per ritrovare la sessione
Il flusso che seguo per non perdere il contesto
La regola che mi sono dato è non superare mai il 60% di utilizzo del contesto in una singola sessione. Oltre quella soglia la qualità cala e i costi salgono, perché ogni token in più viene riletto a ogni messaggio. Per sapere dove sono uso /context, che mostra cosa sta occupando spazio, e /usage per i token consumati.
Quando mi avvicino compatto in modo proattivo con un focus, invece di aspettare che scatti l'automatismo nel mezzo di un ragionamento. Compattare quando decido io, e non quando il contesto è allo stremo, è ciò che tiene lucida una sessione lunga dall'inizio alla fine.
Il mini-playbook che applico, in ordine:
- Tengo i task piccoli: una richiesta a fuoco consuma meno contesto e produce risultati migliori di un mega-prompt.
- Controllo con /context appena la sessione si allunga, per vedere cosa pesa davvero.
- Compatto con un focus intorno al 60%, indicando cosa conservare.
- Uso /clear tra task non collegati, dopo un /rename per ritrovare la sessione.
- Sposto le istruzioni stabili nel CLAUDE.md, così non dipendono dalla cronologia che verrà compattata.
Domande frequenti su comando /compact Claude Code
/compact e /clear sono la stessa cosa?
No, e confonderli costa contesto. /compact riassume la conversazione e la ricarica, conservando richieste e codice chiave; /clear azzera tutto e riparte da zero. Uso /compact quando continuo lo stesso lavoro, /clear solo quando cambio completamente argomento.
Posso decidere cosa Claude Code conserva durante la compattazione?
Sì. Passo un focus al comando, ad esempio /compact Focus on code samples and API usage, oppure aggiungo una sezione Compact instructions nel CLAUDE.md del progetto. In entrambi i casi dico esplicitamente cosa tenere, invece di lasciare la scelta all'automatismo.
Perché la compattazione automatica a volte scatta nel momento sbagliato?
Perché si attiva in base al riempimento del contesto, non al mio flusso di lavoro: storicamente intorno al 95%, poi anticipata in alcuni casi per evitare compattazioni fallite. Se non voglio sorprese a metà di un ragionamento compatto io prima, in modo proattivo intorno al 60% di utilizzo.
Compattare aiuta davvero a ridurre i costi?
Sì, perché in Claude Code i token crescono con la dimensione del contesto: più cronologia trascino, più pago a ogni messaggio. Compattare al momento giusto, mentre il prompt caching è ancora caldo, tiene il contesto piccolo e la spesa sotto controllo, senza farmi ricominciare da capo.
Parliamone
Se questo tema ti riguarda, scrivimi: confrontarsi su codice e AI è sempre tempo speso bene.