כדי לקבל התראות push של Claude Code עם ntfy, מתקינים את אפליקציית ntfy בטלפון, נרשמים ל-topic עם שם שקשה לנחש, ומוסיפים ל-Claude Code hook שמריץ curl -d "message" https://ntfy.sh/your-topic. hook מסוג Notification מודיע כש-Claude צריך הרשאה או מחכה לכם, ו-hook מסוג Stop מודיע ברגע שתור מסתיים. זה בחינם, לוקח בערך עשר דקות, ועובד ב-Mac, ב-Windows וב-Linux.
01שלב 1: בוחרים topic ונרשמים אליו
ב-ntfy אין הרשמה. topic נוצר בפעם הראשונה שמישהו מפרסם אליו או נרשם אליו, וכל מי שיודע את השם יכול לקרוא אותו. התיעוד של ntfy עצמו אומר שה-topic הוא בעצם סיסמה, אז כדאי שיהיה ארוך ואקראי, למשל claude-7f3k9q2xw4mz. שם topic יכול לכלול אותיות, ספרות, קווים תחתונים ומקפים, עד 64 תווים.
מתקינים את אפליקציית ntfy (App Store, Google Play או F-Droid), מקישים על + ונרשמים ל-topic שלכם ב-ntfy.sh.
בודקים שזה עובד מה-terminal:
curl -H "Title: Test" -d "Hello from my computer" https://ntfy.sh/claude-7f3k9q2xw4mz
הטלפון אמור לרטוט תוך שנייה או שתיים. ב-Windows, curl.exe מגיע מובנה ב-Windows 10 ו-11 ומקבל את אותה שורה בדיוק.
02שלב 2: סקריפט hook (Mac ו-Linux)
Claude Code מעביר לכל hook אובייקט JSON דרך standard input. לשני האירועים יש שדות משותפים כמו cwd ו-hook_event_name. Notification מוסיף את message ו-notification_type, ו-Stop מוסיף את last_assistant_message, הטקסט של התשובה האחרונה של Claude. הסקריפט הזה הופך כל אחד מהם להתראת push קריאה. הוא דורש jq (brew install jq, או apt install jq ב-Debian וב-Ubuntu).
שומרים אותו בשם ~/.claude/ntfy-notify.sh ומריצים chmod +x ~/.claude/ntfy-notify.sh:
#!/bin/sh
TOPIC_URL="https://ntfy.sh/claude-7f3k9q2xw4mz"
input=$(cat)
event=$(printf '%s' "$input" | jq -r '.hook_event_name')
project=$(basename "$(printf '%s' "$input" | jq -r '.cwd')")
if [ "$event" = "Stop" ]; then
title="Claude finished: $project"
body=$(printf '%s' "$input" | jq -r '(.last_assistant_message // "Done") | .[0:300]')
priority=3
else
title="Claude needs you: $project"
body=$(printf '%s' "$input" | jq -r '.message // "Needs your attention"')
priority=4
fi
curl -s -H "Title: $title" -H "Priority: $priority" -H "Tags: robot" \
-d "$body" "$TOPIC_URL" > /dev/null
exit 0
העדיפות נעה בין 1 (מינימלית) ל-5 (דחופה). Tags מוסיף אימוג'י להתראה; robot מציג פרצוף של רובוט.
03שלב 3: מחברים אותו ב-settings.json
מוסיפים את ה-hooks לקובץ ~/.claude/settings.json. אם כבר יש בקובץ אובייקט hooks, מוסיפים את האירועים האלה בתוכו במקום להחליף אותו.
{
"hooks": {
"Notification": [
{
"matcher": "permission_prompt",
"hooks": [
{ "type": "command", "command": "~/.claude/ntfy-notify.sh" }
]
}
],
"Stop": [
{
"hooks": [
{ "type": "command", "command": "~/.claude/ntfy-notify.sh", "async": true }
]
}
]
}
}
"async": true מאפשר ל-hook של Stop לשלוח ברקע, כך שרשת איטית אף פעם לא מעכבת את Claude. פותחים session חדש של Claude Code, כי ה-hooks נטענים כש-session מתחיל.
Stop או idle_prompt?
Stop מופעל ברגע ש-Claude מסיים, גם אם אתם יושבים מול המקלדת. אם זה יותר מדי, מוותרים על הבלוק של Stop ומשתמשים במקום זאת ב-matcher permission_prompt|idle_prompt. לפי התיעוד של Anthropic, idle_prompt מופעל כ-60 שניות אחרי ש-Claude מסיים, ורק אם לא הקלדתם מאז, ו-permission_prompt מופעל אחרי שבקשת הרשאה חיכתה כשש שניות בלי הקשה. כך מקבלים בחינם סינון גס של "רק כשאני לא ליד המחשב". המדריך ל-Notification hook והמדריך ל-Stop hook מפרטים כל שדה ותזמון.
04Windows (PowerShell)
ב-Windows, שומרים את זה בשם %USERPROFILE%\.claude\ntfy-notify.ps1. לא צריך להתקין שום דבר נוסף:
$in = [Console]::In.ReadToEnd() | ConvertFrom-Json
$project = Split-Path $in.cwd -Leaf
if ($in.hook_event_name -eq 'Stop') {
$title = "Claude finished: $project"
$body = [string]$in.last_assistant_message
if ($body.Length -gt 300) { $body = $body.Substring(0, 300) }
$priority = '3'
} else {
$title = "Claude needs you: $project"
$body = [string]$in.message
$priority = '4'
}
Invoke-RestMethod -Method Post -Uri 'https://ntfy.sh/claude-7f3k9q2xw4mz' `
-Headers @{ Title = $title; Priority = $priority } `
-Body ([Text.Encoding]::UTF8.GetBytes($body)) | Out-Null
ואז משתמשים ברשומת ה-hook הזו במקום שורות ה-command שלמעלה:
{
"type": "command",
"shell": "powershell",
"command": "powershell -NoProfile -ExecutionPolicy Bypass -File \"$HOME\\.claude\\ntfy-notify.ps1\""
}
אם אתם מריצים את Claude Code בתוך WSL, השתמשו בסקריפט של Mac ו-Linux; מבחינת ה-hook, WSL הוא Linux.
05שמירה על פרטיות
כל מה שבהתראה עובר דרך שרת ה-ntfy, וב-ntfy.sh כל מי שיודע את שם ה-topic יכול לקרוא אותו. הודעת ה-Stop שלמעלה כוללת את תחילת התשובה של Claude, שעלולה להכיל קוד או שמות קבצים. שלוש דרכים להדק את זה:
- לשלוח פחות. מחליפים את גוף ההודעה של
Stopבמחרוזת קבועה כמו"Done"ומשאירים בכותרת רק את שם הפרויקט. - להשתמש ב-access token. ntfy מקבל
-H "Authorization: Bearer tk_..."בכל פרסום. בשרת משלכם, מגדיריםauth-default-access: "deny-all", יוצרים משתמש עםntfy user add, ויוצרים token עםntfy token add. - לארח שרת משלכם. אפשר לארח את ntfy בעצמכם. כדי לקבל מסירה מיידית באפליקציית ה-iPhone, התיעוד של ntfy ממליץ להגדיר
upstream-base-url: "https://ntfy.sh", שמעביר ל-ntfy.sh רק מזהה הודעה ו-hash של ה-topic כדי שיוכל להעיר את הטלפון; האפליקציה מושכת אז את ההודעה מהשרת שלכם.
אם Claude Code רץ על שרת מרוחק, אותו hook עובד שם בלי שינוי, ולכן ntfy מתאים מאוד להתראות דרך SSH.
06איפה Claude Code Notifier נכנס לתמונה
להתראות חד-כיווניות, ההגדרה שלמעלה היא פתרון מלא, ולא ננסה לשכנע אתכם לוותר עליה. היא רק מודיעה. כשההתראה אומרת ש-Claude צריך הרשאה, ה-session עדיין מחכה עד שתחזרו למקלדת.
ntfy כן תומך בכפתורי פעולה ששולחים בקשת HTTP, כך שאפשר לבנות מסלול תגובה בעצמכם: hook מסוג PermissionRequest שמפרסם את הבקשה, מחכה לתשובה ב-topic שני ומחזיר החלטה. יש פרויקטי קוד פתוח שעושים בדיוק את זה (ראו ההשוואה).
Claude Code Notifier אורז את המסלול הזה. עם טלפון מצומד, אפשר לאשר פעם אחת, לאשר לכל ה-session או לדחות הרשאה, לבחור תשובה כש-Claude שואל שאלה, ולשלוח את ההוראה הבאה אחרי ש-Claude מסיים, הכול מהטלפון. הוא גם בודק נוכחות: אם הקלדתם ב-30 השניות האחרונות, ה-terminal שואל כרגיל ושום דבר לא מחכה בטלפון. אם אתם לא ליד המחשב, ה-terminal מחכה לתשובה שלכם עד תקרה שאתם קובעים, ומפסיק לחכות ברגע שאתם נוגעים במקלדת. ccn רץ ב-Mac, ב-Windows וב-Linux; ראו את עמוד ה-ccn ואת המחירים של אפליקציות הטלפון.
07שאלות נפוצות
האם ntfy חינמי להתראות של Claude Code?
פרסום והרשמה ב-ntfy.sh לא דורשים חשבון, והשרת פתוח לכולם. ntfy מציע גם מסלול בתשלום ואפשר לארח אותו בעצמכם. את המגבלות העדכניות כדאי לבדוק באתר של ntfy.
למה ה-hook של ntfy לא מופעל?
פותחים session חדש של Claude Code אחרי עריכת settings.json, כי ה-hooks נטענים בהפעלה. אחר כך מריצים ידנית את שורת הבדיקה של curl, ומעבירים JSON לדוגמה לסקריפט, למשל echo '{"hook_event_name":"Stop","cwd":"/tmp/x"}' | ~/.claude/ntfy-notify.sh. רשימת פתרון התקלות מכסה את השאר.
אפשר להגיב ל-Claude Code מהתראת ntfy?
לא עם פרסום רגיל. כפתורי פעולת ה-HTTP של ntfy יכולים לשלוח בקשה, אבל צריך hook שמחכה לתשובה והופך אותה להחלטה ש-Claude Code מבין.
האם אקבל התראת push על כל סוג התראה?
רק על ה-matchers שרשמתם. השמיטו את matcher ברשומת ה-Notification כדי לקבל את כל הסוגים, כולל דיאלוגים של אימות ו-MCP.