Back to list
terrylica

dual-channel-watchexec-notifications

by terrylica

Claude Code Skills Marketplace: plugins, skills for ADR-driven development, DevOps automation, ClickHouse management, semantic versioning, and productivity workflows

7🍴 1📅 Jan 24, 2026

SKILL.md


name: dual-channel-watchexec-notifications description: Sends dual-channel notifications (Telegram + Pushover) on watchexec events with proper formatting. Use when monitoring file changes, process restarts, or setting up alerts. allowed-tools: Read, Write, Edit, Bash

Dual-Channel Watchexec Notifications

Send reliable notifications to both Telegram and Pushover when watchexec detects file changes or process crashes.

Core Pattern

watchexec wrapper scriptdetect eventnotify-scriptTelegram + Pushover

# wrapper.sh - Monitors process and detects restart reasons
watchexec --restart -- python bot.py

# On event, call:
notify-script.sh <reason> <exit_code> <watchexec_info_file> <crash_context>

Critical Rule: Format Differences

Telegram: HTML mode ONLY

MESSAGE="<b>Alert</b>: <code>file.py</code>"
# Escape 3 chars: & → &amp;, < → &lt;, > → &gt;

Pushover: Plain text ONLY

/usr/bin/env bash << 'SKILL_SCRIPT_EOF'
# Strip HTML tags before sending
MESSAGE_PLAIN=$(echo "$MESSAGE_HTML" | sed 's/<[^>]*>//g')
SKILL_SCRIPT_EOF

Why HTML for Telegram:

  • Markdown requires escaping 40+ chars (., -, _, etc.)
  • HTML only requires escaping 3 chars (&, <, >)
  • Industry best practice

Quick Reference

Send to Both Channels

/usr/bin/env bash << 'SKILL_SCRIPT_EOF_2'
# 1. Build HTML message for Telegram
MESSAGE_HTML="<b>File</b>: <code>handler_classes.py</code>"

# 2. Strip HTML for Pushover
MESSAGE_PLAIN=$(echo "$MESSAGE_HTML" | sed 's/<[^>]*>//g')

# 3. Send to Telegram with HTML
curl -s -d "chat_id=$CHAT_ID" \
  -d "text=$MESSAGE_HTML" \
  -d "parse_mode=HTML" \
  https://api.telegram.org/bot$BOT_TOKEN/sendMessage

# 4. Send to Pushover with plain text
curl -s --form-string "message=$MESSAGE_PLAIN" \
  https://api.pushover.net/1/messages.json
SKILL_SCRIPT_EOF_2

Execution Pattern

# Fire-and-forget background notifications (don't block restarts)
"$NOTIFY_SCRIPT" "crash" "$EXIT_CODE" "$INFO_FILE" "$CONTEXT_FILE" &

Validation Checklist

Before deploying:

  • Using HTML parse mode for Telegram (not Markdown)
  • HTML tags stripped for Pushover (plain text only)
  • HTML escaping applied to all dynamic content (&, <, >)
  • Credentials loaded from env vars/Doppler (not hardcoded)
  • Message archiving enabled for debugging
  • File detection uses stat (not find -newermt)
  • Heredocs use unquoted delimiters for variable expansion
  • Notifications run in background (fire-and-forget)
  • Tested with files containing special chars (_, ., -)
  • Both Telegram and Pushover successfully receiving

Summary

Key Lessons:

  1. Always use HTML mode for Telegram (simpler escaping)
  2. Always strip HTML tags for Pushover (plain text only)
  3. Escape only 3 chars in HTML: &&amp;, <&lt;, >&gt;
  4. Archive messages before sending for debugging
  5. Use stat for file detection on macOS (not find -newermt)
  6. Load credentials from env vars/Doppler (never hardcode)
  7. Fire-and-forget background notifications (don't block restarts)

Reference Documentation

For detailed information, see:

Bundled Examples:

  • examples/notify-restart.sh - Complete dual-channel notification script
  • examples/bot-wrapper.sh - watchexec wrapper with restart detection
  • examples/setup-example.sh - Setup guide and installation steps

Score

Total Score

65/100

Based on repository quality metrics

SKILL.md

SKILL.mdファイルが含まれている

+20
LICENSE

ライセンスが設定されている

0/10
説明文

100文字以上の説明がある

+10
人気

GitHub Stars 100以上

0/15
最近の活動

1ヶ月以内に更新

+10
フォーク

10回以上フォークされている

0/5
Issue管理

オープンIssueが50未満

+5
言語

プログラミング言語が設定されている

+5
タグ

1つ以上のタグが設定されている

+5

Reviews

💬

Reviews coming soon