skills/resend-cli/SKILL.md
Operate the Resend platform from the terminal — send emails (including React Email .tsx templates via --react-email), manage domains, contacts, broadcasts, templates, webhooks, API keys, logs, automations, and events via the `resend` CLI. Use when the user wants to run Resend commands in the shell, scripts, or CI/CD pipelines, or send/preview React Email templates. Always load this skill before running `resend` commands — it contains the non-interactive flag contract and gotchas that prevent silent failures.
npx skillsauth add resend/resend-skills resend-cliInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Before running any resend commands, check whether the CLI is installed:
resend --version
If the command is not found, install it using one of the methods below:
cURL (macOS / Linux):
curl -fsSL https://resend.com/install.sh | bash
Homebrew (macOS / Linux):
brew install resend/cli/resend
Node.js:
npm install -g resend-cli
PowerShell (Windows):
irm https://resend.com/install.ps1 | iex
After installing, verify:
resend --version
The CLI auto-detects non-TTY environments and outputs JSON — no --json flag needed.
Rules for agents:
--quiet (or -q) to suppress spinners and status messages.0 = success, 1 = error.{"error":{"message":"...","code":"..."}}
--api-key or RESEND_API_KEY env var. Never rely on interactive login.delete/rm commands require --yes in non-interactive mode.Auth resolves: --api-key flag > RESEND_API_KEY env > config file (resend login --key). Use --profile or RESEND_PROFILE for multi-profile.
| Flag | Description |
|------|-------------|
| --api-key <key> | Override API key for this invocation |
| -p, --profile <name> | Select stored profile |
| --json | Force JSON output (auto in non-TTY) |
| -q, --quiet | Suppress spinners/status (implies --json) |
| Command Group | What it does |
|--------------|-------------|
| emails | send, get, list, batch, cancel, update |
| emails receiving | list, get, attachments, forward, listen |
| domains | create, verify, update, delete, list |
| logs | list, get, open |
| api-keys | create, list, delete |
| automations | create, get, list, update, delete, stop, open, runs |
| events | create, get, list, update, delete, send, open |
| broadcasts | create, send, update, delete, list |
| contacts | create, update, delete, segments, topics |
| contact-properties | create, update, delete, list |
| segments | create, get, list, delete, contacts |
| templates | create, publish, duplicate, delete, list |
| topics | create, update, delete, list |
| webhooks | create, update, listen, delete, list |
| auth | login, logout, switch, rename, remove |
| whoami / doctor / update / open / commands | Utility commands |
Read the matching reference file for detailed flags and output shapes.
Dry-run: Only emails send and broadcasts create support --dry-run (payload validation before send/create). They print { "dryRun": true, "request": { ... } } on stdout without calling the API. There is no --dry-run on emails batch, broadcasts send, or other commands yet.
| # | Mistake | Fix |
|---|---------|-----|
| 1 | Forgetting --yes on delete commands | All delete/rm subcommands require --yes in non-interactive mode — otherwise the CLI exits with an error |
| 2 | Not saving webhook signing_secret | webhooks create shows the secret once only — it cannot be retrieved later. Capture it from command output immediately |
| 3 | Omitting --quiet in CI | Without -q, spinners and status text still go to stderr (not stdout). Use -q for JSON on stdout with no spinner noise on stderr |
| 4 | Using --scheduled-at with batch | Batch sending does not support scheduled_at — use single emails send instead |
| 5 | Expecting domains list to include DNS records | List returns summaries only — use domains get <id> for the full records[] array |
| 6 | Sending a dashboard-created broadcast via CLI | Only API-created broadcasts can be sent with broadcasts send — dashboard broadcasts must be sent from the dashboard |
| 7 | Passing --events to webhooks update expecting additive behavior | --events replaces the entire subscription list — always pass the complete set |
| 8 | Expecting logs list to include request/response bodies | List returns summary fields only — use logs get <id> for full request_body and response_body |
Send an email:
resend emails send --from "[email protected]" --to [email protected] --subject "Hello" --text "Body"
Send a React Email template (.tsx):
resend emails send --from "[email protected]" --to [email protected] --subject "Welcome" --react-email ./emails/welcome.tsx
Domain setup flow:
resend domains create --name example.com --region us-east-1
# Configure DNS records from output, then:
resend domains verify <domain-id>
resend domains get <domain-id> # check status
Create and send a broadcast:
resend broadcasts create --from "[email protected]" --subject "Update" --segment-id <id> --html "<h1>Hi</h1>" --send
CI/CD (no login needed):
RESEND_API_KEY=re_xxx resend emails send --from ... --to ... --subject ... --text ...
Check environment health:
resend doctor -q
resend skillagent-email-inbox skilldevelopment
Use when building email features, emails going to spam, high bounce rates, setting up SPF/DKIM/DMARC authentication, implementing email capture, ensuring compliance (CAN-SPAM, GDPR, CASL), handling webhooks, retry logic, making emails accessible (alt text, headings, contrast, screen readers), or deciding transactional vs marketing.
tools
Use when working with the Resend email API — sending transactional emails (single or batch), receiving inbound emails via webhooks, managing email templates, tracking delivery events, managing domains, contacts, broadcasts, webhooks, API keys, automations, events, viewing API request logs, or setting up the Resend SDK. Always use this skill when the user mentions Resend, even for simple tasks like "send an email with Resend" — the skill contains critical gotchas (idempotency keys, webhook verification, template variable syntax) that prevent common production issues.
development
Use when building HTML email templates with React components, adding a visual email editor to an application using the React Email visual editor, rendering emails to HTML, or sending emails with Resend. Covers welcome emails, password resets, notifications, order confirmations, newsletters, transactional emails, and the embeddable email editor component.
development
Use when building any system where email content triggers actions — AI agent inboxes, automated support handlers, email-to-task pipelines, or any workflow processing untrusted inbound email. Always use this skill when the user wants to receive emails and act on them programmatically, even if they don't mention "agent" — the skill contains critical security patterns (sender allowlists, content filtering, sandboxed processing) that prevent untrusted email from controlling your system.