Claude To Im
op7418/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.
Configure IM platform channels (Feishu, Weixin/WeChat, WeCom, DingTalk, Discord, Telegram) for octo.
$ npx skills add open-octo/octo-agent --skill channel-manager -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install open-octo/octo-agent channel-manager --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/open-octo/octo-agent.git skills-src && mkdir -p .claude/skills && cp -r skills-src/internal/skills/defaults/channel-manager .claude/skills/channel-manager && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "channel-manager" agent skill from https://github.com/open-octo/octo-agent/tree/main/internal/skills/defaults/channel-manager into .claude/skills/channel-manager/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "channel-manager", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/open-octo/octo-agent/tree/main/internal/skills/defaults/channel-managerType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add open-octo/octo-agent --skill channel-manager -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install open-octo/octo-agent channel-manager --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/open-octo/octo-agent.git skills-src && mkdir -p .agents/skills && cp -r skills-src/internal/skills/defaults/channel-manager .agents/skills/channel-manager && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "channel-manager" agent skill from https://github.com/open-octo/octo-agent/tree/main/internal/skills/defaults/channel-manager into .agents/skills/channel-manager/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "channel-manager", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add open-octo/octo-agent --skill channel-manager -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install open-octo/octo-agent channel-manager --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/open-octo/octo-agent.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/internal/skills/defaults/channel-manager .cursor/skills/channel-manager && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "channel-manager" agent skill from https://github.com/open-octo/octo-agent/tree/main/internal/skills/defaults/channel-manager into .cursor/skills/channel-manager/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "channel-manager", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/open-octo/octo-agent.git --path internal/skills/defaults/channel-manager--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add open-octo/octo-agent --skill channel-manager -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install open-octo/octo-agent channel-manager --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/open-octo/octo-agent.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/internal/skills/defaults/channel-manager .gemini/skills/channel-manager && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "channel-manager" agent skill from https://github.com/open-octo/octo-agent/tree/main/internal/skills/defaults/channel-manager into .gemini/skills/channel-manager/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "channel-manager", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install open-octo/octo-agent channel-managerInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add open-octo/octo-agent --skill channel-manager -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/open-octo/octo-agent.git skills-src && mkdir -p .github/skills && cp -r skills-src/internal/skills/defaults/channel-manager .github/skills/channel-manager && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "channel-manager" agent skill from https://github.com/open-octo/octo-agent/tree/main/internal/skills/defaults/channel-manager into .github/skills/channel-manager/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "channel-manager", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add open-octo/octo-agent --skill channel-manager -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install open-octo/octo-agent channel-manager --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/open-octo/octo-agent.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/internal/skills/defaults/channel-manager .opencode/skills/channel-manager && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "channel-manager" agent skill from https://github.com/open-octo/octo-agent/tree/main/internal/skills/defaults/channel-manager into .opencode/skills/channel-manager/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "channel-manager", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
channel-managerConfigure IM platform channels (Feishu, Weixin/WeChat, WeCom, DingTalk, Discord, Telegram) for octo.
Channel Manager is an agent skill from open-octo/octo-agent. Configure IM platform channels (Feishu, Weixin/WeChat, WeCom, DingTalk, Discord, Telegram) for octo. Guides the user through platform consoles, collects credentials, writes ~/.octo/channels.yml, and diagnoses connection problems. Trigger on: "channel setup", "setup feishu", "setup weixin", "setup wechat", "setup wecom", "setup dingtalk", "setup discord", "setup telegram", "channel config", "channel status", "channel enable", "channel disable", "channel doctor", "connect feishu", "connect wechat", "connect wecom"…
Its SKILL.md is about 6.2k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
It sits in Productivity & Automation, covering Messaging and chat bots. It works with WeChat, Feishu (Lark), Discord and Telegram. The repository describes itself as: Open-source, single-binary, self-hosted AI agent — your models and data stay on your machine. A coding agent on par with Claude Code and a personal assistant lighter than… The licence is MIT.
7 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 81448b2. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
curlFrom the folder's file list and the shell code blocks in SKILL.md.
Hosts in commands or code, which the agent is likely to contact:
discord.comopen.feishu.cnilinkai.weixin.qq.comapi.telegram.orgapi.dingtalk.comgithub.comAlso links to:
open-dev.dingtalk.comwork.weixin.qq.comt.meFrom URLs in SKILL.md, links to its own repository left out.
Names these keys or tokens, usually read from environment variables:
APP_SECRETCLIENT_SECRETBOT_TOKENFrom names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Channel Manager loads about 6.2k tokens when it runs. Until then it costs about 193 tokens; SKILL.md has 2,870 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from open-octo/octo-agent at commit 81448b2, republished under its MIT licence (© open-octo). 2,870 words, ~6,244 tokens.
.claude/skills/channel-manager/SKILL.md (or your agent's skills folder).When conversing in Chinese, refer to a user-created agent profile as 专家 (not 智能体) when asking whether to bind a channel instance to one — matches the desktop/web UI's Chinese labels. English conversations keep "agent".
Configure IM platform channels for octo. Supported platforms: feishu, weixin, wecom, dingtalk, discord, telegram.
~/.octo/channels.yml (YAML, mode 600). Edit it directly with
read_file / write_file.127.0.0.1:8088 throughout this skill, the default
address. If the Environment section has an Octo server: line, use that
address in every command instead.adapter_id used in profile channel_bindings.octo serve, started alongside the HTTP server (skip with
--no-channel). Config changes are applied on save via POST /api/channels/<platform>
— no full restart needed.~/.octo/weixin-credentials.json, written by
the QR-login flow this skill drives (POST /api/channels/weixin/login on the running serve).channels.yml schema (multi-instance):
channels:
feishu:
- name: code-review-bot # instance name (adapter_id); omit for single-instance
enabled: true | false
app_id: string # required
app_secret: string # required
domain: string # optional, default https://open.feishu.cn
allowed_users: string # optional, comma-separated user IDs; empty = allow all
- name: ops-bot # second instance, same platform
enabled: true
app_id: ...
app_secret: ...
weixin:
- enabled: true | false
token: string # bot token; optional if cred_path exists
cred_path: string # optional, default ~/.octo/weixin-credentials.json
base_url: string # optional, default https://ilinkai.weixin.qq.com
allowed_users: string
dingtalk:
- name: ... # optional
enabled: true | false
client_id: string # required (AppKey)
client_secret: string # required (AppSecret)
allowed_users: string
wecom:
- name: ...
enabled: true | false
bot_id: string # required, intelligent robot Bot ID (starts with "aib")
secret: string # required, robot secret
allowed_users: string
discord:
- name: ...
enabled: true | false
bot_token: string # required, from the Discord Developer Portal
allowed_users: string
telegram:
- name: ...
enabled: true | false
bot_token: string # required, from @BotFather
base_url: string # optional, default https://api.telegram.org
parse_mode: string # optional, default "Markdown"; empty string disables
allowed_users: stringNew instance on an existing platform: append another - entry under the platform key with a unique name. The name field is the adapter_id; single-instance setups can omit it (the platform name is used as the default).
After writing channels.yml, apply the change without a full restart:
curl -s -X POST "http://127.0.0.1:8088/api/channels/<platform>/reload"octo serve.Use this in place of restart_server throughout this skill. The tool is no longer
available in the desktop build (the server runs in-process with no supervisor), so
hot-reload via the API is the only zero-downtime path.
| User says | Subcommand |
|---|---|
channel setup, setup feishu, setup weixin, setup wechat, setup wecom, setup dingtalk, setup discord, setup telegram | setup |
channel status | status |
channel enable <platform> | enable |
channel disable <platform> | disable |
channel doctor | doctor |
status~/.octo/channels.yml. If missing or empty: "No channels configured yet. Run /channel-manager setup to get started." and stop.curl -s -o /dev/null -w "%{http_code}" http://127.0.0.1:8088/api/health200 → RUNNING. Non-200 / connection refused → STOPPED.Do NOT use
pgrep -f "octo.*serve": the server process is namedocto-desktopin the desktop build and won't match. The health check works uniformly acrossocto serve, desktop, and TUI-hosted serves.
Channel Status (adapter process: RUNNING/STOPPED)
─────────────────────────────────────────────────────
Platform Enabled Details
feishu ✅ yes app_id: cli_xxx…
weixin ✅ yes credentials: present
dingtalk ❌ no (not configured)
─────────────────────────────────────────────────────app_id truncated to 12 chars.token is set or a credential file exists (cred_path, else ~/.octo/weixin-credentials.json). Never print the token value.client_id truncated to 12 chars. Never print client_secret.bot_id truncated to 12 chars. Never print secret.bot_token is set (token: present). Never print the token value.bot_token is set (token: present). Never print the token value.If the process is STOPPED but at least one platform is enabled, ask: "octo serve 未运行,是否现在启动?" If the user agrees and you can start it safely, run octo serve in the background. If it is RUNNING but started before a recent config change, trigger a hot reload (see "Hot-reload after config change") so the new config takes effect without a restart.
setupAsk which platform to connect. ask_user_question takes at most 4 options, so
ask it in two steps rather than cramming all six in: first the family, then the
platform within it.
Which platform would you like to connect?
- Feishu (飞书)
- Telegram (Bot API)
- Discord
- Something else (WeChat, WeCom, DingTalk)
If they pick "Something else", ask again with those three:
Which one?
- Weixin (Personal WeChat via iLink QR login)
- WeCom (企业微信 intelligent robot)
- DingTalk (钉钉)
After a platform is chosen, ask whether this is a new configuration or an additional instance on an existing platform:
Is this a new platform setup, or adding another bot instance to an existing one?
(If the platform isn't configured yet, skip this question.)
Adding an instance to an existing platform: append a new - entry under the
platform key with a name. Ask the user for a name (e.g. "code-review-bot",
"ops-bot"), then proceed to the platform-specific credentials steps below. The
name is the adapter_id — it appears in InboundEvent and is used for
profile channel_bindings.
After credentials are validated and saved, ask:
Do you want to bind this bot instance to an expert agent? If yes, which agent?
List the available agents via GET /api/agents. When the user picks one, call
POST /api/agents/:id/bind with {"platform": "<platform>", "adapter_id": "<name>", "chat_id": "<group or DM id>"}.
The adapter_id must match the instance name in channels.yml.
Unbinding — when the user asks to unbind (解绑 / 改回默认 agent / 换回默认):
Call DELETE /api/agents/:id/bind with the same body
{"platform": "<platform>", "adapter_id": "<name>", "chat_id": "<group or DM id>"}.
The match is exact on all three fields (platform, adapter_id, chat_id) — the
chat_id for a DM is the user's IM id (e.g. the weixin user_id from the login
response). After the call the agent's channel_bindings no longer contains that
entry and the chat falls back to the default agent. Confirm success by checking the
response — the returned agent JSON must not list the removed binding.
The
chat_idto use for unbind is the same one used at bind time. If you don't have it handy, list the agent viaGET /api/agents/:idand readchannel_bindingsfor the exactplatform/adapter_id/chat_idtriple.
app_id and app_secret from the reply.{
"scopes": {
"tenant": [
"im:message",
"im:message.p2p_msg:readonly",
"im:message:send_as_bot"
],
"user": []
}
}curl -s -X POST "https://open.feishu.cn/open-apis/auth/v3/tenant_access_token/internal" \
-H "Content-Type: application/json" \
-d '{"app_id":"<APP_ID>","app_secret":"<APP_SECRET>"}'"code":0. On failure show the error and re-ask for credentials (up to 3 tries).~/.octo/channels.yml (preserve other platforms), then chmod 600 ~/.octo/channels.yml:channels:
feishu:
- name: <NAME> # user-chosen instance name
enabled: true
app_id: <APP_ID>
app_secret: <APP_SECRET>CRITICAL: octo's Feishu adapter uses a WebSocket long connection, and Feishu refuses to save the long-connection event config until a client is connected. So the adapter must be running first.
octo serve and wait until the log prints [feishu] connected to WebSocket.im.message.receive_v1, and add it. Reply done." Wait for "done".octo serve first. Then say: "Find the bot in Feishu and send it a message."Weixin uses a QR-code login — no app credentials needed.
Do NOT
pgrepforocto servebefore this flow — on desktop the server runs asocto-desktopand won't match. Just call the API; if it fails with connection refused, then offer to start the server.
curl -s -X POST http://127.0.0.1:8088/api/channels/weixin/login
# → {"status":"pending","qr_url":"https://…"} (or "already_logged_in")-d '{"force":true}' to re-login over existing credentials.already_logged_in:重新登录 强制重新扫码,回复 继续 直接复用当前登录态)"重新登录, call POST /api/channels/weixin/login with -d '{"force":true}' and continue from step 3.继续 (or any other confirmation), proceed to step 4.Open this link and scan the QR code with WeChat, then confirm login in the app:
<qr_url from the response>
curl -s http://127.0.0.1:8088/api/channels/weixin/login"status":"done" — credentials are saved to ~/.octo/weixin-credentials.json. Continue."status":"pending" with a new qr_url — the QR expired and was refreshed; relay the new link."status":"failed" — show the error and offer to retry from step 1.
This agent-driven flow is the only way to log in; the web Channels panel
intentionally has no inline QR button.~/.octo/channels.yml (preserve other platforms), then chmod 600:channels:
weixin:
- enabled: true~/.octo/weixin-credentials.json automatically; only set cred_path if the user keeps credentials elsewhere.channels.yml, trigger a hot reload (see "Hot-reload after config change") so the new adapter starts immediately. If the server isn't running, tell the user to start octo serve.octo serve is running, message the bot on WeChat."curl -s -X POST "https://api.dingtalk.com/v1.0/oauth2/accessToken" \
-H "Content-Type: application/json" \
-d '{"appKey":"<CLIENT_ID>","appSecret":"<CLIENT_SECRET>"}'accessToken field. On failure show the error and re-ask (up to 3 tries).~/.octo/channels.yml (preserve other platforms), then chmod 600:channels:
dingtalk:
- name: <NAME>
enabled: true
client_id: <CLIENT_ID>
client_secret: <CLIENT_SECRET>octo serve. Then say: "✅ DingTalk channel configured. Publish the app version if you haven't, then message the robot in DingTalk."WeCom "API mode" intelligent robots connect over a WebSocket long connection — no public callback URL needed.
bot_id starts with aib — if the two values look swapped, swap them back.~/.octo/channels.yml (preserve other platforms), then chmod 600:channels:
wecom:
- name: <NAME>
enabled: true
bot_id: <BOT_ID>
secret: <SECRET>octo serve starts, an invalid pair logs [wecom] authentication failed.octo serve. Then say: "✅ WeCom channel configured. Find the bot in the WeCom client under Contacts → Smart Bot (智能机器人) and message it."Discord requires manual portal interaction (hCaptcha gates application creation). Guide the user through the portal in one round-trip.
Tell the user to open https://discord.com/developers/applications, then give all of the following in a single message and collect the values from their plain reply. Don't reach for ask_user_question here — it needs 2-4 discrete choices, and a token has none:
- Click New Application (top-right), name it (e.g. "octo"), accept the ToS, click Create.
- In the left nav click Bot.
- Scroll to Privileged Gateway Intents and turn on MESSAGE CONTENT INTENT, then Save Changes.
- Scroll up, click Reset Token → Yes, do it! → Copy. (The token is shown only once — copy before navigating away.)
- In the left nav click General Information and copy the Application ID.
Paste both back as one line:
token=YOUR_BOT_TOKEN app_id=YOUR_APPLICATION_ID
If the user chats in a non-English language, append the localized label in parens after each bolded English button name (the English label is what they physically click). Parse with tolerant matching (token=\S+, app_id=\d+); if either field is missing, re-ask with the same format reminder (up to 3 tries).
Validate the token:
curl -s -H "Authorization: Bot <BOT_TOKEN>" \
-H "User-Agent: DiscordBot (https://github.com/open-octo/octo-agent, 1.0)" \
https://discord.com/api/v10/users/@meSuccess returns the bot user JSON with an id. A 401 means a bad token — re-ask.
Merge into ~/.octo/channels.yml (preserve other platforms), then chmod 600:
channels:
discord:
- name: <NAME>
enabled: true
bot_token: <BOT_TOKEN>Build the invite URL with the Application ID and tell the user to open it:
https://discord.com/oauth2/authorize?client_id=<APP_ID>&scope=bot&permissions=274878220912
Pick your server from the dropdown → Continue → Authorize. If the dropdown is empty you don't have a server yet — open https://discord.com/channels/@me, click the + button → Create My Own, then re-open the invite link.
Trigger a hot reload (see "Hot-reload after config change"). If the server isn't running, remind the user to start octo serve. Then say: "✅ Discord channel configured. @-mention the bot in a channel or DM it."
Telegram is the simplest — no browser automation, no QR. The user creates a bot via @BotFather and pastes the token.
Tell the user:
Open Telegram and chat with @BotFather (https://t.me/BotFather). Send
/newbot, pick a display name and a username ending inbot. BotFather replies with an HTTP API token like123456789:ABCdefGhIJKlmNoPQRsTUVwxyZ. Paste the token here.Optional: if your network blocks
api.telegram.org, also give me the base URL of your self-hosted Bot API server.
Parse the token (matches ^\d+:[\w-]{30,}$).
Validate with getMe:
curl -s "<BASE_URL_OR_https://api.telegram.org>/bot<TOKEN>/getMe"Success returns "ok":true. 401 Unauthorized means a wrong token — re-ask.
Merge into ~/.octo/channels.yml (preserve other platforms; omit base_url unless the user gave one), then chmod 600:
channels:
telegram:
- name: <NAME>
enabled: true
bot_token: <TOKEN>Trigger a hot reload (see "Hot-reload after config change"). If the server isn't running, remind the user to start octo serve. Then say: "✅ Telegram channel configured. Open your bot in Telegram and send it a message."
For group chats: disable Privacy Mode first (@BotFather →
/mybots→ Bot Settings → Group Privacy → Turn off), then remove and re-add the bot to the group — otherwise it cannot receive any group messages, including @-mentions.
enable / disable~/.octo/channels.yml. If the platform has no entry (or required fields are missing), redirect to setup.enabled: true|false for that platform only; preserve every other field and platform.chmod 600 ~/.octo/channels.yml.<platform> channel enabled." / "❌ <platform> channel disabled.", then trigger a hot reload (see "Hot-reload after config change"). If the server isn't running, remind the user to start octo serve.doctorCheck each item, report ✅ / ❌ with remediation:
~/.octo/channels.yml exists, is valid YAML, and has mode 600 (stat -f %Lp on macOS, stat -c %a on Linux).app_id, app_secret non-empty.token non-empty, or a readable credential file (cred_path, else ~/.octo/weixin-credentials.json).client_id, client_secret non-empty.bot_id (starts with aib), secret non-empty.bot_token non-empty.bot_token non-empty.
Also check that no two instances share the same name (adapter_id) across or within platforms."code":0 → ✅, else ❌ "Feishu credentials rejected — re-run setup".accessToken present → ✅, else ❌ "DingTalk credentials invalid — re-run setup".token → ✅, else ❌ "Re-run the weixin QR login (web Channels panel, or POST /api/channels/weixin/login)"./users/@me curl from Discord setup step 2; an id in the response → ✅, else ❌ "Discord token invalid or revoked — re-run setup".getMe curl from Telegram setup step 2; "ok":true → ✅, else ❌ "Telegram token rejected by getMe — re-run setup".octo serve output for [wecom] authentication failed → ❌ "WeCom credentials incorrect — re-run setup", or [wecom] connected, authenticating with no auth error → ✅.status (curl -s -o /dev/null -w "%{http_code}" http://127.0.0.1:8088/api/health); if no enabled platform, skip; if enabled but not running, ❌ "Run octo serve" (and ask to start it if the user agrees).curl -s http://127.0.0.1:8088/api/channelsissue field (omitted when healthy) carries the exact reason the adapter isn't running: an unregistered/misconfigured/invalid-config skip at startup, or a crash-and-restart status such as restarting (2/10) after crash: ... or gave up after 11 crashes: .... A non-empty issue → ❌, quote it verbatim, and point at the matching setup step; a "gave up" issue means retries are exhausted and the platform needs enable/disable + hot reload (or a config fix + full server restart) to try again — it will not recover on its own.~/.octo/channels.yml must be mode 600; fix with chmod 600 after every write.app_secret, client_secret, secret, bot_token, or token values back to the user.© open-octo, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in internal/skills/defaults/channel-manager of open-octo/octo-agent.
Open the folder on GitHubat commit 81448b2
Channel Manager next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Channel Manager this skillopen-octo/octo-agent | 125 | — | ~6.2k | Automated safety check: Pass | MIT | |
| Claude To Imop7418/Claude-to-IM-skill | 2.9k | — | ~3.4k | Automated safety check: Notes | MIT | |
| Channel Managerclacky-ai/openclacky | 1.2k | — | ~6.1k | Automated safety check: Notes | MIT | |
| Use Avibeavibe-bot/avibe | 622 | — | ~2.5k | Automated safety check: Pass | MIT | |
| Easy Openclawdaheiai/easy-openclaw | 112 | — | ~1.7k | Automated safety check: Notes | None | |
| Message Push0xranx/golembot | 323 | — | ~984 | Automated safety check: Pass | MIT |
op7418/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.
clacky-ai/openclacky
Configure IM platform channels (Feishu, WeCom, Weixin, Discord, Telegram, DingTalk) for openclacky.
avibe-bot/avibe
Safely inspect and modify local Avibe configuration, routing, runtime settings, watches, scheduled tasks, Avibe Cloud remote access, and operational state.
daheiai/easy-openclaw
OpenClaw 配置优化向导。采用“第 0 层测试观测(可选)+ 前 3 轮优化 + 第 4 轮接入扩展”流程:基础推荐层(含联网搜索与权限模式)、渠道增强层(Discord/Feishu/Telegram 分支优化)、Skills 推荐层(可执行可跳过)、新增渠道接入引导(可跳过)。用于帮助用户快速完成 OpenClaw 初始化或优化配置。用户说到“优化…
0xranx/golembot
Send proactive messages to IM groups or individual users via the gateway Send API.
nexu-io/nexu
Send feedback to the Nexu team. An agent skill from nexu-io/nexu.
open-octo/octo-agent
Acquire images as files — generate them with an AI image model (14 providers: OpenAI/gpt-image, Gemini, Qwen, Zhipu, Volcengine, Stability, FLUX, Ideogram, MiniMax, and more), search openly-licensed…
open-octo/octo-agent
Create, read, and edit Excel (.xlsx) spreadsheets programmatically with openpyxl — cell values, formulas, styling (fonts/fills/borders/alignment/number formats), merged cells, multiple sheets…
open-octo/octo-agent
Design guidance for any HTML/Markdown file shown in octo's Artifacts panel — reports, dashboards, architecture/system diagrams, generated UIs, slide-style pages, 3D scenes.
open-octo/octo-agent
Review local code changes. An agent skill from open-octo/octo-agent.
open-octo/octo-agent
AI-driven multi-format SVG content generation system. An agent skill from open-octo/octo-agent.
open-octo/octo-agent
Configure octo's global settings through guided conversation — set up AI model endpoints (providers, API keys, models), adjust agent defaults (reasoning effort, permission mode, coauthor, workspace…
Works with
Categories
Configure IM platform channels (Feishu, Weixin/WeChat, WeCom, DingTalk, Discord, Telegram) for octo. Channel Manager is an agent skill from open-octo/octo-agent. Configure IM platform channels (Feishu, Weixin/WeChat, WeCom, DingTalk, Discord, Telegram) for octo.
Channel Manager fits situations like: : channel setup; channel disable; connect dingtalk; connect discord.
Run `npx skills add open-octo/octo-agent --skill channel-manager -a claude-code`. Or copy the skill folder (internal/skills/defaults/channel-manager in open-octo/octo-agent) into .claude/skills/channel-manager in your project. Claude Code loads it when a task matches its description.
Run `npx skills add open-octo/octo-agent --skill channel-manager -a codex`. Or copy the skill folder (internal/skills/defaults/channel-manager in open-octo/octo-agent) into .agents/skills/channel-manager in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add open-octo/octo-agent --skill channel-manager -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/channel-manager, .gemini/skills/channel-manager, .github/skills/channel-manager and .opencode/skills/channel-manager in your project.
Going by SKILL.md and its folder, Channel Manager needs the command-line tools its instructions call (curl) and credentials named APP_SECRET, CLIENT_SECRET and BOT_TOKEN. Our summary lists: A credential in APP_SECRET.
SKILL.md names 9 domains. In commands or code: discord.com, open.feishu.cn, ilinkai.weixin.qq.com, api.telegram.org, api.dingtalk.com and github.com; the agent is likely to contact these when it follows the instructions. As links in the text: open-dev.dingtalk.com, work.weixin.qq.com and t.me. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Channel Manager is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 6.2k tokens (SKILL.md is roughly 25k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Channel Manager: Claude To Im (op7418/Claude-to-IM-skill, 2.9k stars), Channel Manager (clacky-ai/openclacky, 1.2k stars), Use Avibe (avibe-bot/avibe, 622 stars) and Easy Openclaw (daheiai/easy-openclaw, 112 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
open-octo (a GitHub organization) maintains it in open-octo/octo-agent, which has 125 GitHub stars. The repository holds 40 skills in this directory. The repository was last updated on October 9, 2026.
Source: open-octo/octo-agent on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.