כשמריצים כמה סשנים של Claude Code בבת אחת, התראה פשוטה של "Claude needs your attention" לא מספיקה, כי אי אפשר לדעת מאיזה סשן היא הגיעה. הפתרון הוא להכניס את שם הפרויקט או התיקייה של הסשן לכל התראה. כל hook מקבל את ה-cwd וה-session_id של הסשן כ-JSON, כך שה-hook יכול לקרוא אותם ולהוסיף את שם הפרויקט להתראה. תנו לסשנים שמות ברורים עם claude -n <name> או /rename, והשתמשו ב-claude --worktree <name> כדי שלכל סשן מקביל על אותו repository תהיה תיקייה משלו, שתופיע אחר כך בהתראה.
01למה סשנים מקבילים מבלבלים
הרצה של שניים-שלושה סשנים של Claude Code זה לצד זה היא היום דרך עבודה רגילה: אחד מתקן באג, אחד כותב בדיקות, אחד בוחן refactor. כל סשן נעצר בקצב שלו. הבעיות תמיד זהות:
- מגיעה התראה ואתם לא יודעים מאיזו לשונית terminal היא באה;
- סשן אחד מחכה כבר עשרים דקות על prompt הרשאה בזמן שעקבתם אחרי סשן אחר;
- אתם עונים בחלון הלא נכון.
שלושתן נובעות מבעיית זיהוי. כל התראה צריכה לציין מאיפה היא הגיעה, וכל תשובה צריכה לחזור לסשן ששאל.
02קודם כול, הפרידו את הסשנים כמו שצריך
השתמשו ב-worktrees לאותו repository
שני סשנים שעורכים את אותו checkout ידרסו זה את השינויים של זה. הדגל --worktree של Claude Code (או בקיצור -w) יוצר git worktree מבודד ומפעיל בו את הסשן:
claude --worktree feature-auth
claude --worktree fix-login
כברירת מחדל, כל worktree נוצר תחת .claude/worktrees/<name>/ בשורש ה-repository, על branch חדש בשם worktree-<name>. הריצו כל פקודה ב-terminal נפרד. הוסיפו את .claude/worktrees/ ל-.gitignore כדי שה-worktrees לא יופיעו כקבצים untracked.
ביציאה, Claude Code בודק את ה-worktree. אם הוא נקי ולא נתתם שם לסשן, Claude Code מוחק את ה-worktree ואת ה-branch שלו; אחרת הוא שואל אם לשמור אותו. כדי לחזור מאוחר יותר ל-worktree ששמרתם, הריצו את הפקודה claude --worktree <name> --resume שהוא מדפיס ביציאה. אם אתם מעדיפים לנהל worktrees בעצמכם, גם git worktree add ../project-feature-a -b feature-a עובד; פשוט הפעילו claude בתוך התיקייה הזו.
תופעת לוואי שימושית להתראות: לכל סשן יש עכשיו שם תיקייה משלו, למשל feature-auth, וזה בדיוק מה שרוצים לראות בהתראה.
תנו שמות לסשנים
שמות מקלים למצוא סשנים ולחזור אליהם:
claude -n auth-refactor
בתוך סשן פעיל, /rename auth-refactor עושה אותו דבר, והשם מופיע בשורת ה-prompt. מאוחר יותר, claude --resume auth-refactor מחזיר אתכם ישר לסשן. בבורר הסשנים (claude --resume בלי שם), Ctrl+W מרחיב את הרשימה לכל ה-worktrees של ה-repository.
03הכניסו את שם הפרויקט לכל התראה שאתם בונים בעצמכם
כל command hook מקבל ב-standard input קובץ JSON עם שדות שמשותפים לכל האירועים, ביניהם session_id, cwd, transcript_path ו-hook_event_name. בסשן של worktree, cwd הוא שורש ה-worktree, והוא מתעדכן אם Claude מחליף תיקייה. קראו אותו ב-hook והשתמשו בחלק האחרון של הנתיב כתווית.
ב-Mac וב-Linux, שמרו את זה בתור ~/.claude/hooks/notify-session.sh והפכו אותו לקובץ הרצה עם chmod +x. נדרש 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"
ב-Mac, החליפו את השורה האחרונה בהתראת osascript כמו שמוצג במדריך ל-macOS. ב-Windows, קראו את אותו JSON ב-PowerShell עם ConvertFrom-Json; במדריך ל-Windows יש דוגמה מלאה.
לאחר מכן, רשמו אותו לאירועים שמעניינים אתכם ב-~/.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" }] }
]
}
}
שתי הערות לגבי נתיבים. עטפו במירכאות משתנים כמו "$input", כי שמות תיקיות יכולים להכיל רווחים. ואם אתם מפנים לסקריפט עם ${CLAUDE_PROJECT_DIR}, זכרו שהוא נשאר מצביע על התיקייה שבה הסשן התחיל, גם אחרי ש-Claude עובר ל-worktree. כשצריך את התיקייה הנוכחית, קראו את cwd מהקלט.
אם אתם עובדים ב-tmux, ה-pane או החלון הם לרוב תווית טובה יותר מהתיקייה. המדריך ל-tmux מסביר איך למצוא את ה-pane הנכון ולעבור אליו.
04החלק הקשה: לענות לסשן הנכון
התראה עם תווית אומרת לכם איזה סשן מחכה לכם. אבל עדיין צריך להגיע לאותו terminal כדי לענות. עם שלושה סשנים, זה אומר למצוא את הטאב הנכון, לגלול ל-prompt ולהקליד. hook שבניתם בעצמכם לא יכול לשלוח את התשובה בחזרה בקלות, כי רק ה-hook שממתין בתוך אותו סשן יכול להחזיר החלטה ל-Claude Code.
את הפער הזה ממלא Claude Code Notifier. זה כלי עצמאי, שלא פותח על ידי Anthropic. כלי שורת הפקודה שלו, ccn, מותקן כ-hooks של Claude Code ב-Mac, ב-Windows וב-Linux, כך שכל סשן שתפתחו מכוסה, בכל terminal, בלי הגדרה נפרדת לכל סשן. כל התראה כוללת את שם הפרויקט והתיקייה, כך שבטלפון iPhone או Android רואים איזה סשן שלח אותה. ומכיוון שה-hook ששלח את הבקשה הוא זה שממתין לתשובה, אישור, בחירה או הנחיית המשך מהטלפון חוזרים בדיוק לסשן ששאל.
כמה פרטים שחשובים כשעובדים עם כמה סשנים:
- כמה מחשבים. טלפון אחד יכול להתחבר לכמה מחשבים, ומחשב אחד לכמה טלפונים.
ccn devicesמציג את הטלפונים שמחוברים למחשב הזה. - נוכחות. אם הקלדתם ב-30 השניות האחרונות, שום דבר לא ממתין לטלפון וה-terminal שואל כרגיל. אם אתם לא ליד המחשב, הסשן ממתין לתשובה מהטלפון עד לתקרה שתבחרו (
hold_ceiling_seconds) ומפסיק להמתין ברגע שנוגעים במקלדת. - התראות שולחן עבודה בלי טלפון. לפני שמחברים טלפון,
ccnמציג התראת שולחן עבודה במחשב בכל פעם שסשן מסיים, צריך הרשאה או שואל שאלה.
אם אתם מריצים רק סשן אחד בכל פעם ויושבים ליד המחשב, כנראה שהתראת שולחן עבודה עם תווית תספיק. מדריך ההשוואה מציג את האפשרויות זו לצד זו.
05שאלות נפוצות
איך יודעים איזה סשן של Claude Code שלח התראה?
קראו את השדה cwd מקלט ה-JSON של ה-hook ושימו את שם התיקייה בכותרת ההתראה. עם worktrees, לכל סשן יש תיקייה משלו, כך שהשם שונה בכל סשן. כלים כמו Claude Code Notifier מוסיפים את שם הפרויקט והתיקייה לכל התראה בשבילכם.
אפשר להריץ שני סשנים של Claude Code באותו repository?
כן, אבל תנו לכל אחד worktree משלו כדי שהשינויים לא יתנגשו. claude --worktree <name> יוצר worktree תחת .claude/worktrees/<name>/ על branch חדש ומפעיל בו את הסשן.
איך נותנים שם לסשן של Claude Code?
הפעילו אותו עם claude -n <name>, או הריצו /rename <name> בתוך הסשן. כדי לחזור אליו אחר כך: claude --resume <name>.
האם hooks רצים בנפרד לכל סשן?
כן. כל סשן מריץ את ה-hooks שלו כשהאירועים שלו מתרחשים, ומעביר בקלט את ה-session_id וה-cwd של אותו סשן. hooks שמוגדרים ב-~/.claude/settings.json חלים על כל סשן שתפתחו.
האם התראות ממחשבים שונים יתערבבו?
לא עם ccn. כל מחשב מתחבר לטלפון בנפרד ויש לו שם משלו, וכל התראה כוללת את הפרויקט שממנו הגיעה.