@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 +32 -0
- package/install/install.js +37 -0
- package/package.json +12 -0
- package/skill.md +164 -0
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 |
|