Quando usi più sessioni di Claude Code insieme, un semplice avviso "Claude ha bisogno della tua attenzione" non basta, perché non capisci quale sessione l'ha mandato. La soluzione è inserire il progetto o la cartella della sessione in ogni notifica. Ogni hook riceve in JSON il cwd e il session_id della sessione, così il tuo hook può leggerli e mettere il nome del progetto nell'avviso. Dai alle sessioni nomi chiari con claude -n <name> o /rename, e usa claude --worktree <name> così che le sessioni parallele sullo stesso repository abbiano ciascuna la propria cartella, che poi compare nell'avviso.
01Perché le sessioni parallele creano confusione
Tenere due o tre sessioni di Claude Code affiancate è ormai un modo normale di lavorare: una sistema un bug, una scrive i test, una esplora un refactor. Ogni sessione si ferma coi suoi tempi. I problemi sono sempre gli stessi:
- arriva un avviso e non sai da quale tab del terminal viene;
- una sessione aspetta da venti minuti su un prompt di permesso mentre tu guardavi un'altra;
- rispondi nella finestra sbagliata.
Tutti e tre si riducono all'identificazione. Ogni avviso deve dire da dove arriva, e ogni risposta deve tornare alla sessione che l'ha chiesta.
02Prima separa bene le sessioni
Usa i worktree per lo stesso repository
Due sessioni che modificano lo stesso checkout si pestano i piedi a vicenda. Il flag --worktree di Claude Code (-w in breve) crea un git worktree isolato e ci avvia la sessione:
claude --worktree feature-auth
claude --worktree fix-login
Di default ogni worktree viene creato in .claude/worktrees/<name>/ nella root del repository, su un nuovo branch chiamato worktree-<name>. Lancia ogni comando nel suo terminal. Aggiungi .claude/worktrees/ al tuo .gitignore così i worktree non compaiono come file non tracciati.
Quando esci, Claude Code controlla il worktree. Se è pulito e non hai mai dato un nome alla sessione, Claude Code rimuove il worktree e il suo branch; altrimenti ti chiede se tenerlo. Per tornare più tardi a un worktree conservato, lancia il comando claude --worktree <name> --resume che stampa all'uscita. Se preferisci gestire i worktree da te, va bene anche git worktree add ../project-feature-a -b feature-a; poi avvia claude in quella cartella.
Un effetto collaterale utile per le notifiche: ogni sessione ora ha il suo nome di cartella, come feature-auth, che è proprio quello che vuoi vedere in un avviso.
Dai un nome alle sessioni
I nomi rendono le sessioni facili da trovare e riprendere:
claude -n auth-refactor
Dentro una sessione in corso, /rename auth-refactor fa la stessa cosa, e il nome compare nella barra del prompt. In seguito, claude --resume auth-refactor ti riporta subito lì. Nel selettore delle sessioni (claude --resume senza nome), Ctrl+W estende l'elenco a tutti i worktree del repository.
03Metti il progetto in ogni avviso fai-da-te
Ogni command hook riceve su standard input un JSON con i campi comuni a tutti gli eventi, tra cui session_id, cwd, transcript_path e hook_event_name. In una sessione su worktree, cwd è la root del worktree, e segue Claude se cambia directory. Leggilo nel tuo hook e usa l'ultima parte del percorso come etichetta.
Su Mac e Linux, salva questo file come ~/.claude/hooks/notify-session.sh e rendilo eseguibile con chmod +x. Richiede jq.
#!/bin/sh
input=$(cat)
project=$(basename "$(printf '%s' "$input" | jq -r '.cwd')")
event=$(printf '%s' "$input" | jq -r '.hook_event_name')
case "$event" in
Stop) msg="Claude has finished" ;;
*) msg="Claude needs you" ;;
esac
notify-send "Claude Code: $project" "$msg"
Su Mac, sostituisci l'ultima riga con una notifica osascript come mostrato nella guida per macOS. Su Windows, leggi lo stesso JSON in PowerShell con ConvertFrom-Json; la guida per Windows ha un esempio completo.
Poi registralo per gli eventi che ti interessano in ~/.claude/settings.json:
{
"hooks": {
"Stop": [
{ "hooks": [{ "type": "command", "command": "~/.claude/hooks/notify-session.sh" }] }
],
"Notification": [
{ "matcher": "permission_prompt", "hooks": [{ "type": "command", "command": "~/.claude/hooks/notify-session.sh" }] }
]
}
}
Due note sui percorsi. Metti tra virgolette variabili come "$input", perché i nomi delle cartelle possono contenere spazi. E se richiami uno script con ${CLAUDE_PROJECT_DIR}, ricorda che punta sempre alla cartella in cui è partita la sessione, anche dopo che Claude si è spostato in un worktree. Se ti serve la cartella corrente, leggi cwd dall'input.
Se lavori in tmux, spesso il pane o la finestra sono un'etichetta migliore della cartella. La guida a tmux spiega come trovare il pane giusto e passarci.
04La parte difficile: rispondere alla sessione giusta
Un avviso con etichetta ti dice quale sessione ha bisogno di te. Ma per rispondere devi comunque arrivare a quel terminal. Con tre sessioni vuol dire trovare la scheda giusta, scorrere fino al prompt e scrivere. Un hook fatto in casa difficilmente può rimandare indietro la tua risposta, perché solo l'hook in attesa dentro quella sessione può restituire una decisione a Claude Code.
È questo il vuoto che colma Claude Code Notifier. È uno strumento indipendente, non realizzato da Anthropic. Il suo tool da riga di comando, ccn, si installa come hook di Claude Code su Mac, Windows e Linux, quindi ogni sessione che avvii è coperta, in qualsiasi terminal, senza configurazioni per singola sessione. Ogni notifica riporta il nome e la cartella del progetto, così sul tuo iPhone o telefono Android vedi quale sessione l'ha inviata. E poiché l'hook che ha inviato la richiesta è lo stesso che aspetta la tua risposta, un'approvazione, una scelta o un'istruzione successiva dal telefono torna alla sessione che l'ha chiesta.
Alcuni dettagli che contano quando hai più sessioni:
- Più computer. Un telefono può essere associato a più computer, e un computer a più telefoni.
ccn deviceselenca i telefoni associati a questo computer. - Presenza. Se hai digitato negli ultimi 30 secondi, non si aspetta il telefono e il terminal chiede come al solito. Se sei via, la sessione attende la risposta dal telefono fino a un limite che scegli tu (
hold_ceiling_seconds) e smette di aspettare appena tocchi la tastiera. - Notifiche desktop senza telefono. Prima di associare un telefono,
ccnmostra una notifica desktop sul computer quando una sessione termina, chiede un permesso o fa una domanda.
Se usi una sola sessione alla volta e stai alla scrivania, probabilmente ti basta un avviso desktop con etichetta. La guida comparativa mette a confronto le opzioni.
05FAQ
Come capisco quale sessione di Claude Code ha inviato una notifica?
Leggi il campo cwd dall'input JSON dell'hook e metti il nome della cartella nel titolo dell'avviso. Con i worktree ogni sessione ha la sua cartella, quindi il nome è diverso per ognuna. Strumenti come Claude Code Notifier includono già nome e cartella del progetto in ogni notifica.
Posso avviare due sessioni di Claude Code nello stesso repository?
Sì, ma dai a ciascuna il suo worktree, così le modifiche non si scontrano. claude --worktree <name> ne crea uno in .claude/worktrees/<name>/ su un nuovo branch e ci avvia la sessione.
Come do un nome a una sessione di Claude Code?
Avviala con claude -n <name>, oppure esegui /rename <name> dentro la sessione. Poi la riprendi con claude --resume <name>.
Gli hook girano separatamente per ogni sessione?
Sì. Ogni sessione esegue i propri hook quando scattano i suoi eventi, e passa nell'input il session_id e il cwd di quella sessione. Gli hook in ~/.claude/settings.json valgono per tutte le sessioni che avvii.
Le notifiche da computer diversi si mescolano?
Non con ccn. Ogni computer si associa al telefono separatamente e ha un suo nome, e ogni notifica indica il progetto da cui arriva.