起因:一个周末的小烦恼
上周末在咖啡馆坐着,突然想起有个 bug 没修。打开手机想用 Claude Code 看一眼,结果发现------它只能在终端里跑。
回家开电脑?太麻烦了。用 OpenClaw?我试过,配置 Web 服务器、Nginx 反向代理、HTTPS 证书......折腾了一下午,最后发现我只是想改几行代码而已。
这时候我想:能不能直接在 Telegram 里跟 Claude 聊天?
Telegram 有现成的 Bot API,不需要自己搭服务器,消息推送也是长连接,安全性由 Telegram 保证。听起来很适合做这件事。
于是周末两天,撸了个 Telegram Bot 版本的 Claude Code 遥控器。
痛点:为什么不用 OpenClaw?
OpenClaw 是个很棒的项目,但它解决的是"把 Claude 搬到云端"的问题,适合团队协作或者需要完整 Web IDE 的场景。
我的需求更简单:
-
只想在手机上偶尔操作一下,不需要完整的浏览器界面
-
不想折腾服务器配置,端口暴露、防火墙、SSL 证书这些东西太重了
-
已经在用 Claude Code CLI,只是想加个远程入口
所以我需要的是一个"轻量级的后门",而不是一个完整的 Web 应用。
项目特点
1. 零基础设施
不需要 Web 服务器、不需要端口暴露、不需要配置 HTTPS。Telegram 自带长连接,消息推送由 Telegram 服务器处理。启动一次就作为守护进程在后台运行,崩溃自动重启,macOS 上还能配置开机自启。
2. 默认安全
-
文件访问沙箱化(
--path参数设置项目根目录) -
项目内文件自动允许访问,项目外需要 Telegram 内联按钮确认
-
支持用户白名单(
ALLOWED_USER_IDS) -
超过 20 分钟的旧消息自动丢弃
3. 实时流式响应
Claude 的回复不是等全部生成完才显示,而是边思考边更新。你能看到 Claude 实时打字的过程,就像在终端里用 Claude Code 一样。长消息自动分段发送,体验很流畅。
4. 智能交互
-
Claude 的选项题自动转成 Telegram 内联键盘按钮,点一下就能选
-
回复里的图片、PDF 等文件路径会自动发送为 Telegram 附件
-
每个用户独立的 SDK 连接,支持并发消息(最多 3 条)
5. 功能完整
-
支持所有 Claude Code 技能(
/skill <name>)和斜杠命令(/commit、/xhs-writer等) -
支持模型切换(
/model在 Sonnet/Opus/Haiku 之间切换) -
支持会话恢复(
/resume查看和恢复历史对话) -
支持流式中断(
/stop立即停止 Claude 的回复)
上手指南
方式一:用 Claude Code 自动安装(推荐)
bash
git clone https://github.com/terranc/claude-telegram-bot-bridge
cd claude-telegram-bot-bridge
claude
然后在 Claude Code 提示符里输入 /setup,它会自动帮你:
-
检查系统环境(Python 3.11+、Claude CLI)
-
收集 Bot Token 和用户白名单
-
创建虚拟环境并安装依赖
-
生成
.env配置文件
完成后启动:
bash
./start.sh --path /path/to/your/project
方式二:手动安装
如果你不想用 Claude Code,也可以直接运行安装脚本:
bash
git clone https://github.com/terranc/claude-telegram-bot-bridge
cd claude-telegram-bot-bridge
./setup.sh
然后启动:
bash
./start.sh --path /path/to/your/project
获取 Telegram Bot Token
去 @BotFather 创建一个 Bot,拿到 Token。
获取你的 Telegram 用户 ID
给 @userinfobot 发消息,它会告诉你你的用户 ID。
常用命令
bash
# 前台运行(默认)
./start.sh --path /path/to/project
# 后台守护进程
./start.sh --path /path/to/project -d
# 调试模式(详细日志 + 聊天记录)
./start.sh --path /path/to/project --debug
# 检查运行状态
./start.sh --path /path/to/project --status
# 停止
./start.sh --path /path/to/project --stop
# macOS 开机自启
./start.sh --path /path/to/project --install
# 取消开机自启
./start.sh --path /path/to/project --uninstall
Telegram 内的命令
-
/new- 开始新对话 -
/model- 切换模型(Sonnet/Opus/Haiku) -
/resume- 查看和恢复历史会话 -
/stop- 停止当前 Claude 回复 -
/skill <name>- 运行 Claude Code 技能 -
/skills- 列出所有可用技能 -
其他斜杠命令(如
/commit、/xhs-writer)直接发送即可
技术细节
架构
-
core/bot.py- Telegram Bot 主逻辑,命令处理、权限控制 -
core/project_chat.py- Claude SDK 集成,消息队列、工具权限回调 -
core/streaming.py- 流式响应处理,实时更新草稿消息 -
session/- 会话管理,状态持久化到 JSON -
utils/- 配置、日志、聊天记录
数据存储
- 运行时数据:
PROJECT_ROOT/.telegram_bot/
-
sessions.json- 用户会话状态 -
logs/bot.log- 主日志(每日轮转) -
logs/error_YYYYMMDD.log- 错误日志 -
logs/{user_id}_{session_id}_{date}.log- 调试聊天记录
- SDK 对话历史:
~/.claude/projects/{PROJECT_DIR_NAME}/*.jsonl
守护进程特性
-
崩溃自动重启,记录退出码和运行时长
-
60 秒内崩溃 5 次后停止重启(防止无限循环)
-
基于 MD5 的依赖缓存,
requirements.txt未变时跳过重装 -
14 天日志轮转
项目地址
GitHub: github.com/terranc/cla...
欢迎提 Issue 或 PR。如果你也觉得 OpenClaw 太重,可以试试这个方案。
后记
这个项目从想法到能用,大概花了一个周末。代码不复杂,但解决了我的实际问题。
有时候工具不需要很完美,够用就行。OpenClaw 是一辆卡车,我这个是一辆自行车------看你要运货还是通勤。
现在我在地铁上也能用手机跟 Claude 对话,让它帮我改代码、跑测试、查日志。实时流式响应让整个体验很流畅,就像在终端里用 Claude Code 一样。
下一步可能会加个语音输入功能,这样在路上也能用语音跟 Claude 对话。不过这是后话了。
先这样,继续撸代码去了 🚀