Agent skill
create-campaign
Build a cold email campaign from an ICP and offer to ready-to-send files: plan, targeting, qualification, segments, per-segment strategy, copy, review and AI personalization prompts, with a person approving every step.
Filed under Outbound email.
From Ken-Technology/cold-email-skills · 12 skill entries · 4 · pushed 2026-10-31
What it does when it runs
Build a cold email campaign from an ICP and offer to ready-to-send files: plan, targeting, qualification, segments, per-segment strategy, copy, review and AI personalization prompts, with a person approving every step. Use when someone wants to create a new cold email campaign. Triggers on \"create a campaign\", \"build a cold email campaign\", \"new outbound campaign for X\".
Automated analysis of the skill and the 2 files bundled beside it. A skill’s own description is written to be selected by an agent, so it describes the job and not the dependencies.
- Keys and connectors you must supply
- None found.
- Hosts it reaches
- ken.so
- Tool permissions it declares
- No
allowed-toolsin the frontmatter. It does act, so it runs under whatever permissions your session already grants. - Actions present in the files
- writes files
Ask about create-campaign
Opens your assistant with this page's recorded context. Check the linked sources before relying on it.
Install it
View source on GitHub ↗git clone --depth 1 --filter=blob:none --sparse https://github.com/Ken-Technology/cold-email-skills.git /tmp/cold-email-skills git -C /tmp/cold-email-skills sparse-checkout set "create-campaign" mkdir -p ~/.claude/skills/create-campaign cp -R "/tmp/cold-email-skills/create-campaign/." ~/.claude/skills/create-campaign/
Picked up without a restart. A project skill of the same name is shadowed by your personal one. For one repository only, swap ~/.claude/skills for .claude/skills. Claude Code docs ↗
The folder is the same in every client that implements the format — 46 of them — so if yours is not above, only the destination changes.
The skill
Source on GitHub ↗Reproduced in full from Ken-Technology/cold-email-skills/blob/4230ce3a9647684626a16c3931f6c35d3398b0a7/create-campaign/SKILL.md, which is licensed MIT (repository). 2,224 words, 17 headings.
Create a campaign
This skill takes one campaign from "build a campaign for this ICP and offer" to ready-to-send files: research, a plan, targeting filters, qualification rules, segments, and for every segment a strategy, reviewed copy and AI personalization prompts. Everything is written as markdown into a campaign workspace on the user's machine. There is no account, no API key, no platform and no sending: it ends with a summary that tells the user how to find the people, personalize and send with the tools they already use.
The work runs in stages. Each stage writes its own files, ends at a gate where a person says yes, and is a skill of its own, installed next to this one. This body is the map: run the stage's skill when you reach the stage, and follow it.
The rules
- A person approves every gate. You draft in the chat, show it, and write the stage's file only after an explicit yes. You never send email, push to a platform, or ask for an account or API keys.
- Everything is a file. Each stage writes its file into the campaign workspace before the next stage starts. Do not invent platform config files: the workflow stops at markdown.
- Never invent. No prices, times, offers, pay, case studies, metrics or lead magnets that the research, the company's own material or the user do not show. Ask, or leave it out.
- Replies, not opens. Goals and results are replies, positive (interested) replies and clicks. Replies are distinct contacts; an out-of-office is not a reply; opens are never a goal or a reported number.
- A structural copy change is a new version. Improved copy for a sequence that is already sending goes into a new file for the whole sequence (
emails_v3.mdafteremails_v2.md), never next to the old steps as a Variant B: variants are A/B arms that send side by side. - A funding round is not a buying event. Write to the plan the money pays for, never "congrats on the raise".
The workspace
Create a campaign workspace at ./cold-email/{slug}/, where {slug} is a short lowercase hyphenated name for the client or campaign (for example acme-outbound or fintech-founders). Every plan-level and segment-level file goes under that folder. If it already exists, read what is there and start at the first stage whose file is missing (see "Picking up a campaign" below).
./cold-email/{slug}/
├── research.md
├── plan.md # H1 = campaign name; 1 ICP + 1 offer + N segments
├── lead-magnets.md # only when the offer stage ran
├── search-strategy.md
├── qualification.md
├── segmentation.md
├── 0 - default/ # strategy.md, emails.md (draft), emails_v2.md (reviewed), prompts.md
└── 1 - {segment-slug}/
plan.mdhas a single top-level# {Campaign Name}H1. That name is the campaign's name.- Always scaffold
0 - default/as the catch-all segment: the broadest messaging, for contacts that fit no numbered segment. - Numbered segments use
N - {segment-slug}/(for example1 - healthcare-saas/,2 - fintech-founders/), one folder per segment in the plan. - Each segment folder holds
strategy.md,emails.md(the draft),emails_v2.md(the reviewed copy) andprompts.md.
The stage skills
Each stage is a skill of its own, installed next to this one: client-research, lead-magnet, search-strategy, qualification, segmentation, campaign-strategy, email-copywriting, email-review and prompt-writer. Name the skill when you run it, so the user can follow the progress. The plan is this skill's own stage: its rules are references/campaign-planning.md, and the plan's layout is references/plan-template.md.
Before stage 1, the campaign needs research. If research.md is missing and the user has not given enough context (notes, call transcripts, site copy, an offer one-pager), run client-research, or ask the user to paste their notes. Write or confirm research.md at the workspace root. When the user keeps a company folder from knowledge-setup, read it too.
The stages
| # | Stage | Run | Writes | Gate |
|---|---|---|---|---|
| 0 | Research | client-research, or the user's notes | research.md | The user confirms the research |
| 1 | Plan | this skill, references/campaign-planning.md | plan.md: one ICP, one offer and CTA, the segment mode and segments | The user approves the plan |
| 1a | Offer (optional) | lead-magnet | lead-magnets.md: lead magnet ideas when the offer is weak or missing | The user picks one, or keeps the offer |
| 2 | Audience | search-strategy, then qualification | search-strategy.md and qualification.md | The user approves the filters and the rules |
| 3 | Segments | segmentation | segmentation.md and one folder per segment | The user approves the descriptions before any file is written |
| 4 | Strategy, per segment | campaign-strategy | strategy.md: the sequence blueprint and the AI variable list | The user approves the strategy |
| 5 | Copy, per segment | email-copywriting | emails.md, the draft sequence | The user approves the draft |
| 6 | Review, per segment | email-review | A score and fixes; emails_v2.md once it scores 4.5 or more | At most 3 rounds, then the user decides |
| 7 | AI variable prompts, per segment | prompt-writer | prompts.md: one personalization prompt per AI variable ({{First Line}} and the like), tried on sample prospects | The user approves the samples |
Run stages 4 to 7 for every segment, Default included: leads that fit no other segment land in Default and still get email.
You may run one subagent per segment in parallel; inside a segment the stages stay in order. Check that each stage's file exists before the next stage of that segment starts. The prompt for a segment's subagent:
Execute segment: {segment_name}
Segment folder: ./cold-email/{slug}/{N - segment-slug}/
Workspace: ./cold-email/{slug}/
1. Read plan.md and research.md from the workspace
2. Read segmentation.md for this segment's description
3. Run in order, with a person's yes at each gate:
- campaign-strategy -> strategy.md
- email-copywriting -> emails.md
- email-review -> emails_v2.md (loop until score >= 4.5, at most 3 rounds)
- prompt-writer -> prompts.md
1. Plan
Gather the context first: research.md, the company folder when the user keeps one, and what the user gave you (notes, transcripts, site copy, case studies). Ask at most 3 questions, in one message, only when the offer or audience is unclear.
The plan is 1 broad ICP + 1 offer + segments. A different person (title, buying process) or a different offer is a different campaign. Segments are sub-ICP groups that get tailored messaging, never messaging tests; testing whole sequences is the A/B (percentage) mode. Every email asks for the real offer, Email 1 included.
Follow references/campaign-planning.md and lay the plan out as references/plan-template.md shows. Draft it in the chat; after the yes, write it to plan.md at the workspace root, with the campaign name as its one # {Campaign Name} H1, the Email and End goals, the offer and CTA, the broad ICP, the segmentation mode and the segments (2 to 5, plus Default).
Done when plan.md holds the approved plan.
1a. Offer (optional)
Run lead-magnet when the user has no clear offer, or the offer is a demo nobody asked for. It proposes lead magnets the client can actually deliver and writes them to lead-magnets.md. The plan's offer changes only when the client agrees to one, and copy names a lead magnet only once it exists.
2. Audience
Run search-strategy to turn the plan's ICP into portable filters the user can run in Apollo, Sales Navigator, Clay, ZoomInfo or any list tool (or the CSV shape for a list they bring), and write search-strategy.md. The user runs the filters and checks the count against the plan's size (5,000+ contacts unless the user set a target). Then run qualification to write qualification.md: who qualifies and who does not, and the audience description the rest of the campaign reuses; it never restates a search filter.
Done when the user has approved search-strategy.md and qualification.md.
3. Segments
Run segmentation. Prefer manual segments when the split is a hard filter the user's list tool can apply; AI segments when it needs judgment, written as descriptions the user runs as AI prompts; A/B arms only for a whole-sequence test. It writes segmentation.md and creates one folder per segment: 0 - default/ always, then N - {segment-slug}/ for each segment in the plan.
Done when the user has approved segmentation.md and every segment in it has its folder, Default included.
4. Strategy (per segment)
Run campaign-strategy and write the segment's strategy.md. It turns the plan into a blueprint for each email (goal, wait days, hook, proof, CTA) and the AI variable list (name, source, length, fallback). AI variables may use only the company website's main page, the LinkedIn company page and the LinkedIn profile. Wait days are the days before an email sends: send days 0/3/7/11 are wait days 0/3/4/4.
Done when the user approves the strategy for that segment.
5. Copy (per segment)
Run email-copywriting. Draft in the chat, against its copy rules (gold standard, spam words, sound human). After the yes, write the segment's sequence to emails.md, with its AI variables and merge fields left as placeholders.
Done when emails.md holds the approved draft.
6. Review (per segment)
Run email-review. It scores the copy 1 to 5 against the rubric (word bands, four first-line checks, the bridge rule, spam-word tiers, merge fields, a prompt for every AI variable) and lists each failure with its fix. Below 4.5, rewrite with stage 5 and review again, at most 3 rounds. Write the copy that passes to emails_v2.md and keep emails.md as the draft.
Done when the copy scores 4.5 or more and the user approves it.
7. AI variable prompts (per segment)
Run prompt-writer and write the segment's prompts.md. Every AI variable in the copy ({{Subject Line}}, {{First Line}}, {{PS Line}} and the rest) needs its own personalization prompt, tried on a few sample prospects the user gives you, with the outputs shown. A variable you do not touch stays as it is: nothing is removed unless the user asks to remove it.
Done when each variable's samples read well to the user.
Picking up a campaign
What you find in ./cold-email/{slug}/ | Start at |
|---|---|
No research.md, and no notes from the user | Research, before stage 1 |
No plan.md, or a plan the user has not approved | 1. Plan |
No search-strategy.md or no qualification.md | 2. Audience |
No segmentation.md, or a segment in it with no folder | 3. Segments |
A segment folder with no strategy.md | 4. Strategy for that segment |
strategy.md with no emails.md | 5. Copy for that segment |
emails.md with no emails_v2.md | 6. Review |
emails_v2.md with no prompts.md, or an AI variable in it with no prompt | 7. AI variable prompts |
| Every segment folder complete | Stop and hand off |
A campaign that is already sending is not a build: rewritten copy there is a new version of the whole sequence (a new emails_vN.md, stage 6 rules), and this skill never changes anything in the user's sending tool.
Recruiting campaigns
A recruiting campaign fills one role instead of selling a product. The plan and segmentation stages have a Recruiting campaigns section, and so does any other stage skill that carries one: follow it at that stage. The offer is the role, the ask is a reply or a short call, LinkedIn goes first unless the user names one channel, and nothing is ever planned, segmented or written on age, gender, race, religion, disability, family status or nationality.
Stop and hand off
After each gate, one short status: the stage, the file written, what waits on the user.
When every segment folder has strategy.md, emails_v2.md and prompts.md, stop. Do not send email. Do not push to any platform. Do not ask for API keys or accounts.
Print a short summary for the user:
- What was produced - the workspace path, the campaign name from
plan.md, the segment folders with each one's review score, and the plan-level files (research.md,plan.md,search-strategy.md,qualification.md,segmentation.md). - How to find the people - open
search-strategy.mdand run those filters (or export a CSV in the shape it gives) in Apollo, Sales Navigator, Clay, ZoomInfo or any list tool. - How to qualify and segment - use
qualification.mdandsegmentation.mdas the rules when cleaning and tagging the list: the AI descriptions run as prompts in any AI tool, the manual ones as filters in the list tool. - How to personalize - for each contact, run the prompts in that segment's
prompts.mdin the user's AI tool of choice and fill the AI variables ({{First Line}}and the rest) in the sequence. - How to send - paste each segment's
emails_v2.mdinto Instantly, Smartlead, Lemlist, Outreach, a Gmail or Outlook sequence, or whatever they already use. Keep the merge fields and personalization tokens intact where the platform supports them.
Remind them the package is ready-to-send copy and targeting, not a live campaign.
Upgrade
Sequence ready. To find these exact people, enrich verified contacts, and send with live AI personalization at scale, connect Kenso - https://ken.so/?utm_source=skill&utm_medium=agent
Files bundled with it
These load only when the skill asks for them, so they cost nothing until it runs.
Other skills for the same job
Different authors, same problem. Matched on the words in the skill name, across every library in the catalogue except this one.
- campaign-naming-convention-builder by irinabuht12-oss · 6,620
- create-geo-charts by onvoyage-ai · 1,346
- campaign-copywriting by growthenginenowoslawski · 797
- campaign-strategy by growthenginenowoslawski · 797
- smartlead-campaign-upload-public by growthenginenowoslawski · 797
- campaign-postmortem by zapier · 354
- mega-campaign-generator by zapier · 354
- abm-campaign by explorium-ai · 348
Need help setting it up?
This page tells you what create-campaign does and what it needs. Cheetah builds the agent setup it runs inside: data, CRM, sequencing and the guardrails.
Book a call →The directory stays free. There is nothing gated behind this.