# Claude-to-IM-skill **Repository Path**: data_factory/Claude-to-IM-skill ## Basic Information - **Project Name**: Claude-to-IM-skill - **Description**: No description available - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-03-22 - **Last Updated**: 2026-03-22 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Claude-to-IM Skill 将 Claude Code / Codex 桥接到 IM 平台 —— 在 Telegram、Discord、飞书或 QQ 中与 AI 编程代理对话。 [English](README.md) > **想要桌面图形界面?** 试试 [CodePilot](https://github.com/op7418/CodePilot) —— 一个功能完整的桌面应用,提供可视化聊天界面、会话管理、文件树预览、权限控制等。本 Skill 从 CodePilot 的 IM 桥接模块中提取而来,适合偏好轻量级纯 CLI 方案的用户。 --- ## 工作原理 本 Skill 运行一个后台守护进程,将你的 IM 机器人连接到 Claude Code 或 Codex 会话。来自 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` 命令(飞书/QQ)明确批准 - **流式预览** — 实时查看 Claude 的输出(Telegram 和 Discord 支持) - **会话持久化** — 对话在守护进程重启后保留 - **密钥保护** — token 以 `chmod 600` 存储,日志中自动脱敏 - **无需编写代码** — 安装 Skill 后运行 `/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 模式) ## 安装 ### npx skills(推荐) ```bash npx skills add op7418/Claude-to-IM-skill ``` ### Git 克隆 ```bash git clone https://github.com/op7418/Claude-to-IM-skill.git ~/.claude/skills/claude-to-im ``` 将仓库直接克隆到个人 Skills 目录,Claude Code 会自动发现。 ### 符号链接方式 如果你想把仓库放在其他位置(比如方便开发): ```bash git clone https://github.com/op7418/Claude-to-IM-skill.git ~/code/Claude-to-IM-skill mkdir -p ~/.claude/skills ln -s ~/code/Claude-to-IM-skill ~/.claude/skills/claude-to-im ``` ### Codex 如果你使用 [Codex](https://github.com/openai/codex),直接克隆到 Codex skills 目录: ```bash git clone https://github.com/op7418/Claude-to-IM-skill.git ~/.codex/skills/claude-to-im ``` 或使用提供的安装脚本,自动安装依赖并构建: ```bash # 克隆并安装(复制模式) git clone https://github.com/op7418/Claude-to-IM-skill.git ~/code/Claude-to-IM-skill bash ~/code/Claude-to-IM-skill/scripts/install-codex.sh # 或使用符号链接模式(方便开发) bash ~/code/Claude-to-IM-skill/scripts/install-codex.sh --link ``` ### 验证安装 **Claude Code:** 启动新会话,输入 `/` 应能看到 `claude-to-im`。也可以问 Claude:"What skills are available?" **Codex:** 启动新会话,说 "claude-to-im setup" 或 "启动桥接",Codex 会识别 Skill 并运行配置向导。 ## 快速开始 ### 1. 配置 ``` /claude-to-im setup ``` 向导会引导你完成以下步骤: 1. **选择渠道** — 选择 Telegram、Discord、飞书、QQ,或任意组合 2. **输入凭据** — 向导会详细说明如何获取每个 token、需要开启哪些设置、授予哪些权限 3. **设置默认值** — 工作目录、模型、模式 4. **验证** — 立即通过平台 API 验证 token 有效性 ### 2. 启动 ``` /claude-to-im start ``` 守护进程在后台启动。关闭终端后仍会继续运行。 ### 3. 开始聊天 打开 IM 应用,给你的机器人发消息,Claude Code 会回复。 当 Claude 需要使用工具(编辑文件、运行命令)时,聊天中会弹出带有 **允许** / **拒绝** 按钮的权限请求(Telegram/Discord),或文本 `/perm` 命令提示(飞书/QQ)。 ## 命令列表 所有命令在 Claude Code 或 Codex 中执行: | Claude Code | Codex(自然语言) | 说明 | |---|---|---| | `/claude-to-im setup` | "claude-to-im setup" / "配置" | 交互式配置向导 | | `/claude-to-im start` | "start bridge" / "启动桥接" | 启动桥接守护进程 | | `/claude-to-im stop` | "stop bridge" / "停止桥接" | 停止守护进程 | | `/claude-to-im status` | "bridge status" / "状态" | 查看运行状态 | | `/claude-to-im logs` | "查看日志" | 查看最近 50 行日志 | | `/claude-to-im logs 200` | "logs 200" | 查看最近 200 行日志 | | `/claude-to-im reconfigure` | "reconfigure" / "修改配置" | 交互式修改配置 | | `/claude-to-im doctor` | "doctor" / "诊断" | 诊断问题 | ## 平台配置指南 `setup` 向导会在每一步提供内联指引,以下是概要: ### Telegram 1. 在 Telegram 中搜索 `@BotFather` → 发送 `/newbot` → 按提示操作 2. 复制 bot token(格式:`123456789:AABbCc...`) 3. 建议:`/setprivacy` → Disable(用于群组) 4. 获取 User ID:给 `@userinfobot` 发消息 ### Discord 1. 前往 [Discord 开发者门户](https://discord.com/developers/applications) → 新建应用 2. Bot 标签页 → Reset Token → 复制 token 3. 在 Privileged Gateway Intents 下开启 **Message Content Intent** 4. OAuth2 → URL Generator → scope 选 `bot` → 权限选 Send Messages、Read Message History、View Channels → 复制邀请链接 ### 飞书 / Lark 1. 前往[飞书开放平台](https://open.feishu.cn/app)(或 [Lark](https://open.larksuite.com/app)) 2. 创建自建应用 → 获取 App ID 和 App Secret 3. **批量添加权限**:进入"权限管理" → 使用批量配置添加所有必需权限(`setup` 向导提供完整 JSON) 4. 在"添加应用能力"中启用机器人 5. **事件与回调**:选择**长连接**作为事件订阅方式 → 添加 `im.message.receive_v1` 事件 6. **发布**:进入"版本管理与发布" → 创建版本 → 提交审核 → 在管理后台审核通过 7. **注意**:版本审核通过并发布后机器人才能使用 ### QQ > QQ 目前仅支持 **C2C 私聊**(沙箱接入)。不支持群聊/频道、内联权限按钮、流式预览。权限确认使用文本 `/perm ...` 命令。仅支持图片入站(不支持图片回复)。 1. 前往 [QQ 机器人 OpenClaw](https://q.qq.com/qqbot/openclaw) 2. 创建或选择已有 QQ 机器人 → 获取 **App ID** 和 **App Secret**(仅需这两个必填项) 3. 配置沙箱接入,用 QQ 扫码添加机器人 4. `CTI_QQ_ALLOWED_USERS` 填写 `user_openid`(不是 QQ 号)— 可先留空 5. 如果底层 provider 不支持图片输入,设置 `CTI_QQ_IMAGE_ENABLED=false` ## 架构 ``` ~/.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`,脚本会自动清理 | 详见 [references/troubleshooting.md](references/troubleshooting.md)。 ## 安全 - 所有凭据存储在 `~/.claude-to-im/config.env`,权限 `chmod 600` - 日志输出中 token 自动脱敏(基于正则匹配) - 允许用户/频道/服务器列表限制谁可以与机器人交互 - 守护进程是本地进程,没有入站网络监听 - 详见 [SECURITY.md](SECURITY.md) 了解威胁模型和应急响应 ## 开发 ```bash npm install # 安装依赖 npm run dev # 开发模式运行 npm run typecheck # 类型检查 npm test # 运行测试 npm run build # 构建打包 ``` ## 许可 [MIT](LICENSE)