From agent
Show messaging channel status (WhatsApp, Telegram, Discord, iMessage, Slack, Fakechat) and generate the exact launch command. Includes runtime detection for inbound failures.
How this skill is triggered — by the user, by Claude, or both
Slash command
/agent:channels list|status|launchlist|status|launchThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Diagnose messaging channel plugins and give the user the exact command to load them. This skill does NOT install channels (use `/agent:messaging`) or authenticate them (per-channel skills like `/whatsapp:configure`) — it reports state and hands back a launch command.
Diagnose messaging channel plugins and give the user the exact command to load them. This skill does NOT install channels (use /agent:messaging) or authenticate them (per-channel skills like /whatsapp:configure) — it reports state and hands back a launch command.
This is a CORE feature. See docs/channels.md for details.
| User says | Action |
|---|---|
/agent:channels or /agent:channels list | Call channels_detect({ format: "table" }) and print card |
/agent:channels status [<name>] | Call channels_detect({ format: "json" }), filter by name if given, format single channel |
/agent:channels launch | Call channels_detect({ format: "launch" }) and print only the command |
/agent:channels launch --with-installed | Call with includeInstalledOnly: true — includes installed-but-not-authenticated |
/agent:channels launch --skip-permissions | Call with skipPermissions: true — adds the dangerous flag to the command (warn the user) |
channels_detect({ format: "table" })❌ under Installed and the user is new, remind: "Install a channel with /agent:messaging <name>"channels_detect({ format: "json" })name matches (case-insensitive)<name>. Known channels: whatsapp, telegram, discord, imessage, slack, fakechat."📡 <label>
kind: <development|official|integration>
installed: <✅ | ❌> (<detail>)
authenticated: <✅ | ❌ | ⏸️> (<detail>)
active: <❓ | ❌> (<detail>)
next: <setupHint>
runtime field, surface it — see Runtime warnings.The JSON entry may carry a runtime field read from the channel's live status.json (currently WhatsApp). When runtime.problem is true, the channel server is running but inbound is NOT reaching this session — the classic "I see 'typing…' on my phone but the agent never answers" failure, usually after an in-session update/reload or when a second session (interactive, service, or a still-alive scheduled-task session) holds the single-device lock.
When runtime.problem is true, do NOT report the channel as healthy. Lead with the warning, verbatim from runtime.detail, and then runtime.remediation if present. For example:
⚠️ WhatsApp inbound is NOT active in this session — another instance (PID <runtime.holderPid>) holds the single-device lock, so incoming messages go to that session, not this one.
Fix: <runtime.remediation>
Key runtime.status values: idle_other_instance (lock held by another session — the main one), logged_out (re-link needed), lock_error (filesystem/PID-file problem). Never tell the user to run /whatsapp:configure reset for idle_other_instance — it's a lock-ownership problem, not a link problem; the fix is to get down to one session. On claude-whatsapp ≥ 1.21 the waiting session takes over the lock automatically (within ~15 s of the holder exiting), so closing the extra session is enough; on older channel versions the waiting session stays idle forever and needs a full relaunch after the holder is closed. See claude-whatsapp docs/troubleshooting.md → "You see 'typing…' but get no reply".
channels_detect({ format: "launch" }) (with the appropriate flags from the user's command)/agent:service install will use. Copy it or re-run the service install after any channel change."If the user included --skip-permissions, ADD a warning above the command:
⚠️ The
--dangerously-skip-permissionsflag pre-approves every tool call. Use only for background/service runs.
📡 WhatsApp:✅✅❓ · Telegram:✅❌❌ · iMessage:✅✅❓. The full table is too wide for mobile./agent:messaging or the channel's own skill.active state — the tool says ❓ unknown when it can't tell. Pass that through; the user can verify with /mcp or by sending a message.--skip-permissions unless the user explicitly asked for it.docs/channels.md — full referencelib/channel-detector.ts — pure detection logicskills/messaging/SKILL.md — channel installationskills/service/SKILL.md — always-on, consumes the launch commandnpx claudepluginhub crisandrews/clawcode --plugin agentGuides setting up external messaging channels (WhatsApp, Telegram, Discord, iMessage) for Claude Code agents via plugins. Useful for enabling communication outside the CLI.
Pushes events from Telegram, Discord, and iMessage into running Claude Code sessions, enabling reactions to CI results, chat messages, monitoring alerts, and webhooks. Requires v2.1.80+.