Resend CLI Skill
by @tristanmanchester
Use this skill when the task is specifically about operating Resend from an AI agent, terminal session, or CI job via the official resend CLI: installing/aut...
clawhub install resending-emailsπ About This Skill
name: resend-cli description: "Use this skill when the task is specifically about operating Resend from an AI agent, terminal session, or CI job via the official resend CLI: installing/authenticating the CLI, sending/listing/updating/cancelling emails, batch sends, domains and DNS, webhooks and local listeners, inbound receiving, contacts, topics, segments, broadcasts, templates, API keys, profiles, or debugging Resend CLI/API failures. Trigger on mentions of Resend CLI,
resend, resend doctor, resend emails send, resend domains, resend webhooks listen, resend emails receiving, or agent-friendly terminal automation."
compatibility: "Designed for skills-compatible coding agents. Live operations require the official resend CLI plus a RESEND_API_KEY or stored profile. The bundled helper uses Python 3.10+ standard library only."
metadata:
author: OpenAI
version: "3.0.0"
cli-version: "1.4.1"
source: "https://github.com/resend/resend-cli"
last-reviewed: "2026-03-14"
Resend CLI
This skill is for agents that should operate Resend through the official CLI first, not by dropping straight to raw REST.
The goal is not just βknow the commandsβ. The goal is to make an agent:
1. choose the right Resend primitive, 2. choose the right CLI command, 3. run it in a deterministic non-interactive way, 4. detect the important CLI coverage gaps before it gets stuck, and 5. fall back to MCP/API only when the CLI genuinely does not cover the job.
Start here
Load only the files that match the task:
references/agent-operating-model.md β the default decision process for live Resend workreferences/install-auth-and-profiles.md β install methods, auth priority, profiles, config pathsreferences/subprocess-contract.md β how agents should invoke resend safely and parse outputreferences/command-selection.md β fast routing from user intent to the right command(s)references/sending-scheduling-and-batch.md β transactional sends, schedules, tags, attachments, batch limitsreferences/domains-dns-and-deliverability.md β domain creation, verification, receiving, TLS, tracking, 403/domain mismatchreferences/webhooks-and-listeners.md β webhook creation, update, signature handling, temporary local listenersreferences/inbound-receiving-and-threading.md β inbound list/get/attachments/forward/listen flowsreferences/contacts-topics-segments-and-broadcasts.md β subscription modelling, targeting, campaignsreferences/templates-and-coverage-gaps.md β template lifecycle and the important current CLI gapsreferences/diagnostics-and-fallbacks.md β debug order, CLI quirks, when to fall back to MCP/APIreferences/recipes.md β short end-to-end playbooksreferences/sources.md β first-party source manifest and refresh notesMachine-readable assets:
assets/command-catalog.json β command index with detail levels (source_inspected, readme_confirmed, tree_confirmed)assets/task-router.json β route common tasks to command sequencesassets/error-map.json β fast-fail diagnosis hintsassets/coverage-gaps.json β current CLI limitations and ambiguities that matter to agentsassets/subprocess-contract.json β deterministic invocation defaultsassets/scaffold-index.json β reusable command/file scaffoldsassets/source-manifest.json β authoritative URLs used to build this skillBundled helper:
scripts/resend_cli.py β agent wrapper for probing, routing, scaffolding, batch linting, diagnosis, and safe subprocess executionCore operating rules
1) Prefer the official CLI for live Resend work
Default order of preference:
1. Official Resend CLI for live terminal/CI/agent operations 2. Official Resend MCP server if the environment already exposes it and the CLI is unavailable 3. Official SDK when editing app code inside an existing integration 4. Raw REST only for stack-neutral examples, protocol debugging, or feature gaps
Do not choose raw REST just because it is familiar.
2) For agents, stay non-interactive by default
For bounded commands:
--json -qRESEND_API_KEY or a stored profile over typing secrets interactivelyRESEND_NO_UPDATE_NOTIFIER=1 for deterministic output3) Run doctor early when the environment is unknown
When you do not know whether the CLI is installed, authenticated, or pointed at the right account:
resend --json -q doctor
This is usually the fastest first read on:
4) Choose the primitive before the command
emails sendemails batchemails update / emails cancelbroadcasts create / broadcasts sendtemplates *domains *emails receiving * + webhooks *api-keys *contacts, contact-properties, topics, segmentswebhooks listen or emails receiving listen5) Know the current CLI gaps
This version of the skill treats these as especially important:
emails send command surface does not expose a direct --template-id/template-vars flow.domains update exposes TLS/open/click tracking, but not an explicit sending/receiving capability toggle, while inbound help text references such a toggle.webhooks listen and emails receiving listen are long-running and should be treated as NDJSON/event streams in agent mode.console.error, so wrappers must parse stderr too.6) Keep IDs and file paths
Most multi-step flows become much easier if the agent persists:
The mutation ladder
For state-changing live operations:
1. classify the task
2. confirm the command sequence
3. make any needed file assets (.html, batch JSON)
4. run with --json -q
5. verify with get, list, or a follow-up check
6. persist returned IDs and next-step context
7. only then continue to the next mutation
Bundled helper script
scripts/resend_cli.py is intentionally agent-oriented.
Commands:
probe β find the CLI, report install hints, and show environment basicscatalog β list known commands from the bundled catalogueinfo β inspect one command and its notes/gapsrecommend β route a free-text task to the best CLI sequencescaffold β print or materialise sample commands/fileslint-batch β statically validate an emails batch JSON filedoctor β explain likely causes of common CLI/API failuresrun β execute the official CLI with deterministic defaults and tolerant JSON parsingExamples:
python3 scripts/resend_cli.py probe
python3 scripts/resend_cli.py catalog --resource emails
python3 scripts/resend_cli.py info "emails send"
python3 scripts/resend_cli.py recommend "send 70 different shipment notifications"
python3 scripts/resend_cli.py scaffold batch-send --write-dir ./tmp
python3 scripts/resend_cli.py lint-batch ./tmp/batch-emails.json
python3 scripts/resend_cli.py doctor --command "emails send" --status 403 --message "1010 forbidden"
python3 scripts/resend_cli.py run -- emails list --limit 5
Response shape this skill should produce
A strong answer usually includes:
1. the exact Resend primitive, 2. the exact CLI command or command sequence, 3. any file scaffolding the user needs, 4. the operational caveats that matter here, 5. the verification step, 6. the fallback path if the CLI does not currently cover the flow.
Example prompts this skill should handle
emails send, emails batch, or broadcasts create?βeu-west-1βresend output safely?β