Gdy masz kilka sesji Claude Code naraz, samo „Claude potrzebuje twojej uwagi” nie wystarczy, bo nie wiesz, która sesja to wysłała. Rozwiązanie: dodawaj projekt lub folder sesji do każdego powiadomienia. Każdy hook dostaje cwd i session_id sesji w JSON-ie, więc hook może je odczytać i wstawić nazwę projektu do powiadomienia. Nadawaj sesjom czytelne nazwy przez claude -n <name> lub /rename i używaj claude --worktree <name>, żeby równoległe sesje w jednym repozytorium miały osobne foldery, które potem widać w powiadomieniu.
01Dlaczego równoległe sesje robią się mylące
Dwie czy trzy sesje Claude Code obok siebie to dziś normalny sposób pracy: jedna naprawia buga, druga pisze testy, trzecia bada refaktor. Każda zatrzymuje się we własnym tempie. Problemy są zawsze te same:
- przychodzi powiadomienie, a ty nie wiesz, z której karty terminala;
- jedna sesja od dwudziestu minut czeka na prompt o uprawnienia, a ty patrzysz na inną;
- odpowiadasz w złym oknie.
Wszystkie trzy sprowadzają się do identyfikacji. Każde powiadomienie powinno mówić, skąd pochodzi, a każda odpowiedź wracać do sesji, która pytała.
02Najpierw porządnie rozdziel sesje
Używaj worktree dla tego samego repozytorium
Dwie sesje edytujące ten sam checkout będą sobie nadpisywać zmiany. Flaga --worktree w Claude Code (w skrócie -w) tworzy izolowany git worktree i uruchamia w nim sesję:
claude --worktree feature-auth
claude --worktree fix-login
Domyślnie każdy worktree powstaje w .claude/worktrees/<name>/ w katalogu głównym repozytorium, na nowym branchu worktree-<name>. Każdą komendę uruchamiaj w osobnym terminalu. Dodaj .claude/worktrees/ do .gitignore, żeby worktree nie pojawiały się jako nieśledzone pliki.
Przy wyjściu Claude Code sprawdza worktree. Jeśli jest czysty, a sesja nie miała nazwy, Claude Code usuwa worktree i jego branch; w przeciwnym razie pyta, czy go zachować. Żeby wrócić później do zachowanego worktree, uruchom komendę claude --worktree <name> --resume, którą wypisuje przy wyjściu. Jeśli wolisz zarządzać worktree sam, działa też git worktree add ../project-feature-a -b feature-a; potem odpal claude w tym folderze.
Przydatny efekt uboczny dla powiadomień: każda sesja ma teraz własną nazwę folderu, np. feature-auth, czyli dokładnie to, co chcesz widzieć w powiadomieniu.
Nazywaj sesje
Dzięki nazwom łatwo znaleźć i wznowić sesję:
claude -n auth-refactor
W działającej sesji to samo robi /rename auth-refactor, a nazwa pojawia się na pasku promptu. Później claude --resume auth-refactor zabiera cię prosto z powrotem. W wyborze sesji (claude --resume bez nazwy) Ctrl+W rozszerza listę na wszystkie worktree repozytorium.
03Dodawaj projekt do każdego własnego powiadomienia
Każdy hook typu command dostaje na standardowe wejście JSON z polami wspólnymi dla wszystkich zdarzeń, m.in. session_id, cwd, transcript_path i hook_event_name. W sesji w worktree cwd to katalog główny worktree i zmienia się, gdy Claude zmienia katalog. Odczytaj go w hooku i użyj ostatniego członu ścieżki jako etykiety.
Na Macu i Linux zapisz to jako ~/.claude/hooks/notify-session.sh i nadaj prawa wykonywania przez chmod +x. Wymaga 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"
Na Macu zamień ostatnią linię na powiadomienie przez osascript, jak w poradniku dla macOS. Na Windows odczytaj ten sam JSON w PowerShell przez ConvertFrom-Json; pełny przykład znajdziesz w poradniku dla Windows.
Potem zarejestruj go dla interesujących cię zdarzeń w ~/.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" }] }
]
}
}
Dwie uwagi o ścieżkach. Bierz zmienne takie jak "$input" w cudzysłów, bo nazwy folderów mogą zawierać spacje. A jeśli odwołujesz się do skryptu przez ${CLAUDE_PROJECT_DIR}, pamiętaj, że wskazuje on folder, w którym sesja wystartowała, nawet gdy Claude przejdzie do worktree. Jeśli potrzebujesz bieżącego folderu, odczytaj cwd z wejścia.
Jeśli pracujesz w tmux, panel albo okno często jest lepszą etykietą niż folder. Poradnik o tmux pokazuje, jak znaleźć właściwy panel i się na niego przełączyć.
04Trudniejsza część: odpowiedź właściwej sesji
Alert z etykietą mówi ci, która sesja na ciebie czeka. Ale żeby odpowiedzieć, i tak musisz dotrzeć do tego terminala. Przy trzech sesjach oznacza to szukanie właściwej karty, przewijanie do promptu i pisanie. Domowej roboty hook nie odeśle łatwo twojej odpowiedzi, bo tylko hook czekający w danej sesji może zwrócić decyzję do Claude Code.
Tę lukę wypełnia Claude Code Notifier. To niezależne narzędzie, nie tworzone przez Anthropic. Jego narzędzie wiersza poleceń, ccn, instaluje się jako hooki Claude Code na Macu, Windows i Linux, więc obejmuje każdą uruchomioną sesję, w dowolnym terminalu, bez konfigurowania każdej z osobna. Każde powiadomienie zawiera nazwę i folder projektu, więc na iPhone albo telefonie z Android widzisz, która sesja je wysłała. Ponieważ na twoją odpowiedź czeka ten sam hook, który wysłał prośbę, zgoda, wybór albo kolejne polecenie z telefonu trafia do sesji, która pytała.
Kilka szczegółów, które mają znaczenie przy wielu sesjach:
- Kilka komputerów. Jeden telefon możesz sparować z kilkoma komputerami, a komputer z kilkoma telefonami.
ccn deviceswyświetla telefony sparowane z tym komputerem. - Obecność. Jeśli pisałeś w ciągu ostatnich 30 sekund, nic nie czeka na telefon i terminal pyta jak zwykle. Jeśli cię nie ma, sesja czeka na odpowiedź z telefonu do ustalonego przez ciebie limitu (
hold_ceiling_seconds) i przestaje czekać, gdy tylko dotkniesz klawiatury. - Powiadomienia na pulpicie bez telefonu. Zanim sparujesz telefon,
ccnpokazuje powiadomienie na komputerze, gdy któraś sesja skończy pracę, potrzebuje uprawnień albo zadaje pytanie.
Jeśli uruchamiasz tylko jedną sesję naraz i siedzisz przy biurku, alert z etykietą na pulpicie prawdopodobnie ci wystarczy. Porównanie zestawia opcje obok siebie.
05FAQ
Jak sprawdzić, która sesja Claude Code wysłała powiadomienie?
Odczytaj pole cwd z wejścia JSON hooka i wstaw nazwę folderu do tytułu alertu. Przy worktree każda sesja ma własny folder, więc nazwa jest dla każdej inna. Narzędzia takie jak Claude Code Notifier same dodają nazwę i folder projektu do każdego powiadomienia.
Czy mogę uruchomić dwie sesje Claude Code w tym samym repozytorium?
Tak, ale daj każdej własny worktree, żeby ich zmiany się nie gryzły. claude --worktree <name> tworzy go w .claude/worktrees/<name>/ na nowym branchu i tam uruchamia sesję.
Jak nazwać sesję Claude Code?
Uruchom ją przez claude -n <name> albo wpisz /rename <name> w trakcie sesji. Później wznowisz ją przez claude --resume <name>.
Czy hooki działają osobno dla każdej sesji?
Tak. Każda sesja uruchamia własne hooki, gdy wystąpią jej zdarzenia, i przekazuje w wejściu swoje session_id i cwd. Hooki z ~/.claude/settings.json działają w każdej uruchomionej sesji.
Czy powiadomienia z różnych komputerów się nie pomieszają?
Nie z ccn. Każdy komputer paruje się z telefonem osobno i ma własną nazwę, a każde powiadomienie zawiera projekt, z którego pochodzi.