Un unico file di istruzioni per Claude Code, Codex e Cursor nel 2026
MarkdownUn’unica fonte di verità per Claude Code, Codex e Cursor nel 2026: quando Claude Code legge direttamente AGENTS.md, importare @AGENTS.md in CLAUDE.md, un link simbolico e /init.
Leggi l’articolo completo
Per informazioni sul servizio, consulta la documentazione di Ailoot.
Cosa cambia quando usi Claude Code, Codex e Cursor insieme?
Punto chiave
Nel 2026, la configurazione tipica di chi programma con il vibe coding non prevede un solo strumento, ma da 3 a 5. Claude Code come strumento principale, Codex per le attività autonome lunghe, Cursor per le modifiche rapide nell’IDE. Ognuno ha il proprio file di istruzioni: CLAUDE.md, AGENTS.md, .cursorrules. Se li sincronizzi manualmente, modifichi una riga in cinque posti, ti dimentichi di aggiornare Cursor e, una settimana dopo, Claude e Codex danno risultati diversi allo stesso prompt.
Nell’esempio descritto, Claude Code è lo strumento principale, mentre Codex e Cursor vengono usati per attività specifiche. Il mio CLAUDE.md contiene circa 250 righe di istruzioni: cosa leggere e in quale ordine, cosa non va toccato, quali comandi usare per il deployment e le regole di formattazione dei commit. Quando ho provato per la prima volta Codex CLI sul progetto, non conosceva nessuna delle regole: ha eseguito git push --force, curiosato in .env e rinominato file senza attenzione.
All’inizio ho copiato a mano CLAUDE.md in AGENTS.md. Due settimane dopo ho scoperto che il progetto aveva già quattro versioni delle stesse istruzioni: in CLAUDE.md, AGENTS.md, .cursorrules e .windsurf/rules/. Erano tutte leggermente diverse. Non è un problema di Claude o Cursor: è la trappola di base di qualsiasi sistema con più fonti di verità. Ne parlo più nel dettaglio nella guida al lavoro multi-agente.
Nel giugno 2026, la documentazione sulla memoria di Claude Code di Anthropic proponeva una soluzione: un file condiviso più un import. Da settembre 2026, Claude Code legge direttamente AGENTS.md se il progetto non ha un CLAUDE.md; l’import serve quando hai regole specifiche per Claude. Di seguito spiego quando basta un solo AGENTS.md, come configurare un import e come separare le regole condivise da quelle specifiche per Claude.
Claude Code legge direttamente AGENTS.md?
Punto chiave
Sì, a partire dalla versione 2.1.277, rilasciata il 18 settembre 2026, ma solo se nella directory di lavoro o in una directory superiore non esiste CLAUDE.md, .claude/CLAUDE.md o CLAUDE.local.md. Se esiste CLAUDE.md, per impostazione predefinita Claude Code legge solo quel file, e AGENTS.md viene incluso con la riga @AGENTS.md in CLAUDE.md oppure con un link simbolico. Il comportamento cambia in /config, alla voce Project instructions. Prima di settembre, Claude Code non leggeva affatto AGENTS.md, e importarlo era l’unica soluzione.
Prima di settembre 2026, la risposta era «no». Issue #6235, che chiedeva il supporto per AGENTS.md, era aperta dall’agosto 2025 ed è stata chiusa il 17 agosto 2026. Per tutto quel tempo, la documentazione sulla memoria indicava una sola soluzione: creare un CLAUDE.md e includervi AGENTS.md come import. Dalla versione 2.1.277, la documentazione dice qualcosa di diverso:
Claude Code può leggere
AGENTS.mdcome istruzioni del progetto, perciò un repository già configurato per altri agenti funziona senzaCLAUDE.md, import o configurazione.
I file presenti nel progetto determinano esattamente cosa legge Claude Code:
| File nel progetto | Cosa legge Claude Code |
|---|---|
AGENTS.md, senza CLAUDE.md o CLAUDE.local.md nella directory di lavoro o in una directory superiore | AGENTS.md |
AGENTS.md e CLAUDE.md (o CLAUDE.local.md) nella directory di lavoro o in una directory superiore | Solo CLAUDE.md |
CLAUDE.md con la riga @AGENTS.md | CLAUDE.md e AGENTS.md al suo interno tramite l’import |
Per questa verifica, contano CLAUDE.md, .claude/CLAUDE.md e CLAUDE.local.md nella directory di lavoro e in qualsiasi directory superiore. Un file personale ~/.claude/CLAUDE.md, un file gestito aziendalmente e le regole di .claude/rules/ non contano: vengono caricati insieme ad AGENTS.md.
Quando non c’è CLAUDE.md, all’avvio Claude Code legge tutti i file AGENTS.md e .claude/AGENTS.md nella directory di lavoro e in quelle superiori, e carica un file AGENTS.md in una sottodirectory quando apre un file in quella sottodirectory. Funzionano anche gli import @path all’interno di AGENTS.md. Claude Code non legge AGENTS.local.md, AGENTS.override.md né il contenuto della directory .agents/.
L’inghippo: anche un CLAUDE.local.md personale conta. Creandone uno per conservare regole non ancora confermate, Claude Code smette silenziosamente di leggere AGENTS.md. La soluzione è l’impostazione qui sotto.
Il comportamento cambia in /config, alla voce Project instructions:
| Impostazione | Cosa legge Claude Code |
|---|---|
claude-md-or-agents-md (predefinita) | CLAUDE.md oppure, se non esistono né questo né CLAUDE.local.md, AGENTS.md |
claude-md-and-agents-md | Entrambi i file: in ogni directory, prima CLAUDE.md, poi AGENTS.md |
claude-md | Solo CLAUDE.md |
managed-only | Solo il CLAUDE.md aziendale gestito e la memoria automatica |
Se vuoi conservare CLAUDE.local.md senza perdere AGENTS.md, imposta claude-md-and-agents-md. Non ci sarà una lettura duplicata: se AGENTS.md è già incluso tramite la riga @AGENTS.md o un link simbolico, Claude Code non lo carica una seconda volta, indipendentemente dall’impostazione.
Puoi verificare se il file è stato rilevato con il comando /memory: a partire dalla versione 2.1.280, nell’elenco compare il percorso di AGENTS.md. Nelle versioni precedenti alla 2.1.277 e nelle sessioni in cui il plugin integrato agents-md è disattivato, Claude Code legge solo CLAUDE.md e in /config non compare la voce Project instructions. Prima della versione 2.1.281, le sessioni tramite Amazon Bedrock e quelle con la telemetria disattivata si comportavano allo stesso modo. Inoltre, nella prima sessione dopo l’aggiornamento da una versione precedente, AGENTS.md potrebbe non essere caricato; funzionerà dalla sessione successiva.
Cosa significa per una configurazione con un solo file? Se non hai regole riservate a Claude, puoi fare a meno di CLAUDE.md: basta AGENTS.md e lo leggeranno Claude Code, Codex e Cursor. Se invece hai regole del genere (modalità plan per directory rischiose, skills, hooks), ti serve CLAUDE.md e Claude Code smetterà di leggere direttamente AGENTS.md. In tal caso, includi AGENTS.md in CLAUDE.md con la riga @AGENTS.md; questa configurazione funziona come prima di settembre. È utile anche con le versioni meno recenti di Claude Code. Lo spiego nel dettaglio qui sotto.
Come importare @AGENTS.md all’interno di CLAUDE.md?
Punto chiave
L’import è necessario quando il progetto ha un CLAUDE.md: se è presente, Claude Code per impostazione predefinita non legge direttamente AGENTS.md. Per configurarlo, scrivi la riga @AGENTS.md all’inizio del file CLAUDE.md. Quando Claude Code avvia una sessione, inserisce il contenuto di AGENTS.md al posto di quella riga e legge il risultato come un unico testo. Sotto l’import, puoi aggiungere una sezione «Claude Code» con regole che valgono solo per Claude. Gli import funzionano con percorsi relativi e assoluti e possono essere annidati fino a quattro livelli.
Un esempio minimo funzionante tratto dalla documentazione ufficiale:
@AGENTS.md
## Claude Code
Use plan mode for changes under `src/billing/`.
Ecco cosa succede. La prima riga, @AGENTS.md, è una direttiva di import. Quando Claude Code analizza CLAUDE.md all’inizio di una sessione, trova questo import e inserisce al suo posto l’intero contenuto di AGENTS.md. Segue l’intestazione ## Claude Code: è semplice markdown, ma funge da sezione per «aggiunte specifiche di Claude». Sotto c’è una regola valida solo per Claude Code: usare la modalità plan per le modifiche nella directory billing. Codex CLI o Cursor non apre affatto questo file: usa il semplice AGENTS.md.
Una citazione della documentazione su come funzionano gli import:
I file CLAUDE.md possono importare file aggiuntivi usando la sintassi
@path/to/import. I file importati vengono espansi e caricati nel contesto all’avvio della sessione, insieme al CLAUDE.md che li cita.
Alcuni dettagli pratici:
- Percorsi relativi e assoluti.
@AGENTS.mdè relativo al file che contiene l’import.@/Users/me/shared/rules.mdo@~/.claude/personal.mdsono percorsi assoluti. Io uso@~/.claude/personal.mdper le preferenze personali che non voglio inserire nel repository. - Profondità di quattro livelli.
AGENTS.mdpuò importare@docs/coding-style.md, ecoding-style.mdpuò importare un altro file, fino a quattro livelli. È sufficiente per qualsiasi struttura reale. - I backtick bloccano gli import. Se il testo dice
`@README`, è solo una menzione del nome, non un import. È utile quando si spiega ai lettori come funzionano gli import senza attivarne uno. - Autorizzazione per i file esterni al progetto. Se un import punta al di fuori della directory di lavoro, come
@~/.claude/personal.md, Claude Code mostra per la prima volta una finestra di dialogo che elenca quei file. Se rifiuti, gli import esterni restano disattivati e la finestra non viene più mostrata.@AGENTS.mdnella radice del progetto non fa comparire una finestra. Questo ti protegge dal caricare per sbaglio nel contesto un file non correlato.
Dopo aver adottato questa configurazione nel progetto descritto, il mio CLAUDE.md è passato da 250 righe a 60: @AGENTS.md più da cinque a sette regole applicabili solo a Claude Code (modalità plan per directory rischiose, cosa non toccare nell’area amministrativa e come formulare i commit). Tutte le regole condivise sono in AGENTS.md, che Codex e Cursor leggono.
Quando scegliere un link simbolico e quando un import?
Punto chiave
Anthropic offre due meccanismi: un import tramite @AGENTS.md oppure un link simbolico, ln -s AGENTS.md CLAUDE.md. Il link simbolico è più semplice: è solo un alias e non richiede modifiche ai file. Ha però tre svantaggi: Windows richiede i privilegi di amministratore, non puoi aggiungere regole specifiche per Claude a CLAUDE.md e a volte Git mostra il link simbolico come spazzatura nel diff. L’import è l’approccio universale. Se non hai regole specifiche per Claude, a partire dalla versione 2.1.277 non ti serve nessuno dei due: Claude Code leggerà direttamente AGENTS.md.
La documentazione mostra l’opzione del link simbolico così:
ln -s AGENTS.md CLAUDE.md
E subito dopo avverte chiaramente dei problemi su Windows:
Se tu o qualcuno che clona il repository lavora su Windows, usa l’import
@AGENTS.md. Per creare un link simbolico serve lì disporre dei privilegi di amministratore o della modalità sviluppatore, e Git, secore.symlinksnon è abilitato, esegue il checkout di un link confermato come un normale file di testo, lasciando unCLAUDE.mddi una sola riga al posto delle istruzioni in quella copia.
Tabella comparativa:
| Criterio | Import @AGENTS.md | Link simbolico ln -s |
|---|---|---|
| Funziona su Windows senza privilegi di amministratore | sì | no (serve la modalità sviluppatore) |
| Permette di aggiungere regole solo per Claude | sì, sotto l’import | no, il file è identico |
| Compare in Git come normale markdown | sì | come link (dipende da core.symlinks) |
| Può importare più file | sì, fino a quattro livelli | no, uno a uno |
| Caching/invalidation in Claude Code | standard per CLAUDE.md | funziona, ma i link simbolici hanno insidie nel metadato |
| Scelta predefinita | adatto a tutti | solo se l’uso multipiattaforma non è importante |
Nel progetto descritto uso gli import. Ecco perché:
- Il team usa sistemi diversi. Io uso Mac; nell’esempio, il team è diviso all’incirca a metà tra Windows e Mac. Se nel repository compare un link simbolico, per chi usa Windows senza la modalità sviluppatore verrà effettuato il checkout come normale file di testo contenente una sola riga,
AGENTS.md. Questo causa bug strani: a volte le regole funzionano, a volte no, e non si capisce perché. - Voglio regole solo per Claude. Sotto
@AGENTS.md, il mioCLAUDE.mdha una sezione «Claude Code» con queste regole: usare--effort highper le attività di architettura, eseguirenpm run buildprima digit pushe non chiamare a mano/api/v1/deploy. Codex non capisce questi comandi. - È più facile fare debug. Quando qualcosa va storto, apro
CLAUDE.mde vedo l’import e le mie eccezioni. Un link simbolico non indica che «questo è stato aggiunto qui». Per saperne di più sul debug delle impostazioni di Claude Code, consulta la guida alla modalità sicura.
Se non hai regole specifiche per Claude, a partire dalla versione 2.1.277 il link simbolico non serve più: elimina CLAUDE.md e Claude Code leggerà direttamente AGENTS.md. Mantieni il link solo se qualcuno del team usa una versione precedente alla 2.1.277 e non può aggiornare. Se hai regole specifiche per Claude, un import è più comodo in nove casi su dieci.
Cosa leggono Codex, Cursor, Copilot, Windsurf e Gemini CLI?
Punto chiave
Ogni strumento legge il proprio file, a volte più di uno. Claude Code legge CLAUDE.md e, da settembre 2026, legge anche AGENTS.md se il progetto non ha un CLAUDE.md. Codex CLI legge AGENTS.md e AGENTS.override.md. Cursor legge il vecchio formato .cursorrules o il più recente .cursor/rules/*.mdc e, dall’estate 2026, legge anche AGENTS.md. Copilot legge .github/copilot-instructions.md oppure .github/instructions/*.instructions.md. Windsurf legge il vecchio .windsurfrules o il più recente .windsurf/rules/. Gemini CLI legge GEMINI.md. Aider e Cline hanno già adottato AGENTS.md.
Una mappa dei sette strumenti principali (basata sulla documentazione ufficiale di ciascuno):
| Strumento | File di istruzioni principale | Alternative | Legge AGENTS.md? |
|---|---|---|---|
| Claude Code | CLAUDE.md | ~/.claude/CLAUDE.md, ./.claude/CLAUDE.md, policy gestita | sì, se il progetto non ha CLAUDE.md (dalla 2.1.277), altrimenti tramite un import |
| Codex CLI (OpenAI) | AGENTS.md | AGENTS.override.md | sì (in modo nativo) |
| Cursor | .cursor/rules/*.mdc | .cursorrules (deprecato) | sì |
| GitHub Copilot | .github/copilot-instructions.md | .github/instructions/*.instructions.md | tramite estensioni |
| Windsurf | .windsurf/rules/ | .windsurfrules (deprecato) | sì |
| Gemini CLI | GEMINI.md | - | no |
| Aider, Cline, opencode | AGENTS.md | - | sì (in modo nativo) |
Quali sono le conseguenze? Se un repository ha AGENTS.md (più un CLAUDE.md con un import quando servono regole specifiche per Claude), cinque dei sette strumenti ricevono automaticamente istruzioni aggiornate. Cursor e Windsurf, che hanno file nativi propri, possono restare così come sono (AGENTS.md viene letto anche da loro) oppure si può aggiungere un import @AGENTS.md; la sintassi però è diversa e non sempre supportata.
La strategia più semplice per un nuovo progetto:
- Metti tutte le regole condivise in
AGENTS.md: il 95% delle regole appartiene a quel file. - Crea
CLAUDE.mdse ti servono regole solo per Claude: inserisci@AGENTS.mdcome prima riga, poi aggiungi una sezione con le regole specifiche per Claude. Se non ci sono regole del genere,CLAUDE.mdnon serve; Claude Code legge direttamenteAGENTS.mddalla versione 2.1.277. - Tieni
.cursor/rules/per Cursor nei rari casi in cui serva qualcosa di specifico per Cursor (i comandi@Codebasee@Docs). - Fai lo stesso per Windsurf: lascia perdere il vecchio
.windsurfrules; usa il nuovo.windsurf/rules/solo quando servono schemi per la sua sintassi.
Questo approccio offre l’80% dei vantaggi con il 20% del lavoro. Per esperienza, quando mettevo ordine nei team misti di «Antigravity», mantenere più di due fonti di verità (condivisa più regole solo per Claude) diventa faticoso. Se qualcuno del team aggiunge una regola a .cursorrules e si dimentica di AGENTS.md, una settimana dopo Cursor e Codex non saranno d’accordo.
Come fa /init in Claude Code a rilevare un AGENTS.md esistente?
Punto chiave
/init genera un CLAUDE.md a partire da ciò che è già nel repository e fa risparmiare 20–30 minuti di lavoro manuale. Per impostazione predefinita acquisisce le regole di Cursor (.cursor/rules/, .cursorrules) e quelle di Copilot (.github/copilot-instructions.md), mentre legge AGENTS.md, .windsurfrules e .clinerules in modalità CLAUDE_CODE_NEW_INIT=1. Questa stessa modalità avvia un flusso interattivo in più fasi: pone domande, esplora il codice tramite un subagent e propone un piano prima di scrivere. Da settembre 2026, /init ha uno svantaggio nei progetti con AGENTS.md: un nuovo CLAUDE.md disattiva la lettura diretta di AGENTS.md e le regole finiscono in due file.
Anthropic descrive /init così nella documentazione:
L’esecuzione di
/initlegge i file di istruzioni di altri strumenti e trasferisce le parti pertinenti nelCLAUDE.mdgenerato: le regole di Cursor da.cursor/rules/o.cursorrules, quelle di Copilot da.github/copilot-instructions.mde, conCLAUDE_CODE_NEW_INIT=1, ancheAGENTS.md,.devin/rules/,.windsurf/rules/o.windsurfrules, e.clinerules.
Cosa significa in pratica? Il repository descritto aveva un .cursorrules risalente a quando avevo provato Cursor (circa 80 righe) e un AGENTS.md (120 righe, messo insieme a mano). Quando ho eseguito claude /init, il comando ha preso entrambi i file, eliminato le regole simili e assemblato un CLAUDE.md pulito in un minuto. L’ho controllato in seguito e ho apportato piccole modifiche: ho rimosso le voci non più attuali e aggiunto una struttura con intestazioni. È stato più veloce che riscriverlo da zero.
La modalità interattiva, nella quale /init legge anche AGENTS.md, si attiva tramite una variabile d’ambiente:
CLAUDE_CODE_NEW_INIT=1 claude
Dopo l’avvio di /init, Claude pone una serie di domande di chiarimento: quali elementi configurare (CLAUDE.md, skills, hooks), quale stack usa il progetto e quali comandi usare per i test. Poi un subagent esplora la codebase leggendo package.json, README.md e i file di configurazione, e completa le parti mancanti. Alla fine, mostra una proposta che puoi modificare prima di salvarla. Per maggiori informazioni sulla configurazione di Claude Code all’avvio di un progetto, consulta la guida dedicata.
E ora lo svantaggio. Se il progetto ha già un AGENTS.md attivo, /init creerà accanto un CLAUDE.md che ne contiene una copia delle regole. Da quel momento, per impostazione predefinita Claude Code legge solo CLAUDE.md, quindi ci sono di nuovo due fonti di verità: tu aggiorni AGENTS.md, mentre Claude continua a lavorare dalla vecchia copia. Il comando /import fa qualcosa di simile: aggiunge una copia una tantum di AGENTS.md a CLAUDE.md. Per mantenere un’unica fonte, dopo /init metti l’import @AGENTS.md come prima riga di CLAUDE.md e rimuovi da CLAUDE.md tutto ciò che ripete AGENTS.md.
/init è il punto di partenza giusto per un nuovo progetto o per uno che stai trasferendo da Cursor o Copilot. Non serve cercare online il «miglior modello di CLAUDE.md»: Anthropic tiene già conto di ciò che è nel repository. Se il progetto ha già un AGENTS.md attivo e non ci sono regole specifiche per Claude, /init non serve: Claude Code leggerà direttamente AGENTS.md.
Come separare le istruzioni condivise da quelle specifiche per Claude?
Punto chiave
Metti in AGENTS.md le regole comprensibili a qualsiasi agente AI: cosa non toccare, come nominare i branch, che .env contiene un segreto e quali comandi usare per i test. Metti in CLAUDE.md (sotto l’import) le regole specifiche per Claude Code: modalità plan, skills, hooks, riferimenti alle skills e nomi dei modelli per versione. La distinzione è semplice: se una regola inizia con «Claude dovrebbe», appartiene a CLAUDE.md. Se inizia con «lo strumento dovrebbe», appartiene a AGENTS.md.
Le separo seguendo questo principio. Regole condivise da inserire in AGENTS.md:
- Cosa non toccare nel codice. Le cartelle
.env,node_modules,prisma/migrations(solo tramiteprisma migrate),.next/,.git/. - Come nominare gli elementi. Branch:
feat/,fix/,chore/. Commit: prefissifeat:,fix:,docs:più una breve descrizione. File dei componenti inkebab-case. - Comandi per test e lint.
npm run build,npm run lint,npm test. Quale comando eseguire prima digit push. - Principi architetturali. Cosa va in
src/lib/, cosa insrc/components/, dove vive la logica di business e dove si trova l’interfaccia utente. - Sicurezza. Non eseguire mai il commit di segreti. Accedi al database di produzione solo tramite
prod-psql. Accedi alla produzione via SSH solo tramite l’aliasprod, non conroot@IP.
Regole specifiche per Claude da inserire in CLAUDE.md (sotto @AGENTS.md):
- Modalità plan. Usa la modalità plan per modifiche in directory rischiose (per esempio,
src/billing/). - Livello di effort. Usa
--effort highper le attività di architettura emediumper il lavoro di routine. - Skills. Quali agenti AI e skills avviare nelle varie situazioni. Per esempio: «quando lavori a una guida, avvia la skill
build-masterskaya-guide». - Memoria di Claude. Cosa inserire nella memoria automatica e cosa in
CLAUDE.local.md. Per saperne di più sulla memoria di Claude, consulta la guida a Memory e CLAUDE.md. - Hooks. Se
.claude/settings.jsoncontiene hooks configurati, descrivi inCLAUDE.mdcosa fanno (Codex e Cursor non li conoscono e non ne hanno bisogno). - Skills e comandi. Un elenco dei comandi slash che uso spesso (
/init,/cd,/memory,/plan).
Il confine non è sempre netto. Per esempio, «non eseguire mai git push --force su main» è chiaramente una regola condivisa e va in AGENTS.md. Ma «quando esegui git push su un branch hot, usa prima la modalità plan» è specifico per Claude Code e va in CLAUDE.md. La prova da fare è: «Se domani eliminassi Claude Code e tenessi solo Codex, questa regola sarebbe ancora valida?». Se sì, mettila in AGENTS.md. Se no, mettila in CLAUDE.md.
Cosa va in AGENTS.md e cosa in CLAUDE.md o .claude/rules?
Punto chiave
Per un progetto grande, un solo AGENTS.md non basta: diventa troppo lungo e ogni agente porta nel contesto materiale superfluo. La soluzione è una directory .claude/rules/ con file separati per argomento e frontmatter YAML paths: per attivare regole in base ai percorsi. Per esempio, una regola per le API si applica solo quando Claude lavora in src/api/. Questo fa risparmiare molto spazio nella finestra di contesto. L’equivalente per Cursor è .cursor/rules/, e per Windsurf è .windsurf/rules/.
Se le regole superano le 200 righe, è ora di suddividerle. La documentazione di Anthropic consiglia di puntare a 200 righe per file, perché i file CLAUDE.md lunghi iniziano a far perdere silenziosamente aderenza: sembra che Claude li legga, ma li segue meno spesso.
Una struttura per un progetto grande che funziona per me:
my-project/
├── AGENTS.md # 100-150 lines, shared
├── CLAUDE.md # 30-50 lines: @AGENTS.md + Claude-only
└── .claude/
├── CLAUDE.md # alternative to root file, same file
└── rules/
├── api.md # with paths: ['src/api/**']
├── components.md # with paths: ['src/components/**']
├── testing.md # without paths, always active
└── security.md # without paths, always active
Ogni file in .claude/rules/ può avere un frontmatter:
---
paths:
- "src/api/**/*.ts"
---
# API rules
- Every endpoint validates input with zod
- Errors use the standard `{error, code}` format
- OpenAPI comments are required
Claude carica queste regole solo quando lavora con file che corrispondono a questo schema. Se tocca src/components/Button.tsx, le regole API non vengono aggiunte al contesto. In questo modo, nella finestra di contesto finisce solo ciò che è pertinente. La directory .claude/rules/ funziona anche senza CLAUDE.md: se il progetto contiene solo AGENTS.md, le relative regole vengono caricate insieme a esso e non disattivano la lettura diretta di AGENTS.md.
Cursor e Windsurf supportano lo stesso approccio tramite le directory .cursor/rules/ e .windsurf/rules/. Lo standard AGENTS.md può fare riferimento a queste directory, ma la sintassi tra strumenti non è ancora del tutto stabile. È più sicuro tenere le regole condivise in AGENTS.md e duplicare le regole basate sui percorsi in .claude/rules/ e .cursor/rules/: sono casi specifici e rari, non la maggior parte delle regole.
Posizioni utili per CLAUDE.md (dalla più generale alla più specifica):
| Livello | Posizione | Scopo |
|---|---|---|
| Policy gestita | /Library/Application Support/ClaudeCode/CLAUDE.md (Mac), /etc/claude-code/CLAUDE.md (Linux) | Regole aziendali, IT/DevOps |
| Utente | ~/.claude/CLAUDE.md | Preferenze personali per tutti i progetti |
| Progetto | ./CLAUDE.md o ./.claude/CLAUDE.md | Regole del team di progetto |
| Locale | ./CLAUDE.local.md (in .gitignore) | Preferenze personali per un progetto specifico |
Un esempio di ~/.claude/CLAUDE.md potrebbe contenere due regole: «rispondi nella lingua preferita dall’utente» e «scrivi Ailoot esattamente così». Queste regole valgono per ogni progetto, quindi non serve duplicarle in ogni repository.
Di questi quattro livelli, solo CLAUDE.md a livello di progetto e CLAUDE.local.md disattivano la lettura diretta di AGENTS.md. Un ~/.claude/CLAUDE.md personale e una policy gestita non interferiscono: Claude Code li legge insieme ad AGENTS.md.
Cosa fare se AGENTS.md nel tuo progetto è già obsoleto?
Punto chiave
Se AGENTS.md è stato creato nel 2025 per Codex o Aider e non è più stato modificato, apri il progetto in Claude Code e chiedi a Claude di aggiornare il file. AGENTS.md è un documento vivo; la specifica della Linux Foundation viene aggiornata. La regola principale per mantenerlo aggiornato è: ogni regola deve rispondere a «Cosa sono stanco di ripetere a Claude/Codex?». Se non lo fa, archiviala.
Nel progetto descritto avevo un AGENTS.md del maggio 2025: 180 righe, molte ormai obsolete (menzionava endpoint API Anthropic che nel frattempo erano cambiati, esempi con la sintassi claude --tools che non esiste più e regole su ~/.claude/projects/ basate su una struttura non più attuale).
Il piano che ho usato per aggiornarlo:
- Esaminalo con
claudein modalità plan. Apro il repository, eseguoclaude --safe-modee chiedo: “RileggiAGENTS.mde suggerisci un elenco di elementi obsoleti o ripetuti. Non modificarlo; limitati a elencarli.” In due minuti ho ricevuto un elenco di 23 elementi da rivedere. - Rimuovi gli elementi chiaramente obsoleti. Dei 23, 9 erano chiaramente superati: sintassi dei comandi, endpoint e nomi dei flag. Ho eliminato quelle righe.
- Accorpa i duplicati. Altri 6 elementi ripetevano gli stessi concetti con parole diverse («non forzare il push», «non usare mai
--force», «evitagit push -f»). Li ho riuniti in una sola riga. - Aggiungi nuovi elementi. Ho aggiunto ciò che avevo notato che Claude/Codex sbagliavano regolarmente nel mese precedente, seguendo la regola «una riga per schema di errore». Ne sono risultati 8 nuovi elementi.
- Avvia un subagent per una revisione finale. Ho richiesto una revisione di Claude con l’istruzione «trova contraddizioni, ambiguità e duplicati». Ha trovato tre formulazioni da rendere più chiare. Le ho sistemate.
Dopo un’ora, AGENTS.md era lungo 110 righe, aggiornato, e conoscevo personalmente ogni riga. È stato facile ricavarne un CLAUDE.md di 30 righe. In seguito, Codex è diventato sensibilmente più attento ai test: sospetto che alcune sue decisioni «strane» derivassero da istruzioni obsolete che aveva seguito in buona fede.
I principi fondamentali per mantenere attuale un AGENTS.md:
- Ogni regola risponde a un errore ricorrente. Se durante il mese non mi è mai venuta in mente una certa regola, non c’è motivo di mantenerla.
- Scrivi regole come comandi, non come teoria. «Usa due spazi» è una regola. «Lo stile del codice dovrebbe essere ordinato» non lo è.
- I dettagli prevalgono sulle generalità. «Esegui
npm run buildprima digit push» è una regola. «Testa le modifiche» non lo è.
Cosa NON funziona assolutamente con questa configurazione?
Punto chiave
Importare @AGENTS.md non fa comportare strumenti diversi come se fossero uno solo. Ognuno ha le proprie particolarità: Codex CLI non conosce .claude/rules/ né gli hooks. Cursor ha un proprio motore di completamento automatico, che durante la scrittura non legge CLAUDE.md. Copilot segue .github/copilot-instructions.md, e per lui le sole regole in AGENTS.md non bastano. Non si tratta di «un file = un comportamento», ma di «una fonte per le regole di base, poi ogni strumento ha le proprie aggiunte».
Alcune cose che ho imparato a mie spese in sei mesi di lavoro con questa configurazione:
1. Il completamento automatico di Cursor non usa AGENTS.md. Quando Cursor suggerisce il completamento di una riga nell’editor, non legge AGENTS.md in tempo reale: c’è un motore rapido separato. Le regole in AGENTS.md contano solo quando invii una richiesta in chat dentro Cursor. Questo significa che scrivere «non usare var, usa const» in AGENTS.md non influenzerà il completamento automatico; devi configurarlo tramite ESLint o la configurazione TypeScript.
2. Gli hooks di Claude Code in AGENTS.md non funzionano per Codex. Se .claude/settings.json ha configurato un hook PreToolUse per bloccare una certa azione, questa informazione è utile solo a Claude. Codex non conosce gli hooks: per lui è «decide lo strumento stesso». Ha senso scrivere «non fare X» in AGENTS.md e «c’è un hook che blocca fisicamente X» in CLAUDE.md, sotto l’import.
3. Copilot e .github/copilot-instructions.md. GitHub Copilot legge il proprio file e ancora non legge molto bene AGENTS.md. Se il tuo team usa Copilot attivamente, aggiungi un .github/copilot-instructions.md separato con una versione abbreviata delle regole oppure usa Copilot Extensions che conoscono AGENTS.md. La situazione cambia rapidamente, quindi tra tre e sei mesi il quadro potrebbe essere diverso.
4. Git non registra un link simbolico come modifica a CLAUDE.md. Se esegui ln -s AGENTS.md CLAUDE.md e aggiorni AGENTS.md una settimana dopo, Git mostrerà una differenza solo per AGENTS.md. È normale, ma un collega che esamina la PR potrebbe non accorgersi che anche CLAUDE.md è stato aggiornato tramite il link simbolico. Soluzione: scrivi esplicitamente nella descrizione della PR: «aggiornato AGENTS.md; Claude Code vede lo stesso file tramite il link simbolico».
5. Gli import profondi sono difficili da analizzare. Se AGENTS.md importa @docs/coding-style.md, che importa @docs/typescript.md, e una regola entra in conflitto con un’altra, il debug è difficile. Limito gli import a un livello (CLAUDE.md → AGENTS.md) e non li annido ulteriormente. Anthropic offre un hook InstructionsLoaded che registra quali file sono stati caricati: utile per il debug delle configurazioni a livelli. Nota: l’hook si attiva per AGENTS.md incluso tramite import o link simbolico, ma non per AGENTS.md letto direttamente da Claude Code.
Fonti
- Documentazione sulla memoria di Claude Code - sezione AGENTS.md - spiega quando Claude Code legge direttamente AGENTS.md, le impostazioni Project instructions, gli import e i link simbolici e il comportamento di
/init. - Documentazione sulla memoria di Claude Code - importazione di file aggiuntivi - sintassi
@path/to/file, profondità di quattro livelli, percorsi relativi e assoluti. - agents.md - standard della Linux Foundation - standard ufficiale AGENTS.md ed elenco degli strumenti supportati.
- Documentazione sulle regole di Cursor - cosa legge Cursor (
.cursor/rules/*.mdc, AGENTS.md). - Istruzioni personalizzate per GitHub Copilot - formato
.github/copilot-instructions.md. - Specifiche di AGENTS.md della Linux Foundation - specifica in evoluzione.
La configurazione completa per una serata di vibe coding: clone AI + Second Brain + context engineering.
Scopri Ailoot.
Maggiori dettagli
Domande frequenti
Quando uso un’importazione invece di un collegamento simbolico?
Usa @AGENTS.md in CLAUDE.md se servono aggiunte specifiche per Claude o se i colleghi usano Windows. Un collegamento simbolico fa riferire entrambi i nomi allo stesso contenuto e quindi non può contenere una sezione separata solo per Claude.
Come controllo che le istruzioni condivise siano state caricate?
Esegui /memory e controlla i file elencati. Se nella tua configurazione CLAUDE.md o CLAUDE.local.md impedisce il caricamento diretto di AGENTS.md, aggiungi l’importazione o scegli l’impostazione che carica entrambi; poi apri una nuova sessione.