πŸ“₯ Reply Classification Agent

Automation Level: 90% AUTO

Classifies every inbound reply within 1 hour. Routes leads automatically based on intent. Only β€œinterested” and β€œobjection” replies require human follow-through.

Manifest Stage: S7 β†’ See 01-Process-Manifest Input: Inbound replies from 05-Email-Sequence-Engine (all reply events) Output: Classified + routed replies β†’ CRM, human queue, 09-Metrics-and-Self-Improvement


🎯 Agent Objective

agent:
  name: ReplyClassificationAgent
  version: 1.0.0
  model: claude-haiku-4-5                # fast, cheap β€” classification only
  objective: >
    Read every inbound reply, classify the intent into one of 6 categories,
    take the appropriate automated action, and hand off to a human only when
    genuine interest or a nuanced objection is detected.
  sla: "Classify within 60 minutes of receipt"
  run_mode: event_driven                  # triggers on every new reply

🏷️ Classification Schema

classes:
  - id: INTERESTED
    label: "Interested / Wants to talk"
    examples:
      - "Yes, let's chat"
      - "Can you send me more info?"
      - "When are you free this week?"
      - "Who else do you work with in [industry]?"
    confidence_threshold: 0.85
    auto_action: false                    # HUMAN handles these
    human_sla_hours: 4
 
  - id: OBJECTION
    label: "Objection (addressable)"
    examples:
      - "We already use X for this"
      - "Not the right time, maybe Q3"
      - "We're too small for this"
      - "Can you share pricing first?"
    confidence_threshold: 0.80
    auto_action: partial                  # agent drafts response, human sends
    human_sla_hours: 24
 
  - id: NOT_NOW
    label: "Not now (nurture)"
    examples:
      - "Reach out in 6 months"
      - "We just signed a contract elsewhere"
      - "Budget is frozen until next quarter"
    confidence_threshold: 0.80
    auto_action: true
    action: add_to_nurture_sequence, set_reminder_90d
 
  - id: REFERRAL
    label: "Wrong person / Referral"
    examples:
      - "You should talk to our VP of Sales, Sarah"
      - "I'm not the right contact for this"
      - "Try reaching out to our marketing team"
    confidence_threshold: 0.85
    auto_action: true
    action: extract_referred_contact, add_to_sourcing_queue
 
  - id: UNSUBSCRIBE
    label: "Unsubscribe / Stop contacting"
    examples:
      - "Please remove me from your list"
      - "Unsubscribe"
      - "Stop emailing me"
      - "Not interested"
    confidence_threshold: 0.75           # lower threshold = safer
    auto_action: true
    action: immediate_sequence_stop, add_to_suppression_list, log_in_crm
 
  - id: OUT_OF_OFFICE
    label: "OOO / Bounce"
    examples:
      - "I'm out of the office until..."
      - "This email address is no longer active"
    confidence_threshold: 0.95           # very high confidence needed
    auto_action: true
    action: pause_sequence_until_return_date, update_email_if_bounce

πŸ”€ Classification & Routing Flow

flowchart TD
    A["Reply received<br/>from Sequence Engine"]
    A --> B["Stop sequence<br/>for this lead"]
    B --> C["Classify intent<br/>with LLM"]
    C --> D{Classification}

    D -->|"INTERESTED"| E["πŸ”΄ Human Queue<br/>Alert COO within 1h<br/>Create CRM task"]
    D -->|"OBJECTION"| F["🟑 Draft response<br/>Human reviews and sends"]
    D -->|"NOT_NOW"| G["🟒 Auto: Add to nurture<br/>Set 90-day reminder"]
    D -->|"REFERRAL"| H["🟒 Auto: Extract contact<br/>Add to sourcing queue"]
    D -->|"UNSUBSCRIBE"| I["🟒 Auto: Suppress immediately<br/>Log in CRM"]
    D -->|"OUT_OF_OFFICE"| J["🟒 Auto: Pause<br/>Set return date reminder"]

    E & F & G & H & I & J --> K["Log to Metrics Loop"]

πŸ€– Automated Response Templates

OBJECTION β€” Draft Response (Human Approves Before Sending)

The agent drafts a response and places it in a human review queue. Human edits and sends.

Prompt:
Given this cold email reply from {{first_name}} at {{company}}:
---
{{reply_text}}
---
The objection type is: {{objection_category}}
Draft a brief (50–80 word) response that:
1. Acknowledges their specific concern without dismissing it
2. Offers a relevant reframe or social proof
3. Makes a single, low-friction ask (e.g., "Would 15 min help clarify?")
Tone: direct, confident, no desperation.

NOT_NOW β€” Nurture Acknowledgement (Auto-sent)

Hi {{first_name}},

Totally understand β€” timing matters. I'll circle back in {{remind_months}} months.

In the meantime, [one useful resource / quick thought relevant to their context].

Best,
{{sender_name}}

REFERRAL β€” Contact Extraction (Auto-routed)

Hi {{first_name}},

Thanks for the steer β€” I'll reach out to {{referred_name}} directly.

Appreciate it.
{{sender_name}}

πŸ“€ Output Schema

{
  "reply_id": "reply_2026-04-03-042",
  "lead_id": "lead_001",
  "received_at": "2026-04-03T14:22:00Z",
  "classified_at": "2026-04-03T14:45:00Z",
  "classification": "INTERESTED",
  "confidence": 0.94,
  "requires_human": true,
  "human_sla": "2026-04-03T18:22:00Z",
  "auto_action_taken": "sequence_stopped, crm_task_created, dima_alerted",
  "draft_response": null,
  "referred_contact": null,
  "reply_text_snippet": "Yes, would love to learn more. Are you free Thursday?",
  "sequence_step_replied_to": 1,
  "crm_updated": true
}

πŸ“Š Agent KPIs

Tracked in 09-Metrics-and-Self-Improvement.

MetricTargetAlert
Classification accuracyβ‰₯92%<85%
Time to classify≀1 hour>2 hours
INTERESTED leads alerted100% within 1hAny miss
UNSUBSCRIBE auto-action rate100%<100%
Human queue response time (COO)≀4 hours>8 hours
False negative UNSUBSCRIBE0Any occurrence

Critical Rule

A mis-classified UNSUBSCRIBE as INTERESTED is a compliance risk. The agent is set to a lower confidence threshold (0.75) for UNSUBSCRIBE β€” when in doubt, it opts for suppression. This is intentional.


⚠️ Edge Cases

edge_cases:
  - case: ambiguous_reply
    example: "Maybe. Depends on the price."
    action: classify_as_OBJECTION + flag_for_human_review
 
  - case: reply_in_foreign_language
    action: translate_then_classify, flag_if_confidence < 0.8
 
  - case: very_long_reply
    example: "2+ paragraphs with multiple intent signals"
    action: classify_dominant_intent, log full reply for human review
 
  - case: classification_confidence < threshold
    action: escalate_to_human_immediately