telegram

star 16

Configure Telegram with /connect, then resolve Telegram user/group ids and search Telegram messages through the internal Telegram CLI.

berabuddies By berabuddies schedule Updated 6/2/2026

name: telegram description: Configure Telegram with /connect, then resolve Telegram user/group ids and search Telegram messages through the internal Telegram CLI. allowed-tools: - Bash argument-hint: "[Telegram login task]" arguments: target user-invocable: false disable-model-invocation: false

Use /connect telegram-login <connection> when the user needs to authenticate or repair a Telegram personal-account connection. That flow uses AskUserQuestion for method choices and secrets.

Use the internal Telegram CLI when peer lookup, message listing, or message search is needed. Run it from Bash as telegram ...; do not expose a connector-specific slash command for Telegram. The CLI dispatches to the Telegram subscriber and does not require a model turn.

Target: $target

Connection/account selection:

The default Telegram personal account connection is telegram-user. When the user has multiple local Telegram accounts, use a distinct kebab-case connection slug per account and pass it to every Telegram CLI command with --connection or --account. Each slug maps to a separate supervised subscriber, topic, and session file. --account-index is only the local import-time picker for Telegram Desktop/native storage slots; it is not the stable account identity.

telegram --connection tg-alt search-peers "C & Jason" --kind group

After /connect login or import completes, the auth tool registers that connection automatically with connector_slug="telegram-login". Use the same connection slug in WorkflowCreate, ConnectorActionDraft, and ConnectorAct.

Peer lookup workflow:

When the user names a Telegram user, group, or channel and the next action needs a send target or workflow filter, resolve the stable numeric id first. Do not send to an ambiguous title directly.

telegram search-peers "C & Jason" --kind group

Use telegram list-peers --kind group --limit 50 to browse visible groups, or omit --kind to include users, groups, and channels. The local command returns the subscriber result directly. Use payload.peers[].id as the send target or workflow chat id when JSON output is returned; it is a string on purpose so large Telegram ids stay exact.

Message search workflow:

When the user asks to find text in Telegram, resolve the chat first and then search messages by peer id. Prefer numeric peer ids over titles.

telegram search-peers "TonyKe" --kind user
telegram list-messages --peer 123456789 --limit 20
telegram list-messages --peer 123456789 --from "TonyKe" --scan-limit 200 --limit 20
telegram search-messages "karen" --peer 123456789 --context 0 --limit 10

Use telegram list-messages when the user asks to inspect recent chat history without a specific search term. Use the returned --before-id cursor to fetch older pages. Add --from <sender> when the user asks for messages from one person in a group; the sender filter matches sender id, username, @handle, or display name. The command scans a bounded recent window while collecting sender matches; increase --scan-limit when a sparse sender needs a deeper page. Use --context 0 for fast search; non-zero context returns previous messages before each hit.

Use --succinct with the internal CLI for normal agent work. It returns plain text context lines with relative offsets, for example -2 Sender: message, instead of JSON. Only the message commands accept --succinct: list-messages and search-messages support it; the peer commands list-peers and search-peers do not (they always return their peer list). Messages with downloadable media include a local file path; captions follow the path on the same line. Text-only media such as polls are rendered as text with answer indexes, for example poll: Ship it? [open, 3 voters] | 0: Yes / 1: No. Replies are shown as a prefix on the message line, for example [reply to #42: previous text]. Without --succinct, results are JSON; inspect payload.results[].context, where the message with is_match: true is the search hit and earlier items are previous-message context. JSON media is a string with the same contract: local file path for downloaded media, or text for text-only media. JSON poll is null or an object with question, open/closed status, total voters, answer indexes, answer text, chosen/correct flags, voter counts, and option_hex tokens. JSON reply_to is null or an object with the replied message id, peer, thread top id, quote text, quote offsets, reply media kind, forwarded reply metadata, and a one-level resolved_message when Telegram can fetch it.

Connector action workflow:

Use ConnectorActionDraft with the send_message connector action for outbound Telegram messages. This creates a human-reviewable draft and does not send directly. Pass reply_to or reply_to_message_id with a Telegram message id to send the outbound message as a reply after approval. To send files, images, or albums, include media as a path/URL string, an object, or an array. The message text is the caption for the first attachment unless an attachment object has its own caption.

{
  "to": "123456789",
  "message": "done",
  "reply_to": 42,
  "media": [
    {"path": "/tmp/screenshot.png", "kind": "photo", "caption": "result"},
    {"path": "/tmp/report.pdf", "kind": "file"}
  ]
}

Use Telegram-specific connector actions for message edits/deletes/forwards, pinning, reactions, read state, poll votes, chat membership/admin operations, account profile updates, group metadata updates, avatars, and stories. These are ConnectorAct actions on telegram-login when they do not send, forward, post, or otherwise publish an external message. Send-like actions require the human-review draft path and must not be called directly with ConnectorAct. Do not invent a separate Telegram runtime command. Prefer numeric peer ids resolved by search-peers.

Use the vote_poll connector action to click a poll answer. Prefer answer indexes from --succinct output or option_hex from JSON output; exact answer text also works when unambiguous.

{"to": "123456789", "message_id": 77, "option": 0}

Common Telegram action examples:

{"connector_slug": "telegram-login", "connection_slug": "tg-alt", "action": "update_group_title", "input": {"to": "123456789", "title": "New group name"}}
{"connector_slug": "telegram-login", "action": "react", "input": {"to": "123456789", "message_id": 77, "emoji": "<emoji>"}}
{"connector_slug": "telegram-login", "action": "pin_message", "input": {"to": "123456789", "message_id": 77}}
{"connector_slug": "telegram-login", "action": "invite_users", "input": {"to": "123456789", "users": ["987654321"]}}
{"connector_slug": "telegram-login", "action": "update_profile", "input": {"first_name": "Puffer", "about": "Agent account"}}
{"connector_slug": "telegram-login", "action": "update_avatar", "input": {"path": "/tmp/avatar.jpg"}}
{"connector_slug": "telegram-login", "action": "update_group_photo", "input": {"to": "123456789", "path": "/tmp/group.jpg"}}
{"connector_slug": "telegram-login", "action": "send_story", "input": {"media": "/tmp/story.jpg", "caption": "build passed"}}

Supported action slugs include vote_poll, edit_message, delete_messages, forward_messages, pin_message, unpin_message, unpin_all_messages, react, mark_read, clear_mentions, send_typing, join_chat, leave_chat, invite_users, kick_participant, ban_participant, unban_participant, update_profile, update_username, update_avatar, update_group_title, update_group_name, update_group_username, update_group_photo, and send_story. Telegram may reject an action if the account lacks the required admin rights or the peer type does not support it.

Authentication workflow:

For Telegram Desktop import, QR login, phone login, login codes, local passcodes, and 2FA passwords, route the user through:

/connect telegram-login <connection>

The /connect command asks the user to choose import, QR, or phone login with AskUserQuestion, gathers any required input there, and calls the typed Telegram auth helper directly. Do not reproduce the auth flow with Bash or stdin flags from this skill. After login or import completes, use the returned connection_slug in workflows and connector actions when the user wants ongoing monitoring or outbound side effects.

Install via CLI
npx skills add https://github.com/berabuddies/puffer --skill telegram
Repository Details
star Stars 16
call_split Forks 13
navigation Branch main
article Path SKILL.md
More from Creator