Telegram CLI Usage Guide
telegram-cli
Use `tele` to authenticate, list dialogs, and fetch messages from Telegram.
SKILL.md
Full skill instructions
Telegram CLI Usage Guide
Overview
Use tele to authenticate, list dialogs, and fetch messages from Telegram directly from the terminal.
Setup
- Requires
uv. - Install/upgrade (one-time per session):
uv tool install --upgrade git+https://github.com/AFutureD/tele-cli - Verify install:
tele -V - Per terminal session: run
tele -honce, then confirm auth withtele -f json me(log in if needed).
Notice
- Call
tele -honce before running any command for the first time in the session. - Always use JSON output: always pass
-f jsontotele(example:tele -f json me). - In each session, confirm authentication before running non-auth commands: run
tele -f json me. - Commands under
tele auth ...do not require an existing authenticated session.
Quick Start
- Read help once:
tele -h - Log in (interactive prompts):
tele auth login - Confirm who you are:
tele -f json me - List dialogs and find a
dialog_id:tele -f json dialog list - Fetch recent messages from a dialog:
tele -f json message list <dialog_id> -n 20
Session Management
Global options:
--config <path>: alternate config file (default:~/.config/tele/config.toml)--session <name>: use a specific session file by name (listed bytele auth list)
Login / logout:
tele auth login(creates a local session; prompts for phone, code, and optional 2FA password)tele auth login --switch(log in and make the new session active)tele auth logout(logs out of the selected session)
List and switch sessions:
tele auth listtele auth switch --uid <user_id>tele auth switch --username <username>(accepts@aliceoralice)tele auth switch --session <session_name>
Where sessions live on disk (macOS/Linux default):
- Sessions folder:
~/.config/tele/sessions/ - Current activated session symlink:
~/.config/tele/sessions/Current.session
Dialog List
List all dialogs (users, groups, channels):
tele -f json dialog list
Notes:
- For
-f text, the output follows the template:[TYPE.UI.STATE] [UNREAD COUNT] [DIALOG_ID] NAMETYPE:Uuser,Ggroup,CchannelUI:Ppinned,Aarchived,-normalSTATE:Mmuted,-not muted
- For
-f json, each dialog includes keys likename,entity(withid),unread_count, and the latestmessage.
Message List
Fetch messages from a dialog:
tele -f json message list <dialog_id>
Common options:
- Limit count:
-n <num>(example:tele -f json message list <dialog_id> -n 20) - Pagination:
--offset_id <message_id>(fetch around/older than a known message id;offset_idis excluded) - Output order:
--order asc|desc - Time filters:
--from "<natural language or date>"--to "<natural language or date>"--range "<natural language range>"(overrides--from/--to, special:"this week")
Examples:
tele -f json message list 1375282077 -n 10tele -f json message list 1375282077 --range "last week"tele -f json message list 1375282077 --from "2025-02-05" --to "yesterday"
Send Message
Send a text message to a user, group, or channel:
- Basic:
tele message send <receiver> "<message>" - Force peer id:
tele message send -t peer_id "<peer_id>" "<message>"
Receiver formats:
- Username:
aliceor@alice - Phone:
"+15551234567" - Dialog name:
"My Group" - Numeric peer id:
"-1001234567890"(common for channels)
How the receiver is resolved:
- With
--entity/-t peer_id,<receiver>is treated as a numeric peer id (no name matching). - Without
--entity, it first tries Telegram/Telethon resolution (username/phone/id). If that fails, it scans your dialogs and picks the first match by:- dialog name contains
<receiver>(case-insensitive), or - dialog id / entity id equals
<receiver>(string compare).
- dialog name contains
Examples:
tele message send alice "hi"tele message send "+15551234567" "hi"tele message send "My Group" "hi"tele message send -t peer_id "-1001234567890" "hi"
Notes:
- Quote negative peer ids (or use
--) so the shell/CLI does not treat them as options. - The command prints no output on success; verify by listing messages:
tele -f json message list <dialog_id> -n 5.
Additional Informations
- Config file:
telereads~/.config/tele/config.tomlby default and will create it on first run;
