CLI Telegram via MTProto

VérifiéPrudence

CLI Telegram en lecture seule via MTProto. Liste les chats, récupère les messages, télécharge les médias, gère les comptes/sessions locaux. N'envoie pas de messages.

Spar Skills Guide Bot
ProductiviteIntermédiaire
22/07/2026
Claude CodeCodex
#telegram#mtproto#cli#messaging#data-extraction

Recommandé pour

Synthèse automatique

Skill qui pilote `tg`, un CLI en lecture seule parlant le protocole MTProto de Telegram, pour lister les conversations, récupérer des messages et télécharger des médias.

Points forts

  • Lecture seule par conception : aucune commande n'envoie de message ni ne modifie les données Telegram, les seules écritures étant locales (sessions et médias téléchargés).
  • Contourne les limites de l'API Bot en s'appuyant directement sur MTProto, ce qui permet de lire l'historique de comptes utilisateur.
  • Sortie JSON compatible avec jq, ce qui facilite le filtrage et l'extraction automatisée.
  • Identifiants api_id/api_hash stockés dans le trousseau système plutôt que dans des variables d'environnement, avec des garde-fous explicites sur les fichiers de session.

Limites

  • L'authentification initiale (`tg auth`) est interactive (numéro de téléphone + code OTP) et ne peut pas être automatisée.
  • Nécessite des identifiants api_id/api_hash créés manuellement sur my.telegram.org/apps.
  • Aucune prise en charge de l'envoi de messages ou de la modification de groupes/canaux, ce qui exclut les cas d'usage d'automatisation en écriture.
  • Les fichiers de session dans ~/.tg-mtproto-cli/sessions/ contiennent des clés d'authentification sensibles à ne pas exposer.
Quand l'utiliser

À utiliser lorsqu'il faut lire, exporter ou archiver des conversations et médias Telegram depuis un compte utilisateur, par exemple pour alimenter un pipeline d'analyse.

Quand l'éviter

À éviter si l'objectif est d'envoyer des messages, de gérer des groupes ou d'automatiser des actions d'écriture sur Telegram, ou si aucune session authentifiée ne peut être créée sur la machine.

Analyse de sécurité

Prudence
Score qualité90/100

The skill is read-only by design and does not instruct destructive actions, but it handles highly sensitive personal data (Telegram messages, media) and requires storing API credentials in the keychain. Network and filesystem writes are limited to downloading media and session files, which is legitimate for the stated purpose but still involves risk if misused. Rating as caution due to the sensitive nature of the data and reliance on an external tool.

Points d'attention
  • •Accesses sensitive personal data (Telegram chats, media)
  • •Stores API credentials in system keychain
  • •Network access to Telegram servers
  • •Downloads media files locally, which could be large or contain sensitive content
  • •Uses a third-party CLI tool not widely audited
Comment cette analyse est faite

Exemples

List and inspect group chats
List my Telegram groups and supergroups, then show me the last 50 messages from the one called 'Data Engineering'.
Export messages as JSON
Fetch the last 200 messages from @somechannel using tg and output them as JSON so I can grep for mentions of 'pricing'.
Download channel media
Download all media from chat -1001234567890 into ./telegram-media using the tg CLI.

name: tg-cli description: > Read-only Telegram CLI via MTProto. Lists chats, fetches messages, downloads media, manages local accounts/sessions. Does not send messages or modify Telegram data. Use when the user asks to read Telegram chats, fetch messages, download media, or automate Telegram data extraction. required_binaries:

  • name: tg package: tg-mtproto-cli install: npm install -g tg-mtproto-cli registry: https://www.npmjs.com/package/tg-mtproto-cli source: https://github.com/cyberash-dev/tg-mtproto-cli
  • name: jq optional: true install: brew install jq credentials:
  • name: Telegram API credentials fields: [api_id, api_hash] obtain: https://my.telegram.org/apps storage: system keychain (macOS Keychain / Windows Credential Vault / Linux Secret Service) input: interactive prompt via tg auth
  • name: Phone number + OTP storage: not persisted input: interactive prompt via tg auth (one-time, creates session) runtime_permissions: network: outbound TCP to Telegram DC servers (MTProto protocol) filesystem:
    • read/write: ~/.tg-mtproto-cli/sessions/*.session (SQLite auth sessions)
    • write: media files to --out dir or cwd (tg download only) keychain: read/write account metadata and API credentials shell: false browser: false

tg — Telegram CLI via MTProto

CLI tool for reading Telegram data directly via MTProto protocol. No Bot API, no limits.

Required binaries

| Binary | Install | Purpose | |---|---|---| | tg | npm install -g tg-mtproto-cli | Core CLI | | jq (optional) | brew install jq or apt install jq | JSON filtering in workflow examples |

Source and provenance:

Verify after install:

tg --version
npm ls -g tg-mtproto-cli

Required credentials

| Credential | How to obtain | Storage | |---|---|---| | Telegram api_id + api_hash | my.telegram.org/apps | System keychain (macOS Keychain / Windows Credential Vault / Linux Secret Service) | | Phone number + OTP code | Interactive prompt during tg auth | Not persisted; used once for session creation |

Credentials are entered interactively via tg auth. No environment variables required.

Runtime surface

| Resource | Access | Details | |---|---|---| | Network | Outbound TCP to Telegram DC servers | MTProto protocol, required for all commands | | Session files | Read/write ~/.tg-mtproto-cli/sessions/*.session | SQLite databases with auth keys; created by tg auth | | System keychain | Read/write | Stores api_id, api_hash, account metadata, default account | | Filesystem | Write (only tg download) | Saves media to --out dir or current directory |

Guardrails

  • 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.

Chat identification

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}'.

Commands reference

List chats

tg chats [--type private|group|supergroup|channel] [--limit 50] [--offset 0]

Read messages

tg messages <chat> [-n 100] [--all] [--topic <id>] [--after <datetime>]

| Flag | Description | |---|---| | -n <count> | Number of messages (default: 100) | | --all | Entire 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.

List forum topics

tg topics <chat>

Returns topic IDs needed for --topic flag.

Download media

tg download <chat> <messageId> [--out <dir>]

Downloads the media attachment from a specific message. Get message IDs from tg messages output (shown as #<id>).

Account management

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

Global flags

| Flag | Effect | |---|---| | --account <alias> | Use specific account instead of default | | --json | JSON output (for scripting/piping) |

JSON output

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

Message JSON schema

{
  "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.

Common workflows

Extract text from a chat since a date

tg messages @channel --after 2026-02-01 --json | jq -r '.[].text // empty'

Find messages with photos

tg messages @chat -n 500 --json | jq '[.[] | select(.media.type == "photo")]'

Download all photos from recent messages

for id in $(tg messages @chat -n 50 --json | jq -r '.[] | select(.media.type == "photo") | .id'); do
  tg download @chat "$id" --out ./photos
done

Read a forum topic

tg topics -1001234567890          # find topic ID
tg messages -1001234567890 --topic 42 -n 20

Multi-account usage

tg chats --account work
tg messages @chat -n 10 --account personal

Exit codes

| Code | Meaning | |---|---| | 0 | Success | | 1 | Runtime error (invalid args, chat not found) | | 2 | Auth required (no account, expired session) — run tg auth |

Troubleshooting

  • "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)

Du fichier au premier essai

Le téléchargement contient exactement le contenu affiché sur cette fiche. Cette copie peut différer de la dernière version du dépôt source.

Consulter la source et ses fichiers annexes

Ce téléchargement contient uniquement SKILL.md. Les scripts, références, modèles et dépendances éventuels ne sont pas inclus. Récupérez les fichiers nécessaires depuis la source en conservant leur arborescence avant de poursuivre.

1. Télécharger le fichier

Télécharger SKILL.md

Depuis la racine d’un projet de test, enregistrez le fichier sous .skill-downloads/telegram-cli-via-mtproto-mrwakfam/SKILL.md, ou utilisez la commande suivante. Ce dossier sert à examiner la skill avant son installation.

Commande pour macOS/Linux ou WSL : un shell POSIX et curl sont nécessaires. Sous Windows sans WSL, utilisez le bouton de téléchargement et créez le dossier manuellement.

mkdir -p '.skill-downloads/telegram-cli-via-mtproto-mrwakfam' && curl --fail --show-error --location 'https://skills-guides.com/api/skills/telegram-cli-via-mtproto-mrwakfam/download' --output '.skill-downloads/telegram-cli-via-mtproto-mrwakfam/SKILL.md.part' && mv '.skill-downloads/telegram-cli-via-mtproto-mrwakfam/SKILL.md.part' '.skill-downloads/telegram-cli-via-mtproto-mrwakfam/SKILL.md'

2. Vérifier les prérequis

Lisez SKILL.md avant de l’utiliser. Si le fichier cite des scripts ou services externes, examinez-les et préparez les accès nécessaires dans votre environnement de test.

Aucune section de prérequis reconnue dans ce fichier. Cela ne signifie pas qu’il est autonome : les bibliothèques, outils et accès peuvent être cités ailleurs dans le contenu ou dans le dépôt source.

Les plateformes de la fiche sont des indications du catalogue. Les chemins ci-dessous suivent la documentation des outils ; ils ne prouvent pas que cette skill y a été exécutée. Aucune version minimale de ces outils n’est attestée pour cette fiche.

3. Charger la skill

Après vérification, copiez le dossier complet dans le projet avec l’une des commandes ci-dessous, puis ouvrez une nouvelle session de l’outil. La commande s’arrête si un dossier du même nom existe déjà : comparez les fichiers avant de le remplacer.

Claude Code
test -f '.skill-downloads/telegram-cli-via-mtproto-mrwakfam/SKILL.md' && test -s '.skill-downloads/telegram-cli-via-mtproto-mrwakfam/SKILL.md' && mkdir -p '.claude/skills' && test ! -e '.claude/skills/tg-cli' && cp -R '.skill-downloads/telegram-cli-via-mtproto-mrwakfam' '.claude/skills/tg-cli'

Codex
test -f '.skill-downloads/telegram-cli-via-mtproto-mrwakfam/SKILL.md' && test -s '.skill-downloads/telegram-cli-via-mtproto-mrwakfam/SKILL.md' && mkdir -p '.agents/skills' && test ! -e '.agents/skills/tg-cli' && cp -R '.skill-downloads/telegram-cli-via-mtproto-mrwakfam' '.agents/skills/tg-cli'

OpenSkills

OpenSkills doit déjà être installé. La procédure locale install/read est contrôlée avec OpenSkills 1.5.0, qui exige Node.js ≥ 20.6.0. Aucun slug du catalogue n’est résolu automatiquement.

Installation officielle d’OpenSkills
openskills install './.skill-downloads/telegram-cli-via-mtproto-mrwakfam'

openskills read 'telegram-cli-via-mtproto-mrwakfam'

La lecture doit afficher le contenu du fichier installé et son dossier de base. Elle ne lance ni la skill ni ses dépendances.

Pour un agent qui lit AGENTS.md, synchronisez ensuite l’index. Cette commande modifie AGENTS.md : relisez le diff avant de l’utiliser.

openskills sync

Mode manuel ou autre outil : joignez SKILL.md à une conversation, ou ouvrez-le dans un agent capable de lire les fichiers. Ajoutez les ressources annexes nécessaires. Il n’existe pas de dossier universel reconnu par tous les outils.

4. Faire un premier essai

Utilisez une entrée courte et fictive : un endpoint d’API, un petit document ou un brief d’interface. Dans une nouvelle conversation, joignez le fichier ou donnez son chemin à l’agent, puis adaptez cette demande :

Lis .skill-downloads/telegram-cli-via-mtproto-mrwakfam/SKILL.md et applique ses instructions à cet exemple : [décrire une entrée de test]. Indique les fichiers, dépendances ou accès qui manquent. Produis le résultat demandé par la skill sans inventer de données ni exécuter de script non examiné.

Résultat attendu : une sortie correspondant aux instructions de la skill, ou une liste précise des prérequis manquants. Une simple confirmation de lecture ne valide pas le premier usage. Si une ressource externe est indisponible, ce parcours reste à tester.

Skills similaires