عندما يعمل Claude Code على خادم بعيد، يُنفَّذ hook الخاص بـ notify-send أو osascript على الخادم، حيث لا يوجد سطح مكتب لعرض الإشعار. هناك طريقتان فعّالتان. الأولى هي terminal escape sequence: الإشعار المدمج في 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 هناك إلى خدمة إشعارات لسطح المكتب، وكما يشير دليل hooks من Anthropic، فإن الخوادم بلا واجهة رسومية وجلسات SSH لا تتوفر فيها هذه الخدمة. أما 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 ذلك إلى جانب الجلسات المنفصلة (detached).
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، وهذا يعني على خادم بلا واجهة رسومية أنها لن تظهر في أي مكان مفيد. الهاتف هو الطريق المفيد: تمر إشعارات الهاتف عبر خادم الترحيل المشفّر من TouchTap، لا عبر اتصال SSH، لذا تعمل من أي جهاز يعمل عليه ccn ما دام متصلًا بالإنترنت.
الإقران عبر SSH
لا يتطلب الإقران متصفحًا على الخادم. إما أن تنفّذ ccn pair في جلسة SSH، فيطبع رمز QR في الـ terminal تمسحه بكاميرا هاتفك، إلى جانب رابط صالح لمدة 24 ساعة. أو افتح التطبيق على هاتفك، وانتقل إلى Computers > Add a computer، ونفّذ السطر الذي يعرضه، فيُثبّت الأداة ويُجري الإقران في خطوة واحدة:
curl -fsSL https://claudecodenotifier.com/install.sh | sh -s 482913
(الرمز المكوّن من ستة أرقام مجرد مثال؛ استخدم الرمز الذي يعرضه تطبيقك.) يمكن ربط عدة أجهزة بهاتف واحد، فيرسل إليه الحاسوب المحمول والخادم معًا. راجع دليل الإقران لمزيد من التفاصيل.
ما يمكنك فعله من الهاتف
بعد الاقتران، يصلك push عندما ينتهي Claude أو يحتاج إلى إذن أو يطرح سؤالًا. يمكنك السماح مرة واحدة أو السماح طوال الجلسة أو رفض الإذن، واختيار إجابة عن سؤال Claude، وإرسال التعليمة التالية بعد أن ينتهي Claude. إذا كنت بعيدًا، ينتظر الـ terminal إجابة الهاتف حتى حدٍّ أقصى تختاره، ويتوقف عن الانتظار فور أن تكتب على لوحة المفاتيح. شغّل ccn doctor على الخادم للتحقق من الـ hooks وبيانات الاعتماد والاتصال بخادم الترحيل. راجع الأسعار بخصوص تطبيقات الهاتف؛ أما أداة سطر الأوامر فمجانية.
05إبقاء Claude Code قيد التشغيل عند انقطاع SSH
تتطلب الطرق الثلاث جميعها أن يبقى Claude Code نفسه قيد التشغيل. إذا شغّلت claude مباشرةً من صدفة SSH وانقطع الاتصال، تنتهي الجلسة معه. شغّله داخل tmux أو GNU screen ليصمد أمام الانقطاع، ثم أعد الاتصال به لاحقًا. تستمر الـ hooks في العمل داخل الجلسة المنفصلة، وهنا تظهر فائدة إشعارات push على الهاتف. يشرح دليل tmux ودليل الابتعاد أثناء المهام الطويلة سير العمل هذا.
06الأسئلة الشائعة
لماذا لا يفعل notify-send شيئًا عند استخدام Claude Code عبر SSH؟
يعمل الـ hook على الخادم، والخادم لا يحتوي على خدمة إشعارات سطح المكتب. استخدم 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 إلى أي اتصال وارد، بل يحتاج فقط إلى وصول صادر إلى الإنترنت للاتصال بخادم الترحيل.