ב-macOS, Claude Code כבר שולח התראת דסקטופ ב-Ghostty, ב-Kitty וב-iTerm2 (ב-iTerm2 צריך להפעיל את הגדרות ההתראות), אבל Apple Terminal ורוב ה-terminals האחרים לא מקבלים כלום. כדי לקבל התראה בכל terminal, מוסיפים ל-~/.claude/settings.json hook מסוג Notification שמריץ osascript -e 'display notification ...', וגם hook מסוג Stop אם רוצים לדעת ברגע ש-Claude מסיים. צריך לאשר התראות ל-Script Editor בהגדרות המערכת, אחרת פקודת osascript נכשלת בלי שום הודעה.
01מה Claude Code עושה בעצמו
Claude Code מפעיל אירוע התראה כשהוא מסיים משימה או ממתין להרשאה ונראה שאתם לא ליד ה-terminal. מה שתראו תלוי ב-terminal, לפי מדריך ה-terminal של Anthropic:
ב-iTerm2, פתחו את Settings > Profiles > Terminal, סמנו את Notification Center Alerts, לחצו על Filter Alerts והפעילו את Send escape sequence-generated alerts. בדקו גם ש-iTerm2 מורשה לשלוח התראות ב-System Settings > Notifications.
ב-Apple Terminal אפשר לפחות לקבל צליל. הגדירו "preferredNotifChannel": "terminal_bell" בקובץ ~/.claude/settings.json והפעילו את Audible bell תחת Settings > Profiles > Advanced. המדריך לפעמון ה-terminal מפרט את הדרך הזו.
להתראה המובנית יש מגבלות: היא נשלחת רק כש-Claude Code חושב שאתם לא ליד המחשב, היא רק מודיעה שמשהו קרה, והיא אף פעם לא יוצאת מהמחשב.
02hook התראות עם osascript
hook עובד בכל terminal, כולל ה-terminals של סביבות פיתוח. זו הדוגמה ל-macOS ממדריך ה-hooks של Anthropic. הוסיפו אותה ל-~/.claude/settings.json ושמרו על שאר המפתחות שכבר קיימים:
{
"hooks": {
"Notification": [
{
"matcher": "",
"hooks": [
{
"type": "command",
"command": "osascript -e 'display notification \"Claude Code needs your attention\" with title \"Claude Code\"'"
}
]
}
]
}
}
הקלידו /hooks ב-Claude Code כדי לוודא שהוא מופיע תחת Notification.
ההרשאה של Script Editor
osascript שולח התראות בשם Script Editor. אם ל-Script Editor אין הרשאת התראות, הפקודה נכשלת בשקט ו-macOS לא שואל. הריצו את זה פעם אחת ב-Terminal:
osascript -e 'display notification "test"'
בפעם הראשונה לא יופיע כלום. פתחו את System Settings > Notifications, מצאו את Script Editor והפעילו את Allow Notifications. הריצו שוב את הפקודה והתראת הבדיקה אמורה להופיע.
מתי מופעל
ה-matcher הריק מופעל על כל סוגי ההתראות. שני החשובים ביותר הם permission_prompt (Claude ממתין כשש שניות לאישור ולא הקלדתם) ו-idle_prompt (Claude סיים לפני כ-60 שניות ולא הקלדתם מאז). המדריך ל-Notification hook מפרט את כל הסוגים והתזמון שלהם.
03לדעת ברגע ש-Claude מסיים
idle_prompt ממתין דקה. כדי לקבל הודעה מיד, הוסיפו hook מסוג Stop, שרץ כש-Claude מסיים את התור שלו. ל-Stop אין matcher:
{
"hooks": {
"Stop": [
{
"hooks": [
{
"type": "command",
"command": "osascript -e 'display notification \"Claude has finished\" with title \"Claude Code\" sound name \"Glass\"'"
}
]
}
]
}
}
sound name מקבל כל צליל מתוך /System/Library/Sounds, למשל Glass, Ping או Hero. אם רוצים רק צליל, אפשר להשתמש בפקודה afplay /System/Library/Sounds/Glass.aiff. עוד על האירוע הזה במדריך ל-Stop hook.
04הצגת ההודעה האמיתית
hooks מקבלים JSON בקלט הסטנדרטי. בקלט של Notification יש שדה message, למשל "Claude needs your permission". סקריפט קטן יכול להכניס את הטקסט הזה להתראה. שמרו אותו בתור ~/.claude/hooks/notify-mac.sh:
#!/bin/bash
msg=$(jq -r '.message // "Claude Code needs your attention"')
osascript -e 'on run argv' \
-e 'display notification (item 1 of argv) with title "Claude Code"' \
-e 'end run' "$msg"
העברת הטקסט כארגומנט, ולא בתוך מחרוזת ה-AppleScript, מבטיחה שמירכאות בהודעה לא ישברו את הפקודה. הפכו אותו לבר-הרצה עם chmod +x ~/.claude/hooks/notify-mac.sh והגדירו את פקודת ה-hook ל-~/.claude/hooks/notify-mac.sh. הסקריפט דורש jq (brew install jq אם jq --version נכשל).
05terminal-notifier: לחיצה מחזירה ל-terminal
לחיצה על התראה מ-osascript פותחת את Script Editor, וזה לא המקום שאליו רוצים להגיע. terminal-notifier מאפשר לבחור איזו אפליקציה תעלה לחזית:
brew install terminal-notifier
terminal-notifier -title "Claude Code" -message "Claude has finished" -sound default -activate com.googlecode.iterm2
השתמשו ב-com.apple.Terminal עבור Apple Terminal, או ב-bundle ID של העורך שלכם. אותה פקודה נכנסת לשדה command של ה-hook. בפעם הראשונה צריך לאשר התראות ל-terminal-notifier בהגדרות המערכת.
06Focus ו-Do Not Disturb
כל אלה הן התראות macOS רגילות, כך שמצב Focus יכול להסתיר אותן. אם הן נעלמות בשעות מסוימות, בדקו את System Settings > Focus ואשרו את האפליקציה ששולחת אותן (Script Editor, terminal-notifier או ה-terminal שלכם). להתראות שמכבדות שעות שאתם קובעים, ראו שעות שקטות ו-Do Not Disturb.
07איפה Claude Code Notifier נכנס לתמונה
ה-hooks שלמעלה הם פתרון טוב אם אתם יושבים מול ה-Mac ורוצים רק תזכורת. הם כבר לא מספיקים כשמתרחקים, כי התראת Mac לא תגיע אליכם למטבח ולא יכולה לענות ל-Claude.
Claude Code Notifier הוא כלי עצמאי (של TouchTap, לא של Anthropic) שבנוי על אותם hooks. כלי שורת הפקודה החינמי שלו, ccn, רץ על Mac, Windows ו-Linux. מתקינים אותו על ה-Mac עם:
curl -fsSL https://claudecodenotifier.com/install.sh | sh
או עם Homebrew: brew trust --formula touch-tap/tap/ccn && brew install touch-tap/tap/ccn. הוא מוסיף את רשומות ה-hook שלו ל-~/.claude/settings.json, לא נוגע בשאר הקובץ ושומר גיבוי. מאותו רגע הוא מציג התראת macOS כש-Claude מסיים, צריך הרשאה או שואל שאלה, בלי צורך ברשת או בטלפון.
אם מצמידים טלפון iPhone או Android, אותם אירועים מגיעים כהתראות push, ואפשר לאשר או לדחות הרשאה, לבחור תשובה לשאלה של Claude או לשלוח את ההוראה הבאה מהטלפון. אם הקלדתם ב-30 השניות האחרונות, ה-terminal שואל כרגיל ושום דבר לא ממתין בטלפון. ראו הצמדת טלפון והדף של ccn. אפליקציות הטלפון דורשות מנוי או רכישה לכל החיים; ראו מחירים.
אם מוסיפים את ccn, הסירו את ה-hooks של osascript שהגדרתם, אחרת תקבלו שתי התראות לכל אירוע. יש גם אפליקציית menu bar ישנה יותר ל-Mac; אל תריצו אותה במקביל ל-ccn על אותו Mac.
08שאלות נפוצות
למה ה-hook של osascript לא מציג כלום?
ברוב המקרים ל-Script Editor אין הרשאת התראות, ולכן macOS זורקת את ההתראה בלי שום שגיאה. מריצים פעם אחת osascript -e 'display notification "test"', ואז מאשרים את Script Editor ב-System Settings > Notifications. אם זה עדיין לא עובד, כדאי לוודא שמצב Focus לא פעיל ושה-hook מופיע ב-/hooks.
האם Claude Code שולח התראות macOS בלי שום הגדרה?
כן, ב-Ghostty וב-Kitty, וגם ב-iTerm2 אחרי שמפעילים בו התראות של Notification Center. ב-Apple Terminal ובטרמינלים של IDE אין התראת דסקטופ כברירת מחדל, אז שם צריך hook או ccn.
איך מקבלים התראה ברגע ש-Claude מסיים, ולא דקה אחר כך?
משתמשים ב-hook מסוג Stop. ההתראה idle_prompt נשלחת רק כ-60 שניות אחרי ש-Claude מסיים, ורק אם לא הקלדתם כלום, ואילו Stop רץ בסוף כל תור.
אפשר לשמוע צליל במקום לראות באנר?
כן. אפשר להגדיר את afplay /System/Library/Sounds/Glass.aiff כפקודת ה-hook, או להוסיף sound name "Glass" לפקודת ה-osascript כדי לקבל את שניהם.
אפשר לאשר הרשאה ישירות מההתראה של macOS?
לא עם osascript או terminal-notifier: הם רק מציגים טקסט. כדי לענות על בקשת הרשאה מתוך hook צריך את האירוע PermissionRequest; ראו מענה לבקשות הרשאה מתוך hook, או אשרו מהטלפון עם Claude Code Notifier.