@arkone_ai/nurture-email 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md ADDED
@@ -0,0 +1,32 @@
1
+ # @arkone_ai/nurture-email
2
+
3
+ A [Claude Code](https://claude.ai/code) skill that crafts value-first nurture emails to re-engage cold or stalled prospects.
4
+
5
+ ## Install
6
+
7
+ ```bash
8
+ npm install -g @arkone_ai/nurture-email
9
+ ```
10
+
11
+ ## Usage
12
+
13
+ In any Claude Code session:
14
+
15
+ ```
16
+ /nurture-email
17
+ ```
18
+
19
+ ## What it does
20
+
21
+ - Gathers prospect details, relationship stage (went cold, post-demo no response, lost deal re-engage, post-event follow-up), and content to share
22
+ - Researches the prospect's recent company news to personalize the connection
23
+ - Crafts a value-first email under 80 words: leads with the content/insight, not a pitch
24
+ - Subject line references the shared content, not your product
25
+ - Includes optional soft CTA and mandatory opt-out line
26
+ - Suggests optimal send timing based on the relationship stage
27
+ - Optionally sends via SendGrid, Resend, or AWS SES
28
+ - Saves to `./nurture-email-{prospect}-{date}.md`
29
+
30
+ ## License
31
+
32
+ MIT
@@ -0,0 +1,37 @@
1
+ #!/usr/bin/env node
2
+ import { copyFileSync, mkdirSync, existsSync } from 'fs';
3
+ import { join } from 'path';
4
+ import { homedir } from 'os';
5
+
6
+ const root = join(import.meta.dirname, '..');
7
+ const home = homedir();
8
+
9
+ const agents = [
10
+ { name: 'Claude Code', dir: join(home, '.claude', 'skills') },
11
+ { name: 'Codex', dir: join(home, '.codex', 'skills') },
12
+ { name: 'Kiro', dir: join(home, '.kiro', 'skills') },
13
+ ];
14
+
15
+ const files = [
16
+ { src: join(root, 'SKILL.md'), dest: 'nurture-email.md' },
17
+ ];
18
+
19
+ let installed = 0;
20
+ for (const agent of agents) {
21
+ if (!existsSync(agent.dir)) continue;
22
+ for (const file of files) {
23
+ copyFileSync(file.src, join(agent.dir, file.dest));
24
+ }
25
+ console.log(`\u2713 ${agent.name}: ${agent.dir}`);
26
+ installed++;
27
+ }
28
+
29
+ if (installed === 0) {
30
+ mkdirSync(agents[0].dir, { recursive: true });
31
+ for (const file of files) {
32
+ copyFileSync(file.src, join(agents[0].dir, file.dest));
33
+ }
34
+ console.log(`\u2713 Claude Code: ${agents[0].dir}`);
35
+ }
36
+
37
+ console.log('\nUse /nurture-email in any supported AI session.');
package/package.json ADDED
@@ -0,0 +1,12 @@
1
+ {
2
+ "name": "@arkone_ai/nurture-email",
3
+ "version": "1.0.0",
4
+ "description": "Claude Code skill: craft value-first nurture emails to re-engage cold or stalled prospects with relevant content",
5
+ "type": "module",
6
+ "scripts": { "postinstall": "node install/install.js" },
7
+ "bin": { "nurture-email": "install/install.js" },
8
+ "files": ["SKILL.md", "install/", "README.md"],
9
+ "keywords": ["claude", "claude-code", "arkone", "bd-ops", "nurture-email", "nurture", "re-engage"],
10
+ "license": "MIT",
11
+ "engines": { "node": ">=18" }
12
+ }
package/skill.md ADDED
@@ -0,0 +1,164 @@
1
+ ---
2
+ name: nurture-email
3
+ description: "Craft a value-first nurture email to re-engage a cold or stalled prospect by sharing relevant content. Use this skill when: 'write nurture email', 'nurture a prospect', 're-engage prospect', 'send content to prospect', 'warm up a cold lead'. Also trigger for: 'drip email', 'keep-warm email', 'check-in email', 'value-add email', 'content share email'."
4
+ license: MIT
5
+ compatibility: Designed for Claude Code
6
+ ---
7
+
8
+ # Nurture Email
9
+
10
+ Craft a value-first email to re-engage a cold, stalled, or lost prospect. Lead with useful content — not a pitch. No ask in the first touch.
11
+
12
+ ## When to Use
13
+
14
+ - Prospect went cold after initial outreach
15
+ - Post-demo with no response
16
+ - Re-engaging a lost deal after 4-6 weeks
17
+ - Staying top of mind with a warm prospect using relevant content
18
+
19
+ ## Step 1: Gather Inputs
20
+
21
+ ### Required
22
+
23
+ | Input | Description |
24
+ |---|---|
25
+ | Prospect name | Full name |
26
+ | Prospect company | Company name |
27
+ | Relationship stage | `went cold` / `post-demo no response` / `lost deal re-engage` / `post-event follow-up` |
28
+ | Content to share | Article URL, case study title, report name, product update — or describe what to share |
29
+
30
+ ### Optional
31
+
32
+ | Input | Default |
33
+ |---|---|
34
+ | Prospect's known interests / pain points | Research via WebSearch if not provided |
35
+ | Last interaction date | Not required |
36
+ | Tone preference | `warm` (options: warm / professional / casual) |
37
+ | Prospect email | Needed only if sending |
38
+
39
+ ## Step 2: Email Config Discovery
40
+
41
+ To optionally send the email, check for email provider config using this priority chain:
42
+
43
+ ### Priority 1: Environment Variables
44
+
45
+ | Env Var(s) | Provider |
46
+ |---|---|
47
+ | `SENDGRID_API_KEY` | SendGrid |
48
+ | `RESEND_API_KEY` | Resend |
49
+ | `AWS_SES_ACCESS_KEY` + `AWS_SES_SECRET_KEY` + `AWS_SES_REGION` | AWS SES |
50
+
51
+ ### Priority 2: Config File
52
+
53
+ Check `~/.claude/email-config.json`:
54
+
55
+ ```json
56
+ {
57
+ "provider": "sendgrid",
58
+ "api_key": "SG.xxxx",
59
+ "from_email": "you@company.com",
60
+ "from_name": "Your Name",
61
+ "reply_to": "you@company.com"
62
+ }
63
+ ```
64
+
65
+ ### Priority 3: Ask the User
66
+
67
+ If no config found, ask for provider, API key, and from email. Offer to save to `~/.claude/email-config.json`. If user declines, save draft only.
68
+
69
+ ## Step 3: Research Context
70
+
71
+ If the prospect's interests or pain points are not provided, use WebSearch to find:
72
+ - Recent news about their company
73
+ - Any product launches, funding, or notable changes
74
+ - Industry trends relevant to their role
75
+
76
+ Use findings to write the personal connection sentence explaining why this content is relevant to them specifically.
77
+
78
+ ## Step 4: Craft the Email
79
+
80
+ ### Subject Line Rules
81
+
82
+ - Reference the content, not your product
83
+ - No spam triggers, no ALL CAPS, no exclamation marks
84
+ - Under 8 words
85
+ - Examples: `"Thought of you — {topic}"`, `"{Topic} worth a read"`, `"Quick {topic} insight"`, `"{Content title}"`
86
+
87
+ ### Email Body Rules
88
+
89
+ - **Under 80 words total** — plain text, no HTML, no attachments (link instead)
90
+ - Lead with value: share the content first, pitch never
91
+ - No more than one soft CTA, and only if appropriate for the stage
92
+ - Always include an opt-out line
93
+
94
+ ### Email Structure
95
+
96
+ **Line 1:** 1-2 sentence personal note connecting the content to their specific situation. Reference something real — their company's growth, their role, an industry trend.
97
+
98
+ **Line 2:** The content itself — title + link (1 sentence). Or describe the insight if sharing verbally.
99
+
100
+ **Line 3 (optional):** Soft CTA — only if timing is right. "Happy to chat if this sparks any questions." Never ask for a demo or call explicitly on a nurture touch.
101
+
102
+ **Sign-off:** Name, title, company.
103
+
104
+ **Opt-out line:** `PS — reply "unsubscribe" anytime and I'll remove you immediately.`
105
+
106
+ ### Tone by Stage
107
+
108
+ | Stage | Tone guidance |
109
+ |---|---|
110
+ | Went cold | Light, no reference to past silence, pure value |
111
+ | Post-demo no response | Reference the demo topic naturally; share related content |
112
+ | Lost deal re-engage | No mention of the loss; treat as a fresh value share |
113
+ | Post-event follow-up | Reference the event; share a related takeaway or resource |
114
+
115
+ ## Step 5: Suggest Send Timing
116
+
117
+ Based on relationship stage:
118
+
119
+ | Stage | Best send window |
120
+ |---|---|
121
+ | Went cold | Tuesday–Thursday, 8–10am prospect's timezone |
122
+ | Post-demo no response | 2–3 business days after demo |
123
+ | Lost deal re-engage | 4–6 weeks after deal marked lost |
124
+ | Post-event follow-up | 1–2 business days after the event |
125
+
126
+ ## Step 6: Send or Save
127
+
128
+ If email config exists AND prospect email provided:
129
+ 1. Show the final email
130
+ 2. Ask: "Send this to {prospect} at {email}? yes/no"
131
+ 3. Send only after "yes"
132
+
133
+ **Sending patterns:**
134
+
135
+ | Provider | Command |
136
+ |---|---|
137
+ | SendGrid | `curl -X POST https://api.sendgrid.com/v3/mail/send` with Bearer auth — JSON body: personalizations, from, subject, content (type: text/plain) |
138
+ | Resend | `curl -X POST https://api.resend.com/emails` with Bearer auth — JSON body: from, to, subject, text |
139
+ | SES | `aws ses send-email --from FROM --destination ToAddresses=TO --message Subject={Data=SUBJ},Body={Text={Data=BODY}} --region REGION` |
140
+
141
+ Always save to `./nurture-email-{prospect-slug}-{YYYY-MM-DD}.md`.
142
+
143
+ ## Step 7: Output Summary
144
+
145
+ | Field | Value |
146
+ |---|---|
147
+ | Prospect | {name} at {company} |
148
+ | Stage | {relationship stage} |
149
+ | Content shared | {title or description} |
150
+ | Word count | {count} |
151
+ | Suggested send | {timing recommendation} |
152
+ | Status | Sent / Draft |
153
+ | File | ./nurture-email-{slug}-{date}.md |
154
+
155
+ ## Error Handling
156
+
157
+ | Error | Action |
158
+ |---|---|
159
+ | No content to share | Ask user what they want to share before writing |
160
+ | Prospect info missing | Ask for name and company |
161
+ | WebSearch unavailable | Write email using user-provided context only |
162
+ | Email config not found | Save draft, skip sending |
163
+ | Send fails | Show error, confirm draft was saved |
164
+ | Email over 80 words | Trim — remove adjectives, merge sentences, cut the CTA |