kai-sdr-reply-triage — Reply Loop
Kai root note: knowledge/, harness/, and scripts/ paths in this skill live in the Kai install, not the user's project. Resolve them against the first ancestor directory of this SKILL.md that contains a knowledge/ folder (the Kai plugin root, ~/.claude/kai, or the kai-cmo-harness repo). MARKETING.md, memory/, and any output files live in the current project. If a referenced scripts/ command is not available in this install, say so, skip it, and continue with the file-based guidance — never fabricate its output.
Objective
Every inbound reply ends up as a triage record that names exactly one category, the consent and suppression consequence, the next safe action with an owner, and — only where it is allowed — a drafted response. The record makes the state change explicit: what this reply did to consent, suppression, routing, meeting status, objection state, and CRM state.
The risk this skill exists to remove is a reply that gets answered when it should have been suppressed, escalated, or left alone.
Done when
Work type internal-research — floor E2/C2/O0 (harness/eco-floors.yaml). The triage record itself never leaves the workspace.
- E2 — the reply record exists at its package path and satisfies
harness/skill-contracts/sdr-reply-triage.yaml.
- C2 —
banned_word_check passes; category, risk tier, suppression action, and evidence fields are all populated.
- O0 — no outcome obligation on the record.
Sending the drafted response is separate work at the cold-email floor E5/C4/O3: provider send receipt plus suppression-list reconciliation, and CAN-SPAM/GDPR/CASL identity, opt-out, and consent basis verified before send.
Constraints
- Missing context means a hold, not a draft. Without sender identity, suppression list, message history, and source evidence for the contact, write a triage hold note instead of a send-ready response.
- Honor opt-outs immediately. Suppress globally; draft nothing beyond an opt-out confirmation where one is required.
- Do not argue with complaints. Stop the sequence, suppress, route to a human owner.
- Do not reply to bounces. Mark the contact path invalid and block follow-up on that address.
- No invented context — no prior relationship, no new claims without evidence.
- Sensitive, legal, or regulated replies do not get routed without human review.
- No CRM mutation. Notes, tasks, and field changes are proposals.
- Under 120 words unless the user asks for a longer sales response. One CTA, one next action.
- Memory candidates carry a
Do not promote until condition and stay unpromoted until it is met.
Categories — classify exactly one primary:
| Category | Action |
|---|
interested | Prepare meeting handoff and short response. Trigger /kai-sales-meeting-prep. |
objection | Identify objection type and draft one respectful response. |
referral | Capture referred person, source, and permission trail. |
not_now | Draft low-pressure close and future reminder task. |
wrong_person | Ask for routing only when appropriate. Do not pressure. |
opt_out | Suppress globally. Do not draft further outreach except opt-out confirmation if required. |
bounce | Mark invalid contact path and block follow-up on that address. |
complaint | Stop sequence, suppress, and route to human owner. |
unsubscribe_confirmed | Record suppression and no further action. |
needs_human_review | Use for legal, regulated, sensitive, hostile, ambiguous, or high-value replies. |
Context
| Need | Load |
|---|
| Record structure, required fields, gate thresholds | harness/skill-contracts/sdr-reply-triage.yaml |
| Package schema, ledger status values, memory ledger | harness/skill-contracts/sdr-package.yaml |
| Opt-out, sender identity, consent, suppression law | harness/references/cold-email-rules.md |
| Account row, contact row, source evidence, message history, suppression state | workspace/sdr-operator/<package-slug>/ |
| Booked meeting or buying conversation follow-on | /kai-sales-meeting-prep |
Output goes to workspace/sdr-operator/<package-slug>/replies/<reply-id>.md. Same path as v1 — downstream tooling does not branch on version.
Trigger /kai-sales-meeting-prep when the reply implies a meeting, demo, call, referral intro, or buying conversation.
Escalate when
- The reply is legal, regulated, sensitive, hostile, ambiguous, or high-value — category
needs_human_review, no draft.
- Consent basis or suppression state for the contact cannot be established.
- The reply disputes a claim made in the original outbound message.
- The safe next action requires a live send, CRM mutation, or calendar action and no approver is named.
- Reply content contradicts the source evidence the account was built on.