Set Up the Outbound Email Skill
Find prospects, qualify accounts, and prepare personalized email drafts with the Surface Campaign Pipeline skill.
Give your AI agent a repeatable workflow for outbound email. The Surface Campaign Pipeline skill sets up three tasks in Surface: find prospects, qualify accounts, and prepare personalized outreach. Campaign context, research, and progress stay in your Surface Vault so each task can pick up where the last run left off.
Agent Skill · 5 Files · Surface MCP
Surface Campaign Pipeline
Paste the complete instructions into an agent connected to Surface MCP, or download the skill for repeat use.
Copy includes every supporting instruction. Download includes the complete folder as a ZIP.
Preview Skill Files
---
name: surface-campaign-pipeline
description: Set up or resume a campaign in Surface Vault with three scheduled tasks for prospecting, qualification or enrichment, and personalized draft outreach using Surface MCP. Use for building this pipeline, including its file contracts, provider grants, schedules, and bounded commissioning runs.
---
# Surface campaign pipeline
Create a campaign operated through committed Vault records by **Prospect → Qualify → Draft Outreach**. Use Surface MCP for all campaign, Vault, connection-catalog, and task operations. Public web research may inform seller/ICP facts when permitted. Do not fall back to SQL, app REST, browser automation, credential files, or direct provider tools to complete setup.
Use the providers the user's Surface environment actually exposes. Clay, Apollo, MarqRadar, and Amplemarket are examples, not dependencies. Missing capabilities produce explicit blockers or Vault-only output, never invented tools or a false claim of a working pipeline.
## Scope and intake
1. Establish seller, target segment, intended team/environment, provider preferences, and whether the user wants setup only, real commissioning runs, or recurring operation. Reuse supplied answers. Inspect available Surface tools and returned environment identifiers; a production app hostname does not establish whether the workspace is a test environment. Ask only when scope is ambiguous.
2. List scheduled-task connections, browse campaign files, and list existing tasks. Follow pagination. Resume matching campaigns with saved IDs; a failed run does not justify another folder/task.
3. Check workspace Company files describe the actual seller before borrowing claims or exclusions. Otherwise keep sourced seller context inside this campaign. Record URLs and uncertainty. Never invent customers, proof, contacts, or evidence.
4. Present defaults briefly and proceed when sane defaults were authorized. Ask only for material missing facts, especially seller/segment, intended environment, or sender mailbox. Obtain sender first name from the user or a verified profile, not a guess from an address. Do not impose per-file approval checkpoints.
Suggested starting values; adapt to user intent, provider latency, and current tool limits:
| Setting | Starting value |
| --- | --- |
| Cadence | Hourly: Prospect :00, Qualify :20, Draft Outreach :40 |
| Timezone | User's stated timezone; otherwise environment timezone, explicitly disclosed |
| Prospect batch | Up to 5 new accounts, 2 contacts/account, 10 contacts/run |
| Qualify batch | Up to 3 accounts/run, including resumed work |
| Outreach batch | Up to 3 contacts/run; fewer for expensive sequence creation |
| Initial ceiling | 30 accounts for commissioning; larger only if requested |
| Task budget | 15 minutes, 20 documents, 60,000 output tokens |
| Soft stop | Stop new work by 8 minutes, 12 provider calls, or about 35,000 output tokens |
| Provider call ceiling | 15 per run, including reads, writes, polls, and verification |
| Outreach | Email only; four steps on business days 0, 3, 7, 11 |
| Publication | Inactive drafts only; no launch, resume, activation, or sending |
| Notifications | Vault summaries; Slack only when separately requested with a resolved destination |
These are ceilings, not quotas. Do not widen the ICP to fill them. The account ceiling limits **new accounts**, not bounded contact repair for existing accounts. Do not promise 100 contacts/hour; scale only after measured runs reliably commit within budget.
## Build the campaign contract
Read [references/vault-contract.md](references/vault-contract.md) when creating/adapting files. Build seller context, ICP, exclusions, complete sequence copy, persistence templates, and initial checkpoints before task creation. Seed empty data tables, not fake prospects.
Choose an outreach representation before marking setup ready:
- Prefer reusable persona sequences with **documented per-contact fields** for every variable part of every email, and a way to verify each recipient's rendered content.
- If unsupported, use a dedicated draft per contact when the provider supports it and this fits the user's scope. Name it deterministically with campaign, copy version, persona, and stable contact ID. Build across bounded runs if needed.
- Otherwise choose `vault_only`: save personalized copy and disclose that automatic provider enrollment is unavailable. Do not call this a fully commissioned external-outreach pipeline.
Never put one recipient's literal company/evidence into a shared sequence and reuse it for other companies. Preserve existing occupied drafts, reconcile them, and choose a compatible strategy for future contacts.
Use `ready_for_draft_pipeline` only when the core contract is coherent. Track readiness by stage: a missing sender/outreach connector must not block account discovery or research. Missing qualification capability blocks Qualify and downstream eligibility, not setup files. Draft-copy approval is not live-send authorization.
## Create three tasks
Read [references/task-instructions.md](references/task-instructions.md). Materialize its shared rules **plus the relevant stage block** into each task's saved instructions, resolving placeholders to actual paths, IDs, settings, and choices. Runtime tasks cannot read this local skill. Put schemas/copy in Vault and critical execution/recovery rules directly in task instructions.
Name tasks `{Short campaign name} · Prospect`, `{Short campaign name} · Qualify`, and `{Short campaign name} · Draft Outreach`. Save returned task IDs/URLs in `setup-log.md`.
Grant only each stage's provider(s) and Vault reads/writes. POST-based research/enrichment may need a write grant; constrain permitted operations in instructions. A broad connector write grant does not authorize live outreach. Grant optional web reads only where needed; no Slack by default. Inspect current Surface schemas rather than assuming config fields or provider capabilities.
Create tasks paused and verify returned state. For existing tasks, use `get_scheduled_task` and current `updatedAt` for updates. Omitted fields preserve configuration; supplied permission arrays replace arrays. Re-read and merge after conflicts. Wait if an active run prevents editing. Preserve another actor's acceptance/scheduling choices unless changing them is requested.
Offsets reduce overlap but do not enforce dependencies. Consume committed eligible rows and own separate files; never assume the prior stage succeeded because its scheduled time passed.
## Verify and commission within authorized scope
Setup verification is read-only: read back files and all task configurations, grants, exact paths, stage gates, copy strategy, and timezone. Check all referenced fields exist, copy is complete, days increase, exclusions exist, and unresolved settings are explicitly blocked. Report setup separately from runtime verification.
`run_scheduled_task` performs real external actions and may spend credits. A request to create this skill or set up tasks alone is not authorization to run them. Continue without re-asking when commissioning/recurring operation was already authorized. Otherwise leave the concrete setup paused and ask only for the missing execution authorization.
For authorized commissioning:
1. Run Prospect once; inspect status, all activity pages, write outcomes, and saved records.
2. Run Qualify against committed scan-ready accounts. Pending reports are normal: save exact IDs and resume with a fresh bounded polling allowance in a later authorized run. Never resubmit to make the first test look complete.
3. Run Draft Outreach when a qualified account has an eligible contact. Verify personalized content, sender, provider draft lifecycle, membership, and contacted/sent state when available. A lead status named `active` is not necessarily a live sequence; inspect sequence lifecycle and documented semantics.
4. Accept a completed run using `accept_scheduled_task_run` only after outputs pass review. Use `activate_scheduled_task` only when recurring execution is authorized and that stage passed commissioning. Surface schedule activation and provider campaign activation differ; only the former belongs here.
Read [references/recovery.md](references/recovery.md) on failures, uncertain writes, authentication, truncation, or count mismatches. Do not repeatedly run blocked tasks. If downstream has no eligible work, report the bottleneck rather than claiming full pipeline validation.
## Finish
Return campaign/task links supplied by tools, schedules/timezone, paused/armed state, provider/copy strategy, verified counts by stage, and remaining blockers. Say whether anything ran and whether contacts entered inactive drafts. No live campaigns or prospect messages are part of this skill.
Keep choices, IDs, verification, and unresolved recovery work in `setup-log.md`. Record new provider techniques in one campaign `surface-mcp-notes.md`, separating observed behavior from assumptions. Avoid raw credentials, personal contact dumps, and full execution logs in that notes file.
Installing manually? Keep all 5 files together. SKILL.md uses the reference files.
The skill prepares inactive drafts for review. It does not launch campaigns or send emails. You can start with setup only, test the tasks, then enable recurring runs when you are ready.
What You Will Set Up
| Task | What It Does | What It Saves |
|---|---|---|
| Prospect | Finds companies and contacts that match your ideal customer profile (ICP). | Account and contact records with their sources. |
| Qualify | Checks account evidence against your campaign's qualification criteria. | Decisions, supporting evidence, and research still in progress. |
| Draft Outreach | Uses qualified account evidence to personalize email sequences for eligible contacts. | Complete email copy and, where supported, inactive provider drafts. |
The tasks use the providers available in your Surface environment. A specific provider is not required by the skill. If your outreach connection cannot support the draft workflow, the agent can save personalized copy in Vault and explain what needs to happen manually.
Before You Start
You will need:
- An AI agent connected to Surface MCP. To install the ZIP for repeat use, your agent also needs local skill support.
- A Surface environment with access to Vault, campaign tools, and scheduled tasks through MCP. Ask your agent to check that these tools are available.
- Connected providers for the discovery and research you want to perform. Creating drafts in an external provider also requires a suitable outreach connection and a verified sender mailbox.
- Your company website, target audience, and the criteria that make an account worth contacting.
Connect your agent using Surface MCP Setup. The connection must allow the writes needed to create campaign files and tasks.
Choose How to Use It
Copy instructions is the quickest way to start. Paste the combined Markdown into an agent connected to Surface MCP, then provide your campaign details. All supporting instructions are included, so you do not need to install any files.
Download skill is the reusable installation option. Extract the ZIP and place the entire
surface-campaign-pipeline folder in your agent's skills directory. Use your
agent's skill installation instructions to choose the location.
Keep these files together:
surface-campaign-pipeline/
SKILL.md
agents/
openai.yaml
references/
vault-contract.md
task-instructions.md
recovery.mdSKILL.md is the entry point. The reference files contain the campaign
structure, task instructions, and recovery procedures it uses during setup.
Copying only SKILL.md leaves the installation incomplete.
Set Up Your First Campaign
Copy this prompt into your agent and replace the bracketed values:
Use the Surface Campaign Pipeline instructions to set up an outbound email campaign.
Company: [company name and website]
Surface environment: [team and environment]
Target accounts: [industry, geography, company size]
Target contacts: [roles or personas]
Qualification criteria: [evidence that makes an account a fit]
Offer: [what we can help with]
Exclude: [customers, competitors, domains, or other exclusions]
Preferred providers: [names, or inspect my available Surface connections]
Sender: [verified mailbox and sender first name, or leave unresolved]
Timezone: [for example, America/Los_Angeles]
Create the campaign files and three tasks. Use the skill's suggested starting
limits and leave the tasks paused. Report missing connections or information.
Do not run the tasks, enable recurring runs, or send any emails.The agent checks your available connections and existing campaigns, builds the campaign files, and creates paused tasks. If it finds a matching campaign, it should resume that setup using the saved records.
Suggested Starting Settings
| Setting | Starting Value |
|---|---|
| Schedule | Hourly: Prospect at :00, Qualify at :20, Draft Outreach at :40 |
| Prospect Batch | Up to 5 new accounts and 10 contacts per run, with 2 contacts per account |
| Qualify Batch | Up to 3 accounts per run |
| Draft Outreach Batch | Up to 3 contacts per run |
| Initial Account Limit | 30 accounts for initial testing |
| Email Sequence | Four steps, on business days 0, 3, 7, and 11 |
These are starting limits, not promised output. Your agent can adjust them for your campaign and provider capabilities. The scheduled offsets do not guarantee that an earlier task has finished; each task uses saved, eligible records from the previous stage.
Review Your Setup
Open the campaign and task links returned by your agent. In
Campaigns/{Campaign}/, review:
- The brief and ICP: seller context, target accounts, personas, and qualification criteria.
- Exclusions: the companies and contacts to leave out, and which checks your connections can support.
- The sequence: every email step, its personalization sources, timing, and sender.
- The workflow and setup log: task links, timezone, limits, paused state, and anything still blocked.
A missing sender can hold up outreach while account discovery and research remain ready. Your agent should report readiness for each stage separately.
Test the Pipeline
When you are ready to use your connected providers, ask:
Test the [campaign name] pipeline with bounded runs of Prospect, Qualify,
and Draft Outreach, in that order where eligible records are available.
I authorize the provider calls for these tests, which may use credits.
Verify saved results after each stage. Keep recurring schedules paused
and all outreach in inactive drafts. Report completed work and blockers.Research may take more than one run. The agent should retain pending job IDs and resume that work instead of submitting it again.
Check the results separately: accounts discovered, accounts qualified, contacts eligible for outreach, email copy saved, and provider drafts or memberships verified. Copy saved in Vault does not by itself mean a draft exists in your outreach provider.
Enable Recurring Runs
After reviewing successful tests, ask your agent to enable the stages that passed:
Enable recurring runs for the verified stages of [campaign name], using
the agreed schedule, timezone, and limits. Leave blocked or unverified
stages paused. Keep all outreach in inactive drafts and report which
schedules are enabled.Recurring tasks continue preparing prospects, research, and drafts within your campaign limits. Sending those drafts is a separate step outside this skill. Notifications stay in Vault unless you separately request Slack.
When a Stage Is Blocked
Ask your agent to inspect the latest run and saved campaign records before retrying. A missing connection, pending research result, unresolved sender, or unsupported personalization method can each hold up a stage.
If a run fails after changing something in a provider, that change may still exist. The skill directs the agent to reconcile it before making another attempt, so a retry does not create duplicate research or drafts.
Ready to Get Started?
See it on your own site, or open the app and build the first form.