Requirements
- Target platform
- OpenClaw
- Install method
- Manual import
- Extraction
- Extract archive
- Prerequisites
- OpenClaw
- Primary doc
- SKILL.md
Read-only Telegram CLI via MTProto. Lists chats, fetches messages, downloads media, manages local accounts/sessions. Does not send messages or modify Telegra...
Read-only Telegram CLI via MTProto. Lists chats, fetches messages, downloads media, manages local accounts/sessions. Does not send messages or modify Telegra...
Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.
I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete.
I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run.
CLI tool for reading Telegram data directly via MTProto protocol. No Bot API, no limits.
BinaryInstallPurposetgnpm install -g tg-mtproto-cliCore CLIjq (optional)brew install jq or apt install jqJSON filtering in workflow examples Source and provenance: npm: npmjs.com/package/tg-mtproto-cli GitHub: github.com/cyberash-dev/tg-mtproto-cli Verify after install: tg --version npm ls -g tg-mtproto-cli
CredentialHow to obtainStorageTelegram api_id + api_hashmy.telegram.org/appsSystem keychain (macOS Keychain / Windows Credential Vault / Linux Secret Service)Phone number + OTP codeInteractive prompt during tg authNot persisted; used once for session creation Credentials are entered interactively via tg auth. No environment variables required.
ResourceAccessDetailsNetworkOutbound TCP to Telegram DC serversMTProto protocol, required for all commandsSession filesRead/write ~/.tg-mtproto-cli/sessions/*.sessionSQLite databases with auth keys; created by tg authSystem keychainRead/writeStores api_id, api_hash, account metadata, default accountFilesystemWrite (only tg download)Saves media to --out dir or current directory
The CLI is read-only by design โ it has no commands to send messages, create chats, modify groups, or perform any write operations on Telegram. The only write targets are local: session files and downloaded media. tg download writes files only to the explicitly specified --out directory or cwd. Session files contain sensitive auth material โ do not read, copy, or expose ~/.tg-mtproto-cli/sessions/ contents. Do not log or display api_id / api_hash values. If tg auth is needed, inform the user โ it requires interactive input (phone, OTP) and cannot be automated.
Chats can be referenced by: Username: @username or username Numeric ID: -1001234567890 (groups/supergroups use negative IDs) Phone: +1234567890 (for private chats) To find a chat's numeric ID, use tg chats --json | jq '.[] | {id, title}'.
tg chats [--type private|group|supergroup|channel] [--limit 50] [--offset 0]
tg messages <chat> [-n 100] [--all] [--topic <id>] [--after <datetime>] FlagDescription-n <count>Number of messages (default: 100)--allEntire history (shows progress)--topic <id>Forum topic (get IDs via tg topics <chat>)--after <datetime>Only messages after this time --after formats: 2026-02-22, 2026-02-22T10:00, 10:00 (today). When --after + -n are combined: filter by date first, then take last N.
tg topics <chat> Returns topic IDs needed for --topic flag.
tg download <chat> <messageId> [--out <dir>] Downloads the media attachment from a specific message. Get message IDs from tg messages output (shown as #<id>).
tg auth # authenticate (interactive) tg logout [alias] # remove session tg accounts # list accounts tg accounts rename <old> <new> # rename alias tg default <alias> # set default
FlagEffect--account <alias>Use specific account instead of default--jsonJSON output (for scripting/piping)
All commands support --json for structured output. Dates are ISO 8601. tg chats --json tg messages @chat -n 10 --json tg download @chat 42 --json
{ "id": 42, "chatId": -1001234567890, "senderName": "John", "text": "Hello", "date": "2026-02-22T10:15:00.000Z", "media": { "type": "photo", "fileName": null, "mimeType": "image/jpeg", "size": 262525 }, "replyToId": null, "isOutgoing": false } media is null when no attachment. media.type: photo, video, document, audio, voice, sticker.
tg messages @channel --after 2026-02-01 --json | jq -r '.[].text // empty'
tg messages @chat -n 500 --json | jq '[.[] | select(.media.type == "photo")]'
for id in $(tg messages @chat -n 50 --json | jq -r '.[] | select(.media.type == "photo") | .id'); do tg download @chat "$id" --out ./photos done
tg topics -1001234567890 # find topic ID tg messages -1001234567890 --topic 42 -n 20
tg chats --account work tg messages @chat -n 10 --account personal
CodeMeaning0Success1Runtime error (invalid args, chat not found)2Auth required (no account, expired session) โ run tg auth
"No default account" โ run tg auth or use --account <alias> "Session expired" โ run tg auth to re-authenticate Chat not found โ use numeric ID from tg chats --json Empty messages โ check chat ID sign (groups are negative)
Code helpers, APIs, CLIs, browser automation, testing, and developer operations.
Largest current source with strong distribution and engagement signals.