Install
openclaw skills install @philipposk/shipyard-emailSet up email on your own domain and send app emails: receive at any @yourdomain address in Gmail (ImprovMX catch-all), reply from it in Gmail (Send mail as through Resend SMTP), SPF, DKIM and DMARC so mail is not junked, DNS steps for Papaki, Cloudflare or any registrar, a deliverability test, and short owner emails such as " is live" with the app as sender. Use for "email on my domain", "hello@ address", "ImprovMX", "forward to Gmail", "send mail as", "SPF", "DKIM", "DMARC", "emails go to spam", "Papaki DNS", "notify me when deployed", "is live email", or "/shipyard:email".
openclaw skills install @philipposk/shipyard-emailPart of the Shipyard plugin. This skill runs Shipyard's own scripts and key guard, so it does not work on its own. If it was installed by itself (for example through skills.sh, ClawHub, Hermes, pi or aiden) and Shipyard's
scripts/folder is not on this computer, stop and install the full plugin first by following https://github.com/philipposk/shipyard/blob/main/INSTALL.md, then start again.
You give the student working email on their own domain: people can write to hello@<domain>, the student reads and replies from Gmail, and the app (or Shipyard) sends short emails that land in the inbox, not junk. You run every check. The student only does what a human must: paste DNS records at the registrar, click through ImprovMX and Gmail settings, and make a Google app password.
~/.shipyard/secrets.env or .env* files. SMTP passwords (Resend API keys) are pasted by the student straight into Gmail, never anywhere else.send.<domain> made by another service). Report what you see; change it only if the student asks and something is actually broken.--json and --help.Ask for the domain, then run node "${CLAUDE_PLUGIN_ROOT}/scripts/email-check.mjs" <domain>. It reads the public DNS (no keys) and prints ticks and crosses for receiving (MX), SPF, DMARC and the Resend sending records, each with the exact record to add. Use it to recommend the first step that is not done.
Rule (mandatory): Gmail "Send mail as" goes through Resend SMTP. If the student sends as their own domain from Gmail, the SMTP server must be smtp.resend.com (port 587 TLS or 465 SSL, username resend, password a Resend sending-only API key), with the domain verified in Resend. smtp.gmail.com keeps a gmail.com envelope and Google's DKIM, so DMARC fails (measured on 6x7.gr: 5.7/10 on mail-tester, versus 10/10 through Resend SMTP); adding _spf.google.com to SPF does not fix it, though it is harmless. Ask "Do you send from Gmail as this address?" and, if yes, run the check with --gmail-send-as, then have them send a test to mail-tester.com and reach 9/10 or better. Keep exactly ONE v=spf1 TXT line and merge includes into it. Never write a real key into chat, a doc or the repo.
"What do you want to do?" Read the matching reference, then follow it:
references/email-domain.md (sections 1 and 2)references/email-domain.md (section 3)references/email-domain.md (sections 4 and 5)references/notify.md/shipyard:launch (references/domain-email.md there); come back here for receiving and Gmail.All in ${CLAUDE_PLUGIN_ROOT}/scripts/, run with node:
email-check.mjs <domain> [--send-subdomain send] [--gmail-send-as] checks MX, SPF, DMARC and Resend DKIM/return path; with --gmail-send-as it checks the domain is verified in Resend and prints the Resend SMTP settings for Gmail. Exit 0 when receiving, SPF and DMARC are right.notify.mjs <app> --url <url> [--dry-run] sends the student one email through Resend with the app's name as sender and a "why you got this" first line. Always run --dry-run first and show the result.launch-email.mjs (from launch) sets up the Resend sending domain.Write what was set up in HANDOFF.md: domain, registrar, forwarding service and aliases, which Gmail account receives, whether "Send mail as" is set up and through which SMTP server, the DMARC policy and the date to tighten it.