Cold Outreach Writer

Research a prospect and draft three cold-email variants with subject lines scored by predicted reply rate before you send.

Research a prospect and draft three cold-email variants with subject lines scored by predicted reply rate before you send. An SDR costs $7k/mo loaded and writes 30 emails a day with worse triggers than this agent. Replace the writing, keep the human for replies.

This is the whole blueprint, nothing held back: the model, the tools, the exact prompt, the source on disk, and the setup. Everything you need to run Cold Outreach Writer yourself is on this page, and it deploys in an afternoon.

What it does

Cold Outreach Writer handles the work end to end:

  • Research any prospect for a real, name-able outreach trigger
  • Draft three structurally different cold-email variants per prospect
  • Score 5 subject-line candidates by predicted reply rate
  • Refuse to write when no usable trigger exists, preventing slop email

The anatomy

An agent is a composition, not a prompt: a model, the tools it is allowed to call, the integrations that give those tools reach, and the rules that keep it honest. Here is Cold Outreach Writer on one card.

Cold Outreach Writerblueprint
Model
claude-sonnet-4-6
Tools
research_prospectdraft_variantsscore_subject_linessend_test
Integrations
Exa.aiAgentMailZod
Guardrails
every email must reference one specific trigger (hire, funding, post, launch, integration).; no more than 90 words per email body

The instructions

Every run is governed by this prompt. It is short on purpose: enough to make Cold Outreach Writer reliable, not so much that it can misread itself. Copy it as a starting point for any agent you build.

Cold Outreach Writer
You are a senior outbound copywriter. You write cold emails that get replies because they sound human, name a real trigger, and ask one specific question. WORKFLOW: 1. Call research_prospect on the target's name, role, company, and any URL. 2. Call draft_variants to produce three emails: opener (curiosity), value-led (concrete proof), breakup (last attempt). 3. For each, call score_subject_lines to rank 5 candidate subject lines by predicted reply rate. 4. Optional: call send_test to send the chosen variant to the user's inbox for QA. RULES: - Every email must reference one specific trigger (hire, funding, post, launch, integration). - No more than 90 words per email body. - Never use "I hope this email finds you well" or any AI-tell phrase. - Subject lines max 6 words, no question marks unless asking something specific. - If research returns nothing usable, refuse to write the email.

The source, on disk

Three files carry the whole agent: the definition with its tools, the environment it expects, and the setup. Walk them.

cold-outreach-writer/cold-outreach-writer.ts1.7 KB
1import { agent, tool } from "@agent-sdk"
2import Exa from "exa-js"
3import { z } from "zod"
4
5const researchInput = z.object({
6 name: z.string(),
7 company: z.string(),
8 role: z.string().optional(),
9 url: z.string().url().optional(),
10})
11
12const draftInput = z.object({
13 research: z.any(),
14 offer: z.string(),
15 cta: z.string(),
16})
17
18export default agent({
19 model: "claude-sonnet-4-6",
20 permissionMode: "bypassPermissions",
21 maxTurns: 15,
22 systemPrompt: `...`, // see System Prompt section above
23 tools: {
24 research_prospect: tool({
25 description: "Find a real trigger to reference",
26 inputSchema: researchInput,
27 execute: async ({ name, company, role, url }) => {
28 const exa = new Exa(process.env.EXA_API_KEY)
29 const q = `${name} ${company} ${role ?? ""}`.trim()
30 return exa.search(q, { numResults: 6, contents: { text: true } })
31 },
32 }),
33 draft_variants: tool({
34 description: "Produce opener, value-led, and breakup variants",
35 inputSchema: draftInput,
36 execute: async ({ research, offer, cta }) => {
37 // returns { opener, valueLed, breakup }
38 },
39 }),
40 score_subject_lines: tool({
41 description: "Rank 5 candidate subject lines by predicted reply rate",
42 inputSchema: z.object({ candidates: z.array(z.string()).length(5) }),
43 execute: async ({ candidates }) => {
44 // returns ranked array with predicted reply rate
45 },
46 }),
47 send_test: tool({
48 description: "Send chosen variant to the user's own inbox for QA",
49 inputSchema: z.object({ to: z.string().email(), variant: z.any() }),
50 execute: async ({ to, variant }) => {
51 // POST to AgentMail send
52 },
53 }),
54 },
55})

The business case

If you run an agency, Cold Outreach Writer is also a product. It sells into outbound sdr teams, founder-led sales, agencies, and the numbers work at very small scale.

$2,800

setup you can charge

$450/mo

monthly retainer

4

jobs off your plate

Ship it

The whole install is a handful of commands and the keys from the env file. Run the list, then point Cold Outreach Writer at real work.

Deploy checklist

0 of 4

That is the entire blueprint: one model, 4 tools, and a prompt. Built by hand it costs you an afternoon. Inside Ultron it costs you a sentence, because you can build this exact agent in the workforce and watch it run before you commit to anything.

Build Cold Outreach Writer in Ultron

1
Describe what you want

Start from this blueprint or your own words. Ultron reads the intent and picks the tools.

2
It builds the agent

The model, the tools, the prompt, the console. Assembled in front of you, nothing to wire.

3
Watch it run

Test it live in the chat, then put it to work. You review what it does, it does the rest.

Keep reading