By supperik
Telegram-bridged notifications and human-in-the-loop for Claude Code: approval gate (binary + picker) and work-completion notifier.
Routes human-in-the-loop questions to Telegram instead of blocking the chat. Use this in TWO situations. (1) BEFORE executing any sensitive, risky, expensive, or destructive action — sends a binary Approve/Reject request and waits for the user. Trigger whenever you are about to delete or overwrite files, run `rm -rf`, push or force-push to git, deploy or publish, run `npm run deploy`, modify production data or secrets, change CI/CD or infrastructure, call paid APIs, or send emails/messages. (2) WHENEVER you would otherwise ask the user a clarifying or architectural question in chat — use picker mode (`--option Label:value`, optionally `:prompt_comment` for free-text follow-up) so the user can answer from their phone instead of having to read the terminal. Treat questions like "should I use X or Y?", "delete this or keep it?", "where does this belong?" as picker candidates, not chat candidates. Always prefer this skill over an inline chat question for genuine decisions. Treat timeouts and ambiguous responses as rejection — deny by default.
Sends a Telegram notification when Claude Code finishes work in a project. Wired as a Stop hook in the telegram-notify plugin, so it fires automatically at the end of every assistant turn (with a per-session cooldown to avoid spam). The model does not normally need to invoke this skill — it runs unattended. The bundled CLI scripts/send_completion_message.py is also available for explicit mid-session pings ("step 1 done, starting deploy").
Own this plugin?
Verify ownership to unlock analytics, metadata editing, and a verified badge. GitHub access is read-only (username + org membership).
Sign in to claimOwn this plugin?
Verify ownership to unlock analytics, metadata editing, and a verified badge. GitHub access is read-only (username + org membership).
Sign in to claimBased on adoption, maintenance, documentation, and repository signals. Not a security audit or endorsement.
A Claude Code plugin that bridges Claude's runtime with Telegram. Two skills out of the box, designed to grow:
| Skill | Purpose | Triggered by |
|---|---|---|
approval-gate | Human-in-the-loop checkpoint before risky actions; supports binary Approve/Reject and multi-option picker (with optional comment) | Model invocation + PreToolUse hook |
send-completion-message | Fire-and-forget "Claude Code finished" ping with last-message snippet | Stop hook (automatic, with per-session cooldown) |
Both skills share a single bot and a single chat — set TELEGRAM_BOT_TOKEN / TELEGRAM_CHAT_ID once and you're done.
telegram-notify-skill/
├── .claude-plugin/plugin.json ← manifest
├── hooks.json ← plugin-level Stop hook
├── .claude-plugin/marketplace.json ← marketplace descriptor (where to fetch the plugin from)
├── lib/telegram_client.py ← shared Telegram API helpers (stdlib-only)
└── skills/
├── approval-gate/ ← migrated from the standalone telegram-approval-gate
└── send-completion-message/ ← new in this plugin
/plugin marketplace add https://raw.githubusercontent.com/supperik/telegram-notify/master/.claude-plugin/marketplace.json
/plugin install telegram-notify
The marketplace descriptor lives in this repo's .claude-plugin/marketplace.json; it points the loader at this same repository on GitHub. If you forked or moved it, swap the URL above for the raw URL of your marketplace.json, and update source inside marketplace.json to match (supported source.type values: github, git, local).
Both skills look for the same two variables:
| Variable | Required | Purpose |
|---|---|---|
TELEGRAM_BOT_TOKEN | yes | Bot token from @BotFather |
TELEGRAM_CHAT_ID | yes | DM chat ID, group ID, or channel ID to send to |
TELEGRAM_API_BASE | no | Override https://api.telegram.org (use a proxy if api.telegram.org is blocked from your network) |
Set them in your shell, in ~/.claude/settings.json's env block, or as system env vars. The plugin doesn't ship secrets.
See skills/approval-gate/README.md. Highlights:
TELEGRAM_APPROVER_IDS — comma-separated user IDs allowed to approve (defaults to chat owner for DM chats).TELEGRAM_GATE_TIMEOUT, TELEGRAM_GATE_AUTOAPPROVE_SAFE, TELEGRAM_GATE_LANG — used by the bundled PreToolUse hook.| Variable | Default | Purpose |
|---|---|---|
TELEGRAM_COMPLETION_COOLDOWN_SECONDS | 600 | Min seconds between sends per session (0 disables) |
TELEGRAM_COMPLETION_DISABLED | — | Set to 1/true/yes for a silent no-op |
Once per Telegram account:
@BotFather → /newbot. Save the token as TELEGRAM_BOT_TOKEN.https://api.telegram.org/bot<TOKEN>/getUpdates. Find "chat": {"id": ...} — that's your TELEGRAM_CHAT_ID.TELEGRAM_APPROVER_IDS to the same numeric ID so only you can click Approve.Each skill is also usable standalone — copy skills/<skill>/ somewhere, set the env vars, and use the hooks/settings.example.json snippet to register the relevant hooks in your ~/.claude/settings.json. The shared lib/telegram_client.py is required (the scripts add it to sys.path automatically when the directory layout is preserved).
# JSON manifests parse
python -c "import json; [json.load(open(p)) for p in ['.claude-plugin/plugin.json','.claude-plugin/marketplace.json','hooks.json']]"
# Python sources compile
python -m py_compile lib/telegram_client.py \
skills/approval-gate/scripts/request_telegram_approval.py \
skills/approval-gate/hooks/pretooluse-hook.py \
skills/approval-gate/hooks/userpromptsubmit-hook.py \
skills/send-completion-message/scripts/send_completion_message.py \
skills/send-completion-message/hooks/stop-hook.py
# End-to-end (requires TELEGRAM_BOT_TOKEN / TELEGRAM_CHAT_ID set)
python skills/send-completion-message/scripts/send_completion_message.py \
--text "smoke test" --summary "from telegram-notify plugin install"
npx claudepluginhub supperik/telegram-notify --plugin telegram-notifyUltra-compressed communication mode. Cuts ~75% of tokens while keeping full technical accuracy by speaking like a caveman.
Frontend design skill for UI/UX implementation
Comprehensive UI/UX design plugin for mobile (iOS, Android, React Native) and web applications with design systems, accessibility, and modern patterns
Memory compression system for Claude Code - persist context across sessions
Marketing skills for AI agents — conversion optimization, copywriting, SEO, paid ads, ad creative, and growth
Standalone image generation plugin using Nano Banana MCP server. Generates and edits images, icons, diagrams, patterns, and visual assets via Gemini image models. No Gemini CLI dependency required.