Claude-to-IM-skill的搭建
将 Claude Code / Codex 桥接到 IM 平台 —— 在 Telegram、Discord、飞书、QQ 或微信中与 AI 编程代理对话。想要桌面图形界面?试试 CodePilot —— 一个功能完整的桌面应用,提供可视化聊天界面、会话管理、文件树预览、权限控制等。该Skill是从 CodePilot 的 IM 桥接模块中提取而来,适合偏好轻量级纯 CLI 方案的人。
工作原理
该 Skill 运行一个后台守护进程,将你的 IM 机器人连接到 Claude Code 会话。来自 IM 的消息被转发给 AI 编程代理,响应(包括工具调用、权限请求、流式预览)会发回到聊天中。
你 (Telegram/Discord/飞书/QQ/微信)
↕ Bot API
后台守护进程 (Node.js)
↕ Claude Agent SDK 或 Codex SDK(通过 CTI_RUNTIME 配置)
Claude Code / Codex → 读写你的代码库
功能特点
- 五大 IM 平台 — Telegram、Discord、飞书、QQ、微信,可任意组合启用
- 交互式配置 — 引导式向导逐步收集 token,附带详细获取说明
- 权限控制 — 工具调用需要在聊天中通过内联按钮(Telegram/Discord)或文本
/perm命令 / 快捷1/2/3回复(飞书/QQ/微信)明确批准 - 流式预览 — 实时查看 Claude 的输出(Telegram 和 Discord 支持)
- 会话持久化 — 对话在守护进程重启后保留
- 密钥保护 — token 以
chmod 600存储,日志中自动脱敏 - 无需编写代码 — 安装 Skill 后运行
/claude-to-im setup,或直接对 Codex 说claude-to-im setup
前置要求
- Node.js >= 20
- Claude Code CLI (
CTI_RUNTIME=claude或auto时需要)— 已安装并完成认证(claude命令可用) - Codex CLI (
CTI_RUNTIME=codex或auto时需要)—npm install -g @openai/codex。鉴权:运行codex auth login,或设置OPENAI_API_KEY(可选,API 模式)
安装
请先按你实际使用的 AI Agent 产品选择对应安装方式。
Claude Code
推荐:npx skills
npx skills add op7418/Claude-to-IM-skill
安装完成后,直接对 Claude Code 说:
/claude-to-im setup
如果你主要想接微信,也可以直接说:
帮我接微信
验证安装
Claude Code: 启动新会话,输入 / 应能看到 claude-to-im 。也可以直接问 Claude:“What skills are available?”
更新 Skill
Claude Code
如果你是通过 npx skills 安装的,直接重新执行:
npx skills add op7418/Claude-to-IM-skill
更新完成后,对 Claude Code 说:
/claude-to-im doctor
/claude-to-im start
快速开始
1. 配置
Claude Code
/claude-to-im setup
向导会引导你完成以下步骤:
- 选择渠道 — 选择 Telegram、Discord、飞书、QQ、微信,或任意组合
- 输入凭据 — 向导会详细说明如何获取每个 token、需要开启哪些设置、授予哪些权限
- 设置默认值 — 工作目录、模型、模式
- 验证 — 立即通过平台 API 验证 token 有效性
2. 启动
Claude Code
/claude-to-im start
守护进程在后台启动。关闭终端后仍会继续运行。
3. 开始聊天
打开 IM 应用,给你的机器人发消息,Claude Code / Codex 会通过桥接回复。
当 Claude 需要使用工具(编辑文件、运行命令)时,聊天中会弹出带有 允许 / 拒绝 按钮的权限请求(Telegram/Discord),或文本 /perm 命令提示 / 快捷 1/2/3 回复(飞书/QQ/微信)。
命令列表
所有命令在 Claude Code中执行:
| Claude Code | 说明 |
|---|---|
/claude-to-im setup | 交互式配置向导 |
/claude-to-im start | 启动桥接守护进程 |
/claude-to-im stop | 停止守护进程 |
/claude-to-im status | 查看运行状态 |
/claude-to-im logs | 查看最近 50 行日志 |
/claude-to-im logs 200 | 查看最近 200 行日志 |
/claude-to-im reconfigure | 交互式修改配置 |
/claude-to-im doctor | 诊断问题 |
平台配置指南
setup 向导会在每一步提供内联指引,以下是概要:
Telegram
- 在 Telegram 中搜索
@BotFather→ 发送/newbot→ 按提示操作 - 复制 bot token(格式:
123456789:AABbCc...) - 建议:
/setprivacy→ Disable(用于群组) - 获取 User ID:给
@userinfobot发消息
Discord
- 前往 Discord 开发者门户→ 新建应用
- Bot 标签页 → Reset Token → 复制 token
- 在 Privileged Gateway Intents 下开启 Message Content Intent
- OAuth2 → URL Generator → scope 选
bot→ 权限选 Send Messages、Read Message History、View Channels → 复制邀请链接
飞书 / Lark
- 前往 飞书开放平台(或 Lark) )
- 创建自建应用 → 获取 App ID 和 App Secret
- 批量添加权限 :进入”权限管理” → 使用批量配置添加所有必需权限(
setup向导提供完整 JSON) - 在”添加应用能力”中启用机器人
- 事件与回调 :选择 长连接 作为事件订阅方式 → 添加
im.message.receive_v1事件 - 发布 :进入”版本管理与发布” → 创建版本 → 提交审核 → 在管理后台审核通过
- 注意 :版本审核通过并发布后机器人才能使用
QQ 目前仅支持 C2C 私聊 (沙箱接入)。不支持群聊/频道、内联权限按钮、流式预览。权限确认使用文本
/perm ...命令。仅支持图片入站(不支持图片回复)。
- 前往 QQ 机器人 OpenClaw
- 创建或选择已有 QQ 机器人 → 获取 App ID 和 App Secret (仅需这两个必填项)
- 配置沙箱接入,用 QQ 扫码添加机器人
CTI_QQ_ALLOWED_USERS填写user_openid(不是 QQ 号)— 可先留空- 如果底层 provider 不支持图片输入,设置
CTI_QQ_IMAGE_ENABLED=false
微信 / Weixin
微信当前采用扫码登录、单账号模式、文本权限确认,不支持流式预览。
- 在已安装的 Skill 目录里运行本地扫码工具:
- Claude Code 默认安装:
cd ~/.claude/skills/claude-to-im && npm run weixin:login
- Claude Code 默认安装:
- 工具会生成
~/.claude-to-im/runtime/weixin-login.html,并尽量自动用浏览器打开 - 用微信扫码并在手机上确认
- 成功后,账号会保存到
~/.claude-to-im/data/weixin-accounts.json - 再次运行扫码工具,会替换当前已绑定的微信账号
补充说明:
CTI_WEIXIN_MEDIA_ENABLED只控制图片 / 文件 / 视频的入站下载- 语音消息只使用微信自带的语音转文字结果
- 如果微信没有提供
voice_item.text,桥会直接报错,不会自行下载或转写原始语音 - 权限确认使用文本
/perm ...命令或快捷1/2/3回复
架构
~/.claude-to-im/
├── config.env ← 凭据与配置 (chmod 600)
├── data/ ← 持久化 JSON 存储
│ ├── sessions.json
│ ├── bindings.json
│ ├── permissions.json
│ └── messages/ ← 按会话分文件的消息历史
├── logs/
│ └── bridge.log ← 自动轮转,密钥脱敏
└── runtime/
├── bridge.pid ← 守护进程 PID 文件
└── status.json ← 当前状态
核心组件
| 组件 | 职责 |
|---|---|
src/main.ts | 守护进程入口,组装依赖注入,启动 bridge |
src/config.ts | 加载/保存 config.env ,映射为 bridge 设置 |
src/store.ts | JSON 文件 BridgeStore(30 个方法,写穿缓存) |
src/llm-provider.ts | Claude Agent SDK query() → SSE 流 |
src/codex-provider.ts | Codex SDK runStreamed() → SSE 流 |
src/sse-utils.ts | 共享的 SSE 格式化辅助函数 |
src/permission-gateway.ts | 异步桥接:SDK canUseTool ↔ IM 按钮 |
src/logger.ts | 密钥脱敏的文件日志,支持轮转 |
scripts/daemon.sh | 进程管理(start/stop/status/logs) |
scripts/doctor.sh | 诊断检查 |
SKILL.md | Claude Code Skill 定义文件 |
权限流程
1. Claude 想使用工具(如编辑文件)
2. SDK 调用 canUseTool() → LLMProvider 发射 permission_request SSE 事件
3. Bridge 在 IM 聊天中发送内联按钮:[允许] [拒绝]
4. canUseTool() 阻塞等待用户响应(5 分钟超时)
5. 用户点击允许 → Bridge 解除权限等待
6. SDK 继续执行工具 → 结果流式发回 IM
故障排查
运行诊断:
/claude-to-im doctor
检查项目:Node.js 版本、配置文件是否存在及权限、token 有效性(实时 API 调用)、日志目录、PID 文件一致性、最近的错误。
| 问题 | 解决方案 |
|---|---|
Bridge 无法启动 | 运行 doctor ,检查 Node 版本和日志 |
收不到消息 | 用 doctor 验证 token,检查允许用户配置 |
权限超时 | 用户 5 分钟内未响应,工具调用自动拒绝 |
PID 文件残留 | 运行 stop 再 start ,脚本会自动清理 |
安全
- 所有凭据存储在
~/.claude-to-im/config.env,权限chmod 600 - 日志输出中 token 自动脱敏(基于正则匹配)
- 允许用户/频道/服务器列表限制谁可以与机器人交互
- 守护进程是本地进程,没有入站网络监听
开发
npm install # 安装依赖
npm run dev # 开发模式运行
npm run typecheck # 类型检查
npm test # 运行测试
npm run build # 构建打包