Systems Lab

Agent skill

reply-classification

Classify inbound replies into a 9-label taxonomy with confidence scores and route to downstream skills.

slowingNeeds a keyActs undeclared476 words

Filed under Outbound email.

From devangk003/gtm-agent-skills · 32 skills · 0 · pushed 2026-06-18

What it does when it runs

Classify inbound replies into a 9-label taxonomy with confidence scores and route to downstream skills. Use when the user says "triage replies", "classify inbox", "sort campaign responses", or "categorize inbound messages.

Read from the skill and the 4 files bundled beside it. A skill’s own description is written to be selected by an agent, so it describes the job and not the dependencies.

Keys and connectors you must supply
  • AGENTIC_APP_TOKEN
Hosts it reaches
No third-party host appears in the skill or its bundled files.
Tool permissions it declares
No allowed-tools in the frontmatter. It does act, so it runs under whatever permissions your session already grants.
Actions present in the files
shell

Ask about reply-classification

Opens your assistant with this page's verified links already in the prompt.

Is this safe to install?ClaudeChatGPT
Adapt it to my stackClaudeChatGPT
What else do I need for it to workClaudeChatGPT
Rather ask a human? Talk to Cheetah
git clone --depth 1 --filter=blob:none --sparse https://github.com/devangk003/gtm-agent-skills.git /tmp/gtm-agent-skills
git -C /tmp/gtm-agent-skills sparse-checkout set "reply-classification"
mkdir -p ~/.claude/skills/reply-classification
cp -R "/tmp/gtm-agent-skills/reply-classification/." ~/.claude/skills/reply-classification/

Picked up without a restart. A project skill of the same name is shadowed by your personal one. For one repository only, swap ~/.claude/skills for .claude/skills. Claude Code docs ↗

The folder is the same in every client that implements the format — 46 of them — so if yours is not above, only the destination changes.

Before you install: this skill will not complete its job on a bare agent. It needs AGENTIC_APP_TOKEN, which you have to obtain separately.

Reproduced in full from devangk003/gtm-agent-skills/blob/6b9a1b0094ffd83d6c02bc03b7ce1610661a1644/reply-classification/SKILL.md, which is licensed MIT (skill frontmatter). 476 words, 6 headings.

Reply Classification

Classify each inbound reply (email, LinkedIn, SMS, call disposition) into one of nine routing labels with confidence, then dispatch to the right downstream skill or manual review.

When to Use

  • Campaign generating reply volume that needs triage
  • Bulk reply categorization for a sales rep or founder inbox
  • Pre-discovery-call-prep confirmation of positive classification
  • Low-confidence reply needs human review
  • Founder inbox overwhelmed — sort hot vs warm vs dead
  • User says "triage today's replies" or "categorize campaign responses"

Quick Reference

ConceptValue
9-label taxonomypositive / not-now / not-interested / wrong-person / unsubscribe / out-of-office / referral / question / unclear
Confidence floor0.75 default; below routes to manual review
Cadence-exit triggerspositive (handoff) / not-interested (12mo cooldown) / unsubscribe (forever) / wrong-person (re-enrich)
Pre-classify short-circuitsAuto-reply header → out-of-office; unsubscribe regex → unsubscribe; bounce → route to channel skill
Routingpositive → discovery-call-prep; objection → objection-handling-library; not-now/OOO → follow-up-management; referral → data-enrichment

Procedure

  1. Ingest reply. Read text + headers + cadence context. Detect channel, sender, timestamp, parent Touch.
  2. Pre-classify on hard signals. Auto-reply header → out-of-office. Unsubscribe phrases → unsubscribe. Bounce → route back to channel skill (not a reply).
  3. LLM-backed classification. Pass reply + 1-line cadence context to LLM. Output: {label, confidence, rationale, embedded_objection}. See ${HERMES_SKILL_DIR}/references/taxonomy.md.
  4. Confidence gate. ≥0.75 → proceed. <0.75 → route to manual review queue with LLM best guess + rationale. Never auto-act on uncertain.
  5. Cadence-state effects. positive/not-interested/unsubscribe → exit cadence. not-now → pause with resume date. wrong-person → exit + flag data-enrichment. question/referral → cadence continues + route reply.
  6. Dispatch to next skill. positive → discovery-call-prep. embedded objection → objection-handling-library. not-now/OOO → follow-up-management. referral → data-enrichment. See ${HERMES_SKILL_DIR}/references/routing-map.md.
  7. Push to CRM + emit run summary. Per-reply interaction:reply with classification + confidence. PATCH person record with reply state. Run summary: total replies, label distribution, manual-review count. See ${HERMES_SKILL_DIR}/scripts/push_to_crm.py.

Pitfalls

  • Auto-acting on low-confidence classifications — always route <0.75 to manual review
  • Confusing OOO with not-interested — pre-classify via header signals before LLM
  • Missing embedded objections — "not now, already using X" is BOTH not-now AND competitor objection
  • Treating bounces as replies — route to channel skill instead
  • Ignoring cadence context — "yes" means different things at touch 1 vs touch 5
  • Unsubscribe only on received channel — must exit ALL channels globally
  • Multi-language assumption — classify in source language, translate summary only

Verification

  1. Every reply classified or routed to manual review (no silent drops)
  2. No confidence <0.75 auto-acted on
  3. Pre-classification rules applied before LLM call
  4. Cadence-state effects propagated per label
  5. Push to CRM emitted: per-reply interaction + person PATCH + run record

Files bundled with it

These load only when the skill asks for them, so they cost nothing until it runs.

Other skills for the same job

Different authors, same problem. Matched on the words in the skill name, across every library in the catalogue except this one.

Need help setting it up?

This page tells you what reply-classification does and what it needs. Cheetah builds the agent setup it runs inside: data, CRM, sequencing and the guardrails.

Book a call →

The directory stays free. There is nothing gated behind this.