channel-responder

channel-responder is a skill for Claude Code from gtapps/claude-code-hermit. It costs 24 tokens per session (8,116 once invoked), scanned B, original, MIT.

A message handler for Claude Code Channels, such as Telegram, Discord, or webhooks. It keeps the conversation context and sends replies back through the same channel.

In plain words
What is it for?
Use it to process incoming channel messages and respond in the correct Telegram, Discord, or webhook conversation.
Why use it?
It prevents replies from going only to the hidden terminal transcript, where the person who sent the message cannot see them.

Skill for Claude Code

Written for Claude Code: ${CLAUDE_PLUGIN_ROOT} variable. Also seen: mentions subagents; names the AskUserQuestion tool; mentions Claude Code.

Runs only inside its plugin — its command needs a path that Claude Code sets for a plugin’s own hooks and for nothing else. Install the plugin, not this.

Part of the claude-code-hermit plugin — 28 skills, 4 agents shipped together

Good fit Use it to process incoming channel messages and respond in the correct…

Compare 6 skills from other repositories ↓
Install

Getting it into your agent

This one installs as part of its plugin. Adding the marketplace and installing the plugin brings it with everything else the plugin ships.

Claude Code
/plugin marketplace add gtapps/claude-code-hermit
Claude Code
/plugin install claude-code-hermit

Made for: Claude Code.

Or install claude-code-hermit, the plugin that ships this one along with the rest of its 28 skills, 4 agents.

Wrote this? Show the measurements

A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.

agentmods badge for channel-responder

README.md
[![agentmods](https://agentmods.dev/badge/skills/gtapps/claude-code-hermit/channel-responder.svg)](https://agentmods.dev/skills/gtapps/claude-code-hermit/channel-responder)
Your own site
<a href="https://agentmods.dev/skills/gtapps/claude-code-hermit/channel-responder"><img src="https://agentmods.dev/badge/skills/gtapps/claude-code-hermit/channel-responder.svg" alt="Measured on agentmods" height="20"></a>
Per session 24 Skills are progressive disclosure: only the name and description are preloaded; the body loads when the skill is used.
When invoked 8,116 The whole file, excluding the scripts and references it only reads on demand.
Security scan B 1 finding. A grade says what 26 rules found in the file — not that it is safe.
Origin original No closer match found in the catalogue.
Token cost

What it costs to keep this loaded

Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.

ModelPer sessionOnce invoked
Fable 5.1 $0.00024 $0.08116
Opus 5 $0.00012 $0.04058
Sonnet 5 $0.00005 $0.01623
Haiku 4.5 $0.00002 $0.00812

Measured today against content hash 1630eb6a5dc3, method: parsed. Prices are Anthropic first-party input rates as of 2026-09-06, from the pricing page.

Security

Grade B, and why

channel-responder scanned grade B with 1 finding against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured today.

A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.

Subtle steeringmediumPrompt injection

Instructions that bias recommendations or shape behaviour without the user noticing.

- A harness command with **neither** line was not recorded: usually it arrived while a turn was in flight and was absorbed as steering text, so ask the operator to send it again now that you are idle. Never tell them to
plugins/claude-code-hermit/skills/channel-responder/SKILL.md · 311 lines

How it starts

The opening of the file, as written. The whole thing — 311 lines — stays where its author put it; the contents beside it link to each section on GitHub.

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:discordmcp__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:crmmcp__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 the operator needs to see, must go through the channel.

Exception, checked first. When this turn's context carries a [harness-command] … requested line, stop: no tool call (§1–§1d included) and no reply; the reason is in §2's Harness command bullet. A [harness-command] refused "…" line is the opposite case: nothing was recorded and the operator is owed the reason, so reply as usual.

1. Load Context

Read .claude-code-hermit/sessions/SHELL.md for current task context. Read state/runtime.json for lifecycle state (session_state is the source of truth — never parse SHELL.md Status: for decisions).

Read the full file on GitHub · 311 lines

Changes

What this file has done since we first saw it

Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.

  1. today Changed · +5 lines 1630eb6a5dc3
  2. yesterday Changed 0a812f7a40c6
  3. 3d ago Changed · -11 lines de24a00fb6b2
  4. 4d ago Changed · +10 lines scan A → B 92195e08b777
  5. 7d ago First seen · 307 lines · 24 tokens per session scan A 163d41b7fdde

Subscribe to this mod's changes

channel-responder is a skill published in the GitHub repository gtapps/claude-code-hermit (74 stars, last pushed today), licensed MIT. It adds 24 tokens to every session and 8,116 once invoked, about $0.0001 per session on Opus 5. A static security scan graded it B with 1 finding (subtle steering). No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-30.