Vai al contenuto
Capitolo 03 · 11 min

Claude Code: 7 chiavi in settings.json

Queste vivono in ~/.claude/settings.json (a livello utente) o in .claude/settings.json (a livello progetto, che ha la precedenza). Le sette qui sotto sono quelle che, secondo l'articolo, spostano davvero l'ago su budget di contesto e costo.

Ogni attrezzo che lasci collegato assorbe corrente. Un banco con dodici macchine accese a vuoto è un banco che fa saltare il proprio salvavita.

gated bystaysClaude CodePermissions + hooksSafe by default
Claude Code settings gate permissions, hooks, and what the agent may touch.

9. enabledPlugins: disattiva, non disinstallare

Cosa fa: stabilisce quali plugin installati si caricano all'avvio della sessione. Perché conta: ogni plugin attivo carica i suoi hook, il contenuto dei SKILL.md e gli schemi dei tool nel tuo budget di contesto prima ancora che tu abbia scritto qualcosa. L'articolo racconta di essere passato da 14 plugin attivi a 4.

jsonCopia il prompt
{
  "enabledPlugins": {
    "some-plugin@marketplace": false
  }
}

Impostare un plugin su false lo mantiene installato ma non caricato; riattivalo per sessione con /plugin enable quando ti serve davvero.

10. permissions.deny, e il bug da conoscere

Cosa fa: impedisce a Claude di eseguire tool specifici o leggere file specifici, con l'intento di prevenire rm -rf, la lettura di .env o scritture fuori dal progetto.

jsonCopia il prompt
{
  "permissions": {
    "deny": ["Read(./.env)", "Bash(rm -rf:*)"]
  }
}
  • Aggiungi anche un livello a livello di filesystem: chmod 600 .env, così il sistema operativo rifiuta anche se una regola deny non scatta.
  • Verifica con /permissions dentro Claude Code; se le tue regole non compaiono, riavvia la sessione.

11. hooks.SessionStart: carica solo ciò che serve a questa directory

Cosa fa: SessionStart scatta quando apri Claude Code in una directory; può eseguire qualsiasi cosa: stampare info d'ambiente, controllare lo stato git, iniettare un file di contesto. Perché conta: la maggior parte delle persone inietta troppo, facendo crescere CLAUDE.md a migliaia di token perché ogni regola di progetto ci è finita dentro. SessionStart ti permette di caricare solo le regole rilevanti per il branch o la directory correnti.

jsonCopia il prompt
{
  "hooks": {
    "SessionStart": [
      { "command": "cat .claude/context-$(git branch --show-current).md 2>/dev/null" }
    ]
  }
}

Ogni branch carica il proprio piccolo file di contesto, così il budget smette di dissanguarsi. (Verifica lo schema esatto degli hook sulla documentazione corrente; la forma della config degli hook cambia tra le versioni.)

12. disableAllHooks: l'interruttore d'emergenza

Cosa fa: l'articolo descrive un singolo interruttore che disattiva tutti gli hook in una volta. Perché conta: quando Claude Code si comporta in modo strano (comandi fantasma, blocchi all'avvio, scritture misteriose) un hook difettoso è una causa comune, e spegnerli tutti insieme è più rapido che bisecarli uno alla volta.

jsonCopia il prompt
{
  "disableAllHooks": true
}
  • Tienilo spento normalmente. Quando qualcosa si rompe, attivalo, riavvia e guarda se il problema sparisce.
  • Se sì, riattiva gli hook uno alla volta; se no, il bug è altrove. (Questa chiave non è verificata; controlla la documentazione corrente per il nome esatto.)

13. model: l'override per progetto

Dove: .claude/settings.json alla radice del progetto. Cosa fa: imposta il modello predefinito per quel progetto, sovrascrivendo la tua scelta globale. Perché conta: la gente imposta globalmente il modello più profondo per il lavoro difficile, poi apre un progetto fatto per lo più di markdown o script shell e paga tariffe di fascia alta per un lavoro che un modello più economico gestisce benissimo.

jsonCopia il prompt
{
  "model": "claude-haiku-4-5"
}

Il livello progetto vince. Apri il progetto, ottieni il modello giusto, vai avanti.

14. mcpServers: usa il flag enabled

Cosa fa: i server MCP collegano Claude a strumenti esterni, e ogni server connesso carica il suo schema completo di tool nel contesto. Perché conta: la gente collega server per un test e non li scollega mai; l'articolo stima che ogni server inattivo costi comunque schema di contesto a ogni avvio di sessione. Tienili configurati ma non caricati con un flag enabled.

jsonCopia il prompt
{
  "mcpServers": {
    "my-server": {
      "command": "npx",
      "args": ["-y", "@scope/my-mcp-server"],
      "enabled": false
    }
  }
}

Metti enabled su true per sessione quando ti serve. (Verifica che il flag enabled sia rispettato nella tua versione; le chiavi esatte della config MCP variano.)

15. cleanupPeriodDays: la cache di cui nessuno parla

Cosa fa: imposta per quanti giorni Claude Code conserva trascrizioni, log di debug e dati di sessione intermedi (default 30). Perché conta: le funzionalità che imparano dalla tua cronologia, e il tuo grep futuro nelle vecchie sessioni, possono vedere indietro solo fino a questa finestra. Una finestra più lunga dà più segnale a un piccolo costo in disco.

jsonCopia il prompt
{
  "cleanupPeriodDays": 180
}

Una riga per ciascuno

  • enabledPlugins e mcpServers: tieni le cose installate/configurate ma impostate su false/disabilitate, così non prosciugano in anticipo il tuo contesto.
  • permissions.deny è solo un livello di difesa; rinforzalo con i permessi del filesystem e verifica che si applichi davvero.
  • hooks.SessionStart carica il contesto per branch per tenere CLAUDE.md piccolo; disableAllHooks è l'interruttore d'emergenza quando gli hook fanno i capricci.
  • Imposta un override di modello per progetto sui repo leggeri, e alza cleanupPeriodDays per conservare più cronologia di sessione.
Claude Code: 7 chiavi in settings.json · Cours d'IA · SDEN