Claude Code 现在可以用 Telegram 遥控了
摘要
Anthropic 刚发布了 Claude Code Channels,让你通过 Telegram 远程操控 Claude Code。手机发条消息,它就在你电脑上干活。这篇讲清楚它是什么、怎么配、能干嘛。
用 Claude Code 写代码有个前提 - 你得坐在电脑前面。
不在工位上的时候,想让它帮你跑个测试、查个日志、改个小 bug?没办法。Terminal 关了就关了。
今天 Anthropic 发布了 Claude Code Channels,解决的就是这个问题。它让你通过 Telegram 给 Claude Code 发消息,Claude 收到后在你电脑上执行,再把结果发回来。
Channels 是什么
Channels 是一种基于 MCP 协议的插件机制。它的作用是把外部事件"推"进正在运行的 Claude Code session 里,让 Claude 能响应你不在终端时发生的事情。
架构很简单:
- Telegram Bot 收到你的消息
- Channel 插件(一个 MCP server)把消息转发给 Claude Code
- Claude 处理完后,通过 Bot 把结果发回给你
整个过程不需要暴露任何公网端口。Telegram 那边用的是 Bot API 的轮询模式,Channel 插件跑在你本地,通过 stdio 跟 Claude Code 通信。
Telegram 只是第一个场景。Channels 的设计是通用的 - 同样的机制可以接 Discord、Slack,甚至 CI/CD 的 webhook。官方目前提供了 Telegram 和 Discord 两个插件。
怎么配置
整个过程大概 5 分钟。
先装 Bun(官方 Telegram 插件用 Bun 写的,所以需要它作为运行时):
curl -fsSL https://bun.sh/install | bash
不过 Channel 协议本身不绑定 Bun - Node.js、Deno 都行。只是 Anthropic 官方选了 Bun 来实现预置插件。如果你不想装 Bun,理论上可以用 Node.js 重写一个,核心就是 @modelcontextprotocol/sdk + Telegram Bot API,代码量不大。
创建 Telegram Bot:
打开 Telegram,找 @BotFather,发 /newbot,按提示给 Bot 取个名字和用户名。完成后它会给你一个 token,长这样:123456789:AAHfiqksKZ8...
在 Claude Code 里装插件(如果没添加过官方 marketplace,先跑一下 /plugin marketplace add anthropics/claude-plugins-official):
/plugin install telegram@claude-plugins-official
配置 token:
/telegram:configure YOUR_TOKEN_HERE
Token 会存到 .claude/channels/telegram/.env,也可以直接设环境变量 TELEGRAM_BOT_TOKEN。
启动:
claude --channels plugin:telegram@claude-plugins-official
配对:
在 Telegram 上给你的 Bot 发条消息,它会回复一个 6 位配对码。在终端里输入:
/telegram:access pair ABCDEF
配对成功后,你的 Telegram 账号就跟这个 Claude Code session 绑定了。
最后一步,锁定访问:
/telegram:access policy allowlist
这一步很重要 - 不设的话,任何人给你的 Bot 发消息都能拿到配对码。设成 allowlist 模式后,只有已配对的用户才能跟 Claude 交互。
能干什么
配好之后,你可以在 Telegram 上跟 Claude Code 像聊天一样交互。
远程下任务:出门在外,想起一个要改的地方,直接在手机上发消息。Claude 在你电脑上执行,完成后把结果发回来。
发文件过去处理:支持发送图片、PDF 等文件(最大 50MB),Claude 会识别内容并处理。
收通知:构建完成、测试跑完、出了报错 - 这些事件都可以通过 Channel 推送到你的 Telegram。
插件提供了三个工具:
| 工具 | 用途 |
|---|---|
reply | 发消息、回复、发送文件附件 |
react | 加 emoji 表情回应 |
edit_message | 编辑之前发过的消息 |
有个限制值得注意:Telegram Bot API 不支持读取历史消息。Bot 只能处理它运行期间新收到的消息,不能回溯之前的对话。
运行时到底发生了什么
理解这个有助于排查问题,也能帮你判断它适不适合你的使用场景。
运行 claude --channels plugin:telegram@claude-plugins-official 后,不是一个进程,是两个:
你的终端
└── claude (主进程,交互式 CLI)
└── bun server.ts (子进程,MCP server)
└── 轮询 Telegram Bot API
Claude Code 启动时读取插件的 .mcp.json,发现需要一个 MCP server,于是把 bun server.ts 作为子进程 spawn 出来。两者通过 stdio(stdin/stdout)通信,这是标准的 MCP 传输协议。
这个命令会阻塞终端。 你面前还是那个正常的 Claude Code 交互界面,只不过同时多挂了一个 Telegram Channel 子进程在后台轮询。终端里正常打字交互,手机上也能通过 Telegram 发消息 - 两边共享同一个 session。
没有独立的后台守护进程。 Channel 插件的生命周期完全由 Claude Code 管理。Ctrl+C 退出 Claude Code,Telegram 那边也就断了。
消息的流向:
- 入站:Telegram → Bot API →
server.ts轮询拿到 → stdio 通知 Claude Code → Claude 处理 - 出站:Claude 调用 MCP tool → stdio →
server.ts→ Telegram Bot API → 你的手机
跟你在 .mcp.json 里配一个普通 MCP server(比如 filesystem)本质上是一样的机制。区别在于 Channel 类型的 MCP server 多了一个能力 - 它可以主动推送事件,而不只是被动等 Claude 调用。
安全模型
Channels 的安全设计围绕一个核心原则:未经验证的消息就是 prompt injection 的入口。
所以它用了 sender allowlist 机制 - 只有配对过的用户 ID 才能推送消息,其他人的消息直接丢弃,连错误提示都不给。
这里有个细节:验证的是发送者的 ID,不是聊天室的 ID。即使在群聊里,也是逐人验证,而不是"这个群的人都放行"。
如果你想自己写 Channel 插件,这是官方文档里反复强调的一点 - 不做 sender gating 的 Channel 等于把 Claude 的输入暴露给了任何人。
一些限制
Channels 目前还是 research preview,有几个需要知道的事:
电脑必须开着。Channel 插件跑在本地,Claude Code session 必须活着才能处理消息。笔记本合盖就断了。
这就引出一个实际问题:你总不能一直开着一个终端窗口不动吧。用 tmux 可以比较优雅地解决这个问题。
用 tmux 保持 session 存活:
# 创建一个专门的 tmux session
tmux new-session -d -s claude-tg \
'claude --channels plugin:telegram@claude-plugins-official'
这一行做了三件事:创建一个叫 claude-tg 的 tmux session,在里面启动带 Telegram Channel 的 Claude Code,然后自动 detach(-d)回到你的 shell。Claude Code 在后台跑着,Telegram 消息正常收发。
# 想看看 Claude 在干嘛,随时 attach 进去
tmux attach -t claude-tg
# 看完了按 Ctrl+B 再按 D,detach 回来,不影响运行
# 不用了,关掉
tmux kill-session -t claude-tg
如果你经常用,可以写个 alias 放进 .zshrc:
alias claude-tg='tmux new-session -d -s claude-tg \
"claude --channels plugin:telegram@claude-plugins-official" \
&& echo "Claude Code + Telegram 已在后台启动,tmux attach -t claude-tg 可查看"'
这样每次打开电脑,跑一下 claude-tg 就行了。合盖休眠的话还是会断 - 这个没办法,除非你跑在一台常开的服务器或 NAS 上。
版本要求。需要 Claude Code v2.1.80 以上。
Team/Enterprise 用户需要管理员在组织策略里显式开启 Channels 功能,默认是关的。
接口可能会变。Research preview 意味着协议和命令格式都不是最终版。
自己写一个 Channel
Channels 的协议是开放的,你可以自己写。核心就三件事:
声明 claude/channel capability,让 Claude Code 注册事件监听。发送 notifications/claude/channel 通知,把外部事件推进去。如果需要双向通信,再暴露 MCP tools 让 Claude 能回复。
一个最简单的 webhook 接收器,大概 20 行代码:
const mcp = new Server(
{ name: 'webhook', version: '0.0.1' },
{
capabilities: { experimental: { 'claude/channel': {} } },
instructions: '收到 webhook 事件,读取并执行。'
}
)
await mcp.connect(new StdioServerTransport())
Bun.serve({
port: 8788,
hostname: '127.0.0.1',
async fetch(req) {
const body = await req.text()
await mcp.notification({
method: 'notifications/claude/channel',
params: { content: body }
})
return new Response('ok')
}
})
往 localhost:8788 发个 POST 请求,内容就会出现在 Claude Code 的上下文里。在这个基础上可以接 GitHub webhook、监控告警、CI 通知 - 任何能发 HTTP 请求的系统都行。
想分享给别人用的话,包装成插件发布到 marketplace 就行。不过目前自定义插件还需要用 --dangerously-load-development-channels 标志加载,正式上架需要通过安全审核。
Claude Code 从一个"必须坐在电脑前用"的终端工具,变成了一个可以随时随地发消息调度的 agent。这个变化不大,但确实补上了日常使用中最明显的一块短板。
相关文章
2026年3月29日
用飞书 CLI + AI Agent 搭了个 A 股投资助手
飞书命令行工具刚开源,我拿它配合 Claude Code 搭了个 A 股每日跟踪系统:多维表格管理持仓、自动抓取行情数据、一句话创建盘中提醒。从安装到跑通,全程自然语言驱动。
2026年3月6日
MCP Apps:让 AI 对话里长出交互界面
MCP 工具一直只能返回文本。现在 MCP Apps 让工具可以返回完整的交互式界面 - 表单、仪表盘、3D 模型、实时监控 - 直接嵌在对话里。这是 MCP 协议最重要的一次扩展。
2026年2月27日
Claude Code 的记忆机制:从 CLAUDE.md 到 Auto Memory,它到底记住了什么?
Claude Code 刚上线了 Auto Memory 功能。加上原有的 CLAUDE.md 体系,它现在有六层记忆结构。这篇拆解每层的用途、加载时机,以及怎么用才不会变成负担。
合作伙伴
CompeteMap — 英国及爱尔兰学生竞赛一站式搜索
数学、编程、科学、写作等各类竞赛信息汇总,支持按年龄和科目筛选,再也不错过报名截止日。