כשההתראות של Claude Code מפסיקות לעבוד, הסיבה היא כמעט תמיד אחת מארבע: ה-hook לא נטען, ה-hook רץ אבל נכשל, האירוע שעליו אתם סומכים לא מופעל מתי שאתם מצפים, או שמערכת ההפעלה מסתירה את ההתראה. הריצו /hooks בתוך Claude Code כדי לראות מה נטען, פתחו session עם claude --debug כדי לראות מה כל hook עשה בפועל, ואז בדקו את הגדרות ההתראות במחשב או בטלפון. אם אתם משתמשים ב-Claude Code Notifier, הפקודות ccn doctor ו-ccn test מכסות את רוב זה בשתי פקודות.
רשימת הבדיקה הבאה מסודרת מהסיבה הנפוצה ביותר לפחות נפוצה. היא מתאימה ל-Mac, Windows ו-Linux.
011. בדקו ש-Claude Code טען את ה-hook
הקלידו /hooks ב-prompt של Claude Code. זהו דפדפן לקריאה בלבד של כל ה-hooks ש-Claude Code טען, וכל אחד מסומן לפי המקור שלו: הגדרות משתמש, הגדרות פרויקט, הגדרות מקומיות, plugin או ה-session הנוכחי. בחרו hook כדי לראות את הפקודה המדויקת ואת הקובץ שבו הוא מוגדר.
אם ה-hook שלכם לא מופיע ברשימה:
- ה-JSON לא תקין. קובצי ההגדרות הם JSON קפדני. פסיק מיותר בסוף או הערת
//שוברים את הקובץ, ו-Claude Code מדווח על Settings Error בהפעלה הבאה. הריצוclaude doctorכדי לראות אילו רשומות Claude Code דחה. - הקובץ נמצא במקום הלא נכון. hooks אישיים נכנסים ל-
~/.claude/settings.json(ב-Windows:%USERPROFILE%\.claude\settings.json). hooks של פרויקט נכנסים ל-.claude/settings.jsonבתוך הפרויקט. הריצו/statusוקראו את השורהSetting sourcesכדי לראות אילו קבצים נטענו. - שם האירוע שגוי. שמות אירועים תלויי רישיות:
Notification,Stop,PermissionRequest. שם אירוע לא מוכר מוצג כ-Settings Warning ומדולג. - ה-hooks כבויים.
"disableAllHooks": trueבקובץ הגדרות כלשהו מכבה את כל ה-hooks. אם/hooksמציגOnly hooks from managed settings run here, הארגון שלכם הגדירallowManagedHooksOnlyוה-hooks שלכם לא ירוצו. - השינוי לא נקלט. בדרך כלל Claude Code טוען מחדש את ההגדרות לבד. אם ה-hook לא מופיע אחרי כמה שניות, הפעילו מחדש את ה-session.
022. אשרו את ה-workspace trust
ב-session אינטראקטיבי, Claude Code מעכב hooks מכל קובצי ההגדרות, כולל ~/.claude/settings.json שלכם, עד שתאשרו את דיאלוג ה-workspace trust עבור התיקייה. אם סגרתם את הדיאלוג, או שאתם בתיקייה שמעולם לא פתחתם בה את Claude Code, ה-hooks לא ירוצו שם. הפעילו claude בתיקייה הזו ואשרו את הדיאלוג.
033. ודאו שהאירוע מופעל מתי שאתם חושבים
הרבה התראות "שבורות" הן בעצם עניין של תזמון. מתוך ה-hooks reference של Anthropic:
Notification עם permission_promptבקשת הרשאה ממתינה כשש שניות ולא הקלדתם. כל הקשה מאפסת את הטיימר.Notification עם idle_promptכ-60 שניות אחרי ש-Claude מסיים, אם לא הקלדתם ואין agent ברקע שעדיין רץ.Stopבכל פעם ש-Claude מסיים להגיב. לא בעת הפסקה (interrupt). שגיאות API מפעילות במקום זאת את StopFailure.PermissionRequestברגע ש-Claude Code עומד לבקש מכם הרשאה.לכן אם אתם בודקים hook של Notification תוך כדי הקלדה ב-terminal, ייתכן שהוא לעולם לא יופעל. עברו לחלון אחר וחכו. להתראה מיידית בסוף תור, השתמשו ב-Stop; המדריך ל-Stop hook מסביר עליו.
בדקו גם את מצב ההרשאות. גרסאות עדכניות של Claude Code פותחות sessions אינטראקטיביים ב-auto mode, שבו classifier מאשר את רוב הפעולות בלי לשאול. בלי בקשת הרשאה אין התראת permission_prompt ואין hook של PermissionRequest. כדי לבדוק התראות הרשאה, לחצו Shift+Tab עד ששורת הסטטוס מציגה manual mode, ואז בקשו מ-Claude לעשות משהו שדורש אישור. הפרטים במדריך הסבר על מצבי הרשאות.
גם matchers תלויי רישיות. matcher של PermissionRequest עם הערך bash לא יתאים לכלי Bash.
044. הריצו את פקודת ה-hook בעצמכם
העתיקו את הפקודה מ-/hooks והריצו אותה ב-terminal עם קלט לדוגמה:
echo '{"hook_event_name":"Stop","cwd":"/tmp","last_assistant_message":"done"}' | ./my-hook.sh
echo $?
כשלים נפוצים:
command not found: השתמשו בנתיב מוחלט לסקריפט, או ב-${CLAUDE_PROJECT_DIR}לסקריפטים בתוך הפרויקט.- הסקריפט לא עושה כלום: הפכו אותו לבר-הרצה עם
chmod +x ./my-hook.sh. jq: command not found: התקינוjq, או נתחו את ה-JSON עם Python או Node.js.
055. קראו את לוג ה-debug
הפעילו את Claude Code עם claude --debug. שום דבר נוסף לא מודפס ב-terminal; הלוג נכתב ל-~/.claude/debug/<session-id>.txt. כדי לבחור נתיב, השתמשו ב-claude --debug-file /tmp/claude.log והריצו tail -f /tmp/claude.log ב-terminal אחר. אם ה-session כבר רץ, /debug מפעיל רישום ומציג איפה הלוג.
חפשו שורות שמתחילות ב-Hooks:. כל אחת מציינת את האירוע, הפקודה, איך היא הסתיימה (finished with status 0, timed out, failed to start) וכמה זמן היא לקחה. לפרטים נוספים על התאמה, הגדירו CLAUDE_CODE_DEBUG_LOG_LEVEL=verbose.
שתי בעיות מתגלות רק כאן:
- פרופיל ה-shell מדפיס משהו. אם
~/.bashrcאו~/.zshrcמריץechoוה-shell טוען אותו, הטקסט הזה נכנס לפני פלט ה-JSON של ה-hook, ו-Claude Code מתייחס לפלט כטקסט רגיל. חפשו בלוגHook output does not start with {. עטפו את הפלט של הפרופיל ב-if [[ $- == *i* ]]; then ... fiכדי שירוץ רק ב-shells אינטראקטיביים. - אין terminal לכתוב אליו. ב-Mac וב-Linux, command hooks רצים בלי terminal שולט. hook שמנסה להשמיע צלצול או לכתוב escape codes ל-
/dev/ttyנכשל בשקט. השתמשו במקום זאת בפקודת התראת desktop, או בהגדרהpreferredNotifChannelשל Claude Code עצמו, שמוסברת במדריך ל-terminal bell.
066. בדקו את מערכת ההפעלה
אם ה-debug log מראה שה-hook הסתיים עם status 0 ועדיין לא הופיע כלום, מערכת ההפעלה הסתירה את ההתראה. ודאו שלאפליקציה ששולחת את ההתראה מותר להציג התראות, ושמצב ריכוז (Mac), 'נא לא להפריע' (Windows) או מתג 'נא לא להפריע' בשולחן העבודה של Linux כבויים. ב-Linux חייב לרוץ notification daemon.
פקודות לכל פלטפורמה נמצאות במדריכים ל-macOS, ל-Windows ול-Linux.
07אם משתמשים ב-Claude Code Notifier
Claude Code Notifier הוא כלי עצמאי (לא של Anthropic) שמתקין תוכנה קטנה, ccn, כ-hooks של Claude Code. כל מה שנכתב למעלה עדיין רלוונטי, כי ccn הוא hook כמו כל hook אחר. התחילו בבדיקות שלו:
ccn doctorבודק את ה-hooks, את פרטי ההתחברות, את החיבור לשרת ואת זיהוי הנוכחות. תקנו קודם כל דבר שהוא מדווח עליו.ccn testשולח התראת בדיקה. אם היא מגיעה, הבעיה היא באירוע או בהגדרה, לא בצינור עצמו.ccn devicesמציג את הטלפונים שמצומדים למחשב הזה. אם אין אף אחד, צמדו מחדש עםccn pair; מדריך הצימוד מסביר איך.ccn config showמדפיס את ההגדרות בפועל. ודאו ש-notify_on_done,notify_on_permissionו-notify_on_questionמופעלים, ושה-quiet_hoursלא חלות על השעה הנוכחית. הגדרות ששונו בטלפון מגיעות למחשב עםccn sync.
כמה התנהגויות נראות כמו תקלה, אבל הן מכוונות:
- אתם ליד המקלדת. אם הקלדתם ב-30 השניות האחרונות, שום דבר לא מחכה לטלפון וה-terminal שואל כרגיל. כש-
quiet_when_presentמופעל (ברירת המחדל), הטלפון לא מקבל כלום כל עוד אתם ב-terminal שבו Claude רץ, ומקבל כרטיס מידע אם אתם פעילים באפליקציה אחרת. - התראות כפולות או חסרות ב-Mac. אל תריצו את אפליקציית שורת התפריטים הישנה ל-Mac ואת
ccnעל אותו Mac. - הפסקה ארוכה. אם לא משתמשים בטלפון או במחשב במשך 60 יום, השרת מוחק את הצימוד שלו, ויש לצמד מחדש.
בטלפון עצמו, ודאו שהתראות מותרות לאפליקציה, ושמצב ריכוז (iPhone) או 'נא לא להפריע' (Android) לא משתיקים אותה. ב-Android, אופטימיזציית סוללה עלולה לעכב התראות של חלק מהאפליקציות; אם התראות מגיעות באיחור, אפשרו לאפליקציה לפעול ללא הגבלה בהגדרות הסוללה שלה. אם ערכתם את settings.json ידנית, ccn doctor יגיד לכם אם ה-hooks שלו עדיין במקום. ccn upgrade מעדכן לגרסה האחרונה.
08שאלות נפוצות
למה ה-Notification hook שלי מופעל רק לפעמים?
הסוגים permission_prompt ו-idle_prompt מתוזמנים לרגע שבו נראה שאתם לא ליד המחשב. permission_prompt מחכה כשש שניות בלי הקלדה, ו-idle_prompt כ-60 שניות אחרי ש-Claude מסיים. אם אתם מקלידים, הם נדחים. להתראה מיידית השתמשו ב-PermissionRequest או ב-Stop.
איפה נמצא ה-debug log של Claude Code?
הריצו claude --debug וה-log ייכתב ל-~/.claude/debug/<session-id>.txt. אפשר לבחור מיקום עם claude --debug-file <path>, או להשתמש ב-/debug בתוך session פעיל.
ccn test עובד, אבל התראות אמיתיות לא מגיעות. למה?
הצינור תקין, אז כדאי לבדוק הגדרות ותזמון. בדקו ב-ccn config show את notify_on_* ואת quiet_hours, זכרו ששום דבר לא נשלח כשאתם ב-terminal ו-quiet_when_present מופעל, ובדקו את מצב ההרשאות ב-Claude Code.