Telegram inside Claude Code: read chats and channels in a pane, get AI summaries of unread posts. No API key, no bot.
翻译准备中
插件TypeScript · PythonGitHub @34823自行安装运营者未确认
试用过了吗? 点一下就好,无需登录。
尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
安装型项目无需部署域名也可验证。个人仓库可通过 GitHub 登录验证,组织仓库可使用上方的仓库验证文件。
制作者的介绍仅有上面的一句话。 更多详情请阅读仓库 README。 仓库 README ↗
正在加载完整 README。
查看完整 README ↗The Python backend also has an independent frontend: python terminal.py (use the Python environment
where Playwright is installed). It uses the same TG_PANE_DATA configuration and Telegram session.
No Claude process or AI model is required. The original Claude plugin remains unchanged.
Folders → chats → history: arrow keys/Enter or mouse, Esc goes back, / filters chat names,
r refreshes, wheel/PgUp/PgDown scroll history, i writes, Enter on a message replies.
Sending requires a second explicit y confirmation; Esc cancels. Private history is never marked read
merely by viewing it. L opens the existing QR/password login flow. q exits.
This is a basic frontend, not full plugin parity: message reactions/edit/delete/forward,
media viewing, digests and message-text search remain available only in the original plugin.
Requests refresh at most once a minute while open, FLOOD_WAIT pauses for ten minutes,
and an unresponsive CDP browser is restarted at most once every five minutes.
No failed send is automatically retried. Offline UI tests: python -m unittest discover -s tests -p 'test_*.py'.
Read your Telegram chats and channels beside the conversation, and ask Claude to retell the unread posts by topic. No API key, no bot — it works through your own logged-in Telegram Web.
Quick start (details in Install):
/plugin install tg-pane --marketplace 34823/tg-pane
Then /tg-pane, scan the QR code with your phone — done.
/clear and after a restart. [Private 3] [Categories 41] [Refresh] cache 15:48
[← Folders] Interesting 34 [Summary] [Mark all read]
Markets News (7) 09:00 Club chat [Mark read (2)] [Summary]
Club chat (2) 08:12 ▲ older
Markets Wed — 8.10 —
… Pete: who's coming to training? 08:12
There is no Telegram API key and no bot: the mod drives Telegram Web (web.telegram.org/k) logged in to your account, in a headless Chromium on your machine, and reads it through Telegram Web's own internal API — the same calls its interface makes. Nothing leaves your machine except what Telegram Web itself sends. The browser is touched only while the pane is open and in use (counters once a minute, the open chat once a minute, a pause after 10 idle minutes and whenever Telegram answers FLOOD_WAIT). The mod writes to Telegram only when you press a button for it: a message or a reply you type, an edit or a delete of your own message, a reaction, a forward.
The backend is a few Python scripts in backend/ (Playwright). They also work on their own:
| Script | What it does |
|---|---|
tgbrowser.py start|stop|status|login | the headless Chromium; login prints the QR code in the terminal and asks for the cloud password |
tgcache.py [folder…] | unread counters and previews of your folders into the cache |
tgchat.py <peer> [N] [--read] [--before|--around|--after <mid>] [--query <words>] | a chat's history as JSON; --query searches inside the chat |
tgmsg.py --peer <peer> [--reply <mid>] "<text>" | send one message (as an answer, if asked), check it went out |
tgsearch.py "<words>" [N] | search the text of messages in all chats, JSON |
tgact.py react|edit|delete|forward|transcribe <peer> <mid> [value] | one action on one message, checked by reading it again |
tgmedia.py <peer> <mid> | downloads one message's picture (photo, image, video preview) to the data folder as PNG, only when you press «open» |
tgunread.py "<folder>" | --peer <id> | --private [--mark-only] [--since day|week|month] | unread posts as text for a model; channels and groups are marked read, private chats (and --private) never; --since — everything posted in the period, nothing marked read |
The plugin is a pane (hooks/register.tsx) plus the Python scripts in backend/ (Playwright).
python3) with one of the scripts in backend/
(tgbrowser.py, tgcache.py, tgchat.py, tgmsg.py, tgunread.py, tgsearch.py, tgact.py, tgmedia.py, tgview.py) and its arguments; the command is
<python> <plugin folder>/backend/<script> <args>, no shell. tgbrowser.py starts a headless Chromium
(Playwright's, with a debugging port on 127.0.0.1:9444 only) with its own profile in the data folder.
Nothing else is started.web.telegram.org/k) in that browser, logged in to your account: folders, unread counters,
chat history, and the browser profile — which is your Telegram session. The pane also reads HOME (only to find the
default data folder) and keeps its cache, lock and config.json in the data folder. It does not read your project files.$.prompt.submit)
that tells Claude to run tgunread.py and retell the result (the unread choice for a channel or a group also marks it read; day / week / month never marks anything; private chats have no summary). The unread posts of that folder or chat then become part of the
Claude Code conversation and go to the model like any other text there. Press nothing, and nothing is passed on.session.start registers the /tg-pane command and starts timers that run only while the pane is open;
command.run for tg-pane opens the pane; session.end / classic.SessionStart / ui.close reopen or close it after /clear;
ui.render draws it. No hook changes a prompt, a tool call, a setting or another plugin's behaviour.In Claude Code (a terminal session):
/plugin install tg-pane --marketplace 34823/tg-pane
Answer y to add the marketplace, pick a scope, set the options (all have defaults).
Python with Playwright and its Chromium (once):
python3 -m pip install playwright
python3 -m playwright install chromium
Another Python (a venv) — put its path into the Python option (/config).
/tg-pane. The first time it starts the browser and shows a QR code: Telegram on your phone → Settings →
Devices → Link Desktop Device, and scan it. If the account has a cloud password, the pane shows the command to
run in a terminal (the password is typed there, never into the pane).
/config)| Option | Default | |
|---|---|---|
| Python | python3 | the Python that has Playwright |
| Data folder | ~/.local/share/tg-pane | browser profile (your Telegram session — keep it private), cache, lock; config.json there may set port (9444) and tz for the scripts run by hand |
| Private chats folder | empty | a Telegram folder for the Private tab; empty — every chat with a person or a bot |
| Language | en | en or ru, the pane and summaries |
| Mark channels read on open | on | as Telegram does; private chats and groups are never marked read by just looking |
| Time zone | system | IANA name for message times; empty and the system is on UTC — the pane asks once |
--no-sandbox.claude plugin validate .
claude plugin test .
claude --plugin-dir .
If it is useful, a ⭐ on the repo helps others find it (contributing, security). Ideas and questions — Discussions; bugs — Issues (a 👍 on an issue shows what matters most).
MIT license.