用 Telegram 远程控制你本地的 Claude Code

Claude Code 是一个强大的本地 AI 编程助手,但它默认只能在终端里使用。如果你人在外面,想让它帮你读一个文件、查一段代码、或者回答关于项目的问题,就得打开电脑才行。

im-claude 解决的就是这个问题。 它是一个网关服务,把 Telegram(或钉钉)变成 Claude Code 的远程操控入口。启动之后,你在手机上给 Telegram Bot 发消息,它就能帮你查文件、读代码、回答问题------全程在你的本地机器上运行,数据不经过任何第三方。


它是怎么工作的

消息流向非常直接:

复制代码
你的手机 Telegram
      ↓(互联网)
  Telegram 服务器
      ↓(长轮询)
  本地运行的 im-claude
      ↓
  Claude Agent SDK(本地进程)
      ↓
  Claude API(claude-sonnet-4-6)
      ↓ 返回结果,原路回去

关键点是:Claude Agent SDK 跑在你本地。Claude 拿到的是你本地文件系统的读写权限,不是某个云端沙箱。你告诉它"读取 D:/AI/claude_code 下的测试文件",它就真的去读你本地那个目录。

架构上分四层:

组件 职责
接入层 TelegramAdapter / DingTalkAdapter 接收/发送 IM 消息
路由层 MessageRouter 权限校验、防并发
执行层 ClaudeRunner 调用 Agent SDK
能力层 @anthropic-ai/claude-agent-sdk 完整 Claude Code 工具链

五分钟跑起来

前置条件:

  • Node.js 18+

  • Anthropic API Key

  • 一个 Telegram Bot Token(去找 @BotFather/newbot 就能拿到)

第一步:克隆并安装

复制代码
git clone https://github.com/zytc2009/im-claude
cd im-claude
npm install

第二步:配置环境变量

复制代码
cp .env.example .env

编辑 .env,最少只需要三个值:

复制代码
ANTHROPIC_API_KEY=sk-ant-xxx
TELEGRAM_BOT_TOKEN=你的Bot Token
ALLOWED_USER_IDS=你的Telegram数字ID

不知道自己的 Telegram ID?在 Telegram 里找 @userinfobot 发一条消息,它会直接告诉你。

第三步:启动

复制代码
npm run dev

看到 🚀 IM-Claude Bridge 已启动 就说明成功了。去 Telegram 找你的 Bot,发一条 /start,然后直接说话。


会话是持续的

这是 im-claude 一个值得注意的设计:它用 Claude Agent SDK 原生的 session_id 来维持对话上下文,而不是手动拼接历史消息。

复制代码
第 1 条消息 → query({ prompt })               → SDK 返回 session_id,保存
第 2 条消息 → query({ prompt, resume: sid })  → 续接上文
/clear 命令 → 删除 session_id               → 下次开新对话

这意味着你可以在 Telegram 里进行多轮对话,Claude 会记住之前说的内容,就像在终端里连续输入一样。


工具权限控制

im-claude 允许你精确控制 Claude 能做什么,通过 .env 里的一行配置:

复制代码
# 只读,最安全
ALLOWED_TOOLS=Read,Glob,Grep
​
# 读写,可以修改文件
ALLOWED_TOOLS=Read,Glob,Grep,Write,Edit
​
# 完整权限,含 Shell 执行(生产环境谨慎开放)
ALLOWED_TOOLS=Read,Glob,Grep,Write,Edit,Bash

配合 ALLOWED_USER_IDS 白名单,只有你列出来的用户 ID 才能跟 Bot 交互。ALLOWED_USER_IDS 留空表示允许任何人------本地测试可以,暴露到公网绝对不行。

工作目录也可以限制:

复制代码
WORKING_DIR=D:/AI/claude_code

Claude 的文件操作默认限制在这个目录下,不会跑到你其他地方去。


如果你要同时接钉钉

钉钉配置比 Telegram 麻烦一些,需要在钉钉开放平台创建企业内部应用并拿到三个值:AppKey、AppSecret、AgentId,再加一个 webhook 签名密钥。

本地开发时因为没有公网 IP,可以用 ngrok 临时暴露端口:

复制代码
ngrok http 3000
# 把 https://xxx.ngrok.io/dingtalk/webhook 填到钉钉消息接收地址

Telegram 和钉钉可以同时运行,在 .env 里把两边参数都填上,服务启动时会自动注册两个适配器。


扩展到其他平台

项目用接口隔离了平台差异。如果你想接入微信、Slack 或者其他 IM,实现 IMAdapter 接口就够了:

复制代码
export class MyIMAdapter implements IMAdapter {
  readonly platform = "myim" as const;
​
  onMessage(handler: MessageHandler): void { /* 注册消息处理器 */ }
  async sendMessage(msg: OutgoingMessage): Promise<void> { /* 发送消息 */ }
  async start(): Promise<void> { /* 启动 */ }
  async stop(): Promise<void> { /* 停止 */ }
}

然后在 src/index.tsrouter.registerAdapter(new MyIMAdapter(...)) 注册一行,核心逻辑完全不用动。


Docker 部署

如果想让服务一直跑着不依赖本地终端,用 Docker:

复制代码
docker-compose up -d

Dockerfile 已经做了生产优化:npm ci --omit=dev 只安装运行时依赖,镜像不包含 TypeScript 编译器、测试框架等开发工具。


适合哪些场景

  • 外出时临时查代码:让 Claude 帮你检索项目里的某个函数实现

  • 私人知识库问答:把工作目录指向你的笔记或文档目录,用自然语言提问

  • 轻量远程辅助:给信任的同事加白名单,让他们也能查你本地项目的特定内容

不适合的场景:把 ALLOWED_TOOLS 开到 Bash 然后对外公开------那等于给陌生人开了你电脑的 Shell。


项目地址:https://github.com/zytc2009/im-claude

相关推荐
西瓜拿铁好喝13 分钟前
2026 语义缓存实战:把命中契约写进SPEC,MonkeyCode 云端跑通
人工智能·机器学习·缓存
老余说AI1 小时前
AI 漫剧赛道转向:游戏 IP 改编如何走出同质化,AI 多语种工具如何补上海外分发缺口
人工智能·短剧
hhzz1 小时前
【OpenCV 入门到精通 03】图像入门:读取、显示、保存完全指南
人工智能·python·opencv·计算机视觉
hfywmsj5 小时前
广州餐饮铺位招租决策模型:多因子选址系统设计
开发语言·人工智能·python·广州餐饮铺位招租
vx-Biye_Design5 小时前
SSM伴侣动物伴护星小程序06330-计算机课程设计、毕业设计
spring boot·后端·elasticsearch·小程序·架构·课程设计·idea
沧沧凉凉8 小时前
同一个 Blender 建模,Claude 两个模型都翻车,GPT-6 一次过
人工智能·游戏·ai编程
X54先生(人文科技)8 小时前
ELR-SELLM Edge 神经元网络架构评估报告
人工智能·深度学习·架构·开源
今年下半年8 小时前
从零开始搭建一套大语言模型 + LangGraph 多智能体编排 + RAG 知识库检索** 的智能问答平台
人工智能·语言模型·自然语言处理
Lifangyun_WD8 小时前
RTX 5090 与 RTX PRO 6000 怎么选?32GB 和 96GB 显存分别适合哪些 AI 任务
人工智能·aigc·gpu算力·芯片·gpu租赁