draft-reply

star 0

Draft responses to inbound replies on Technijian outreach threads. Uses the same Name-on-own-line paragraph format as draft-outreach — never a wall of text. Invoke when user says "draft replies for today", "respond to {company}", or after Check-Replies.ps1 has logged new replies. Reads from tracking/replies/{date}.md, writes to templates/replies/{date}/{slug}.md. Human review before send.

rjain557 By rjain557 schedule Updated 5/19/2026

name: draft-reply description: Draft responses to inbound replies on Technijian outreach threads. Uses the same Name-on-own-line paragraph format as draft-outreach — never a wall of text. Invoke when user says "draft replies for today", "respond to {company}", or after Check-Replies.ps1 has logged new replies. Reads from tracking/replies/{date}.md, writes to templates/replies/{date}/{slug}.md. Human review before send.

Cost note: every LLM call routes through the LiteLLM gateway on the cheapest capable model (CLAUDE.md → Cost Discipline). This is an ops/mechanical skill — for a long run, prefer /model Sonnet or Haiku; never burn Opus on rote work.

draft-reply

Draft responses to inbound replies captured by scripts/Check-Replies.ps1. This is the companion to draft-outreach — that one handles cold touches, this one handles warm responses to humans who actually replied.

"Asking-for-the-report" replies = DELIVER the report (added 2026-06-08)

The #1 reply type to get right: the CTA offers a free deliverable (AI-Driven Growth Blueprint, or a free network assessment for IT leads, or an SEO+GEO audit for SEO leads — per the lead's offer_type). A reply asking for it is the CONVERSION. The draft must deliver/attach the report and respect any stated preference ("materials first, no call" → do NOT push a meeting; the reply itself starts the dialogue). Stage the reply (with attachment) in the "Tech-Leads Drafts" Outlook folder, NOT the personal Drafts ([[ref_tech_leads_drafts_folder]]). If the report file isn't in content_library/ yet, flag it — the pipeline must hold the deliverable to auto-send. For the IT network-assessment offer, the reply starts the NDA + Network Detective fulfillment (don't put the NDA/install in the reply unless they ask). See [[project_conversion_report_delivery]].

When to invoke

  • User says "draft replies for today" / "draft today's replies" / "respond to {company}"
  • Right after a Check-Replies run flagged new pending replies
  • User opens a specific tracking/replies/{YYYY-MM-DD}.md entry and asks for a draft

Do NOT invoke for entries flagged HANDLED, AUTO, or UNSUBSCRIBE.

Input

For each pending reply, you get:

  • from — sender email address
  • subject — reply subject line
  • received — timestamp
  • sentiment — one of: positive / negative / neutral / curious / unsubscribe
  • conversationId — Graph thread id
  • originalTo — address we sent our outreach to
  • bodyPreview — short snippet of the reply
  • matched_service (optional) — if the original lead packet is findable, join against templates/drafts/

If bodyPreview is truncated (Graph caps ~255 chars) and you need the full reply body, ask the user to paste it in — do not invent context.

How to draft per sentiment

positive: they're interested. Respond within hours. Confirm, propose a concrete time ("tomorrow 10am or Thu 2pm?"), do not re-pitch.

curious: they want to know who you are / how you found them. Respond honestly (1-2 sentences): "we run a lead-gen pipeline that flags companies hiring for roles Technijian services overlap with — I saw your {role} posting and had a thought worth sharing. Happy to explain on a 15-min call or walk you through it by email — your call."

neutral: acknowledged-but-no-clear-yes. One short follow-up that names the next step ("Want me to send a one-pager, or worth a 15-min call?") — offer, don't pressure.

negative: they're polite-but-no. Thank them, leave the door open in 90 days. "Thanks for the quick reply — I'll circle back in a quarter in case anything changes." Then add a note to tracking/known-companies.json to suppress for 90 days.

unsubscribe: do NOT draft. Flag for the user to manually remove from all future lists and respond with a one-line acknowledgement. Add to a tracking/suppress.json list (create if missing).

Output

Write to templates/replies/{YYYY-MM-DD}/{company-slug}.md (gitignored). One file per reply.

# Reply to {from} — {subject}

- **Sentiment:** {sentiment}
- **Received:** {received}
- **Matched service:** {matched_service or "unknown"}
- **ConversationId:** `{cid}`

## Original reply (snippet)
> {bodyPreview}

## Draft response

**Subject:** Re: {original subject stripped of Re:/Fwd:}

{body — see paragraph format below}

Also append a one-liner to tracking/replies/{date}.md under each entry: **Draft ready:** templates/replies/{date}/{slug}.md

Body paragraph format — STRICT (matches the outbound rule)

Every reply body renders as:

{first_name},

{paragraph 1 — 1-3 short sentences}

{paragraph 2 — 1-3 short sentences, if needed}

{CTA or closing — 1-2 sentences}
  • First name (or "Team") alone on its own line, trailing comma, blank line after.
  • Each paragraph separated by a blank line. No wall-of-text.
  • Do NOT type a signature or "— Ravi" line — the HTML signature is appended at send time.
  • No URL in the body. Booking link lives in the signature.

Word caps by sentiment (counting body only, name-line excluded):

  • positive / curious: ≤ 80 words
  • neutral: ≤ 70 words
  • negative: ≤ 40 words

Principles

  • Answer the question they asked. If they asked "who are you?", don't answer with a pitch.
  • Match their energy. Short reply → short response. Questions → answers, not deflection.
  • Name a concrete next step. Time, format, or tradeoff — not "happy to chat further."
  • Never re-pitch to a negative. It burns the 90-day re-engagement option.
  • Never promise what Technijian can't do. If the sentiment is "sure, tell me more" but you don't know the matched service's current capacity, flag it in the draft with [CONFIRM WITH RJAIN].

What this skill does NOT do

  • Does not send — replies go out manually per outreach.mode: draft_only
  • Does not mark messages read in Outlook — the Check-Replies script is read-only and this skill is too
  • Does not modify tracking/replies/_seen.json — that's the script's state
  • Does not touch templates/drafts/ (that's outbound cold) — only templates/replies/ (inbound response)

Related

Install via CLI
npx skills add https://github.com/rjain557/tech-leads --skill draft-reply
Repository Details
star Stars 0
call_split Forks 0
navigation Branch main
article Path SKILL.md
More from Creator