Cos'è e perché conta
Gli chiedi una modifica. Dopo un po' Claude scrive «fatto». Apri l'app e non funziona, oppure funziona solo a metà. All'inizio succede spesso, e la prima reazione è pensare che ti abbia mentito.
Non è così. Claude si ferma quando il lavoro sembra finito, e per lui spesso il lavoro finisce quando ha scritto il codice. Se nessuno gli ha chiesto di provarlo, «sembra fatto» è l'unico segnale che ha. Così il controllo finisce a te, dopo, quando magari stai già pensando ad altro.
La soluzione è una riga sola, nel file che Claude Code legge all'inizio di ogni sessione: il CLAUDE.md. La riga cambia il significato di «fatto». Non vuol più dire «ho scritto il codice», vuol dire «l'ho visto funzionare e ti faccio vedere la prova». Io la chiamo la ricevuta.
Conta perché una ricevuta la controlli in poco tempo. Rifare tu tutte le prove ogni volta costa molto di più, e alla lunga smetti di farle.
1. La riga nel CLAUDE.md
Il CLAUDE.md è un file di testo con le regole che vuoi che Claude tenga in ogni sessione. Quello del progetto sta nella cartella principale del progetto: CLAUDE.md, oppure .claude/CLAUDE.md. Se non c'è, crealo.
Il modo più semplice è da dentro Claude Code: scrivi /memory. Ti mostra i file di memoria, anche quelli che non esistono ancora. Scegli quello del progetto: se non esiste lo crea e te lo apre nell'editor. Se il progetto non ha ancora un CLAUDE.md, puoi anche lanciare /init: Claude guarda il codice e te ne prepara uno di partenza. Poi ci aggiungi la riga.
Non dire mai "fatto" senza prova: i test lanciati con il risultato, uno screenshot se c'è un'interfaccia, il comando che hai usato per provare. Se non sei riuscito a provarlo, scrivimi "non verificato" e perché.
Ogni pezzo ha un motivo:
- I test con il risultato: ti dice cosa ha controllato e com'è andata, non solo che li ha lanciati.
- Lo screenshot se c'è un'interfaccia: un test può passare anche con un bottone finito fuori dallo schermo.
- Il comando che ha usato: così puoi rifare la prova tu, uguale.
- «Non verificato» e perché: è la via d'uscita. Senza, lo spingi a dire «fatto» comunque. Con, sai subito dove devi guardare tu.
Sullo screenshot: Claude Code può guardare le immagini, ma per farne uno lui deve avere un modo per vedere l'app, per esempio un browser collegato a Claude Code o un simulatore. Se non ce l'ha, per quella parte scriverà «non verificato». Va bene così: almeno lo sai.
2. Come la verifico
Una sessione nuova e una domanda
Salvo il file e apro una sessione nuova, perché il CLAUDE.md viene letto all'inizio della sessione. Poi chiedo:
Quando una cosa per te è fatta? Rispondimi con le regole che hai nel CLAUDE.md.
Se non ripete la regola, il file non è quello giusto o non è nella cartella del progetto. Per controllare, scrivi /context: sotto Memory files vedi quali file di memoria ha caricato. Se il tuo CLAUDE.md lì non c'è, Claude non lo vede.
Un lavoro piccolo
Gli do una cosa piccola e facile da controllare, per esempio:
Sistema il messaggio di errore del login quando l'email è vuota.
Quando dice «fatto», controllo che ci siano le tre cose: test e risultato, screenshot, comando. Se ne manca una e non c'è scritto «non verificato» con il motivo, la ricevuta è incompleta.
Rifaccio il suo comando
Copio il comando che ha scritto e lo lancio io nel terminale. Se a me esce un risultato diverso, la ricevuta non vale. Non serve farlo ogni volta, ma le prime volte sì: è così che capisci se ti puoi fidare delle sue ricevute.
Guardo lo screenshot
Deve mostrare la schermata giusta, non una pagina qualsiasi. Nel caso del login: il campo email vuoto e il messaggio di errore sotto. Se mostra la home, non prova niente.
3. Se il progetto non ha test
Senza test, la prima parte della ricevuta non esiste. Prima di tutto chiedigli questo:
Scrivi un test per la cosa che hai appena fatto, lancialo e fammi vedere che passa. Poi rompi il codice apposta e fammi vedere che il test fallisce.
La seconda parte è quella che conta. Un test che non fallisce mai non prova niente: passa sia quando il codice funziona sia quando non funziona. Se rompendo il codice il test diventa rosso, allora sta controllando davvero qualcosa.
Poi fagli rimettere a posto il codice:
Ora rimetti il codice com'era, rilancia il test e fammi vedere che passa di nuovo.
E perché la prossima volta non debba indovinare come si lanciano i test, fallo scrivere nel CLAUDE.md:
Aggiungi al CLAUDE.md il comando esatto per lanciare i test di questo progetto.
4. Se dice «fatto» senza prova
Capita anche con la regola. Rispondi solo:
Prova?
Di solito basta. Se succede di nuovo:
Rileggi le regole del CLAUDE.md e rifammi il fatto con la ricevuta.
Se continua a saltarla, guarda quanto è lungo il tuo CLAUDE.md. In un file pieno di regole quelle importanti si perdono: tienilo corto e togli quello che Claude capisce da solo leggendo il codice. Se una sola riga continua a sfuggirgli, puoi metterla in evidenza, per esempio scrivendo IMPORTANTE davanti. Solo su quella: se evidenzi tutto, non spicca niente.
Gli errori più comuni
- Mettere la regola in un file che Claude non legge, tipo il README o una nota a parte. Va nel CLAUDE.md del progetto, e con /context controlli che sia caricato.
- Togliere «non verificato» per avere sempre un «fatto». Lasciala: è la parte che lo fa essere sincero quando non riesce a provare.
- Leggere la ricevuta senza controllarla. Le prime volte rilancia tu il comando e guarda lo screenshot con attenzione.
- Accettare test che passano sempre. Fagli rompere il codice apposta e guarda che il test fallisca.
- Aspettarsi che la regola valga subito nella sessione che hai già aperto. Apri una sessione nuova e fai la domanda di controllo.
- Riempire il CLAUDE.md di regole finché quella sulla prova si perde. Tienilo corto e scritto in modo concreto.
Checklist
- La riga è nel CLAUDE.md del progetto
- In una sessione nuova Claude ripete la regola
- Ogni «fatto» arriva con test e risultato, screenshot e comando
- Ho rilanciato io il suo comando almeno una volta
- Il test fallisce quando il codice è rotto
- Quando non può provare, scrive «non verificato» e perché
Domande frequenti
Quando dice «fatto» senza prova, mi sta mentendo?
No. Il «fatto» senza prova non è una bugia: per lui il lavoro finisce quando ha scritto il codice. La regola sposta il traguardo a quando l'ha visto funzionare.
Con la regola nel CLAUDE.md sono sicuro che lo farà sempre?
No. Claude legge il CLAUDE.md e cerca di seguirlo, ma è un'indicazione, non un blocco. Se vuoi un controllo che non dipende da lui, esistono gli hook: comandi che Claude Code esegue in momenti fissi, qualunque cosa decida Claude. Per esempio uno che lancia i test e non gli fa chiudere il lavoro finché non passano. Per partire, la riga basta.
E se la mia app non ha un'interfaccia?
Allora lo screenshot non serve: la regola lo chiede solo se c'è un'interfaccia. Restano i test con il risultato e il comando. Per uno script, anche l'output del comando lanciato è una buona prova.
Devo rimetterla in ogni progetto?
Se la vuoi ovunque, mettila in ~/.claude/CLAUDE.md: è il tuo file personale, e Claude Code lo legge in tutti i progetti sul tuo computer. Quella nel CLAUDE.md del progetto vale solo lì.