Checkpoint e Rewind
- Capire cosa cattura un checkpoint — e cosa silenziosamente non cattura
- Aprire il menu di rewind in due modi e scegliere ogni volta l'azione di ripristino giusta
- Distinguere 'restore' (annulla lo stato) da 'summarize' (comprimi il contesto)
- Sapere esattamente perché i checkpoint completano Git ma non lo sostituiscono mai
L'idea di fondo
Quando lasci Claude libero su una modifica ambiziosa e di ampia portata, la domanda più temibile è "e se qualcosa va storto a tre modifiche di distanza?". I checkpoint sono la risposta: Claude Code scatta automaticamente uno snapshot del tuo codice prima di ogni turno che avvii, così puoi tornare a uno stato precedente invece di sbrogliare a mano un refactoring lasciato a metà.
Pensalo come un annulla locale per l'intera sessione — una rete di sicurezza che ti permette di dire "sì, prova l'approccio audace" senza timore.
Come vengono creati i checkpoint
I checkpoint non si creano: nascono in automatico.
- Ogni prompt che avvia un turno cattura lo stato del tuo codice prima che gli strumenti di modifica dei file di Claude entrino in azione. Nessun comando, nessuna configurazione, nessuna cerimonia.
- Claude Code conserva gli snapshot dei file per i 100 checkpoint più recenti di una sessione. Quelli più vecchi vengono scartati, quindi una sessione molto lunga non può essere riavvolta fino al suo inizio.
- I checkpoint vengono salvati insieme alla conversazione, quindi puoi usare /rewind anche dopo aver ripreso una sessione, non solo in quella attiva.
- Gli snapshot dei file di una sessione vengono eliminati nella pulizia periodica della conservazione, per impostazione predefinita circa 30 giorni dopo l'ultima volta che la sessione ne ha salvato uno. Tornare a un checkpoint i cui snapshot non esistono più fallisce con 'No files were restored' — aumenta cleanupPeriodDays per conservarli più a lungo.
Aprire il menu di rewind
Ci sono due modi per entrarci:
- Digita il comando slash dal prompt. Funziona sempre. /checkpoint e /undo sono alias dello stesso comando, quindi usa il nome che ti viene in mente.
- Il doppio Esc apre il menu di rewind quando la casella del prompt è vuota. Se contiene del testo, il doppio Esc cancella invece quel testo (il testo cancellato viene salvato nella cronologia degli input, quindi premi Su per recuperarlo).
Apri il menu di rewind
/rewind
- I nomi degli alias sono più amichevoli che letterali: /checkpoint non scatta uno snapshot su richiesta (gli snapshot sono automatici) e /undo non annulla da solo l'ultima modifica. Tutti e tre i nomi aprono lo stesso menu, dove scegli comunque il punto e l'azione.
Il menu elenca ogni prompt che hai inviato in questa sessione. Scegli il punto su cui agire, poi scegli un'azione.
Restore e summarize: la distinzione chiave
È qui che si fa confusione. Il menu offre due tipi di azione:
- Le azioni Restore cambiano lo stato su disco e/o nella conversazione — annullano.
- Le azioni Summarize non toccano mai i tuoi file — comprimono la conversazione per liberare spazio nella finestra di contesto.
- Restore = annulla (ripristina codice, conversazione o entrambi). Summarize = comprimi il contesto (i file su disco restano intatti).
- Usa restore quando una modifica ha rotto qualcosa. Usa summarize quando la sessione è gonfia ma il codice va bene.
Le azioni di restore
- Ripristina sia i file sia la cronologia della chat al punto selezionato — un vero 'riavvolgimento del tempo' a quel momento.
- Riavvolge la chat a quel messaggio ma mantiene il codice attuale. Utile per rifare una domanda senza perdere le modifiche che vuoi tenere.
- Ripristina le modifiche ai file ma mantiene la conversazione. Annulli le modifiche, conservi la discussione che le riguarda.
Le due opzioni di restore del codice compaiono solo quando il checkpoint selezionato ha effettivamente modifiche ai file tracciate da ripristinare. Se dopo quel punto non è stata catturata alcuna modifica ai file, il menu offre solo Restore conversation, le due opzioni summarize e Never mind (che torna all'elenco dei messaggi senza cambiare nulla).
Dopo aver ripristinato la conversazione (o scelto "Summarize from here"), il prompt originale del messaggio selezionato viene rimesso nel campo di input così puoi reinviarlo o modificarlo.
Le azioni di summarize
Entrambe comprimono una parte della conversazione in un riassunto generato dall'AI — come un /compact mirato in cui scegli quale lato del messaggio selezionato comprimere.
- I messaggi PRIMA di quello selezionato restano intatti. Il messaggio selezionato e tutto ciò che segue diventano un riassunto. Usalo per scartare una digressione mantenendo il contesto iniziale in pieno dettaglio.
- I messaggi PRIMA di quello selezionato diventano un riassunto; il messaggio selezionato e tutto ciò che segue restano intatti. Rimani alla fine della conversazione. Usalo per comprimere i discorsi iniziali di setup mantenendo il lavoro recente alla lettera.
In entrambi i casi i messaggi originali restano nella trascrizione della sessione, quindi Claude può ancora consultarne i dettagli, e dove c'erano i messaggi compressi compare un indicatore Summarized conversation. Per orientare su cosa si concentra il riassunto, evidenzia un'opzione Summarize con le frecce e scrivi le istruzioni dove la riga riporta add context (optional), poi premi Invio — scegliere l'opzione con il suo tasto numerico riassume subito, senza istruzioni.
Per l'intero flusso, vedi Gestione del contesto — le azioni summarize di /rewind sono un bisturi, dove /compact è un pennello largo.
- Summarize ti tiene nella stessa sessione. Per diramarti e provare un approccio diverso lasciando intatta la sessione originale, usa invece /branch oppure claude --continue --fork-session.
Tornare indietro oltre un /clear
Se hai eseguito /clear in precedenza nello stesso processo di Claude Code, il menu di rewind mostra una voce in più in alto: /resume <session-id> (previous session). Selezionala per tornare alla conversazione che era attiva prima di /clear.
Dove i checkpoint si fermano — i limiti che fanno male
I checkpoint sembrano magici finché non lo sono più. Queste lacune contano:
- Il tracciamento è per file, e un file vi entra solo quando Claude lo modifica con i suoi strumenti di modifica file. Una volta successo, /rewind annulla anche ciò che i comandi Bash fanno in seguito a quello stesso file — un formattatore o un generatore che riscrive un file già modificato è riavvolgibile. Un file toccato solo da Bash non è tracciato e resta com'è, quindi un file cancellato con rm che Claude non ha mai modificato richiede Git. Il menu lo riflette: sotto ogni prompt conta le modifiche ai file che Claude aveva già modificato, qualunque cosa le abbia prodotte.
- Un subagent modifica con gli stessi strumenti per i file, ma la tua sessione di solito non cattura quelle modifiche. L'eccezione è una skill forkata in primo piano (context: fork con background: false), che modifica durante il tuo turno e si riavvolge normalmente. Con qualsiasi altro subagent — compresa una skill forkata in background, che è l'impostazione predefinita, e un'esecuzione di /code-review --fix in background — il rewind ripristina solo i file che Claude aveva già modificato nella tua conversazione; le modifiche del subagent agli altri file restano, quindi annullale con Git. Vedi /docs/claude-code/subagents.
- Le modifiche manuali fatte fuori da Claude Code e quelle di altre sessioni concorrenti normalmente non vengono catturate — a meno che non tocchino gli stessi file modificati dalla sessione corrente.
- Un messaggio che metti in coda mentre Claude lavora e che lo raggiunge durante il turno in corso si unisce a quel turno invece di avviarne uno nuovo, quindi non ha un checkpoint suo — il menu di rewind lo segna con 'No code restore'. Per annullare ciò che è venuto dopo, torna al prompt che ha avviato il turno, il che riavvolge l'intero turno, compreso il lavoro svolto prima che il tuo messaggio arrivasse. Selezionare il messaggio contrassegnato offre comunque Restore conversation, lasciando i tuoi file come sono.
- Claude Code salva la conversazione riavvolta insieme al prossimo prompt che invii — quindi se esci prima di inviarne uno, i messaggi riavvolti tornano quando riprendi la sessione. Invia un prompt a Claude prima di uscire perché il restore resti; per eliminare di nuovo più tardi i messaggi tornati, esegui /rewind, seleziona lo stesso prompt e scegli Restore conversation. I file che hai ripristinato restano come il rewind li ha lasciati in ogni caso, quindi il problema riguarda solo la conversazione.
- Il restore salta qualsiasi percorso tracciato che sia un symlink o un hard link e avvisa 'Restored the code, but skipped N files'; quei file mantengono il contenuto attuale. I symlink dei gestori di dotfile e gli hard link di pnpm ricadono entrambi in questo caso. Esegui /debug prima di ripristinare per avere i percorsi saltati indicati nel log di debug.
- I checkpoint sono un recupero rapido e locale. Non sono commit, non sono branch e non si condividono con il tuo team.
Checkpoint e Git: usali entrambi
Risolvono problemi diversi, quindi abbinali.
Checkpoint (/rewind) | Git | |
|---|---|---|
| Ambito | Una sessione | Cronologia dell'intero progetto |
| Granularità | Per prompt che avvia un turno, automatica | Per commit, deliberata |
| Traccia le modifiche fatte via bash? | Solo sui file che Claude ha già modificato | Sì (una volta in staging/commit) |
| Durata | Ultimi 100 checkpoint, ripuliti ~30 giorni dopo la sessione | Permanente |
| Condivisibile / collaborativo | No | Sì |
| Modello mentale | "Annulla locale" | "Cronologia permanente" |
- Fai commit con Git degli stati funzionanti prima di un'esecuzione rischiosa e di ampia portata — è il tuo pavimento durevole.
- Usa /rewind per recuperare rapidamente nella sessione tra un commit e l'altro senza inquinare la cronologia Git.
- Affidati a Git per i file che Claude non modifica mai direttamente — quelli toccati solo da bash distruttivo (rm/mv) o da un subagent in background. Il rewind copre un file solo dopo che Claude lo ha modificato con i propri strumenti per i file.
Quando usarlo
- Prova un'implementazione audace e, se non ti piace, ripristina codice e conversazione al punto di biforcazione e prova un'altra strada.
- Una modifica ha introdotto un bug tre prompt fa? Ripristina il codice a subito prima invece di fare il debug dei detriti.
- Sperimenta varianti, sapendo sempre che uno stato funzionante è a un /rewind di distanza.
- Una deviazione di debug prolissa ha mangiato la tua finestra di contesto? Fai summarize dal punto centrale in avanti e mantieni le istruzioni originali in pieno dettaglio.
Verifica te stesso
0/3- I checkpoint sono snapshot automatici scattati prima di ogni prompt che avvia un turno — un annulla locale per la sessione. Ne vengono conservati 100, poi ripuliti ~30 giorni dopo la sessione.
- Apri il menu di rewind con /rewind (alias: /checkpoint, /undo) o con doppio Esc su un input vuoto; elenca ogni prompt che hai inviato.
- Le azioni restore annullano lo stato (codice, conversazione o entrambi); le azioni summarize comprimono il contesto e non toccano mai i file.
- Il tracciamento è per file e inizia quando Claude lo modifica con i suoi strumenti per i file — dopo di che si riavvolgono anche le modifiche Bash a quel file. I file che Claude non ha mai modificato (solo bash, esterni, concorrenti, la maggior parte di quelli dei subagent) NON sono tracciati, e i percorsi con symlink o hard link vengono saltati al restore.
- I checkpoint completano Git, non lo sostituiscono: pensa 'annulla locale' contro 'cronologia permanente e condivisibile'.
Avanti
- Gestione del contesto —
/compact,/cleare come si inserisce summarize nel quadro generale - Plan Mode — indaga e approva un piano prima che le modifiche partano, così fai rewind più di rado
- Permessi — l'altra metà dell'esecuzione sicura di compiti ambiziosi