Agent skill
infra-setup
Check domain availability and price on Porkbun (no purchase unless you pass --confirm-purchase), point domains at Zapmail, create Google Workspace inboxes through the Zapmail API, and get them into PlusVibe.
Filed under Outbound email.
From sccsadmin11/outbound-gtm-sc · 11 skill entries · 0 · pushed 2026-10-22
What it does when it runs
Check domain availability and price on Porkbun (no purchase unless you pass --confirm-purchase), point domains at Zapmail, create Google Workspace inboxes through the Zapmail API, and get them into PlusVibe.
Automated analysis of the skill and the 9 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
- PLUSVIBE_API_KEY
- PORKBUN_API_KEY
- PORKBUN_SECRET_API_KEY
- ZAPMAIL_API_KEY
- ZAPMAIL_WORKSPACE_KEY
- Hosts it reaches
- api.porkbun.com
- api.zapmail.ai
- app.plusvibe.ai
- docs.zapmail.ai
- help.zapmail.ai
- porkbun.com
- 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
- shell
Ask about infra-setup
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/sccsadmin11/outbound-gtm-sc.git /tmp/outbound-gtm-sc git -C /tmp/outbound-gtm-sc sparse-checkout set "01-infra-setup" mkdir -p ~/.claude/skills/infra-setup cp -R "/tmp/outbound-gtm-sc/01-infra-setup/." ~/.claude/skills/infra-setup/
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 PLUSVIBE_API_KEY, PORKBUN_API_KEY, PORKBUN_SECRET_API_KEY, ZAPMAIL_API_KEY, ZAPMAIL_WORKSPACE_KEY, which you have to obtain separately.
The skill
Source on GitHub ↗Reproduced in full from sccsadmin11/outbound-gtm-sc/blob/fc996416957ff6232cc00c3b5c94d601b68e1d61/01-infra-setup/SKILL.md, which is licensed MIT (repository). 584 words, 9 headings.
01 Infra setup
Purpose
Get sending infrastructure ready: secondary domains, Google Workspace inboxes on each domain with DNS handled, and those inboxes connected in PlusVibe.
Inputs
domains.txt: candidate domains, one per line (seeexamples/domains.txt).- The example files use fake
.exampledomains. Use real candidate names (for example.com) on a live run. senders.csv:first_name,last_nameof the people the inboxes are named after.- How many inboxes per domain (1 to 5, Zapmail's max is 5).
Outputs
domain_check.csv: availability, first-year price, renewal price, premium flag.inbox_plan.csv: every inbox to create (domain, name, username, email).domain_connect.csv: Zapmail connection status per domain.inboxes.csv: created mailboxes (no passwords, ever).inboxes_connected.csv: which inboxes PlusVibe sees as connected and active. Skill 09 uses it.
Env vars
| Var | Where to get it |
|---|---|
PORKBUN_API_KEY, PORKBUN_SECRET_API_KEY | https://porkbun.com/account/api (also turn on API access per domain) |
ZAPMAIL_API_KEY | Zapmail app -> Settings -> API |
ZAPMAIL_WORKSPACE_KEY | Optional. Only if you use more than one Zapmail workspace |
PLUSVIBE_API_KEY, PLUSVIBE_WORKSPACE_ID | https://app.plusvibe.ai/v2/settings/api-access |
Money warning
porkbun_domains.py checkis read only. It never buys.porkbun_domains.py buywithout--confirm-purchaseonly runs Porkbun'sdryRun: truepreview. No order, no charge.porkbun_domains.py buy --confirm-purchaseSPENDS REAL MONEY from your Porkbun account credit. It refuses premium domains, refuses anything above--max-cost-cents(default 1500 = $15), and refuses if Porkbun's preview cost does not match the checked price.zapmail_inboxes.py create-mailboxesuses mailbox slots on your Zapmail plan. Run it with--dry-runfirst.
Steps (agent run instructions)
- Check domains (read only):
Show the user the CSV. Pick domains withpython 01-infra-setup/scripts/porkbun_domains.py check --file domains.txt --out domain_check.csv # Try it with no keys against Porkbun's mock server: python 01-infra-setup/scripts/porkbun_domains.py check --mock --domains acmeoutbound.exampleavailable=yes,premium=no. - Buy (only if the user explicitly says so):
Already own domains elsewhere? Skip this step.python 01-infra-setup/scripts/porkbun_domains.py buy --domains acmeoutbound.example # preview only python 01-infra-setup/scripts/porkbun_domains.py buy --domains acmeoutbound.example --confirm-purchase # costs money - Point nameservers at Zapmail (Porkbun domains):
Default nameservers:python 01-infra-setup/scripts/porkbun_domains.py set-ns --file domains.txt --dry-run python 01-infra-setup/scripts/porkbun_domains.py set-ns --file domains.txtpns61.cloudns.net pns62.cloudns.com pns63.cloudns.net pns64.cloudns.uk. Zapmail then creates MX, SPF, DKIM and DMARC for you. - Plan inboxes (local):
python 01-infra-setup/scripts/zapmail_inboxes.py plan --domains-csv domain_check.csv --senders senders.csv --per-domain 3 - Connect domains to Zapmail and wait (nameserver changes can take a while):
python 01-infra-setup/scripts/zapmail_inboxes.py connect-domains --plan inbox_plan.csv --dry-run python 01-infra-setup/scripts/zapmail_inboxes.py connect-domains --plan inbox_plan.csvNS_NOT_CHANGEDmeans the registrar change has not propagated. Re-run later. - Create Google Workspace mailboxes:
python 01-infra-setup/scripts/zapmail_inboxes.py create-mailboxes --plan inbox_plan.csv --dry-run python 01-infra-setup/scripts/zapmail_inboxes.py create-mailboxes --plan inbox_plan.csv python 01-infra-setup/scripts/zapmail_inboxes.py list --out inboxes.csv - Get them into PlusVibe:
If Zapmail rejects thepython 01-infra-setup/scripts/zapmail_inboxes.py export-plusvibe --inboxes inboxes.csv --dry-run python 01-infra-setup/scripts/zapmail_inboxes.py export-plusvibe --inboxes inboxes.csvPLUSVIBEapp value, use Zapmail's built-in PlusVibe export in the UI: https://help.zapmail.ai/en/articles/12122032-connect-your-mailboxes-to-plusvibe-everything-you-need-to-know - Confirm in PlusVibe (read only, exits 1 if any inbox is missing):
python 01-infra-setup/scripts/plusvibe_inboxes.py --inboxes inboxes.csv --out inboxes_connected.csv - Let inboxes warm up in PlusVibe before launch.
Open TODOs
- Zapmail's export endpoint documents apps like
INSTANTLYandSMARTLEADbut notPLUSVIBE. The script triesPLUSVIBE; the UI export is the fallback. - Porkbun
costis computed as price x minimum years. The dry-run preview must match or the script refuses to buy.
Handoff
inboxes_connected.csv -> 09-plusvibe-campaign (daily limit = active Google inboxes x 15) and 11-qa. Next skill to run: 02-gtm-strategy.
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.
- ab-test-setup-and-analysis by irinabuht12-oss · 6,620
- zapmail-domain-setup-public by growthenginenowoslawski · 797
- ab-test-setup by OpenClaudia · 724
- setup by Othmane-Khadri · 323
- ab-test-setup by louisblythe · 195
- ab-test-setup by manojbajaj95 · 109
- setup by himanshusaleria · 21
- oxygen-email-infra by timscheuerai · 20
Need help setting it up?
This page tells you what infra-setup 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.