| name | telegram |
| description | Telegram CLI for reading, searching, sending messages, managing groups, and syncing chat history. Use when the user asks about Telegram messages, wants to check inbox, search chats, send messages, mute/unmute chats, kick users, export history, or look up contacts and groups. |
📬 Telegram CLI
Fast Telegram CLI for reading, searching, and sending messages.
🎯 When to Use
Use this skill when the user:
- Asks to check Telegram messages or inbox
- Wants to search Telegram for a topic/keyword
- Wants to send a Telegram message or reply to one
- Asks about a Telegram group, contact, or chat
- Wants to see unread messages
- Needs to look up group members or admins
- Wants to mute/unmute a noisy chat or group
- Needs to kick/remove a user from a group
- Wants to promote a member to admin
- Wants to transfer ownership of a group/channel to someone else
- Wants to export or sync chat history to files
- Asks to organize chats into folders
- Wants to check their logged-in account or session status
📦 Install
npm install -g @skillhq/telegram
🔐 Authentication
First-time setup requires API credentials from https://my.telegram.org/apps
telegram auth
telegram logout
telegram check
telegram whoami
telegram whoami --json
📖 Commands
Reading Messages
telegram inbox
telegram chats
telegram chats --type group
telegram chats -n 200
telegram read "ChatName" -n 50
telegram read "ChatName" --since "1h"
telegram read "ChatName" --until "2h"
telegram read @username -n 20
telegram read 123456789 -n 10
Searching
telegram search "query" --chat "ChatName"
telegram search "query" --all
telegram search "query" -n 20
Sending Messages
telegram send @username "message"
telegram send "GroupName" "message"
telegram reply "ChatName" 12345 "response"
Contacts & Groups
telegram contact @username
telegram members "GroupName"
telegram members "GroupName" -n 500
telegram admins "GroupName"
telegram groups
telegram groups --admin
telegram kick "GroupName" @username
telegram promote "GroupName" @username
telegram promote "GroupName" @username --rank "Mod"
telegram promote "GroupName" @username --add-admins
telegram transfer-owner "GroupName" @username
transfer-owner notes:
- Irreversible: you drop to a regular admin/member and only the new owner can transfer it back.
- Requires two-step verification (cloud password) on your account; it is prompted for securely at runtime.
- Supergroups and channels only - convert a basic group to a supergroup first.
- The target must already be a member. Telegram also blocks transfer for ~24h after a new login and ~7 days after setting/changing your 2FA password.
- Prompts you to retype the group name to confirm; pass
-y to skip that confirmation.
Muting
telegram mute "ChatName"
telegram mute "ChatName" -d 1h
telegram mute @username -d 8h
telegram mute "GroupName" -d 1d
telegram unmute "ChatName"
Folders
telegram folders
telegram folder "Work"
telegram folder-add "Work" "ProjectChat"
telegram folder-remove "Work" "ProjectChat"
Sync / Export
telegram sync
telegram sync --days 30
telegram sync --since "12h"
telegram sync --until "2d"
telegram sync --all
telegram sync --chat "ChatName"
telegram sync --output ~/exports
telegram sync --resume
telegram sync --resume --all
Incremental sync (--resume):
- Tracks last synced message ID per chat in
.sync-meta.json
- On subsequent runs, only fetches messages newer than last sync
- Appends new messages to existing markdown files
- Combine with
--all to maintain a complete, up-to-date archive
📤 Output Formats
Most commands support multiple output formats:
| Flag | Use Case |
|---|
| (default) | Human-readable terminal output |
--json | Structured JSON for programmatic processing |
--markdown | Markdown-formatted for display or export |
telegram inbox --json
telegram inbox --markdown
telegram read "Chat" --json
telegram read "Chat" --markdown
telegram chats --json
telegram members "Group" --markdown
Supported on: inbox, read, search, chats, members, groups, contact, whoami
📎 Media Metadata
Messages containing media (photos, videos, documents, voice notes, stickers, etc.) now include metadata instead of showing "(no text)":
| Media Type | Display |
|---|
| Photo | [📷 Photo] |
| Video | [🎥 Video (2.1 MB)] |
| Document | [📎 report.pdf (540.0 KB)] |
| Voice | [🎤 Voice message] |
| Audio | [🎵 song.mp3 (3.2 MB)] |
| Sticker | [😀 Sticker] |
| GIF | [🎬 GIF] |
| Location | [📍 Location] |
| Contact | [👤 Contact] |
| Poll | [📊 Poll] |
In JSON output, messages include mediaType, fileName, and fileSize fields when media is present.
🤖 AI Agent Guidance
When using this CLI as an AI agent:
- For processing data (counting, filtering, extracting): use
--json
- For displaying to the user: use default or
--markdown
- Chat identification: names are partial-matched (e.g., "MetaDAO" matches "MetaDAO Community"), usernames must start with
@, numeric IDs also work
- Read operations are safe to run without confirmation
- Write operations (
send, reply, kick, promote, transfer-owner) should be confirmed with the user before executing
transfer-owner is irreversible and interactive (it prompts for a 2FA password and a typed confirmation), so it cannot be run unattended; never script it on a user's behalf without explicit instruction
- Rate limiting: avoid rapid successive calls; the Telegram API has rate limits
- Large groups: use
-n to limit members output on very large groups
- Full archive: use
telegram sync --all --chat "Name" to export complete chat history
- Keeping archives fresh: use
telegram sync --resume to incrementally update previous exports
- Media-rich chats: messages with photos/videos/files now show metadata, not just "(no text)"
💡 Examples
Check inbox for unread messages:
telegram inbox
Read recent messages from a group:
telegram read "MetaDAO Community" -n 20
Get messages from the last 2 hours:
telegram read "Project Chat" --since "2h"
Search for a topic across all chats:
telegram search "futarchy" --all
Search within a specific chat:
telegram search "deadline" --chat "Work Team"
Send a message:
telegram send @username "Hello, checking in!"
Export a chat's complete history:
telegram sync --all --chat "Project Chat" --output ~/exports
Incrementally update an existing export:
telegram sync --resume --output ~/exports
Filter chats by type:
telegram chats --type channel --json
Kick a user from a group:
telegram kick "My Group" @spammer
Promote a member to admin:
telegram promote "My Group" @trustedmember
Transfer ownership of a group to someone else:
telegram transfer-owner "My Group" @newowner
📝 Notes
- Chat names can be partial matches (e.g., "MetaDAO" matches "MetaDAO Community")
- Usernames must start with
@ (e.g., @username)
- Chat IDs (numeric) can be used anywhere a chat name is accepted
- Messages are returned in reverse chronological order (newest first)
- Time flags (
--since, --until) accept formats like "1h", "30m", "7d"
- The
sync command creates one markdown file per chat in the output directory
- Sync metadata (
.sync-meta.json) enables incremental sync with --resume
- Sender names are cached per request for faster syncs (avoids redundant API calls)
- Messages paginate automatically — no silent truncation for large chats