# Cold Email

> Run the full pipeline to produce one ready-to-send internship cold email for one person at one company — research, contact, match, draft, edit, QA. Use whenever an email to a new company is needed. Produces a draft for a human to send; never sends anything.

- Skill: `faaz17/cold-email` (Agent Skill)
- Install (CLI): `npx skillmds@latest add faaz17/cold-email`
- Raw SKILL.md: https://api.skillmd.com/api/skills/faaz17/cold-email/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: DevOps & Infra
- Author: Faaz17 (https://skillmd.com/u/faaz17)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/faaz17/cold-email

---


# /cold-email, the full pipeline

Usage: `/cold-email "<Person Name>" Space42`

Produces one draft at `<person>/drafts/YYYY-MM-DD-<company>.md` with `status: ready`, for a human to read and send.

## Preconditions

Stop and say so if any of these fail:

- `<person>/profile.md` exists and contains no `TBD` in the fields the email needs
- **Every open question in that sender's `profile.md` is answered** — role type (internship versus permanent), public profile URL, target sector, and any domain exposure the pitch leans on. Both the target list and the email structure depend on them
- The company is on `shared/targets.md`
- The daily cap has room: 5 first contacts per person per day
- The tracker does not already show this company contacted by this person

## Steps

1. **Dossier.** If `shared/companies/<slug>.md` is missing or older than a month, run `/target-research <company>`.

2. **Contact.** If the dossier has no `verified` contact, run `/find-contact <company>`. If nothing verifies, stop and report the alternative route. Do not draft against a guessed address.

3. **Match.** Spawn `profile_matcher`. It picks one lead project, at most two supporting facts, names what to leave out, and does the gap analysis. If it returns `weak` fit and recommends skipping, report that and stop.

4. **Draft.** Spawn `email_writer` with the dossier, the match report, the person's profile, evidence, signature and voice section. Under 150 words. Three ranked subject lines. Status: `draft`.

5. **Edit.** Spawn `editor`. Cuts length, strips AI tells, fixes the ask, runs the swap test on paragraph 1, verifies facts survived unchanged. Status: `edited`. If it sends the draft back, loop once through step 4 and no further — a draft that fails twice has a wrong angle, which is a decision for the human.

6. **QA.** Spawn `send_qa`. Full checklist. Every blocking issue goes back to the owning agent. On pass, status: `ready`.

7. **Update the tracker** with the company, contact, verification state and status.

8. **Hand off.** Show the human the final email in full — subject, body, signature — the word count, the risks, and the exact next step.

## Output format

```
## Ready to send: <person> → <company>

**To:** <name> <<address>> · <title>
**Verified:** <source>
**Subject:** <subject>

---
<the complete email, exactly as it should be sent>
---

**Words:** <n>
**Angle:** <one line>
**Links:** <URLs, each confirmed to resolve>
**Attachments:** none

**Before you send**
- <anything worth knowing>

**After you send**
1. Move the file to `<person>/sent/`
2. Set `sent:` in the frontmatter and update the tracker
3. Follow-up due <date>. One follow-up only
```

## Rules

- **Never send.** No mail client, no SMTP, no automation of the send step. Not once.
- Never draft for a profile containing `TBD`.
- Never draft against a `pattern` or `unverified` address.
- One email per company per person.
- Never mix the two people's evidence. Read only the folder of the person named in the command.
- Every claim traces to a source. If a sentence needs a number nobody has, the sentence goes without it.
- If any step fails, report where it failed and what would unblock it. Do not push a broken draft through to `ready`.

