Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Send Telegram messages, files, and alerts via bot API; read replies; ask questions with inline buttons and wait for the answer (approve-from-phone). Supports multiple bots and named chat targets. Use when the user wants to send a Telegram message or alert, get notified on Telegram when a task finishes or needs input, ask for approval via Telegram, or wire Telegram notifications into hooks, cron jobs, or CI. Triggers: 'telegram', 'send me a telegram', 'alert me on telegram', 'ask me on telegram',
.claude/skills/sanjay3290-telegram/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-01 | ✗→✓ | ▲ Improved | -10% | 0% |
| case-02 | ✗→✓ | ▲ Improved | -64% | 0% |
| case-03 | ✗→✓ | ▲ Improved | -30% | 0% |
| case-07 | ✗→✓ | ▲ Improved | -40% | 0% |
| case-08 | ✗→✓ | ▲ Improved | -53% | 0% |
Send updates, alerts, and files to Telegram; read replies; run ask-and-wait approval flows. Pure bash + curl + jq — no install beyond a bot token.
First run: scripts/telegram.sh setup (guided BotFather walkthrough).
bashscripts/telegram.sh send "Deploy finished ✅" # basic alert scripts/telegram.sh send "low priority" --silent # no notification sound scripts/telegram.sh send "*bold* alert" --format md # MarkdownV2 (falls back to plain) scripts/telegram.sh send "hi" --to alerts --bot work # named target + named bot scripts/telegram.sh file report.pdf "Q3 report" # document (photos auto-detected) scripts/telegram.sh read # new incoming messages since last read ANSWER=$(scripts/telegram.sh ask "Deploy to prod?" --options "Yes,No" --timeout 300) # exit 0 = answered (stdout = answer), 2 = timeout
Env vars win, then ~/.config/telegram/config (mode 600):
TELEGRAM_BOT_TOKEN=123:ABC... # default bot
TELEGRAM_CHAT_ID=987654321 # default target
BOT_ALERTS_TOKEN=456:DEF... # --bot alerts (add via: setup --bot alerts)
TARGET_FAMILY=-100987... # --to family (any chat/group/channel id)Replies and answers are only accepted from configured chat IDs.
Ping your phone when Claude needs input, and when it finishes:
json{ "hooks": { "Notification": [{"hooks": [{"type": "command", "command": "~/.claude/skills/telegram/scripts/telegram.sh send \"🔔 Claude needs input in $(basename \\\"$PWD\\\")\""}]}], "Stop": [{"hooks": [{"type": "command", "command": "~/.claude/skills/telegram/scripts/telegram.sh send \"✅ Claude finished in $(basename \\\"$PWD\\\")\" --silent"}]}] } }
Approval gate in any script/automation:
bashif [ "$(scripts/telegram.sh ask 'Deploy to prod?' --options 'Yes,No')" = "Yes" ]; then ./deploy.sh fi
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→pass | 5,506 | 6,140 | +12% | 1 | 1 | 0% | 1,019 | 913 | -10% | 0 | 0 | — |
case-02 | fail→pass | 15,856 | 3,602 | -77% | 1 | 1 | 0% | 3,482 | 1,254 | -64% | 0 | 0 | — |
case-03 | fail→pass | 6,289 | 1,668 | -73% | 1 | 1 | 0% | 1,194 | 840 | -30% | 0 | 0 | — |
case-04 | pass→pass | 7,614 | 5,366 | -30% | 1 | 1 | 0% | 1,426 | 1,549 | +9% | 0 | 0 | — |
case-05 | pass→pass | 8,019 | 7,507 | -6% | 1 | 1 | 0% | 1,573 | 2,021 | +28% | 0 | 0 | — |
case-06 | fail→fail | 10,904 | 9,297 | -15% | 1 | 1 | 0% | 2,298 | 2,720 | +18% | 0 | 0 | — |
case-07 | fail→pass | 8,788 | 2,900 | -67% | 1 | 1 | 0% | 1,706 | 1,028 | -40% | 0 | 0 | — |
case-08 | fail→pass | 11,192 | 2,032 | -82% | 1 | 1 | 0% | 1,913 | 903 | -53% | 0 | 0 | — |
case-09 | fail→pass | 10,071 | 1,495 | -85% | 1 | 1 | 0% | 1,908 | 803 | -58% | 0 | 0 | — |
case-10 | fail→pass | 9,706 | 2,507 | -74% | 1 | 1 | 0% | 1,690 | 994 | -41% | 0 | 0 | — |
case-11 | fail→pass | 9,679 | 1,529 | -84% | 1 | 1 | 0% | 1,705 | 797 | -53% | 0 | 0 | — |
case-12 | pass→pass | 5,657 | 3,282 | -42% | 1 | 1 | 0% | 923 | 773 | -16% | 0 | 0 | — |
case-13 | fail→pass | 8,025 | 1,987 | -75% | 1 | 1 | 0% | 1,344 | 922 | -31% | 0 | 0 | — |
case-14 | fail→pass | 8,603 | 4,726 | -45% | 1 | 1 | 0% | 1,696 | 1,552 | -8% | 0 | 0 | — |
case-15 | fail→pass | 12,500 | 3,166 | -75% | 1 | 1 | 0% | 2,495 | 1,217 | -51% | 0 | 0 | — |
case-16 | fail→pass | 9,166 | 1,443 | -84% | 1 | 1 | 0% | 1,562 | 795 | -49% | 0 | 0 | — |
case-17 | fail→pass | 7,357 | 2,089 | -72% | 1 | 1 | 0% | 1,179 | 819 | -31% | 0 | 0 | — |
case-18 | pass→pass | 12,878 | 5,691 | -56% | 1 | 1 | 0% | 2,229 | 1,532 | -31% | 0 | 0 | — |
case-19 | pass→pass | 3,844 | 1,473 | -62% | 1 | 1 | 0% | 713 | 783 | +10% | 0 | 0 | — |
case-20 | fail→pass | 13,333 | 4,028 | -70% | 1 | 1 | 0% | 2,700 | 1,292 | -52% | 0 | 0 | — |
case-21 | fail→pass | 7,670 | 1,772 | -77% | 1 | 1 | 0% | 1,397 | 851 | -39% | 0 | 0 | — |
case-22 | pass→pass | 11,496 | 2,983 | -74% | 1 | 1 | 0% | 1,947 | 1,076 | -45% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted. The headline lift of +68 percentage points is the difference between those two pass rates over the 22 comparable cases.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.