/Claude-to-IM-skill
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
$ npx -y skills add op7418/Claude-to-IM-skill --skill Claude-to-IM-skill --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
- Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
- You can call itInvoke it directly when you want it.
- Slash command
/Claude-to-IM-skill
Context preview
The summary Claude sees to decide when to auto-load this skill.
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
SKILL.md
Claude-to-IM-skill.SKILL.mdname: 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.
argument-hint: "setup | start | stop | status | logs [N] | reconfigure | doctor"
allowed-tools:
- Bash
- Read
- Write
- Edit
- AskUserQuestion
- Grep
- Glob
Claude-to-IM Bridge Skill
You are managing the Claude-to-IM bridge. User data is stored at `~/.claude-to-im/`.
The skill directory (SKILL_DIR) is at `~/.claude/skills/claude-to-im`. In Codex installs it may instead be `~/.codex/skills/Claude-to-IM-skill`. If neither path exists, fall back to Glob with pattern `**/skills/**/claude-to-im/SKILL.md` or `**/skills/**/Claude-to-IM-skill/SKILL.md` and derive the root from the result.
Command parsing
Parse the user's intent from `$ARGUMENTS` into one of these subcommands:
| User says (examples) | Subcommand | |---|---| | `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 |
**Disambiguation: `status` vs `doctor`** — Use `status` when the user just wants to check if the bridge is running (informational). Use `doctor` when the user reports a problem or suspects something is broken (diagnostic). When in doubt and the user describes a symptom (e.g., "没反应了", "挂了"), prefer `doctor`.
Extract optional numeric argument for `logs` (default 50).
Before asking users for any platform credentials, read `SKILL_DIR/references/setup-guides.md` internally so you know where to find each credential. Do NOT dump the full guide to the user upfront — only mention the specific next step they need to do (e.g., "Go to https://open.feishu.cn → your app → Credentials to find the App ID"). If the user says they don't know how, then show the relevant section of the guide.
Runtime detection
Before executing any subcommand, detect which environment you are running in:
1. **Claude Code** — `AskUserQuestion` tool is available. Use it for interactive setup wizards. 2. **Codex / other** — `AskUserQuestion` is NOT available. Fall back to non-interactive guidance: explain the steps, show `SKILL_DIR/config.env.example`, and ask the user to create `~/.claude-to-im/config.env` manually.
You can test this by checking if AskUserQuestion is in your available tools list.
Config check (applies to `start`, `stop`, `status`, `logs`, `reconfigure`, `doctor`)
Before running any subcommand other than `setup`, check if `~/.claude-to-im/config.env` exists:
- **If it does NOT exist:**
- In Claude Code: tell the user "No configuration found" and automatically start the `setup` wizard using AskUserQuestion.
- In Codex: tell the user "No configuration found. Please create `~/.claude-to-im/config.env` based on the example:" then show the contents of `SKILL_DIR/config.env.example` and stop. Don't attempt to start the daemon — without config.env the process will crash on startup and leave behind a stale PID file that blocks future starts.
- **If it exists:** proceed with the requested subcommand.
Subcommands
`setup`
Run an interactive setup wizard. This subcommand requires `AskUserQuestion`. If it is not available (Codex environment), instead show the contents of `SKILL_DIR/config.env.example` with field-by-field explanations and instruct the user to create the config file manually.
When AskUserQuestion IS available, collect input **one field at a time**. After each answer, confirm the value back to the user (masking secrets to last 4 chars only) before moving to the next question.
**Step 1 — Choose channels**
Ask which channels to enable (telegram, discord, feishu, qq, weixin). Accept comma-separated input. Briefly describe each:
- **telegram** — Best for personal use. Streaming preview, inline permission buttons.
- **discord** — Good for team use. Server/channel/user-level access control.
- **feishu** (Lark) — For Feishu/Lark teams. Streaming cards, tool progress, inline permission buttons.
- **qq** — QQ C2C private chat only. No inline permission buttons, no streaming preview. Permissions use text `/perm ...` commands.
- **weixin** — WeChat QR login. Single linked account only; a new login replaces the previous one. No inline permission buttons, no streaming preview. Permissions use text `/perm ...` commands or quick `1/2/3` replies. Voice messages only use WeChat's own speech-to-text text; raw voice audio is not transcribed by the bridge.
**Step 2 — Collect tokens per channel**
For each enabled channel, collect one credential at a time. Tell the user where to find each value in one sentence. Only show the full guide section (from `SKILL_DIR/references/setup-guides.md`) if the user asks for help or says they don't know how:
- **Telegram**: Bot Token → confirm (masked) → Chat ID (see guide for how to get it) → confirm → Allowed User IDs (optional). **Important:** At least one of Chat ID or Allowed User IDs must be set, otherwise the bot will reject all messages.
- **Discord**: Bot Token → confirm (masked) → Allowed User IDs → Allowed Channel IDs (optional) → Allowed Guild IDs (optional). **Important:** At least one of Allowed User IDs or Allowed Channel IDs must be set, otherwis
Read more
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. argument-hint: "setup | start | stop | status | logs [N] | reconfigure | doctor" allowed-tools: - Bash - Read - Write - Edit - AskUserQuestion - Grep - Glob
Claude-to-IM Bridge Skill
You are managing the Claude-to-IM bridge. User data is stored at `~/.claude-to-im/`.
The skill directory (SKILL_DIR) is at `~/.claude/skills/claude-to-im`. In Codex installs it may instead be `~/.codex/skills/Claude-to-IM-skill`. If neither path exists, fall back to Glob with pattern `**/skills/**/claude-to-im/SKILL.md` or `**/skills/**/Claude-to-IM-skill/SKILL.md` and derive the root from the result.
Command parsing
Parse the user's intent from `$ARGUMENTS` into one of these subcommands:
| User says (examples) | Subcommand | |---|---| | `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 |
**Disambiguation: `status` vs `doctor`** — Use `status` when the user just wants to check if the bridge is running (informational). Use `doctor` when the user reports a problem or suspects something is broken (diagnostic). When in doubt and the user describes a symptom (e.g., "没反应了", "挂了"), prefer `doctor`.
Extract optional numeric argument for `logs` (default 50).
Before asking users for any platform credentials, read `SKILL_DIR/references/setup-guides.md` internally so you know where to find each credential. Do NOT dump the full guide to the user upfront — only mention the specific next step they need to do (e.g., "Go to https://open.feishu.cn → your app → Credentials to find the App ID"). If the user says they don't know how, then show the relevant section of the guide.
Runtime detection
Before executing any subcommand, detect which environment you are running in:
1. **Claude Code** — `AskUserQuestion` tool is available. Use it for interactive setup wizards. 2. **Codex / other** — `AskUserQuestion` is NOT available. Fall back to non-interactive guidance: explain the steps, show `SKILL_DIR/config.env.example`, and ask the user to create `~/.claude-to-im/config.env` manually.
You can test this by checking if AskUserQuestion is in your available tools list.
Config check (applies to `start`, `stop`, `status`, `logs`, `reconfigure`, `doctor`)
Before running any subcommand other than `setup`, check if `~/.claude-to-im/config.env` exists:
- **If it does NOT exist:**
- In Claude Code: tell the user "No configuration found" and automatically start the `setup` wizard using AskUserQuestion.
- In Codex: tell the user "No configuration found. Please create `~/.claude-to-im/config.env` based on the example:" then show the contents of `SKILL_DIR/config.env.example` and stop. Don't attempt to start the daemon — without config.env the process will crash on startup and leave behind a stale PID file that blocks future starts.
- **If it exists:** proceed with the requested subcommand.
Subcommands
`setup`
Run an interactive setup wizard. This subcommand requires `AskUserQuestion`. If it is not available (Codex environment), instead show the contents of `SKILL_DIR/config.env.example` with field-by-field explanations and instruct the user to create the config file manually.
When AskUserQuestion IS available, collect input **one field at a time**. After each answer, confirm the value back to the user (masking secrets to last 4 chars only) before moving to the next question.
**Step 1 — Choose channels**
Ask which channels to enable (telegram, discord, feishu, qq, weixin). Accept comma-separated input. Briefly describe each:
- **telegram** — Best for personal use. Streaming preview, inline permission buttons.
- **discord** — Good for team use. Server/channel/user-level access control.
- **feishu** (Lark) — For Feishu/Lark teams. Streaming cards, tool progress, inline permission buttons.
- **qq** — QQ C2C private chat only. No inline permission buttons, no streaming preview. Permissions use text `/perm ...` commands.
- **weixin** — WeChat QR login. Single linked account only; a new login replaces the previous one. No inline permission buttons, no streaming preview. Permissions use text `/perm ...` commands or quick `1/2/3` replies. Voice messages only use WeChat's own speech-to-text text; raw voice audio is not transcribed by the bridge.
**Step 2 — Collect tokens per channel**
For each enabled channel, collect one credential at a time. Tell the user where to find each value in one sentence. Only show the full guide section (from `SKILL_DIR/references/setup-guides.md`) if the user asks for help or says they don't know how:
- **Telegram**: Bot Token → confirm (masked) → Chat ID (see guide for how to get it) → confirm → Allowed User IDs (optional). **Important:** At least one of Chat ID or Allowed User IDs must be set, otherwise the bot will reject all messages.
- **Discord**: Bot Token → confirm (masked) → Allowed User IDs → Allowed Channel IDs (optional) → Allowed Guild IDs (optional). **Important:** At least one of Allowed User IDs or Allowed Channel IDs must be set, otherwis
Bridge Claude Code / Codex to IM platforms — chat with AI coding agents from Telegram, Discord, Feishu/Lark, QQ, or WeChat. Want a desktop GUI instead?
Repo: op7418/Claude-to-IM-skill

