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.