channel-responder

Solid

Handles inbound messages from Claude Code Channels (Telegram, Discord, webhooks) with session context awareness.

AI & Automation 74 stars 15 forks Updated today MIT

Install

View on GitHub

Quality Score: 82/100

Stars 20%
62
Recency 20%
100
Frontmatter 20%
70
Documentation 15%
100
Issue Health 10%
50
License 10%
100
Description 5%
100

Skill Content

# Channel Responder When a message arrives via a channel: ## 0. Reply via the channel Every response to a message wrapped in `<channel source="..." chat_id="..." ...>` goes through the channel's reply tool, not the terminal/transcript. Terminal output is invisible to the operator: they read Discord, Telegram, or the configured channel, never the raw transcript. For each channel plugin, the reply tool is the `reply` action exposed by the channel's MCP server, named `mcp__plugin_<plugin-name>_<server-name>__reply` — the two segments are exactly the plugin name and server name the harness puts in the plugin-qualified source on the wire (`source="plugin:<plugin-name>:<server-name>"`). For the built-in channels the two coincide (e.g. `plugin:discord:discord` → `mcp__plugin_discord_discord__reply`), but a custom channel plugin whose names differ fills each slot from its own wire segment (e.g. `plugin:acme-crm:crm` → `mcp__plugin_acme-crm_crm__reply`) — build the tool name from the raw `source`, not by doubling one segment. Every `config.channels` key below instead uses the normalized bare server name (`discord`, not the qualified string — see `lib/channel-envelope.ts`'s `normalizeChannelSource`). Pass the inbound `chat_id` back. Optionally pass `reply_to` (the inbound `message_id`) to thread under the operator's message. Terminal output is acceptable as a SECONDARY surface (tool-call narration, status visible only to a maintainer at the box). The substantive response, the one ...

Details

Author
gtapps
Repository
gtapps/claude-code-hermit
Created
5 months ago
Last Updated
today
Language
TypeScript
License
MIT

Integrates with

Similar Skills

Semantically similar based on skill content — not just same category