Torna al blog

Claude Code Ha le Memorie — Ho Disattivato Quelle di Serena

Uso Serena MCP da diversi mesi. È diventata parte del mio flusso di lavoro quotidiano con Claude Code: le memorie persistenti mi permettevano di non ripetere ogni volta le stesse cose al modello, e i tool LSP mi davano una navigazione del codice che Claude Code da solo non ha — "Go to Definition", "Find All References", editing a livello di simbolo.

Poi, il 26 febbraio 2026, Anthropic ha rilasciato la versione 2.1.59 di Claude Code con una feature che cambia le carte in tavola: auto memory. Claude ora prende appunti da solo durante le sessioni — pattern del progetto, comandi, convenzioni, soluzioni a problemi — e li ricarica automaticamente la volta dopo.

La domanda è stata immediata: ha senso continuare a usare le memorie di Serena, o quelle native di Claude Code le rendono ridondanti?

Ho fatto una piccola analisi comparativa sul mio progetto. Il risultato: ho disattivato 15 tool di Serena e ne ho tenuti 12. Ecco il ragionamento.

Come usavo Serena prima

Serena ha un sistema di memorie in .serena/memories/ — file markdown per topic (project_overview.md, code_style.md, suggested_commands.md) generati durante un onboarding iniziale. Ad ogni nuova sessione, Claude poteva leggere queste memorie per avere contesto sul progetto senza dover rileggere i file.

Oltre alle memorie, Serena fornisce tool per leggere file, scrivere file, eseguire comandi shell, e soprattutto i tool LSP per navigare e modificare il codice a livello semantico — trovare una funzione per nome, scoprire chi la chiama, sostituire il corpo di un metodo senza toccare il resto del file.

In totale, Serena caricava 27 tool nel contesto di Claude. Tutti. Sempre. Che servissero o no.

Come funziona la memoria nativa di Claude Code

Il sistema nativo si compone di tre livelli.

CLAUDE.md — le istruzioni che dai tu

Un file markdown nella root del progetto. Viene caricato per intero nel contesto a ogni sessione. È pensato per le direttive — le regole che vuoi che Claude segua:

## Regole
- Rispondi sempre in italiano
- Non committare senza che te lo chieda
- Tutte le query SQL devono usare prepared statements
- Per inserire articoli: segui @documentazione/routine-inserimento-articoli.md

CLAUDE.md non è documentazione. È un file di configurazione per il comportamento di Claude. Più simile a un .editorconfig che a un README.

Esiste in una gerarchia precisa:

Tipo Posizione Condiviso con
Managed policy /Library/Application Support/ClaudeCode/CLAUDE.md Tutti gli utenti (macchina)
Progetto ./CLAUDE.md Il team (via git)
Regole modulari .claude/rules/*.md Il team (via git)
Utente ~/.claude/CLAUDE.md Solo te (tutti i progetti)
Locale ./CLAUDE.local.md Solo te (questo progetto)

Le istruzioni più specifiche hanno priorità su quelle più generiche.

Auto memory — gli appunti che Claude prende da solo

Claude scrive automaticamente in ~/.claude/projects/<progetto>/memory/MEMORY.md durante le sessioni. Le prime 200 righe vengono caricate nel contesto alla sessione successiva.

Cosa ci finisce:

  • Pattern del progetto: comandi di build, convenzioni di test, stile del codice
  • Soluzioni a problemi: "l'ultima volta il bug era nel parsing delle date"
  • Architettura: file chiave, relazioni tra moduli
  • Preferenze personali: workflow, stile di comunicazione

Se servono più dettagli, Claude crea file topic separati (debugging.md, api-conventions.md) che non vengono caricati automaticamente ma letti on-demand.

Puoi anche dire esplicitamente: "ricordati che usiamo pnpm, non npm" — e Claude lo salva.

Regole modulari — istruzioni per contesto

La feature meno conosciuta e più potente. Puoi creare file in .claude/rules/ con regole che si attivano solo quando Claude lavora su certi file:

# .claude/rules/database.md
---
paths:
  - "includes/db.php"
  - "setup.php"
---
- Usa sempre prepared statements PDO
- Wrappa le operazioni multiple in transazioni
- I nomi delle funzioni DB sono in camelCase

Questa regola si carica solo quando tocco db.php o setup.php. Zero overhead per il resto delle sessioni. È una cosa che né Serena né nessun altro sistema di memorie offre.

La sovrapposizione che ho trovato

Sul mio progetto, le stesse informazioni esistevano in tre posti diversi:

Informazione CLAUDE.md Auto memory Serena memories
Struttura file Sì (obsoleto!)
Schema database No
Convenzioni CSS No
Admin panel No
Routing No Parziale
Comandi suggeriti No No

Tre fonti di verità, parzialmente sovrapposte, una attivamente sbagliata. Il CLAUDE.md descriveva ancora un "sito statico single-page" quando il progetto era già diventato un blog PHP con database.

Ma il problema più grande non erano le memorie duplicate. Era il costo nel contesto.

I numeri

Ogni volta che apri Claude Code con Serena connessa, il contesto viene pre-caricato con:

CLAUDE CODE NATIVO
├── CLAUDE.md                    ~426 token    (sempre)
├── MEMORY.md (prime 200 righe)  ~365 token    (sempre)
└── Totale fisso                 ~791 token

SERENA MCP (27 tool)
├── 27 tool definitions          ~3,350 token  (sempre)
├── Istruzioni MCP               ~1,625 token  (sempre)
├── initial_prompt project.yml      ~60 token  (sempre)
└── Totale fisso                 ~5,035 token

Memorie Serena                   ~1,265 token  (solo on-demand)

Le memorie Serena sono on-demand — non costano nulla se non le chiedi. Ma i 27 tool definitions sono sempre nel contesto, che tu li usi o no. 5,000 token di overhead fisso, anche per sessioni in cui devi solo scrivere un articolo o cambiare un colore nel CSS.

E qui la domanda è diventata più precisa: di quei 27 tool, quanti mi servono davvero?

Cosa ho disattivato e perché

Analizzando i 27 tool di Serena, ho trovato che la maggior parte fa cose che Claude Code sa già fare nativamente:

Categoria Tool Serena Equivalente Claude Code
Lettura file read_file Read
Scrittura file create_text_file Write
Cerca file find_file, list_dir Glob, LS
Shell execute_shell_command Bash
Memorie write_memory, read_memory, list_memories, delete_memory, edit_memory, rename_memory Auto memory nativa
Onboarding onboarding, check_onboarding_performed, prepare_for_new_conversation CLAUDE.md + MEMORY.md
System prompt initial_instructions Non serve (Claude Code ha il suo)

15 tool ridondanti. Ognuno occupa spazio nel contesto e crea ambiguità su quale strumento usare. Li ho disattivati tutti.

Cosa ho tenuto

I 12 tool rimasti sono quelli che Claude Code non ha — i tool LSP per navigazione ed editing semantico del codice:

Navigazione codice

Tool Cosa fa
find_symbol Trova classi, funzioni, metodi per nome in tutto il progetto
find_referencing_symbols "Chi chiama questa funzione?" — risposta semantica, non grep
get_symbols_overview Panoramica di classi, funzioni, costanti in un file senza leggerlo
search_for_pattern Cerca pattern regex nel codebase

Editing semantico

Tool Cosa fa
replace_symbol_body Sostituisce l'intera definizione di una funzione
replace_content Sostituisce testo con regex (per modifiche parziali)
insert_before_symbol Inserisce codice prima di un simbolo
insert_after_symbol Inserisce codice dopo un simbolo
rename_symbol Rinomina un simbolo in tutto il codebase

Utilità

Tool Cosa fa
activate_project Cambia progetto attivo
get_current_config Mostra configurazione corrente
switch_modes Cambia modalità (editing, planning, ecc.)

Senza questi tool, Claude Code legge file interi, cerca pattern con grep, calcola le righe e fa editing con ricerca/sostituzione testuale. Funziona, ma è come navigare una città senza mappa. Con i tool LSP, Claude ha l'equivalente del "Go to Definition" e "Find All References" di un IDE.

Come ho configurato tutto

La configurazione si fa nel file .serena/project.yml del progetto. La sezione chiave è excluded_tools:

project_name: "nome-progetto"

languages:
- php
- typescript

encoding: "utf-8"

ignore_all_files_in_gitignore: true

ignored_paths:
  - "vendor/**"
  - "node_modules/**"

read_only: false

excluded_tools:
  # Memorie — ridondanti con auto memory nativa di Claude Code
  - write_memory
  - read_memory
  - list_memories
  - delete_memory
  - edit_memory
  - rename_memory
  # Onboarding — ridondante con CLAUDE.md e MEMORY.md
  - onboarding
  - check_onboarding_performed
  - prepare_for_new_conversation
  # File I/O — ridondanti con Read, Write, Glob, Bash di Claude Code
  - list_dir
  - find_file
  - read_file
  - create_text_file
  - execute_shell_command
  # Non necessario in Claude Code (serve solo per client senza system prompt)
  - initial_instructions

included_optional_tools: []
fixed_tools: []
base_modes:
default_modes:
initial_prompt: ""
symbol_info_budget:

Poi nel CLAUDE.md del progetto ho aggiunto:

## Serena MCP
- Serena è configurata solo per i tool LSP (navigazione e editing semantico)
- Le memorie sono gestite dall'auto memory nativa di Claude Code, NON da Serena
- Usa `find_symbol`, `find_referencing_symbols`, `get_symbols_overview` per navigare il codice
- Usa `replace_symbol_body`, `insert_after_symbol` per editing preciso

Questo dice esplicitamente a Claude di non provare a usare i tool memorie di Serena (che non troverebbe comunque) e di affidarsi al sistema nativo.

Verifica

Per controllare che tutto sia configurato correttamente, basta chiedere a Claude Code di usare get_current_config di Serena. I tool attivi devono essere esattamente 12 — quelli elencati sopra. Se ne vedi di più, c'è qualcosa da rivedere nel project.yml.

Cosa cambia in pratica

Prima della riconfigurazione, il mio system prompt aveva ~5,035 token solo per Serena. Dopo, con i 12 tool LSP rimasti, l'overhead si è ridotto a circa ~3,100 token — il 40% in meno. Meno tool definitions da caricare, meno istruzioni inutili nel contesto.

Le memorie non sono più duplicate. Claude usa il suo sistema nativo — CLAUDE.md per le direttive, MEMORY.md per i fatti sul progetto, .claude/rules/ per regole condizionali. E quando serve navigare il codice a livello semantico, i tool LSP di Serena sono ancora lì.

La differenza che pochi capiscono

Molte guide suggeriscono di mettere la descrizione del progetto in CLAUDE.md. È un errore concettuale.

CLAUDE.md è per le direttive — cose che Claude deve fare o non deve fare. Sono imperative.

Auto memory è per i fatti — cose che Claude ha scoperto sul progetto. Sono descrittive.

Informazione Dove va Perché
"Rispondi in italiano" CLAUDE.md È un ordine
"Il progetto usa SQLite in db/blog.sqlite" Auto memory È un fatto scoperto da Claude
"Non committare senza chiedere" CLAUDE.md È una regola
"Il routing è in index.php con pattern regex" Auto memory Claude lo vede leggendo il codice
"Per i test usa make test" CLAUDE.md È un comando che il team condivide
"L'ultima volta il bug era nel parsing delle date" Auto memory È un appunto personale

Quando metti tutto in CLAUDE.md — descrizioni, fatti, regole — ottieni un file lungo, che si aggiorna male, che contiene informazioni che diventano obsolete. È esattamente quello che mi è successo.

Quando serve cosa

Scenario Memorie native bastano? Tool LSP Serena servono?
Scrivere un articolo per il blog No
Modificare il CSS No
Aggiungere una funzione in db.php Sì — insert_after_symbol
Refactorare il routing in più file Sì — find_referencing_symbols
Capire chi usa una funzione No (solo grep) Sì — analisi semantica
Rinominare un metodo ovunque No Sì — rename_symbol
Progetto piccolo (<20 file) Raramente utile
Progetto grande (100+ file) Sì per memorie Essenziale per navigazione

Nota importante

Questa configurazione è per Claude Code (CLI e desktop). Se usi Serena con Claude Desktop o altri client MCP che non hanno tool nativi per leggere file, eseguire comandi o gestire memorie, non disattivare quei tool — ti servono tutti.

La ragione per cui posso disattivarli è che Claude Code ha già Read, Write, Glob, Bash e il suo sistema di auto memory. La sovrapposizione esiste solo in questo contesto specifico.

In sintesi

Cosa Prima Dopo
Tool Serena attivi 27 12
Sistemi di memoria 3 (CLAUDE.md + auto memory + Serena) 2 (CLAUDE.md + auto memory)
Token overhead Serena ~5,035 ~3,100
Navigazione semantica Sì (invariata)
Editing a livello di simbolo Sì (invariato)
Informazioni duplicate tra sistemi Sì (3 fonti sovrapposte) No (ogni sistema ha il suo ruolo)

Serena resta attiva — ma fa solo quello che sa fare meglio e che Claude Code non sa fare: navigare e modificare il codice a livello semantico. Tutto il resto lo gestisce il sistema nativo, che è più integrato, si aggiorna da solo, e non costa token di overhead inutili.

Il prompt per configurare tutto in automatico

Se vuoi replicare questa configurazione su un tuo progetto, copia il prompt qui sotto in Claude Code. Prerequisito: Serena MCP connessa e serena init già eseguito.

Configura Serena MCP per questo progetto in modo da disattivare tutti
i tool ridondanti con Claude Code e tenere attivi solo i tool LSP.

Passo 1 — Modifica .serena/project.yml

Apri .serena/project.yml e cerca la sezione excluded_tools (potrebbe
essere vuota, commentata o già popolata). Sostituiscila con questo
blocco YAML, mantenendo l'indentazione corretta e senza modificare
le altre sezioni del file:

excluded_tools:
  - write_memory
  - read_memory
  - list_memories
  - delete_memory
  - edit_memory
  - rename_memory
  - onboarding
  - check_onboarding_performed
  - prepare_for_new_conversation
  - list_dir
  - find_file
  - read_file
  - create_text_file
  - execute_shell_command
  - initial_instructions

Passo 2 — Aggiorna CLAUDE.md

Se il CLAUDE.md del progetto ha già una sezione "## Serena MCP",
aggiornala. Se non c'è, aggiungila in fondo. Se il file CLAUDE.md
non esiste, crealo.

## Serena MCP
- Configurata solo per i tool LSP (navigazione e editing semantico)
- Le memorie sono gestite dall'auto memory nativa di Claude Code,
  NON da Serena
- Navigazione: find_symbol, find_referencing_symbols,
  get_symbols_overview
- Editing: replace_symbol_body, insert_after_symbol, replace_content

Passo 3 — Verifica

Attiva il progetto in Serena e chiama get_current_config. I tool
attivi devono essere esattamente questi 12:
activate_project, find_referencing_symbols, find_symbol,
get_current_config, get_symbols_overview, insert_after_symbol,
insert_before_symbol, rename_symbol, replace_content,
replace_symbol_body, search_for_pattern, switch_modes.

Se non corrispondono, dimmi quali tool attivi vedi.