Telegram cli
by @baontq23
CLI tool for Telegram via MTProto. Send/read messages, manage groups, search conversations, download media, and automate Telegram workflows. Use when the tas...
clawhub install telegram-cliπ About This Skill
name: node-telegram-cli description: CLI tool for Telegram via MTProto. Send/read messages, manage groups, search conversations, download media, and automate Telegram workflows. Use when the task involves any Telegram account interaction.
Source & Trust
1. Repository: https://github.com/baontq23/node-telegram-cli 2. npm: https://www.npmjs.com/package/node-telegram-cli (published with provenance) 3. Credentials are stored securely via OS Keychain (macOS Keychain / Windows Credential Manager / Linux Secret Service), not in plaintext files
Installation
1. Requires Node.js >= 20
2. Install globally: npm install -g node-telegram-cli
3. Verify: ntg --version
4. Run ntg login once β interactive, requires phone number + OTP code from Telegram
Critical Rule: Always Use JSON Mode
1. Add --json flag to every command for machine-readable output
2. --json is a global flag β place it before or after the subcommand
3. Example: ntg --json inbox, ntg --json search @user "keyword"
Peer Format
1. @username β most reliable, e.g. @johndoe
2. Phone number β for contacts without username, e.g. +84901234567
3. me β your own Saved Messages
4. Chat title β group/channel name in quotes, e.g. "My Group"
Read Commands (No Side Effects)
1. ntg --json inbox β list recent conversations
2. ntg --json inbox --unread β only unread conversations
3. ntg --json inbox --private β only private 1-on-1 chats
4. ntg --json inbox --unread --private β combine filters
5. ntg --json inbox --chat β messages from a specific chat
6. ntg --json search β search in a specific chat
7. ntg --json global-search "keyword" β search across all chats
8. ntg --json chat-info β show group/channel info
Write Commands (Has Side Effects)
1. ntg msg β send a text message
2. ntg msg β send silently (no notification sound)
3. ntg fwd β forward a message by ID
4. ntg mark-read β mark all messages as read
5. ntg delete-msg β delete a message
6. ntg send-photo β send a photo
7. ntg send-video β send a video
8. ntg send-file β send a text file as plain messages
9. ntg download β download media from a message
10. ntg download β specify media type (photo, video, audio, doc)
11. ntg view β download and open with system viewer
12. ntg clean-downloads β delete all downloaded media files
Group Management
1. ntg create-group "Topic" @user1 @user2 β create a new group
2. ntg chat-add β add a user to a group
3. ntg chat-kick β remove a user from a group
4. ntg chat-rename β rename a group
5. ntg chat-set-photo β set group photo
Contact Management
1. ntg add-contact β add a contact
2. ntg rename-contact β rename a contact
JSON Output Schemas
#### Inbox (conversation list)
1. name β contact/chat display name
2. peer β identifier to use as argument
3. peerType β "username" | "phone" | "id"
4. type β "user" | "group" | "channel"
5. unreadCount β number of unread messages
6. lastMessage β text/caption (empty string if media-only)
7. lastMessageId β use with ntg download for media
8. mediaType β "photo" | "video" | "document" | "audio" | "voice" | "sticker" | "location" | "contact" | "poll" | null
9. date β ISO 8601 timestamp
#### Chat messages (inbox --chat)
1. id β message ID
2. date β ISO 8601 timestamp
3. sender β sender display name
4. text β message text/caption
5. mediaType β same values as above
6. isOutgoing β true if sent by you
Error Handling
1. Exit code 0 = success
2. Exit code 1 = error (not logged in, peer not found, etc.)
3. If not logged in, commands fail with: "Not logged in. Run ntg login first."
Important Notes
1. Do NOT use ntg chat β it is interactive, blocks stdin, not suitable for automation
2. Session persists until ntg logout is called β no re-login needed between commands
3. Downloaded files are saved to ~/.telegram-cli/downloads/
4. Always specify --chat when downloading media to identify the source chat