כש-Claude Code רץ בשרת מרוחק, hook של notify-send או osascript מופעל בשרת, ושם אין דסקטופ שיציג אותו. יש שתי דרכים שעובדות. הראשונה היא escape sequence של ה-terminal: ההתראה המובנית של Claude Code, או hook שמחזיר terminalSequence, עוברת חזרה דרך חיבור ה-SSH וה-terminal המקומי (Ghostty, Kitty או iTerm2) מציג אותה, אבל רק כל עוד אתם מחוברים וה-terminal פתוח. השנייה היא push דרך הרשת מהשרת לטלפון, באמצעות ntfy, webhook או Claude Code Notifier, שממשיך לעבוד גם כשהלפטופ סגור.
01למה פקודות התראה מקומיות לא עושות כלום דרך SSH
hook הוא פקודה ש-Claude Code מריץ על המכונה שבה Claude Code רץ. בשרת שמתחברים אליו דרך SSH, זו המכונה של השרת. notify-send שם צריך notification daemon של דסקטופ, ומדריך ה-hooks של Anthropic מציין שאין כזה בשרתים בלי ממשק גרפי ובסשנים של SSH. התראות toast של osascript ו-PowerShell בכלל לא קיימות שם.
אז השאלה היא לא "איזו פקודת התראה", אלא "איך אות מגיע מהשרת אליי". יש שלוש דרכים:
02דרך 1: התראות דרך ה-terminal של ה-SSH
ההתראה של Claude Code עצמו היא escape sequence שנכתב ל-terminal. מדריך ה-terminal של Anthropic מציין שהיא מגיעה למכונה המקומית דרך SSH, כך שגם סשן מרוחק יכול להתריע. Ghostty ו-Kitty מעבירים אותה למרכז ההתראות של הדסקטופ בלי שום הגדרה. iTerm2 עושה את זה אחרי שמפעילים: Settings > Profiles > Terminal, מסמנים Notification Center Alerts, ואז תחת Filter Alerts מפעילים את Send escape sequence-generated alerts.
אם ה-terminal שלכם לא אחד מאלה, או שאתם רוצים טקסט משלכם, hook יכול להחזיר escape sequence ש-Claude Code יכתוב. ל-hooks אין terminal משלהם, ולכן מחזירים אותו בשדה terminalSequence. שמרו את זה בשרת בתור ~/.claude/hooks/notify-ssh.sh:
#!/bin/bash
body=$(jq -r '.message // "Claude Code needs your attention"')
# OSC 9 for iTerm2, WezTerm and ConEmu; use '\033]777;notify;%s;%s\007' for Ghostty
seq=$(printf '\033]9;%s\007' "$body")
jq -nc --arg seq "$seq" '{terminalSequence: $seq}'
ואז הוסיפו אותו ל-~/.claude/settings.json בשרת:
{
"hooks": {
"Notification": [
{
"matcher": "",
"hooks": [
{ "type": "command", "command": "~/.claude/hooks/notify-ssh.sh" }
]
}
]
}
}
הריצו chmod +x ~/.claude/hooks/notify-ssh.sh והתקינו jq בשרת. התיעוד של Anthropic מפרט את ה-sequences הנתמכים: OSC 9 (iTerm2, ConEmu, Windows Terminal, WezTerm), OSC 99 (Kitty), OSC 777 (urxvt, Ghostty, Warp) וצליל bell פשוט. Claude Code כותב את ה-sequence רק בסשן אינטראקטיבי, כשהממשק שלו מוצג על המסך.
למגבלות אין פתרון. אם חיבור ה-SSH נופל, הלפטופ נכנס למצב שינה או שסוגרים את הלשונית, שום דבר לא מגיע. אם מריצים את Claude Code בתוך tmux, הוסיפו set -g allow-passthrough on ל-~/.tmux.conf בשרת; המדריך ל-tmux מסביר את זה וגם סשנים מנותקים.
03דרך 2: push מהשרת
push לא תלוי ב-terminal, ולכן הוא הבחירה הנכונה למשימות ארוכות. ה-hook שולח בקשת HTTPS מהשרת, ושירות מעביר אותה לטלפון או לצ'אט. במדריך ל-ntfy ובמדריך ל-Telegram, Slack ו-Discord יש hooks שעובדים. הם מודיעים שמשהו קרה, אבל לא יכולים לאשר פקודה או לענות על שאלה, כך ש-Claude עדיין מחכה שתתחברו מחדש.
04דרך 3: Claude Code Notifier בשרת
Claude Code Notifier הוא כלי עצמאי (של TouchTap, לא של Anthropic). כלי שורת הפקודה החינמי שלו, ccn, רץ על Mac, Windows ו-Linux, אז מתקינים אותו בשרת, איפה ש-Claude Code רץ:
curl -fsSL https://claudecodenotifier.com/install.sh | sh
הוא מוסיף את רשומות ה-hook שלו ל-~/.claude/settings.json בשרת, משאיר את השאר ויוצר גיבוי. התראות הדסקטופ של ccn מופיעות במכונה ש-ccn רץ עליה, ובשרת בלי ממשק גרפי זה אומר שאין להן שימוש. הטלפון הוא הדרך השימושית: התראות לטלפון עוברות דרך שרת ה-relay המוצפן של TouchTap, לא דרך חיבור ה-SSH, כך שהן עובדות מכל מכונה ש-ccn רץ עליה, כל עוד יש לה גישה לאינטרנט.
צימוד דרך SSH
הצימוד לא דורש דפדפן בשרת. אפשר להריץ ccn pair בסשן ה-SSH; הפקודה מדפיסה ב-terminal קוד QR שסורקים במצלמת הטלפון, וגם קישור שתקף ל-24 שעות. או לפתוח את האפליקציה בטלפון, להיכנס ל-Computers > Add a computer ולהריץ את השורה שמוצגת, שמתקינה ומצמדת בצעד אחד:
curl -fsSL https://claudecodenotifier.com/install.sh | sh -s 482913
(הקוד בן שש הספרות הוא דוגמה; השתמשו בקוד שהאפליקציה מציגה.) לטלפון אחד אפשר לחבר כמה מחשבים, כך שגם לפטופ וגם שרת יכולים לדווח אליו. פרטים נוספים במדריך הצימוד.
מה אפשר לעשות מהטלפון
אחרי הצימוד תקבלו push כש-Claude מסיים, צריך הרשאה או שואל שאלה. אפשר לאשר פעם אחת, לאשר לכל הסשן או לדחות הרשאה, לבחור תשובה לשאלה של Claude ולשלוח את ההוראה הבאה אחרי ש-Claude מסיים. אם אתם לא ליד המחשב, ה-terminal מחכה לתשובה מהטלפון עד תקרה שתבחרו, ומפסיק לחכות ברגע שמקלידים במקלדת. הריצו ccn doctor על השרת כדי לבדוק את ה-hooks, את פרטי ההתחברות ואת החיבור ל-relay. מידע על אפליקציות הטלפון בתמחור; כלי שורת הפקודה חינמי.
05איך לשמור על Claude Code בחיים כשחיבור ה-SSH נופל
כל שלוש הדרכים דורשות ש-Claude Code עצמו ימשיך לרוץ. אם מפעילים את claude ישירות מה-shell של SSH והחיבור נופל, הסשן נגמר יחד איתו. הריצו אותו בתוך tmux או GNU screen כדי שישרוד ניתוק, ואז התחברו אליו מחדש. ה-hooks ממשיכים לפעול גם בסשן מנותק, ובדיוק שם push לטלפון מוכיח את עצמו. המדריך ל-tmux והמדריך לעזיבת המחשב במשימות ארוכות מכסים את זרימת העבודה הזו.
06שאלות נפוצות
למה notify-send לא עושה כלום כשמשתמשים ב-Claude Code דרך SSH?
ה-hook רץ על השרת, ולשרת אין daemon של התראות שולחן עבודה. השתמשו ב-escape sequence שה-terminal המקומי מבין, או בשירות push.
האם ההתראה המובנית של Claude Code עובדת דרך SSH?
כן, ב-terminals שתומכים בזה. לפי התיעוד של Anthropic, התראת שולחן העבודה מגיעה למחשב המקומי דרך SSH; Ghostty ו-Kitty מציגים אותה בלי הגדרות, ו-iTerm2 אחרי שמפעילים התראות escape sequence. זה דורש שהחיבור יהיה פתוח.
מתקינים את ccn על הלפטופ או על השרת?
על השרת, כי שם רצים Claude Code וה-hooks שלו. אם מריצים Claude Code גם על הלפטופ, התקינו גם שם; אפשר לצמד טלפון אחד לשניהם.
האם אקבל התראות גם אם סשן ה-SSH מתנתק?
רק עם push מהשרת, ורק אם Claude Code עדיין רץ, למשל בתוך tmux. escape sequences מפסיקים לעבוד ברגע שהחיבור נסגר.
האם השרת צריך פורטים פתוחים בשביל התראות לטלפון?
ccn לא צריך חיבור נכנס. הוא צריך גישה יוצאת לאינטרנט כדי להגיע לשרת ה-relay.