Systems Lab

Agent skill

gt-email-infra

Email Infrastructure & Deliverability by Growth Today (growthtoday.co).

activeNeeds a keyActs undeclared2,317 words

Filed under Outbound email.

From Growth-Today/claude-skills · 12 skills · 3 · pushed 2026-09-11

What it does when it runs

Email Infrastructure & Deliverability by Growth Today (growthtoday.co). Expert cold-email infrastructure and deliverability strategist. Use for infrastructure sizing, domain research and purchasing, DNS and auth (MX/SPF/DKIM/DMARC), masking versus redirect, mailbox provisioning, Instantly inbox setup and warmup, going live, campaign building and ESP/SEG routing, inbox-health dashboards, and blacklist/bounce auditing. Works across EmailBison, Instantly, Smartlead and Lemlist, with runnable playbooks for DNS/auth checks, ESP profiling and sizing. Triggers on: email infra, buy or setup domains, DNS, MX, SPF, DKIM, DMARC, warmup, mailbox setup, EmailBison, Instantly, Smartlead, deliverability, inbox placement, scaling email, how many mailboxes, run the audit, audit my client, Unibox settings, ESP mix, SEG, blacklist, bounce audit, why are my emails bouncing. Do NOT use for cold email copywriting or sequences (use gt-cold-email); the lead list (use gt-list-building); or marketing emails/newsletters.

Read from the skill and the 26 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
  • EMAILBISON_API_KEY
  • HEYREACH_API_KEY
  • INSTANTLY_API_KEY
  • LEMLIST_API_KEY
Hosts it reaches
  • app.instantly.ai
  • app.notion.com
  • dns.google
  • emailtracking.yourdomain
  • server.intellioauth.com
  • www.growthtoday.co
  • www.linkedin.com
Tool permissions it declares
No allowed-tools in the frontmatter. It does act, so it runs under whatever permissions your session already grants.
Actions present in the files
shellwrites files

Ask about gt-email-infra

Opens your assistant with this page's verified links already in the prompt.

Is this safe to install?ClaudeChatGPT
Adapt it to my stackClaudeChatGPT
What else do I need for it to workClaudeChatGPT
Rather ask a human? Talk to Cheetah
git clone --depth 1 --filter=blob:none --sparse https://github.com/Growth-Today/claude-skills.git /tmp/claude-skills
git -C /tmp/claude-skills sparse-checkout set "gt-email-infra"
mkdir -p ~/.claude/skills/gt-email-infra
cp -R "/tmp/claude-skills/gt-email-infra/." ~/.claude/skills/gt-email-infra/

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.

Before you install: this skill will not complete its job on a bare agent. It needs EMAILBISON_API_KEY, HEYREACH_API_KEY, INSTANTLY_API_KEY, LEMLIST_API_KEY, which you have to obtain separately.

Reproduced in full from Growth-Today/claude-skills/blob/506d174be93e8e3d53d7b93908b2439ff3e996cd/gt-email-infra/SKILL.md, which is licensed MIT (repository). 2,317 words, 14 headings.

Setup (Run Once Per Session)

Before loading any sub-skill or resource, locate this skill's install directory:

  1. Use Glob to search for **/gt-email-infra/SKILL.md.
  2. The directory containing this SKILL.md is SKILL_BASE.
  3. Sub-skills are at: {SKILL_BASE}/.claude/skills/{sub-skill}/gt-SKILL.md.
  4. Resources are at: {SKILL_BASE}/resources/....

Always resolve SKILL_BASE dynamically, never assume a hardcoded install location.

Email Infrastructure & Deliverability, Orchestrator

This skill is the plumbing that gets cold email delivered, not the message itself. Route by who you are and what you're doing to the one sub-skill that matches. Each sub-skill is self-contained and ends in a copy-pasteable checklist.

Platform: this skill supports the sequencers Growth Today uses, EmailBison, Instantly, Smartlead, and Lemlist. Use the matching setup sub-skill for whichever you run. Concepts are ESP-agnostic; platform-specific steps are called out inline.

When NOT to use this skill

  • Writing the email, subject lines, body, sequences, personalization → gt-cold-email.
  • Building or verifying the lead list → gt-list-building.
  • Marketing emails / newsletters, this is cold-outreach infrastructure only.
  • CRM setup or data hygiene → gt-hubspot-admin / gt-salesforce-admin.

Sub-Skill Routing

You are…You want to…Sub-skillPath
Sales OpsResearch and buy sending domainsdomain-research{SKILL_BASE}/.claude/skills/domain-research/gt-SKILL.md
Sales OpsProvision mailboxes + DNS/auth (masking, not redirect)provisioning{SKILL_BASE}/.claude/skills/provisioning/gt-SKILL.md
Sales OpsSet up / connect inboxes in EmailBisonemailbison-setup{SKILL_BASE}/.claude/skills/emailbison-setup/gt-SKILL.md
Sales OpsSet up / connect inboxes in Instantlyinstantly-setup{SKILL_BASE}/.claude/skills/instantly-setup/gt-SKILL.md
Sales OpsSet up / connect inboxes in Smartleadsmartlead-setup{SKILL_BASE}/.claude/skills/smartlead-setup/gt-SKILL.md
Sales OpsSet up / connect inboxes in Lemlist (email + LinkedIn)lemlist-setup{SKILL_BASE}/.claude/skills/lemlist-setup/gt-SKILL.md
Sales Ops → GTMWarm up and take domains livewarmup-golive{SKILL_BASE}/.claude/skills/warmup-golive/gt-SKILL.md
GTM EngineerBuild campaigns, route by ESP/SEGcampaign-building{SKILL_BASE}/.claude/skills/campaign-building/gt-SKILL.md
GTM EngineerRead the inbox-health dashboard, act on itdashboard-reading{SKILL_BASE}/.claude/skills/dashboard-reading/gt-SKILL.md
GTM EngineerVerify a workspace is set up correctly (live audit)setup-audit{SKILL_BASE}/.claude/skills/setup-audit/gt-SKILL.md
GTM EngineerAudit a bounce / blacklist to root causeblacklist-bounce-audit{SKILL_BASE}/.claude/skills/blacklist-bounce-audit/gt-SKILL.md

Cross-Cutting Resources

  • All numbers, limits, timelines, thresholds, and the ESP/SEG taxonomy → Read {SKILL_BASE}/resources/reference.md. Never restate one of its numbers in a sub-skill.
  • Approved SMTP / sequencer / masking vendors → Read {SKILL_BASE}/resources/approved-vendors.md.
  • 2026 market performance benchmarks (results-side: is a bounce/reply rate good or bad vs the market) → Read {SKILL_BASE}/resources/benchmarks.md.

▶️ Playbooks (run these, don't do them by hand)

A playbook is an executable version of a checklist: an interview that collects the inputs, a script that does the work, and an after-state that proves it landed. Read playbook.md first — it contains the interview questions — then run the script.

PlaybookWhat it doesNeedsStatus
dns-auth-auditMX / SPF (record count + recursive lookup budget) / DKIM across 14 selectors / DMARC policy vs the GT standard / stray Lync SRV, plus MX→provider and SEG detection. after.py diffs against a saved baseline to catch silent drift.nothing — public DNS only✅ 10/10 gate tests pass (scripts/test_gate.py, stubbed DNS) plus a 13-domain live run
sizing-calculatorMonthly goal or contacts × steps ÷ days-to-clear → daily volume → mailboxes → mailboxes to buy → Google/Microsoft split → domains. Parses the cold limits out of reference.md §1 rather than hardcoding them.nothing — stdlib only--validate reproduces all 9 rows of both §4 tables, parsed from the doc
cd {SKILL_BASE}/playbooks/<name>/scripts
uv run execute.py --help          # every playbook is self-documenting

uv reads the PEP-723 header in each script, so there is nothing to install. If you don't have uv, the fallback from inside a scripts/ directory is pip install -r ../../../requirements.txt.

Scope note. Both playbooks above are read-only and provider-independent — they query public DNS or do arithmetic. Anything that touches a sending platform is governed by the email infra management system boundary below: reads are fine, writes to sending limits, warmup config, tagging or routing are not GT's to make.


🔒 Email infra management system: read-only

The email infra management system is Growth Today's own stack — Supabase, Railway and n8n crons. It is the source of truth for the automated inbox layer. This skill holds that knowledge and exposes it as a read-only checklist. It is never a second source of truth, and the system's dashboard stays primary.

Read-only exists so there is one answer. The system is ours, so the rule is not "someone else's tool, hands off". It is that the moment a GTM engineer changes a sending limit in Instantly by hand, the system's number and Instantly's number disagree and nobody knows which is right. That is how we ended up with four inbox trackers.

GTM engineers and Sales Ops do not change these. Read the state, report the gap, escalate.

AreaWe mayWe may NOT
Inbox classification / taggingread the tag and act on itchange a tag or override a state
Sending limits (cold + warmup)read and check against reference.md §1set, raise, lower or "correct" a limit
Warmup config (once live)read warmup score and on/offenable, disable or retune on a live inbox
Connecting inboxes to a sequencerread connection state (status, setup_pending)connect, reconnect or swap an inbox by hand
Campaign build and routingread the campaign config and the performance matrixbuild, edit or re-route a campaign by hand
Blacklist monitoringread listingschange what counts as a listing
Placement testsread scoreschange cadence or thresholds
Bounce classificationread categorised bouncereclassify
Weekly DNS re-checkread the resultbuild a second scheduled checker
Inbox documentationread itkeep a parallel tracker
Disconnected-inbox automationread alertschange the automation
Which lists count as a blacklistread listings (Spamhaus DBL / URIBL only)add a list back, or score/tag/alert on any other list

The one time we do set these: at first setup, before an inbox is live and being classified, Sales Ops or the vendor sets the starting warmup and cold values (see the instantly-setup sub-skill). That window closes at go-live. After that, limits, warmup and tags belong to the email infra management system.

Access: no token given to a GTM engineer may change sending limits, warmup config, tagging or routing. Instantly's account-update endpoint can change daily limits and is deliberately out of scope — a permission test must confirm it is refused before any settings check ships.


Critical Rules (Never Break)

  1. Never cold-send from the primary/brand domain, only dedicated secondary domains.
  2. Mailboxes per domain is provider-specific: Google 2–3, Microsoft up to ~25 (average). Google stays lean for deliverability; Microsoft can host many per domain.
  3. One domain = one workspace.
  4. Buy across multiple registrars, spread across multiple days, max 4 per registrar per day. ScaledMail owns the buying; GT verifies it happened.
  5. Warm up ≥ 21 days / 3 weeks (hard floor; 4 weeks on a cautious build) before sending; link only from domains > 30 days old.
  6. Never disable warmup once campaigns are running.
  7. Masking or a real landing page, never a bare 301/302 redirect to the main site. (Currently held: GT runs no client redirects. The open item is replacing EmailBison's masking — see approved-vendors.md.)
  8. No links and no custom tracking domain in cold email by default (share via LinkedIn or an unlinked URL).
  9. ESP matching is not a rule: decide keep/drop from our own dashboard data.
  10. Start conservative, scale gradually (≤ 20%/week).

Sizing formula (detail in {SKILL_BASE}/resources/reference.md §4)

Monthly goal ÷ 20 workdays = daily volume → ÷ blended cold per mailbox = mailboxes → × 1.5 buffer. Domains: Google mailboxes ÷ 2–3 + Microsoft mailboxes ÷ ~25 (Microsoft packs far more per domain).

There is no fixed divisor. Ask the client's provider mix first. blended = google_share × 20 + microsoft_share × 5

A Google mailbox sends 20 cold/day, a Microsoft one sends 5. The mix is a per-client call driven by industry and market, so the same 15k/month goal needs anywhere from 57 mailboxes (all Google) to 129 (25/75). Ask for the mix before you quote a number. Full grid in reference.md §4.

Don't do this by hand — run it:

cd {SKILL_BASE}/playbooks/sizing-calculator/scripts
uv run execute.py --monthly-goal 15000
uv run execute.py --contacts 9000 --steps 4 --days-to-clear hiring

The script reads the cold limits out of reference.md §1 at run time, so it cannot drift from the standard the way the old spreadsheet did.

What we can and cannot see

  • We can see and control: each domain's public footprint (WHOIS, registrar, creation date, DNS, nameservers, masking host) and our own per-inbox/per-domain sending metrics (bounce, reply, placement, warmup).
  • We cannot inspect or split: the vendor's shared warmup/seed pool (EmailBison + EmailGuard under one shared Growth Today account). This risk materialised in June–July 2026: 13 of 17 audited clients were flagged at once on a shared-pool blocklist, and the shared warmup/seed pool is the suspected cause. The escalation path is no longer hypothetical: DNS-footprint check across clients → written per-tenant isolation from the vendor → separate workspace + placement-test account per client.

Growth Today's point of view (our answers)

  • Blacklists: only Spamhaus DBL and URIBL count. Everything else is out of scope — Google and Microsoft barely weight the other lists and the email infra management system does not track them. The real fix is domain sourcing, not chasing delistings.
  • Microsoft / Outlook: expect weaker Outlook placement; check sudden drops against Microsoft BCL recalibration dates before blaming infra; conservative limits; short copy.
  • SEG (Mimecast/Proofpoint/Barracuda): a block is the recipient's policy working as designed. Isolate SEG leads onto dedicated, never-reused domains, low concurrency into one org, no links/tracking, go multi-channel, and recycle burnt SEG domains onto easy Google/Outlook segments before retiring.
  • Bounces: strip OOO/auto-replies first: Bison counts them as bounces. In one real audit that turned 1,231 actual bounces into 2,687 — more than double. Read the real number, then diagnose.
  • Failover gap: EmailBison can't set a cold limit of 0, so it strands leads on unhealthy inboxes, a real bounce driver. Instantly and Smartlead can set 0 and reroute the lead to a healthy inbox on the campaign.

Routing Rules (composite requests)

Most real requests chain sub-skills. Common ones:

  1. "Set up cold email infra for X/month" → domain-research → provisioning → the matching platform setup sub-skill (emailbison / instantly / smartlead / lemlist) → warmup-golive (in order).
  2. "Is this workspace set up correctly / audit our setup" → setup-audit (live per-item PASS/WARN/FAIL).
  3. "Audit our deliverability / why are we bouncing?" → blacklist-bounce-audit (root cause) + dashboard-reading (health context).
  4. "Build / launch a campaign" → campaign-building (route from the matrix), then the launch gate in warmup-golive.
  5. "How many domains and mailboxes do I need?"{SKILL_BASE}/resources/reference.md §4 (sizing).
  6. "Is this bounce/reply rate good?"{SKILL_BASE}/resources/benchmarks.md.
  7. Single-topic question → the one matching sub-skill above.

How the SOP Runs (End to End)

The Decision Tree below routes a single question. This is the job in order.

SALES OPS — build the infrastructure
─────────────────────────────────────────────────────────────────────────────────────────
1  Size the build              domain-research         ▶ playbooks/sizing-calculator
2  Ideate + brief ScaledMail   domain-research         ·  ScaledMail buys them, not us
3  Mailboxes + DNS / auth      provisioning            ▶ playbooks/dns-auth-audit
4  Connect to the sequencer    <esp>-setup             🔒 done in the system · verify at 6
5  Warm up, then go live       warmup-golive           ▶ dns-auth-audit as the launch gate
                                                       ·  warmup score read in the dashboard  🔒
        │
        ▼   handover — infrastructure is live
GTM ENGINEER — run campaigns on it
─────────────────────────────────────────────────────────────────────────────────────────
6  Verify before launch        setup-audit             ▶ 21-row table: MCP + DNS playbook
7  Build + route the campaign  campaign-building       ▶ dns-auth-audit --esp-mix (profile the list)
                                                       🔒 the build and the routing themselves
8  Watch inbox health          dashboard-reading       ▶ MCP  list_accounts,
                                                          get_campaign_analytics  🔒 read
9  Bouncing or blacklisted     blacklist-bounce-audit  ▶ EmailBison API replies + DNSBL
                                                          (REST, no MCP connector yet)
        │
        └──▶ fix at 3 (repair / replace domains)  or  re-verify at 6

▶ you can actually run this — a playbook or a named call, not a description of one
·  nothing to run — no API for this, so the skill holds the rules
🔒 read it, don't change it — the email infra management system owns this setting

Numbers and thresholds for every step live in one place: {SKILL_BASE}/resources/reference.md. Steps quote the key (google_cold, warmup_floor_days), never a copied number.


Decision Tree

Who / what?
├─ Sales Ops: ideate or buy domains? → domain-research
├─ Sales Ops: mailboxes / DNS / auth? → provisioning
├─ Set up / connect inboxes (Bison/Instantly/Smartlead/Lemlist)? → the matching *-setup sub-skill
├─ Warm up / go live? → warmup-golive
├─ GTM: build or route a campaign (ESP/SEG)? → campaign-building
├─ GTM: read the dashboard / act on health? → dashboard-reading
├─ GTM: verify a workspace is set up right? → setup-audit
├─ GTM: something bouncing / blacklisted? → blacklist-bounce-audit
├─ Just need a number / limit / threshold? → resources/reference.md
└─ Is this metric good or bad vs the market? → resources/benchmarks.md

Created by Growth Today, the AI-native GTM engineering firm. Maintained by Brigitta Ruha. More open Claude Skills for go-to-market teams: https://www.growthtoday.co/claude-skills

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.

Need help setting it up?

This page tells you what gt-email-infra 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.