claude-to-im

claude-to-im

熱門

將此 Claude Code 或 Codex 工作階段橋接到 Telegram、Discord、飛書/Lark、QQ 或微信,讓使用者可以從手機與 Claude 對話。用於:設定、啟動、停止或診斷 claude-to-im 橋接守護行程;將 Claude 回覆轉發到即時通訊應用程式;任何類似「claude-to-im」、「bridge」、「消息推送」、「消息轉發」、「橋接」、「連上飛書」、「手機上看claude」、「啟動後台服務」、「診斷」、「查看日誌」、「配置」的用語。子命令:setup、start、stop、status、logs、reconfigure、doctor。請勿用於:建立獨立機器人、Webhook 整合或使用 IM 平台 SDK 進行程式開發——這些是一般程式設計任務。

2812星標
317分支
更新於 2026/3/23
SKILL.md
readonlyread-only
name
claude-to-im
description

Bridge THIS Claude Code or Codex session to Telegram, Discord, Feishu/Lark, QQ, or WeChat so the user can chat with Claude from their phone. Use for: setting up, starting, stopping, or diagnosing the claude-to-im bridge daemon; forwarding Claude replies to a messaging app; any phrase like "claude-to-im", "bridge", "消息推送", "消息转发", "桥接", "连上飞书", "手机上看claude", "启动后台服务", "诊断", "查看日志", "配置". Subcommands: setup, start, stop, status, logs, reconfigure, doctor. Do NOT use for: building standalone bots, webhook integrations, or coding with IM platform SDKs — those are regular programming tasks.

Claude-to-IM 橋接技能

你正在管理 Claude-to-IM 橋接。
使用者資料儲存在 ~/.claude-to-im/

技能目錄 (SKILL_DIR) 位於 ~/.claude/skills/claude-to-im
在 Codex 安裝中,可能位於 ~/.codex/skills/Claude-to-IM-skill
如果兩個路徑都不存在,則回退到使用 Glob 模式 **/skills/**/claude-to-im/SKILL.md**/skills/**/Claude-to-IM-skill/SKILL.md,並從結果推導出根目錄。

命令解析

$ARGUMENTS 中將使用者意圖解析為以下子命令之一:

使用者說法(範例) 子命令
setup, configure, 配置, 我想在飞书上用 Claude, 帮我连接 Telegram, 帮我接微信 setup
start, start bridge, 启动, 启动桥接 start
stop, stop bridge, 停止, 停止桥接 stop
status, bridge status, 状态, 运行状态, 怎么看桥接的运行状态 status
logs, logs 200, 查看日志, 查看日志 200 logs
reconfigure, 修改配置, 帮我改一下 token, 换个 bot reconfigure
doctor, diagnose, 诊断, 挂了, 没反应了, bot 没反应, 出问题了 doctor

區分:statusdoctor — 當使用者只想檢查橋接是否在運行(資訊性)時使用 status。當使用者回報問題或懷疑有故障(診斷性)時使用 doctor。如果不確定且使用者描述了症狀(例如「沒反應了」、「掛了」),優先使用 doctor

logs 提取可選的數字參數(預設為 50)。

在詢問使用者任何平台憑證之前,先內部讀取 SKILL_DIR/references/setup-guides.md,以便知道每個憑證在哪裡取得。不要將完整指南一次全部顯示給使用者——只提及他們需要進行的下一步(例如:「前往 https://open.feishu.cn → 你的應用程式 → 憑證,找到 App ID」)。如果使用者說不知道怎麼做,再顯示指南的相關章節。

執行環境偵測

在執行任何子命令之前,偵測你正在哪個環境中執行:

  1. Claude CodeAskUserQuestion 工具可用。用於互動式設定精靈。
  2. Codex / 其他AskUserQuestion 不可用。回退到非互動式指引:解釋步驟,顯示 SKILL_DIR/config.env.example,並要求使用者手動建立 ~/.claude-to-im/config.env

你可以透過檢查 AskUserQuestion 是否在你的可用工具列表中來測試。

設定檔檢查(適用於 startstopstatuslogsreconfiguredoctor

在執行 setup 以外的任何子命令之前,檢查 ~/.claude-to-im/config.env 是否存在:

  • 如果不存在:
    • 在 Claude Code 中:告訴使用者「找不到設定檔」,並使用 AskUserQuestion 自動啟動 setup 精靈。
    • 在 Codex 中:告訴使用者「找不到設定檔。請根據範例建立 ~/.claude-to-im/config.env:」然後顯示 SKILL_DIR/config.env.example 的內容並停止。不要嘗試啟動守護行程——沒有 config.env,程序會在啟動時崩潰並留下過時的 PID 檔案,從而阻止未來啟動。
  • **如果存在:**繼續執行請求的子命令。

子命令

setup

執行互動式設定精靈。此子命令需要 AskUserQuestion。如果不可用(Codex 環境),則改為顯示 SKILL_DIR/config.env.example 的內容,並逐欄位解釋,指示使用者手動建立設定檔。

當 AskUserQuestion 可用時,一次收集一個欄位。在每個答案之後,向使用者確認該值(將機密遮罩為僅顯示最後 4 個字元),然後再進入下一個問題。

步驟 1 — 選擇頻道

詢問要啟用哪些頻道(telegram、discord、feishu、qq、weixin)。接受逗號分隔的輸入。簡要描述每個頻道:

  • telegram — 最適合個人使用。串流預覽、內嵌權限按鈕。
  • discord — 適合團隊使用。伺服器/頻道/使用者層級的存取控制。
  • feishu (Lark) — 適用於飛書/Lark 團隊。串流卡片、工具進度、內嵌權限按鈕。
  • qq — 僅限 QQ C2C 私人聊天。無內嵌權限按鈕,無串流預覽。權限使用文字 /perm ... 命令。
  • weixin — 微信 QR 碼登入。僅限單一連結帳號;新的登入會取代前一個。無內嵌權限按鈕,無串流預覽。權限使用文字 /perm ... 命令或快速 1/2/3 回覆。語音訊息僅使用微信自帶的語音轉文字文字;橋接不會轉錄原始語音音訊。

步驟 2 — 為每個頻道收集 Token

對於每個啟用的頻道,一次收集一個憑證。用一句話告訴使用者每個值在哪裡找到。僅在使用者要求協助或表示不知道如何操作時,才顯示完整的指南章節(來自 SKILL_DIR/references/setup-guides.md):

  • Telegram:Bot Token → 確認(遮罩)→ Chat ID(參閱指南了解如何取得)→ 確認 → 允許的使用者 ID(可選)。重要: Chat ID 或允許的使用者 ID 至少必須設定一個,否則機器人將拒絕所有訊息。
  • Discord:Bot Token → 確認(遮罩)→ 允許的使用者 ID → 允許的頻道 ID(可選)→ 允許的伺服器 ID(可選)。重要: 允許的使用者 ID 或允許的頻道 ID 至少必須設定一個,否則機器人將拒絕所有訊息(預設拒絕)。
  • Feishu:App ID → 確認 → App Secret → 確認(遮罩)→ Domain(可選)→ 允許的使用者 ID(可選)。收集憑證後,說明使用者必須完成的兩個階段設定:
    • 階段 1(啟動橋接前):(A) 批次新增權限,(B) 啟用機器人功能,(C) 發布第一個版本 + 管理員核准。這使權限和機器人生效。
    • 階段 2(需要運行橋接):(D) 執行 /claude-to-im start,(E) 使用長連線模式設定事件(im.message.receive_v1)和回呼(card.action.trigger),(F) 發布第二個版本 + 管理員核准。
    • **為什麼需要兩個階段:**飛書在儲存事件訂閱時會驗證 WebSocket 連線——如果橋接未運行,儲存會失敗。橋接需要已發布的權限才能連線。
    • 保持為簡短檢查清單——僅在詢問時才顯示完整指南。
  • QQ:收集兩個必填欄位,然後是可選欄位:
    1. QQ App ID(必填)→ 確認
    2. QQ App Secret(必填)→ 確認(遮罩)
    1. 允許的使用者 OpenID(可選,按 Enter 跳過)— 注意:這是 user_openid,不是 QQ 號碼。如果使用者還沒有 openid,可以留空。
    2. 啟用圖片(可選,預設 true,按 Enter 跳過)— 如果底層提供者不支援圖片輸入,設為 false
    3. 最大圖片大小 MB(可選,預設 20,按 Enter 跳過)
    • 提醒使用者:QQ 第一個版本僅支援 C2C 私人聊天沙箱存取。不支援群組/頻道、內嵌按鈕或串流預覽。
  • Weixin:不要要求靜態 token。改為:
    1. 告訴使用者此頻道使用 QR 碼登入,而非手動輸入憑證。
    2. 執行 cd SKILL_DIR && npm run weixin:login
    3. 輔助程式會寫入 ~/.claude-to-im/runtime/weixin-login.html 並嘗試在本地瀏覽器中自動開啟。
    4. 如果自動開啟失敗,告訴使用者手動開啟該 HTML 檔案並使用微信掃描 QR 碼。
    5. 等待輔助程式報告成功,然後確認連結的帳號已儲存在本地。
    • 簡要說明:連結的微信帳號儲存在 ~/.claude-to-im/data/weixin-accounts.json。再次執行輔助程式會取代先前連結的帳號。
    • 簡要說明:CTI_WEIXIN_MEDIA_ENABLED 僅控制入站圖片/檔案/影片下載。對於語音訊息,橋接僅接受微信內建語音轉文字傳回的文字。如果微信未提供轉錄文字,橋接會回覆錯誤,而不是下載/轉錄原始音訊。

步驟 3 — 一般設定

詢問執行環境、預設工作目錄、模型和模式:

  • 執行環境claude(預設)、codexauto
    • claude — 使用 Claude Code CLI + Claude Agent SDK(需要安裝 claude CLI)
    • codex — 使用 OpenAI Codex SDK(需要 codex CLI;透過 codex auth loginOPENAI_API_KEY 驗證)
    • auto — 先嘗試 Claude,如果找不到 Claude CLI 則回退到 Codex
  • 工作目錄:預設 $CWD
  • 模型(可選):留空則繼承執行環境的預設模型。如果使用者想要覆蓋,請他們輸入模型名稱。不要硬編碼或建議特定模型名稱——可用模型會隨時間變化。
  • 模式code(預設)、planask

步驟 4 — 寫入設定檔並驗證

  1. 顯示所有設定的最終摘要表格(機密遮罩為僅顯示最後 4 個字元)
  2. 在寫入前要求使用者確認
  3. 使用 Bash 建立目錄結構:mkdir -p ~/.claude-to-im/{data,logs,runtime,data/messages}
  4. 使用 Write 建立 ~/.claude-to-im/config.env,所有設定以 KEY=VALUE 格式寫入
  5. 使用 Bash 設定權限:chmod 600 ~/.claude-to-im/config.env
  6. 驗證 Token——讀取 SKILL_DIR/references/token-validation.md 以取得每個平台的正確命令和預期回應。這可以在使用者嘗試啟動守護行程之前捕捉拼寫錯誤和錯誤的憑證。對於微信,成功的 QR 碼登入即視為驗證。
  7. 使用摘要表格報告結果。如果任何驗證失敗,說明可能的原因以及如何修正。
  8. 成功時,告訴使用者:「設定完成!執行 /claude-to-im start 啟動橋接。」

start

預先檢查: 確認 ~/.claude-to-im/config.env 存在(參閱上方「設定檔檢查」)。如果沒有,守護行程會立即崩潰並留下過時的 PID 檔案。

執行:bash "SKILL_DIR/scripts/daemon.sh" start

將輸出顯示給使用者。如果失敗,告訴使用者:

  • 執行 doctor 進行診斷:/claude-to-im doctor
  • 檢查最近的日誌:/claude-to-im logs

stop

執行:bash "SKILL_DIR/scripts/daemon.sh" stop

status

執行:bash "SKILL_DIR/scripts/daemon.sh" status

logs

從參數中提取可選的行數 N(預設為 50)。
執行:bash "SKILL_DIR/scripts/daemon.sh" logs N

reconfigure

  1. ~/.claude-to-im/config.env 讀取目前設定
  2. 以清晰的表格格式顯示目前設定,所有機密遮罩(僅顯示最後 4 個字元)
  3. 使用 AskUserQuestion 詢問使用者想要更改什麼
  4. 收集新值時,告訴使用者在哪裡找到該值;僅在使用者要求協助時才顯示 SKILL_DIR/references/setup-guides.md 的完整指南
  5. 原子地更新設定檔(寫入暫存檔,重新命名)
  6. 重新驗證任何更改的 Token
  7. 提醒使用者:「執行 /claude-to-im stop 然後 /claude-to-im start 以套用變更。」

如果使用者在 reconfigure 期間想要切換微信帳號,再次執行 cd SKILL_DIR && npm run weixin:login。每次成功掃描都會取代先前連結的本地帳號。

doctor

執行:bash "SKILL_DIR/scripts/doctor.sh"

顯示結果並針對任何失敗建議修正方法。常見修正:

  • SDK cli.js 缺失 → cd SKILL_DIR && npm install
  • dist/daemon.mjs 過時 → cd SKILL_DIR && npm run build
  • 設定檔缺失 → 執行 setup
  • 微信帳號缺失/過期 → cd SKILL_DIR && npm run weixin:login
  • 微信語音訊息回報缺少語音轉文字 → 啟用微信自帶的語音轉寫功能並重新傳送;橋接本身不會轉錄原始語音音訊

對於更複雜的問題(未收到訊息、權限超時、記憶體過高、過時的 PID 檔案),請閱讀 SKILL_DIR/references/troubleshooting.md 以取得詳細的診斷步驟。

飛書升級注意事項: 如果使用者從此技能的舊版本升級,且飛書回傳權限錯誤(例如串流卡片無法運作、打字指示器失敗、權限按鈕無回應),根本原因幾乎肯定是飛書後端缺少權限或回呼。請引導使用者參閱 SKILL_DIR/references/setup-guides.md 中的「從先前版本升級」章節——他們需要新增新的範圍(cardkit:card:writecardkit:card:readim:message:updateim:message.reactions:readim:message.reactions:write_only),新增 card.action.trigger 回呼,並重新發布應用程式。升級需要兩個發布週期,因為新增回呼需要活躍的 WebSocket 連線(橋接必須正在運行)。

注意事項

  • 在輸出中始終遮罩機密(僅顯示最後 4 個字元)——使用者經常在錯誤報告中分享終端機輸出,因此暴露的 Token 會造成安全事件。
  • 在啟動守護行程之前始終檢查 config.env——如果沒有,程序會在啟動時崩潰並留下過時的 PID 檔案,從而阻止未來啟動(需要手動清理)。
  • 守護行程作為背景 Node.js 程序運行,由平台監控程式管理(macOS 上的 launchd、Linux 上的 setsid、Windows 上的 WinSW/NSSM)。
  • 設定檔持久儲存在 ~/.claude-to-im/config.env——跨工作階段保留。