Agent skill

Telegram

by AIOSAI in AIOSAI/AIPass

Multi-bot Telegram bridge — routes messages between Telegram and Claude tmux sessions

MITAuto-check passedAgent Workflows

Install Telegram

skills CLI
$ npx skills add AIOSAI/AIPass --skill telegram -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install AIOSAI/AIPass telegram --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/AIOSAI/AIPass.git skills-src && mkdir -p .claude/skills && cp -r skills-src/src/aipass/skills/lib/telegram .claude/skills/telegram && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
telegram
GitHub stars
288
Token cost
~4.9k tokens
SKILL.md length
2,509 words
Files
60
Skills in repo
3
Repo updated
First seen
Licence
MIT

At a glance

Multi-bot Telegram bridge — routes messages between Telegram and Claude tmux sessions

  • Works in 2 steps: An enabled handler entry in… → A matching provider bridge entry in…
  • Agent Workflows work in your project
  • SKILL.md covers Architecture, Usage, Control verbs (DPLAN-0270 P1) and /lock, plus 7 more sections
  • Runs Python scripts from its folder; calls claude

What it does

Telegram is an agent skill from AIOSAI/AIPass. Multi-bot Telegram bridge — routes messages between Telegram and Claude tmux sessions

Its SKILL.md is about 4.9k tokens, which your agent loads only when the skill is triggered. The skill folder holds 61 other files (for example `TELEGRAM_PORT_MAP.md`, `__init__.py` and `apps/__init__.py`).

It sits in Agent Workflows. It works with Telegram, tmux and Python. The repository describes itself as: Persistent Agent Workspace — AI agents that remember, collaborate, and never start from zero. The licence is MIT.

When your agent uses it

  • Agent Workflows work in your project

Example prompts

  • “/telegram”

Requirements

  • Python 3

Workflow steps

2 steps, taken from the first numbered list in SKILL.md.

  1. An enabled handler entry in .aipass/hooks.json (project config)
  2. A matching provider bridge entry in ~/.claude/settings.json

What it can do on your machine

Read from SKILL.md and the folder at commit 18fe75a. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Ships script files (Python, from the files we listed), which the agent can run.

    Shell commands in SKILL.md call:

    • claude

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Telegram loads about 4.9k tokens when it runs. Until then it costs about 24 tokens; SKILL.md has 2,509 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~24
When it runs · the whole SKILL.md, loaded when a task matches
~4.9k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from AIOSAI/AIPass at commit 18fe75a, republished under its MIT licence (© AIOSAI). 2,509 words, ~4,918 tokens.

Download SKILL.mdSave it as .claude/skills/telegram/SKILL.md (or your agent's skills folder). This skill also uses 59 other files; get the full folder from GitHub.
name
telegram
description
Multi-bot Telegram bridge — routes messages between Telegram and Claude tmux sessions
version
1.7.0
tags
communication, bridge, telegram, bot
requires.pip
telethon
requires.bins
tmux, claude
requires.aipass
api, prax, hooks, cli
switch.systemd_user
telegram-bot@api, telegram-bot@base, telegram-bot@devpulse, telegram-bot@prax_monitor, telegram-bot@scheduler
has_handler
true

Telegram Bridge

Status: switched off, left in place, no longer maintained (the owner's ruling, 2026-09-14). AIPass development does not use Telegram any more — BAUD, the phone face, is the notification and control surface now. The skill stays here, switched off, for anyone who wants a Telegram integration of their own: drone @skills on telegram lifts the switch and the code below is as it last ran (v1.7.0). Nothing in this directory is maintained from here on: its tests are skipped at collection (tests/conftest.py), a test that fails is disabled rather than fixed, and no new work lands here. With the switch off, drone @skills run telegram … refuses in one line and the daemon's notifier door sends nothing.

Multi-bot personal-assistant bridge: long-polling listener routes user Telegram messages into Claude tmux sessions. The base reply flow is Claude's Stop hook writing a pending file, which the bot picks up and sends back to Telegram; bots opting into streaming (below) also live-edit a "Processing..." placeholder while the reply is still being generated. A control-center bot exposes /start, /kill, /lock, /suspend to wake, kill, and lock or sleep terminal sessions by branch, and a separate hook mirrors terminal-typed messages into the same TG chat so the conversation reads as one continuous thread regardless of which door you type in.

Architecture

  • BaseBot — polling loop, tmux injection, heartbeat, lock management, control verbs, streaming, offline backoff
  • BranchPlugin — per-branch overrides (message prefix, response prefix, session startup)
  • ResponseRouter — CWD-safe pending-file routing for multi-bot
  • TelegramStandards — shared /start, /help, /new, /status command handlers
  • BotFactory — bot create/delete lifecycle (8-step)
  • BotRegistry — fcntl-locked JSON registry CRUD
  • BotOperations — start/stop/status ops
  • BotFatherClient — optional Telethon BotFather automation
  • Config — bot configuration via @api secrets store
  • FileHandler — download, classify, and prompt file uploads
  • LogStreamer — daemon thread tailing logs to Telegram
  • Notifier — standalone push notification sender
  • TmuxManager — tmux session helpers (not the control verbs — see below)
  • UserMessageRelay — UserPromptSubmit hook that mirrors terminal-typed messages into the branch's TG chat

Usage

bash
drone @skills run telegram start <bot_id>
drone @skills run telegram stop <bot_id>
drone @skills run telegram status [bot_id]
drone @skills run telegram create <bot_id> --token <token>
drone @skills run telegram delete <bot_id>
drone @skills run telegram notify "message"
drone @skills run telegram migrate-config [bot_id ...] [--apply]

Control verbs (DPLAN-0270 P1)

One bot doubles as a control center: _is_control_bot() is true when branch_name is None (a bare base bot) or "aipass" (the deployed control-center config — same bot_id="base" process, no separate bot). Only that bot handles these commands; branch bots fall through to the normal command set.

  • /start [branch] — wake a terminal agent (default branch: aipass). Spawns a detached tmux session aipass-<branch> in the branch's registered path and launches claude -c || claude. No-ops with "already running" if the session exists (one session per branch).
  • /kill [branch] — kill the aipass-<branch> tmux session outright. No graceful-stop nuance in v1 (the owner's ruling).
  • /status — on the control bot, appends a live listing of all aipass-* sessions (branch, PID, alive/dead) below the normal status text.

Session names use the CONTROL_SESSION_PREFIX = "aipass-" prefix and are managed with direct subprocess calls to tmux inside base_bot.py — not tmux_manager.py's kill_session/list_sessions/has_tmux, which remain ported-but-unwired (see table below).

The command menu is re-registered via BotFather's setMyCommands on every startup (_set_command_menu(), called from run()), so the control bot's /start entry is overridden with control-verb text instead of the generic welcome copy.

/lock

Deployment state, machine config, saga and ops runbook: docs/suspend_lock_deployment.md. This section documents the mechanism; that doc documents what is actually switched on.

Control-bot-only. Password-locks and darkens the screen while every agent keeps running behind the password wall. No root, no sudoers grant, no polkit rule, nothing sleeps, so none of /suspend's wake/grace/reachability machinery applies. Per the owner's ruling #217 this is the daily-driver verb: the machine stays awake 24/7 and /suspend is retired from routine use.

The bot runs as a systemd --user service, outside the graphical session scope — it has no XDG_SESSION_ID, so a bare loginctl lock-session has no ambient session to resolve and can refuse. _resolve_graphical_session() therefore walks loginctl list-sessions and picks the session whose Type is wayland or x11, State=active, and User equals the bot's own uid (never another user's desktop), then locks it by id. If that path fails or loginctl is missing, it falls back to the GNOME ScreenSaver Lock method on the session bus via gdbus. Only if both fail does it report the failure — a screen that never locked is never acked as locked.

Live-verified twice on 2026-08-02, both resolving session 3 (Type=wayland, State=active, uid 1000): first from a stripped environment with XDG_SESSION_ID/XDG_SESSION_TYPE unset to reproduce the service context (LockedHint no → yes), then by the owner's own tap in the control chat through the live telegram-bot@base.service after its restart onto v1.5.1. The gdbus fallback is covered by mocked tests only — it has never needed to fire on this machine.

/suspend (DPLAN-0270 P5)

Control-bot-only, and gated by suspend_enabled in the bot config (default true) — an ops kill-switch that grounds the verb without a code edit. /suspend [duration]:

  • No argument — heartbeat mode. Arms rtcwake, suspends, and on each wake opens a grace window; if no human turns up, it re-arms and re-suspends on its own (absorbs spurious wakes without staying up).
  • 8h / 45m — single-wake mode, wakes once after the given duration.

Cadence is adaptive, and all three knobs are bot-config overridable: suspend_active_heartbeat_minutes (default 3) while the conversation is live, suspend_heartbeat_minutes (default 25) once it goes quiet, and suspend_active_window_minutes (default 30) for how recent an inbound counts as live. Liveness is read from the shared presence stamp, so chatting with @devpulse tightens the control bot's beats. This deliberately recreates the Jul 30 - Aug 1 behaviour, where spurious ACPI wakes accidentally duty-cycled the machine in 7-44s beats and chat-behind-suspend felt near-live; once aipass-wake-sources masking made suspend actually stick, that accident stopped and the long beat trapped the conversation.

Resume detection has two triggers: a wall-clock jump in the poll loop larger than RESUME_WALLCLOCK_JUMP_SECONDS (45s — clears both the 30s poll timeout and the 60s network-backoff cap, so neither produces a false positive), and reaching the armed alarm time (_suspend_alarm_at), which catches a nap too short for the gap check to see. An optional systemd system-sleep hook (aipass-resume-signal) writing a resume-stamp file is kept as a third, secondary signal, since it is not proven to fire reliably on the deployed hardware.

Wake cause is decided by comparing the wake against the armed alarm time, not by guessing from gap size: waking more than SUSPEND_EARLY_WAKE_MARGIN_SECONDS (60s) early means a human woke the machine, so the whole cycle is cancelled and the RTC alarm disarmed. At or near the alarm, it's our own RTC and the grace window opens.

The grace window (SUSPEND_GRACE_WINDOW_SECONDS, 180s) is measured from the first successful Telegram poll after resume, not from resume detection — DNS/network needs 45-60s to come back, and the whole reply chain (poll → inject → model turn → send) has to fit inside the window or the machine re-suspends mid-conversation. Re-arming is also held while any bot has an undelivered pending (_turn_in_flight()), so a reply in flight is never cut off.

Human presence crosses processes. Every bot process stamps ~/.aipass/telegram_bots/last_inbound.json on any allowed-user inbound message; the control bot's grace check reads it. The control bot cannot see another bot's traffic in-process, so without this, chatting with @devpulse did not register as "human present" and the machine re-suspended under the owner's hands (incident 2026-08-02). Any inbound message on any bot now cancels the cycle, not just a control verb on the control bot.

Root-privileged pieces live as reviewable repo files in tools/suspend/, installed by tools/suspend/install_suspend_grants.sh (never applied directly to /etc by an agent):

  • aipass-suspend-sudoers — passwordless rtcwake for the bot user
  • 60-aipass-suspend.rules — polkit rule for systemctl suspend
  • aipass-resume-signal — optional system-sleep resume-stamp hook
  • aipass-wake-sources.sh + aipass-wake-sources.service — opt-in only, via --with-wake-sources. Boot-time oneshot that re-masks a spurious ACPI GPE wake source and disables USB wakeup on affected devices (both reset every reboot). Default is not installed, and reinstalling the grants never brings it back: masking those wakes made suspend real and trapped the conversation (ruling 2026-08-02, compass #216). Compass #217 later superseded the reasoning — the machine now stays awake 24/7 and /lock replaces /suspend entirely — but the opt-in default stands, and the unit is disabled on this machine.

Honest status: /suspend is retired from daily use and grounded as of 2026-08-02 (the owner's ruling, compass #217) — do not live-test it without the owner. The v1.5.0 rework worked as designed in a live soak, and the owner still hit the wall: fixed suspend is still suspend, and real sleep is real disconnect. So the machine now stays awake 24/7 and /lock is the daily driver. The verb stays shipped and tested as a battery-saver, with suspend_enabled as the parking brake; it has still never passed a hands-off overnight soak (DPLAN-0270 test-matrix step T4). Full deployment picture: docs/suspend_lock_deployment.md.

Show full SKILL.md (1,102 more words)Show less

Slash passthrough and the /context relay

An unregistered /xyz message must never reach tmux raw — the TUI's slash menu fuzzy-autocompletes unknown commands into unrelated registered ones. _guard_slash_injection() prefixes a space to anything not on the exact-match allowlist, so the TUI treats it as plain text. Two allowlists feed that one guard:

  • Side-effect commands (DEFAULT_PASSTHROUGH_COMMANDS — clear, compact, prep, memo; config key passthrough_commands) — injected as-is, fire and forget, normal pending-file flow.
  • Informational commands (DEFAULT_INFORMATIONAL_COMMANDS — context; config key informational_commands) — injected as-is, then their stdout is relayed back to the chat.

Why informational commands need their own completion path. A CC local command produces no assistant turn — the caveat wrapper suppresses a reply — so the Stop hook never fires. Writing a pending file for one would leave it undelivered until PENDING_STUCK_TIMEOUT_SECONDS gave up: a fresh flavour of the S179 stuck-pending bug. So _handle_informational_command() writes no pending file and starts no heartbeat. It captures a transcript line-count baseline, injects, and hands off to _relay_slash_stdout() on a daemon thread, which polls every SLASH_STDOUT_POLL_INTERVAL (1s) up to SLASH_STDOUT_TIMEOUT_SECONDS (90s) and then either relays the panel or edits the placeholder to an honest "no output appeared" message. Either way it terminates.

Two transcript shapes, both handled. CC writes a local command's stdout as type=system, subtype=local_command with the payload at the top-level content key (older builds used message.content — both are read), wrapped in <local-command-stdout>…</local-command-stdout>. Current CC emits /context twice: the ANSI-art TUI panel, immediately followed by an isMeta user entry carrying the same content as clean markdown. The twin is preferred; the search for it is bounded to TWIN_LOOKAHEAD_ENTRIES (3) so a later command's meta entry can't be mistaken for this one's output. If only the ANSI panel is present the relay spends exactly one extra poll waiting for the twin, then relays the escape-stripped panel rather than losing the output.

Scope guard — no surprise echo. The relay only ever runs for a command the bot itself injected, enforced twice over: the watcher starts only from handle_message (a TG-inbound message), and the scan is bounded to transcript lines written after the injection baseline. A /context run at the desk or via remote control cannot reach the phone.

Formatting. Output is markdown tables, which Telegram does not render at all, so _format_stdout_for_telegram() strips ANSI, escapes &/</>, and wraps in <pre> — sent with parse_mode="HTML" via the optional send_message(..., parse_mode=...) argument. Everything else still sends as plain text with no parse mode. Chunking wraps each chunk separately, so a <pre> is never split across two messages.

/cost is deliberately not allowlisted. It has never been run on this machine, so its transcript shape is unverified — the allowlist takes only commands whose output shape has actually been observed. Add it via the informational_commands config key once someone has confirmed it behaves like /context.

Streaming replies (DPLAN-0229)

Opt-in per bot via the stream config key (stream: true, default false). When enabled, instead of waiting silently for the Stop hook, _streaming_loop tails the active Claude transcript every STREAM_INTERVAL (2s) and live-edits the "Processing..." placeholder message with the growing response via editMessageText. _stream_edit handles Telegram's edit-specific quirks: a 429 backs off for the given retry_after seconds, and a "message is not modified" 400 is treated as success (no-op edit). The pending file written for the Stop hook still carries a "streaming": True flag either way — streaming is a live preview layered on top of the same finalize-on-Stop-hook flow, not a replacement for it.

user_message_relay — terminal-to-TG mirror

user_message_relay.py is a UserPromptSubmit hook: when you type in a terminal (or any non-TG door) instead of Telegram, it posts that message into the branch's TG chat so the chat reads as the full conversation. It skips: subagent prompts, system/dispatch noise, TG-origin messages (marked with "via Telegram:"), and consecutive duplicate prompts (md5-hashed).

Dual registration is required — an enabled: true flag alone does nothing. The hook needs BOTH:

  1. An enabled handler entry in .aipass/hooks.json (project config)
  2. A matching provider bridge entry in ~/.claude/settings.json

drone @hooks verify cross-checks the two and reports handlers that are enabled in one but missing from the other — run it after any hook registration change.

Bot lookup uses two directories with different naming conventions, searched separately:

  • MIRROR_DIR (~/.aipass/telegram_bots/) — bot_factory.py shadow configs, named {bot_id}.json
  • PENDING_DIR (~/.aipass/telegram_pending/) — transcript-relay stream state, named bot-{bot_id}.json

Offline handling — backoff, 409, 429

The main poll loop (run()) tracks two independent backoffs:

  • Non-network errors — plain retry_delay, 5s doubling to a 60s cap.
  • Network errors (_NetworkPollError, raised for connection failures, HTTP 5xx, and HTTP 409 — a second poller holding the long-poll) — exponential backoff from NETWORK_BACKOFF_INIT (1s) to NETWORK_BACKOFF_CAP (60s), with a summary log line every NETWORK_LOG_INTERVAL while still offline and a "reachable again" log on recovery.

HTTP 429 (rate limit) on poll_updates is handled inline — sleep for the retry_after Telegram returns, then return an empty update batch rather than raising.

Secrets

A bot is described by ten keys and exactly one is a credential. The token — and nothing else — lives in the secret store, reached through the in-process aipass.api.apps.modules.secrets API. Everything else (bot_id, bot_name, branch_name, work_dir, chat_id, allowed_user_ids, created_at, shared_session, attach_only) is ordinary config in ~/.aipass/telegram_bots/<bot_id>.json. config.load_bot_config() merges the two halves, so callers still get one dict.

config.SECRET_FIELDS is the whole rule — a key not named there does not belong in a secret store. telegram/telethon_config (api_id, api_hash) is an app credential, not a bot config: both its keys are secrets and stay put.

Bots created before the split still carry everything in the secret document. They keep working — and say so in a warning on every load. To split them:

bash
drone @skills run telegram migrate-config            # dry: names what would move
drone @skills run telegram migrate-config --apply    # writes

State files (offset, lock, registry) stay with the skill in .local/.

Ported-but-unwired (DPLAN-0220)

This bridge is a partial port of the ~9k-line "Dev-Pass" telegram system. Several functions are ported but not yet wired — they have no caller today and will be connected as DPLAN-0220 completes. They are not dead code (do not delete them; see S249), so seedgo's unused_function check is bypassed for them in .seedgo/bypass.json. As each one is wired up, remove its bypass entry.

FileFunction(s)Awaiting
base_bot.pyon_responseresponse hook (Wave-2 design call)
base_bot.py_read_transcript_tailDPLAN-0226 OUT relay — built and tested, wiring pending end-to-end integration
branch_plugin.pyon_responseper-branch response hook (Wave-2 design call)
response_router.pyfind_pending_bot, clean_expired_pendingresponse_router import-vs-delete decision
bot_registry.pyget_bot_by_work_dirCWD→bot match for the response router
bot_operations.pyget_all_botsmulti-bot listing
config.pyget_allowed_user_ids, validate_configconfig accessor/validator wiring
file_handler.pydownload_telegram_file, cleanup_filefile up/download feature
tmux_manager.py_send_rename, has_tmux, kill_session, list_sessions, get_session_paneinteractive tmux session management — control verbs use their own direct subprocess calls instead

chunk_text (long-message splitting, now used by scheduler_bot.py) and _extract_assistant_text (DPLAN-0226 OUT relay, now used by base_bot.py) are wired as of this pass and have been removed from this table and from .seedgo/bypass.json.

© AIOSAI, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

SKILL.md and 59 other files in src/aipass/skills/lib/telegram of AIOSAI/AIPass.

  • SKILL.md
  • TELEGRAM_PORT_MAP.md
  • __init__.py
  • apps/__init__.py
  • apps/handlers/__init__.py
  • apps/handlers/base_bot.py
  • apps/handlers/bot_factory.py
  • apps/handlers/bot_operations.py
  • apps/handlers/bot_registry.py
  • apps/handlers/botfather_client.py
  • apps/handlers/branch_plugin.py
  • apps/handlers/config.py
  • apps/handlers/file_handler.py
  • apps/handlers/log_streamer.py
  • apps/handlers/notifier.py
  • apps/handlers/prax_monitor_bot.py
  • apps/handlers/remote_control.py
  • apps/handlers/response_router.py
  • apps/handlers/scheduler_bot.py
  • … and 41 more

Open the folder on GitHubat commit 18fe75a

Compare with similar skills

Telegram next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Telegram compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Telegram this skillAIOSAI/AIPass288—~4.9kAutomated safety check: PassMIT
Terminal Agent Benchmarknowledge-co/con-terminal625—~822Automated safety check: PassMIT
Process Inboxtelegramdesktop/tdesktop33k2 repos~4.5kAutomated safety check: PassGPL-3.0
Telegrambubbuild/bub1.7k—~2.2kAutomated safety check: PassApache-2.0
Pytdbotpytdbot/client137—~4.3kAutomated safety check: PassMIT
Setupterranc/claude-telegram-bot-bridge134—~1.5kAutomated safety check: NotesNone

Similar skills

  • Terminal Agent Benchmark

    nowledge-co/con-terminal

    Run and maintain Con's terminal-agent benchmark against a live app session.

    625 GitHub stars~822 tokensUpdated today
    Agent WorkflowsAuto-check passed
  • Process Inbox

    telegramdesktop/tdesktop

    Process the local ignored ai-tdesktop inbox into durable, independently testable Telegram Desktop task records while task execution worktrees remain active.

    33k GitHub starsUsed in 2 repos~4.5k tokens
    Productivity & AutomationAuto-check passed
  • Telegram

    bubbuild/bub

    Telegram Bot skill for sending and editing Telegram messages via Bot API.

    1.7k GitHub stars~2.2k tokensUpdated yesterday
    Productivity & AutomationAuto-check passed
  • Pytdbot

    pytdbot/client

    Write Telegram bots and userbots with Pytdbot (async TDLib wrapper with high-level helpers; not the Telegram Bot API).

    137 GitHub stars~4.3k tokensUpdated 10 days ago
    Productivity & AutomationAuto-check passed
  • Setup

    terranc/claude-telegram-bot-bridge

    Install and configure the Telegram Skill Bot. An agent skill from terranc/claude-telegram-bot-bridge.

    134 GitHub stars~1.5k tokensUpdated 4 mo ago
    Productivity & AutomationAuto-check: notes
  • Fleet Helper

    Szotasz/marveen

    Shared, dependency-free Python helpers for the agent fleet - dashboard API (memory, messages, kanban), Telegram MarkdownV2 escaping, and rule-based Mail.app triage.

    115 GitHub stars~1.7k tokensUpdated yesterday
    Productivity & AutomationAuto-check passed

More from AIOSAI/AIPass

  • Prep

    AIOSAI/AIPass

    Session wrap-up. An agent skill from AIOSAI/AIPass.

    288 GitHub stars~880 tokensUpdated 3 days ago
    Auto-check passed
  • Memo

    AIOSAI/AIPass

    Update branch memory files after completing work. An agent skill from AIOSAI/AIPass.

    288 GitHub stars~597 tokensUpdated 3 days ago
    Auto-check passed

Questions about Telegram

What does Telegram do?

Multi-bot Telegram bridge — routes messages between Telegram and Claude tmux sessions. Telegram is an agent skill from AIOSAI/AIPass.

When should I use Telegram?

Telegram fits situations like: agent Workflows work in your project.

How do I install Telegram in Claude Code?

Run `npx skills add AIOSAI/AIPass --skill telegram -a claude-code`. Or copy the skill folder (src/aipass/skills/lib/telegram in AIOSAI/AIPass) into .claude/skills/telegram in your project. Claude Code loads it when a task matches its description.

How do I install Telegram in Codex?

Run `npx skills add AIOSAI/AIPass --skill telegram -a codex`. Or copy the skill folder (src/aipass/skills/lib/telegram in AIOSAI/AIPass) into .agents/skills/telegram in your project. Codex loads it when a task matches its description.

Can I use Telegram in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add AIOSAI/AIPass --skill telegram -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/telegram, .gemini/skills/telegram, .github/skills/telegram and .opencode/skills/telegram in your project.

What does Telegram need to run?

Going by SKILL.md and its folder, Telegram needs Python for the scripts in its folder and the command-line tools its instructions call (claude). Our summary lists: Python 3.

Does Telegram access the network?

SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.

Is Telegram safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does Telegram use?

Telegram is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Telegram use?

About 4.9k tokens (SKILL.md is roughly 20k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Telegram?

Skills that share tags, products or a category with Telegram: Terminal Agent Benchmark (nowledge-co/con-terminal, 625 stars), Process Inbox (telegramdesktop/tdesktop, 33k stars), Telegram (bubbuild/bub, 1.7k stars) and Pytdbot (pytdbot/client, 137 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Telegram?

AIOSAI (a GitHub user) maintains it in AIOSAI/AIPass, which has 288 GitHub stars. The repository holds 3 skills in this directory. The repository was last updated on October 5, 2026.

Source: AIOSAI/AIPass on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.