בירור | פופ אפ כשקלוד בvsc צריך קלט ממני
-
@עידו300 אני משתמש בזה, יש לזה 7000 הורדות וקוד פתוח בgithub
https://github.com/ashmitb95/claude-notifier/tree/d702aea45d6170bf147f3c62106adc646576df9d@האדם-החושב הבעיה שם היא שהפופ אפ הוא רק בתוך הvsc ולא בוינדוס, ככה שאם עברתי לקרוא מיילים אני לא יודע שהוא צריך ממני משהו.
-
@האדם-החושב הבעיה שם היא שהפופ אפ הוא רק בתוך הvsc ולא בוינדוס, ככה שאם עברתי לקרוא מיילים אני לא יודע שהוא צריך ממני משהו.
-
@עידו300 אני מקבל התראות + צליל גם בווינ', תבדוק בהגדרות של ההתראות או בהגדרות התוסף.
לא קופץ...
-
לא קופץ...
-
@עידו300 לפי התמונה ההגדרה מתבצעת במחשב שאתה מחובר אליו בssh, לא במחשב הלוקאלי שלך
-
@עידו300 לפי התמונה ההגדרה מתבצעת במחשב שאתה מחובר אליו בssh, לא במחשב הלוקאלי שלך
@האדם-החושב אז למעשה אם אני מחובר עם SSH ושם עובד עם קלוד קוד, יש דרך לקבל התראה במצבים הנ"ל?
-
@האדם-החושב אז למעשה אם אני מחובר עם SSH ושם עובד עם קלוד קוד, יש דרך לקבל התראה במצבים הנ"ל?
@שמואל-ש.
מה שאני עשיתי זה להוסיף פקודה בהוק של סיום פעולה או של בקשת הרשאה שישלח בקשת http ל ntfy.sh ונרשמתי לנושא באתר שלהם וכך זה שולח לי התראה למחשב.משהו כמו זה:
"hooks": [ { "type": "command", "command": "curl -s -o /dev/null -d 'Claude סיים לענות' -H 'Title: Claude סיים' ntfy.sh/claude-XXXXXXXXX" } ] -
@שמואל-ש.
מה שאני עשיתי זה להוסיף פקודה בהוק של סיום פעולה או של בקשת הרשאה שישלח בקשת http ל ntfy.sh ונרשמתי לנושא באתר שלהם וכך זה שולח לי התראה למחשב.משהו כמו זה:
"hooks": [ { "type": "command", "command": "curl -s -o /dev/null -d 'Claude סיים לענות' -H 'Title: Claude סיים' ntfy.sh/claude-XXXXXXXXX" } ]@ע-ה-דכו-ע תוכל יותר לפרט?
איפה הכנסת את זה?
ומה עושה האתר הנ"ל? -
@ע-ה-דכו-ע תוכל יותר לפרט?
איפה הכנסת את זה?
ומה עושה האתר הנ"ל?@שמואל-ש. ntfy.sh זה אתר חינמי שמאפשר שליחה של התראות פוש (בדפדפן ובאפליקציה).
הצורה של שליחת ההתראות מאוד פשוטה, כמו שאתה יכול לראות זה פקודה אחת קצרה.
מכניסים את זה בהוקים של קלוד, שזה אומר קובץ בנתיב הזה (בלינוקס) /root/.claude/settings.json או בתיקיית המשתמש (אם רוצים שיהיה רק למשתמש ספציפי) /~/.claude/settings.json
-
@שמואל-ש. ntfy.sh זה אתר חינמי שמאפשר שליחה של התראות פוש (בדפדפן ובאפליקציה).
הצורה של שליחת ההתראות מאוד פשוטה, כמו שאתה יכול לראות זה פקודה אחת קצרה.
מכניסים את זה בהוקים של קלוד, שזה אומר קובץ בנתיב הזה (בלינוקס) /root/.claude/settings.json או בתיקיית המשתמש (אם רוצים שיהיה רק למשתמש ספציפי) /~/.claude/settings.json
@ע-ה-דכו-ע בהמשך להנ"ל
אצלי אני משתמש עם כמה חלונות שמחוברים לשרתים שונים, כך שקשה לקפוץ בין החלונות
אז עשיתי אצלי קובץ js שכתוב בכותרת לאיזה שרת מדובר, וכן בלחיצה עליו נפתחת החלון עצמוconst https = require("https"); const os = require("os"); const TOPIC = "claude"; const SERVER_NAME = "server"; const VSCODE_CLICK_URL = "vscode://vscode-remote/ssh-remote+שם השרת/נתיב התיקייה"; const event = process.argv[2] || "event"; const messages = { stop: "Claude סיים לענות", permission: "Claude מבקש הרשאה", question: "Claude שואל שאלה", subagent: "סוכן משנה סיים לעבוד" }; const body = messages[event] || `אירוע: ${event}`; const title = `${SERVER_NAME} - ${os.hostname()}`; const req = https.request({ hostname: "ntfy.sh", path: `/${TOPIC}`, method: "POST", headers: { "Title": title, "Click": VSCODE_CLICK_URL, "Priority": event === "permission" || event === "question" ? "high" : "default", "Tags": event === "stop" ? "white_check_mark" : "bell" } }); req.on("error", () => {}); req.write(body); req.end();את שם השרת רואים למעלה

מה שכתוב במקום
shmuel
וצריך להכניס את הנתיב שעליו החלון פתוחבהצלוחה...
זה מה שהכנסתי בsettings.json"hooks": { "Stop": [ { "hooks": [ { "type": "command", "command": "node \"$HOME/.claude/hooks/claude-notify.js\" stop" } ] } ], "PermissionRequest": [ { "hooks": [ { "type": "command", "command": "node \"$HOME/.claude/hooks/claude-notify.js\" permission" } ] } ], "PreToolUse": [ { "matcher": "AskUserQuestion", "hooks": [ { "type": "command", "command": "node \"$HOME/.claude/hooks/claude-notify.js\" question" } ] } ], "SubagentStop": [ { "hooks": [ { "type": "command", "command": "node \"$HOME/.claude/hooks/claude-notify.js\" subagent" } ] } ] }, -
@ע-ה-דכו-ע בהמשך להנ"ל
אצלי אני משתמש עם כמה חלונות שמחוברים לשרתים שונים, כך שקשה לקפוץ בין החלונות
אז עשיתי אצלי קובץ js שכתוב בכותרת לאיזה שרת מדובר, וכן בלחיצה עליו נפתחת החלון עצמוconst https = require("https"); const os = require("os"); const TOPIC = "claude"; const SERVER_NAME = "server"; const VSCODE_CLICK_URL = "vscode://vscode-remote/ssh-remote+שם השרת/נתיב התיקייה"; const event = process.argv[2] || "event"; const messages = { stop: "Claude סיים לענות", permission: "Claude מבקש הרשאה", question: "Claude שואל שאלה", subagent: "סוכן משנה סיים לעבוד" }; const body = messages[event] || `אירוע: ${event}`; const title = `${SERVER_NAME} - ${os.hostname()}`; const req = https.request({ hostname: "ntfy.sh", path: `/${TOPIC}`, method: "POST", headers: { "Title": title, "Click": VSCODE_CLICK_URL, "Priority": event === "permission" || event === "question" ? "high" : "default", "Tags": event === "stop" ? "white_check_mark" : "bell" } }); req.on("error", () => {}); req.write(body); req.end();את שם השרת רואים למעלה

מה שכתוב במקום
shmuel
וצריך להכניס את הנתיב שעליו החלון פתוחבהצלוחה...
זה מה שהכנסתי בsettings.json"hooks": { "Stop": [ { "hooks": [ { "type": "command", "command": "node \"$HOME/.claude/hooks/claude-notify.js\" stop" } ] } ], "PermissionRequest": [ { "hooks": [ { "type": "command", "command": "node \"$HOME/.claude/hooks/claude-notify.js\" permission" } ] } ], "PreToolUse": [ { "matcher": "AskUserQuestion", "hooks": [ { "type": "command", "command": "node \"$HOME/.claude/hooks/claude-notify.js\" question" } ] } ], "SubagentStop": [ { "hooks": [ { "type": "command", "command": "node \"$HOME/.claude/hooks/claude-notify.js\" subagent" } ] } ] }, -
@שמואל-ש. ntfy.sh זה אתר חינמי שמאפשר שליחה של התראות פוש (בדפדפן ובאפליקציה).
הצורה של שליחת ההתראות מאוד פשוטה, כמו שאתה יכול לראות זה פקודה אחת קצרה.
מכניסים את זה בהוקים של קלוד, שזה אומר קובץ בנתיב הזה (בלינוקס) /root/.claude/settings.json או בתיקיית המשתמש (אם רוצים שיהיה רק למשתמש ספציפי) /~/.claude/settings.json
@ע-ה-דכו-ע שדרוג נוסף
עשיתי שיוצג שם הכרטיסייה שמשם ההתראהconst https = require("https"); const os = require("os"); const fs = require("fs"); const path = require("path"); const TOPIC = "claude"; const SERVER_NAME = "server"; const VSCODE_HOST = "ssh-remote+shmuel"; const event = process.argv[2] || "event"; const messages = { stop: "Claude סיים לענות", permission: "Claude מבקש הרשאה", question: "Claude שואל שאלה", subagent: "סוכן משנה סיים לעבוד" }; function titleFromLogs(sessionId) { if (!sessionId) return null; const base = path.join(os.homedir(), ".vscode-server", "data", "logs"); const files = []; (function walk(dir) { try { for (const e of fs.readdirSync(dir, { withFileTypes: true })) { const p = path.join(dir, e.name); if (e.isDirectory()) walk(p); else if (/Claude VSCode.*\.log$/.test(e.name)) files.push(p); } } catch (_) { } })(base); files.sort((a, b) => { try { return fs.statSync(b).mtimeMs - fs.statSync(a).mtimeMs; } catch (_) { return 0; } }); const re = new RegExp('"sessionId":"' + sessionId + '"[^}]*?"title":"((?:[^"\\\\]|\\\\.)*)"', 'g'); for (const f of files.slice(0, 10)) { let txt; try { txt = fs.readFileSync(f, "utf8"); } catch (_) { continue; } let m, last = null; while ((m = re.exec(txt)) !== null) last = m[1]; if (last) { try { return JSON.parse('"' + last + '"'); } catch (_) { return last; } } } return null; } function resolveSessionName(sessionId, cwd) { const fromLog = titleFromLogs(sessionId); if (fromLog) return fromLog; if (sessionId) { try { const dir = path.join(os.homedir(), ".claude", "sessions"); for (const file of fs.readdirSync(dir)) { if (!file.endsWith(".json")) continue; try { const data = JSON.parse(fs.readFileSync(path.join(dir, file), "utf8")); if (data.sessionId === sessionId && data.name) return data.name; } catch (_) { } } } catch (_) { } } if (cwd) return path.basename(cwd); if (sessionId) return sessionId.slice(0, 8); return SERVER_NAME; } function send(stdin) { let sessionId = ""; let cwd = ""; try { const data = JSON.parse(stdin || "{}"); sessionId = data.session_id || data.sessionId || ""; cwd = data.cwd || ""; } catch (_) { } const name = resolveSessionName(sessionId, cwd); const body = messages[event] || `אירוע: ${event}`; const clickPath = cwd || ""; const payload = JSON.stringify({ topic: TOPIC, title: name, message: `${body}\n${SERVER_NAME}`, click: `vscode://vscode-remote/${VSCODE_HOST}${clickPath}`, priority: event === "permission" || event === "question" ? 4 : 3, tags: [event === "stop" ? "white_check_mark" : "bell"] }); const req = https.request({ hostname: "ntfy.sh", path: "/", method: "POST", headers: { "Content-Type": "application/json", "Content-Length": Buffer.byteLength(payload) } }); req.on("error", () => { }); req.write(payload); req.end(); } let input = ""; let done = false; function finish() { if (done) return; done = true; send(input); } try { process.stdin.setEncoding("utf8"); process.stdin.on("data", (chunk) => { input += chunk; }); process.stdin.on("end", finish); process.stdin.on("error", finish); setTimeout(finish, 800); } catch (_) { finish(); }
שלום! נראה שהשיחה הזו מעניינת אותך, אבל עדיין אין לך חשבון.
נמאס לכם לגלול בין אותם הפוסטים בכל ביקור? כשנרשמים לחשבון, תמיד תחזרו בדיוק למקום שבו הייתם קודם, ותוכלו לבחור לקבל התראות על תגובות חדשות (בין אם במייל, ובין אם בהתראת פוש). תוכלו גם לשמור סימניות ולפרגן ב-upvote לפוסטים כדי להביע הערכה לחברי קהילה אחרים.
בעזרת התרומה שלך, הפוסט הזה יכול להיות אפילו טוב יותר 💗
הרשמה התחברות

