Als je meerdere Claude Code-sessies tegelijk draait, heb je niks aan een kale melding "Claude needs your attention", want je weet niet welke sessie hem stuurde. De oplossing: zet het project of de map van de sessie in elke notificatie. Elke hook krijgt de cwd en session_id van de sessie als JSON binnen, dus je hook kan die uitlezen en de projectnaam in de melding zetten. Geef sessies duidelijke namen met claude -n <name> of /rename, en gebruik claude --worktree <name> zodat parallelle sessies op één repository elk hun eigen map hebben, die dan in de melding verschijnt.
01Waarom parallelle sessies verwarrend worden
Twee of drie Claude Code-sessies naast elkaar draaien is inmiddels een normale manier van werken: één fixt een bug, één schrijft tests, één verkent een refactor. Elke sessie stopt in haar eigen tempo. De problemen zijn altijd dezelfde:
- er komt een melding binnen en je weet niet uit welk terminaltabblad;
- één sessie wacht al twintig minuten op een permission prompt terwijl jij naar een andere keek;
- je antwoordt in het verkeerde venster.
Alle drie komen neer op identificatie. Elke melding moet zeggen waar ze vandaan komt, en elk antwoord moet terug naar de sessie die het vroeg.
02Scheid de sessies eerst goed
Gebruik worktrees voor dezelfde repository
Twee sessies die in dezelfde checkout werken, zitten elkaars wijzigingen in de weg. De --worktree-flag van Claude Code (kort: -w) maakt een geïsoleerde git worktree aan en start de sessie daarin:
claude --worktree feature-auth
claude --worktree fix-login
Standaard wordt elke worktree aangemaakt onder .claude/worktrees/<name>/ in de root van de repository, op een nieuwe branch met de naam worktree-<name>. Draai elk commando in een eigen terminal. Voeg .claude/worktrees/ toe aan je .gitignore zodat de worktrees niet als untracked files verschijnen.
Bij het afsluiten controleert Claude Code de worktree. Is die clean en heb je de sessie nooit een naam gegeven, dan verwijdert Claude Code de worktree en de branch; anders vraagt het of je hem wilt houden. Wil je later terug naar een bewaarde worktree, draai dan het commando claude --worktree <name> --resume dat bij het afsluiten wordt getoond. Beheer je worktrees liever zelf, dan werkt git worktree add ../project-feature-a -b feature-a ook; start claude dan in die map.
Een handig bijeffect voor notificaties: elke sessie heeft nu een eigen mapnaam, zoals feature-auth, en dat is precies wat je in een melding wilt zien.
Geef je sessies een naam
Met namen vind en hervat je sessies makkelijk:
claude -n auth-refactor
In een lopende sessie doet /rename auth-refactor hetzelfde, en de naam verschijnt in de promptbalk. Later brengt claude --resume auth-refactor je er direct naar terug. In de sessiekiezer (claude --resume zonder naam) breidt Ctrl+W de lijst uit naar alle worktrees van de repository.
03Zet het project in elke zelfgebouwde melding
Elke command hook krijgt JSON op standard input met velden die bij alle events voorkomen, waaronder session_id, cwd, transcript_path en hook_event_name. In een worktree-sessie is cwd de root van de worktree, en die volgt Claude als het van map wisselt. Lees hem uit in je hook en gebruik het laatste deel van het pad als label.
Op Mac en Linux sla je dit op als ~/.claude/hooks/notify-session.sh en maak je het uitvoerbaar met chmod +x. Je hebt jq nodig.
#!/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"
Op een Mac vervang je de laatste regel door een osascript-notificatie, zoals in de macOS-handleiding. Op Windows lees je dezelfde JSON in PowerShell met ConvertFrom-Json; de Windows-handleiding heeft een volledig voorbeeld.
Registreer hem daarna in ~/.claude/settings.json voor de events die je belangrijk vindt:
{
"hooks": {
"Stop": [
{ "hooks": [{ "type": "command", "command": "~/.claude/hooks/notify-session.sh" }] }
],
"Notification": [
{ "matcher": "permission_prompt", "hooks": [{ "type": "command", "command": "~/.claude/hooks/notify-session.sh" }] }
]
}
}
Twee opmerkingen over paden. Zet variabelen zoals "$input" tussen aanhalingstekens, want mapnamen kunnen spaties bevatten. En als je naar een script verwijst met ${CLAUDE_PROJECT_DIR}, onthoud dan dat die naar de map blijft wijzen waar de sessie startte, ook nadat Claude naar een worktree is gegaan. Lees cwd uit de input als je de huidige map nodig hebt.
Werk je in tmux, dan is de pane of het window vaak een beter label dan de map. De tmux-gids laat zien hoe je de juiste pane vindt en ernaartoe springt.
04Het lastige deel: de juiste sessie antwoorden
Een alert met label vertelt je welke sessie je nodig heeft. Je moet nog steeds naar die terminal om te antwoorden. Met drie sessies betekent dat: de juiste tab zoeken, naar de prompt scrollen en typen. Een zelfgebouwde hook kan je antwoord niet makkelijk terugsturen, want alleen de hook die binnen die sessie wacht, kan een beslissing teruggeven aan Claude Code.
Dat gat vult Claude Code Notifier. Het is een onafhankelijke tool, niet gemaakt door Anthropic. De command line tool, ccn, wordt geïnstalleerd als Claude Code-hooks op Mac, Windows en Linux, dus elke sessie die je start is gedekt, in elke terminal, zonder setup per sessie. Elke notificatie bevat de naam en map van het project, zodat je op je iPhone of Android-telefoon ziet welke sessie hem stuurde. Omdat de hook die het verzoek stuurde ook degene is die op je antwoord wacht, gaat een goedkeuring, keuze of vervolginstructie vanaf je telefoon terug naar de sessie die erom vroeg.
Een paar details die ertoe doen bij meerdere sessies:
- Meerdere computers. Eén telefoon kan aan meerdere computers gekoppeld worden, en een computer aan meerdere telefoons.
ccn devicestoont de telefoons die aan deze computer gekoppeld zijn. - Aanwezigheid. Heb je in de laatste 30 seconden getypt, dan wacht er niets op de telefoon en vraagt de terminal het zoals gewoonlijk. Ben je weg, dan wacht de sessie op het antwoord van je telefoon tot een maximum dat je zelf kiest (
hold_ceiling_seconds) en stopt met wachten zodra je het toetsenbord aanraakt. - Desktopnotificaties zonder telefoon. Voordat je een telefoon koppelt, toont
ccneen desktopnotificatie op de computer zodra een sessie klaar is, een permissie nodig heeft of een vraag stelt.
Draai je maar één sessie tegelijk en zit je aan je bureau, dan is een desktopalert met label waarschijnlijk alles wat je nodig hebt. De vergelijkingsgids zet de opties naast elkaar.
05FAQ
Hoe zie ik welke Claude Code-sessie een notificatie stuurde?
Lees het veld cwd uit de JSON-input van de hook en zet de mapnaam in de titel van de alert. Met worktrees heeft elke sessie een eigen map, dus de naam is per sessie uniek. Tools zoals Claude Code Notifier zetten de projectnaam en map automatisch in elke notificatie.
Kan ik twee Claude Code-sessies in dezelfde repository draaien?
Ja, maar geef elke sessie een eigen worktree zodat hun wijzigingen niet botsen. claude --worktree <name> maakt er een aan onder .claude/worktrees/<name>/ op een nieuwe branch en start daar de sessie.
Hoe geef ik een Claude Code-sessie een naam?
Start hem met claude -n <name>, of voer /rename <name> uit binnen een sessie. Later hervat je hem met claude --resume <name>.
Draaien hooks apart voor elke sessie?
Ja. Elke sessie draait zijn eigen hooks wanneer zijn events afgaan, en geeft de session_id en cwd van die sessie mee in de input. Hooks in ~/.claude/settings.json gelden voor elke sessie die je start.
Raken notificaties van verschillende computers door elkaar?
Niet met ccn. Elke computer koppelt apart met je telefoon en heeft een eigen naam, en elke notificatie vermeldt het project waar hij vandaan komt.