أمثلة Hooks للإشعارات — hooks-notifications

مجانًا

عشر وصفات Hooks لـ Claude Code تنبّهك على Discord أو Slack أو Telegram، أو على سطح المكتب، حين ينهي Claude رده أو يتوقف منتظرًا إذنك، وقبل أوامر Bash وبعدها. تحدد كل بطاقة الحدث والمطابِق ومتغيرات البيئة، والسكربتات الكاملة في مجموعة أمثلة Hooks، والتفعيل إعداد تضيفه بنفسك إلى settings.json.

  • مجاني، ولا يتطلب أي دفع
  • تنزيل فوري بعد إتمام الطلب
  • مشترياتك محفوظة في حسابك

تكلّف Claude Code بمهمة طويلة ثم تنصرف إلى عمل آخر، فلا تعرف متى انتهى، ولا أنه توقف ينتظر موافقتك على أمر. هذه عشر وصفات Hooks تنبّهك في هذه اللحظات: رسالة على Discord أو Slack أو Telegram، أو إشعار على سطح المكتب. وهي مكتوبة لنظام Hooks في Claude Code، فلا تعمل في محادثات claude.ai.

أي وصفة لأي لحظة

في plugin/hooks عشر بطاقات Markdown، لكل منها حدثها والأداة التي تراقبها ومتغيراتها:

  • discord-notifications وtelegram-notifications: عند الحدث Stop ترسلان جملة ثابتة تقول إن Claude أنهى العمل.
  • discord-detailed-notifications وslack-detailed-notifications وtelegram-detailed-notifications: الحدث نفسه برسالة منسّقة، بطاقة embed في Discord وكتل blocks في Slack ونص Markdown في Telegram، فيها معرّف الجلسة ووقت الانتهاء.
  • slack-error-notifications: رغم اسمها تعمل عند الحدث Notification، فتنقل إلى Slack نص التنبيه الذي يصدره Claude Code حين يحتاج إذنك أو ينتظر ردك.
  • discord-error-notifications وtelegram-error-notifications: بعد كل أمر Bash تبحث في نتيجته عن error أو failed أو exception، فإن وجدت إحداها أرسلت أول 100 حرف من الأمر.
  • simple-notifications: إشعار على سطح المكتب باسم كل أداة ينتهي Claude من تنفيذها.
  • notify-before-bash: إشعار على سطح المكتب قبل أي أمر Bash، فيه أول 50 حرفًا منه، دون أن يوقفه.

لا تتضمن البطاقات هنا نص السكربت؛ السكربتات العشرة كاملة في مجموعة أمثلة Hooks، ومنها أخذتُ هذه التفاصيل والمثال التالي.

مثال: Claude ينتظر إذنك وأنت بعيد عن الشاشة

يحتاج Claude موافقتك على تشغيل أمر، فيطلق Claude Code الحدث Notification ويمرر إلى الـ Hook بيانات JSON فيها الحقل message، ونصه في مثال التوثيق الرسمي «Claude needs your permission». يقرأ سكربت slack-error-notifications هذا النص بأداة jq، ويرسله بـ curl في الحقل text إلى رابط SLACK_WEBHOOK_URL، فيظهر في قناتك.

خطوات التفعيل

  • جهّز الوجهة: رابط Webhook لقناة Discord أو Slack، أو توكن بوت Telegram ومعرّف المحادثة، واحفظها في متغيرات البيئة DISCORD_WEBHOOK_URL أو SLACK_WEBHOOK_URL أو TELEGRAM_BOT_TOKEN وTELEGRAM_CHAT_ID، لا في ملف تدفعه إلى git.
  • ثبّت curl وjq، وعلى ويندوز Git Bash لتشغيل سكربتات bash.
  • انسخ السكربت إلى ملف، ثم أضف إلى .claude/settings.json، أو ~/.claude/settings.json لكل مشروعاتك، الحدث والمطابِق المكتوبين في البطاقة وأمرًا من النوع command يشغّل الملف.
  • اكتب /hooks داخل Claude Code لترى ما سُجّل. الصيغة الكاملة في توثيق Hooks الرسمي.

أرفقتُ في الحزمة دليلًا عربيًا قصيرًا وفهرسًا بالملفات العشرة.

ملاحظات وجدتُها في السكربتات والحزمة

  • لا يضم مجلد plugin ملف hooks.json، فتثبيته كإضافة لا يفعّل أي تنبيه.
  • يقع الحدث Stop بعد كل رد لا في آخر الجلسة، فرسالة «Session Complete» في الوصفات المفصّلة تصلك مع كل رد.
  • تقرأ وصفتا الأخطاء حقلًا اسمه tool_result، والتوثيق يسمّي نتيجة الأداة tool_response، ويضع الأوامر الفاشلة في حدث مستقل هو PostToolUseFailure. وتقرآن مدخل JSON مرتين، فيصل نص الأمر فارغًا؛ عدّلهما قبل الاعتماد عليهما.
  • تأخذ الوصفات المفصّلة معرّف الجلسة من المتغير CLAUDE_SESSION_ID وتكتب unknown إن غاب، والتوثيق لا يذكره، بل يمرر المعرّف في الحقل session_id.
  • تقول بطاقة slack-error-notifications إنها لا تحتاج متغيرات، وسكربتها يحتاج SLACK_WEBHOOK_URL. وسكربتات الرسائل الثمانية تخرج بصمت إن غاب المتغير، وتُخفي مخرجات curl، فالرابط الخاطئ لا يُظهر أي خطأ.
  • إشعارات سطح المكتب تستخدم osascript في macOS وnotify-send في Linux، ولا تشمل ويندوز.

كتب هذه الوصفات مجتمع BuildWithClaude ونشرها davepoon بترخيص MIT، ونقلتُ ملفاتها كما هي.