Atlas / Skills / op7418 / Claude-to-IM Skill

Claude-to-IM SkillBLOCK

skills/op7418/claude-to-im

Bridge Claude Code / Codex to IM platforms — chat with AI coding agents from Telegram, Discord, or Feishu/Lark.

Verdict
BLOCK
Grade
D
Trust score
69 /100
Version
—
Hosts
3 documented
License
MIT
Stars
2,891
01

Overview

From the repository's own README, as read at the audited commit. Badges and raw HTML are left out.

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? Check out CodePilot — a full-featured desktop app with visual chat interface, session management, file tree preview, permission controls, and more. This skill was extracted from CodePilot's IM bridge module for users who prefer a lightweight, CLI-only setup.

How It Works

This skill runs a background daemon that connects your IM bots to Claude Code or Codex sessions. Messages from IM are forwarded to the AI coding agent, and responses (including tool use, permission requests, streaming previews) are sent back to your chat.

You (Telegram/Discord/Feishu/QQ/WeChat)
↕ Bot API
Background Daemon (Node.js)
↕ Claude Agent SDK or Codex SDK (configurable via CTI_RUNTIME)
Claude Code / Codex → reads/writes your codebase

Features

  • Five IM platforms — Telegram, Discord, Feishu/Lark, QQ, WeChat — enable any combination
  • Interactive setup — guided wizard collects tokens with step-by-step instructions
  • Permission control — tool calls require explicit approval via inline buttons (Telegram/Discord) or text /perm commands / quick 1/2/3 replies (Feishu/QQ/WeChat)
  • Streaming preview — see Claude's response as it types (Telegram & Discord)
  • Session persistence — conversations survive daemon restarts
  • Secret protection — tokens stored with chmod 600, auto-redacted in all logs
  • Zero code required — install the skill and run /claude-to-im setup, or tell Codex claude-to-im setup

Prerequisites

  • Node.js >= 20
  • Claude Code CLI (for CTI_RUNTIME=claude or auto) — installed and authenticated (claude command available)
  • Codex CLI (for CTI_RUNTIME=codex or auto) — npm install -g @openai/codex. Auth: run codex auth login, or set OPENAI_API_KEY (optional, fo
Read from source at commit 32ac6e971f68OBSERVED · 2026-10-20
Advertisement
02

Install

Commands as the repository documents them. They are shown, not run.

npx skills add op7418/Claude-to-IM-skill
git clone https://github.com/op7418/Claude-to-IM-skill.git ~/.claude/skills/claude-to-im
git clone https://github.com/op7418/Claude-to-IM-skill.git ~/code/Claude-to-IM-skill
git clone https://github.com/op7418/Claude-to-IM-skill.git ~/code/Claude-to-IM-skill
git clone https://github.com/op7418/Claude-to-IM-skill.git ~/.codex/skills/claude-to-im
npm install
03

Host compatibility

What the documentation claims. We have not run a compatibility test.

HostStatusNotes
claude-codementioned
codexmentioned
openclawmentioned
04

What it tells the agent

The instruction file, verbatim from the audited commit — this is the text the model reads, and the surface the audit's instruction layer examines. Quoted here so you can judge it without cloning anything.

---
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
05

Trust audit

BLOCKgrade D · trust 69/100 Do not install this without reading the findings. The audit found something that could harm you or your machine.

LayerWhat it checksResult
L0Provenance & inventoryPASS
L1Static analysis of the codeFAIL
L2Instruction surface (what it tells the agent)FAIL
L3Class-specific surfacePASS
L4Behavioural (sandbox)SKIPPED

What the source does

Filesystem
declared (3 observation(s))
Network
declared (8 observation(s))
Shell
declared (5 observation(s))
Dependencies
not all pinned
Secrets in source
none-found

Findings (7)

HIGHCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
src/codex-provider.ts:90
this.sdk = await (Function('return import("@openai/codex-sdk")')() as Promise<CodexModule>);
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
HIGHPrompt injection · prompt.credential_read · CWE-94, CWE-1427
SKILL.md:89
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 th
Why it matters. asks the agent to read credentials
HIGHPrompt injection · prompt.override · CWE-94, CWE-1427
references/setup-guides.md:84
1. With Developer Mode enabled, right-click on any channel → **"Copy Channel ID"**
Why it matters. asks the agent to drop prior instructions or safety
Fix. remove the instruction
HIGHPrompt injection · prompt.override · CWE-94, CWE-1427
references/setup-guides.md:92
1. With Developer Mode enabled, right-click on the server icon → **"Copy Server ID"**
Why it matters. asks the agent to drop prior instructions or safety
Fix. remove the instruction
LOWSupply chain · supply.unpinned · CWE-829, CWE-1357
package.json
@anthropic-ai/claude-agent-sdk, qrcode, @types/node, esbuild, tsx, typescript, @openai/codex-sdk
Why it matters. 7 dependency range(s) float
Fix. pin exact versions or ship a lockfile
LOWPrompt injection · prompt.authority_framing · CWE-94, CWE-1427
references/setup-guides.md:154
3. Admin approves in **Feishu Admin Console** → **App Review** (self-approve if you are the admin)
LOWPrompt injection · prompt.credential_read · CWE-94, CWE-1427
README.md:315
| `src/config.ts` | Load/save `config.env`, map to bridge settings |
Why it matters. asks the agent to read credentials

Gates applied: instruction_override, no_behavioural_pass.

Audited 2026-10-20 · audit v0.4.1 · source sha 32ac6e971f68full audit observations/trust-audit/skill/op7418__claude-to-im.json · Report an issue / request a re-scan
06

Audit history

Every audit this skill has had.

DateSourceVerdictGradeScoreChange
2026-10-2032ac6e971f68BLOCKD69first audit
07

Questions

What does the claude-to-im — op7418/claude-to-im-skill skill do?

Bridge Claude Code / Codex to IM platforms — chat with AI coding agents from Telegram, Discord, or Feishu/Lark.

Is claude-to-im — op7418/claude-to-im-skill safe to install?

No — not without reading the findings first. The audit graded it D (69/100) and found 4 critical or high issues in the source. Each one is listed on this page with the file and line it is on.

What can claude-to-im — op7418/claude-to-im-skill access on my machine?

The audit observed that it reaches the network, runs shell commands and reads or writes files. Each of those is consistent with what it says it does. Secrets in the source: none found.

Which assistants does claude-to-im — op7418/claude-to-im-skill work with?

Its documentation mentions claude-code, codex and openclaw. That is what the text claims, not a compatibility test we ran.

How current is this page?

The grade is for one exact copy of the source (32ac6e971f68), read on 2026-10-20. The repository is watched, and a new audit runs when it changes — this is the first audit.

Add this badge to your README

Shows this page's audit result and links back to it. It updates when the audit does.

ModelsAtlas audit badge

Markdown
[![ModelsAtlas audit: Claude-to-IM Skill](https://modelsatlas.com/skills/op7418/claude-to-im/badge.svg)](https://modelsatlas.com/skills/op7418/claude-to-im/)

Not your listing, or something out of date? Claim or update your listing.

Advertisement