serejaris/tg-bot-ops
Use when operating, debugging, deploying, or monitoring a Telegram bot or Telegram-to-agent gateway. Triggers on "telegram bot down", "bot not responding", "debug bot", "check webhook", "polling vs webhook", "restart bot", "deploy bot", "bot logs", "agent gateway", "Telegram Bot API error", "send test message", "бот не отвечает", "проверь бота", "логи бота", "перезапусти бота". Covers health checks, logs, webhook/polling diagnostics, environment validation, safe restart/deploy checklists, Bot API smoke tests, forum topic delivery, privacy mode, gateway routing, and incident notes.
npx skills add https://github.com/serejaris/personal-corp-skills --skill tg-bot-ops
Use this skill when the real question is whether a Telegram bot is receiving
updates, processing them in the intended runtime, and sending visible responses
to the right chat, user, or forum topic.
.env values, connection strings, raw logs, private DMs,payment payloads, session files, or full user records.
<TELEGRAM_BOT_TOKEN>,<TELEGRAM_USER_ID>, <CHAT_ID>, <TOPIC_ID>, <WEBHOOK_URL>.
edit BotFather settings, or deploy until the user has authorized that exact
action.
user it must be rotated before public release.
If the repo or runtime is unclear, identify:
TELEGRAM_BOT_TOKEN;current git state.
polling, MTProto bot session, or MTProto user session.
getMe using a masked token path.getWebhookInfoand inspect runtime logs.
409 Conflict by reading the error text:webhook conflict means webhook/deleteWebhook path; competing getUpdates
means find the polling owner.
E2E when user-visible behavior matters.
10. Incident note — report symptom, evidence, root cause, fix, and residual risk.
When the bot is a gateway from Telegram into an agent runtime, read
references/hermes-gateway.md. The reference is
Hermes-compatible but intentionally generic: bot handle, host, service name,
home directory, chat ids, topic ids, env paths, and logs must be placeholders or
redacted.
getUpdates, webhooks,sendMessage, getMe, callbacks, payments, and join requests.
start(bot_token=...) or a user-session E2E harness for what a Telegram user
sees.
polling, MTProto bot session, or MTProto user session. Do not mix without a
clear deduplication plan.
Safe read-only checks should avoid putting the token-bearing URL in shell
history, process listings, or copied logs. Prefer a tiny local helper:
import json, os, urllib.request
token = os.environ["TELEGRAM_BOT_TOKEN"]
for method in ("getMe", "getWebhookInfo"):
with urllib.request.urlopen(f"https://api.telegram.org/bot{token}/{method}") as response:
data = json.load(response)
print(method, {"ok": data.get("ok"), "result_keys": sorted((data.get("result") or {}).keys())})
Do not paste the token-bearing URL into notes or issues. In reports, write:
getWebhookInfo: webhook_url=<set|empty>, pending_update_count=<n>, last_error=<redacted>
Direct getUpdates diagnostics can consume pending updates. Use it only with a
fresh nonce, short timeout, known update owner, and restore plan.
message_thread_id.message_thread_id. Preserve message_thread_id for non-General topics.
inline messages via the bot, service messages, private chats, and channel
messages where they are a member. Admin bots can receive all group messages.
requires explicit user authorization.
Before restarting or deploying:
getMe, webhook/polling, and one visible smoke test.Answer with:
not checked, local only, runtime checked, verified in Telegram, or blocked..env, logs, user messages, payment payloads, or DB rows.message_thread_id when the bot lives in Telegram forum topics.Take serejaris/tg-bot-ops from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.