Install
openclaw skills install flashrev-mailerUse this skill when an AI agent needs to prepare, personalize, validate, queue, send, monitor, or export FlashRev-powered email outreach campaigns through the flashrev-mailer npm CLI. Triggers on requests involving cold email, outreach campaigns, bulk personalized email, mail merge, sales drip sequences, or sender mailbox pools. Credentials never persist to disk or logs; live sends require per-batch human approval.
openclaw skills install flashrev-mailerUse the flashrev-mailer CLI to run personalized email campaigns with FlashRev mailbox pools, recipient validation, throttled scheduling, and detailed send logs.
This skill handles outbound email and authentication material. The following constraints are non-negotiable and apply to every workflow below:
FLASHREV_API_KEY or the name set via flashrev.apiKeyEnv). It is never written to .flashrev/config.json, campaign exports, send logs, or chat output.mailboxId, used by a nodemailer transporter, and released when the send pool closes. They are never persisted to disk, never echoed to logs, and never included in export output.--dry-run --yes first, show rendered drafts to the user, and only proceed with --live --yes after the user approves drafts, sender pool, schedule, and recipient set. The agent never auto-escalates batch size.--limit. --send-future (which would bypass scheduling) is forbidden.risky / catch-all / accept-all / unknown are treated as undeliverable unless the user explicitly overrides.These items must be set up by the human operator. The agent's role is to verify each one and guide the user to fix anything missing — never attempt to install software, generate API keys, or modify the user's shell environment unattended.
PATH.npm install -g flashrev-ai-mailer. Verify with flashrev-mailer --help.export FLASHREV_API_KEY="...", optionally appended to ~/.zshrc or ~/.bashrc for persistence). To use a different variable name, set flashrev.apiKeyEnv in .flashrev/config.json — but the key value itself must always stay in the environment, never inside any config file (see Safety rules).flashrev-mailer init --base-url "<url>" after the user confirms the URL; this writes .flashrev/config.json. To overwrite an existing config, append --force.smtp.gmail.com:465). Sending dials SMTP directly via nodemailer.Run flashrev-mailer doctor (or flashrev-mailer doctor --check-api for a live probe) before any campaign step. If a check fails, stop the workflow, tell the user exactly which prerequisite is missing with the command or link to fix it, and wait — do not proceed to import / queue / send until the user reports it resolved.
Each item below is a business decision the agent must explicitly align with the user before proceeding — do not assume defaults.
Prerequisites must be satisfied first (see above). All commands assume CAMPAIGN_ID is lowercase-kebab-case (e.g. launch-001); the CLI will slugify other forms internally, but mixing styles between commands causes lookups to fail. Pick one ID per campaign and reuse it verbatim.
flashrev-mailer mailboxes lists FlashRev-provisioned sender mailboxes. Confirm at least one usable mailbox exists and align with the user on which sender identity will run this campaign. If the list is empty, stop and ask the user to provision mailboxes in FlashRev before continuing.flashrev-mailer import --campaign CAMPAIGN_ID --source contacts.csv
Report the "Email syntax invalid" count back to the user. If non-zero, ask whether to clean the source CSV before continuing.flashrev-mailer validate --campaign CAMPAIGN_ID --limit 200
For lists over 200 contacts, run validate in batches and report progress between batches; this also avoids exhausting the FlashRev verification quota in a single call.flashrev-mailer draft --campaign CAMPAIGN_ID --subject-template "..." --body-template "..."flashrev-mailer queue --campaign CAMPAIGN_ID --require-validation --timezone Etc/GMT+5 --window 09:00-17:00 --min-interval 10flashrev-mailer send --campaign CAMPAIGN_ID --limit 5 --dry-run --yes
Always set --limit explicitly (the CLI default is 25). Show a few rendered drafts to the user; have them confirm subject and body wording before any live send.flashrev-mailer send --campaign CAMPAIGN_ID --limit 10 --live --yes
Re-confirm with the user between batches before raising --limit. Never send the entire queue in one call.flashrev-mailer status --campaign CAMPAIGN_ID
flashrev-mailer export --campaign CAMPAIGN_ID --format csv --out results.csv{{first_name}}, {{company}}, and {{focus}}.{{field|fallback}} when a field may be blank..flashrev/config.json (or any other on-disk config) even when the user asks for "convenience" — config files persist on disk, sync to cloud drives, and can leak into git history. If a different variable name is needed, set flashrev.apiKeyEnv (the variable name, not the value).--require-validation unless the user explicitly opts out.--limit to send; never let the implicit default (25) decide batch size. Live sends should start small (≤ 10) and scale up only with re-confirmation.--send-future to send. It bypasses the scheduled time and the working-hour window, which defeats throttling and could trigger spam-trap responses from upstream SMTP providers.--dry-run --yes before live sending.--live --yes only after the user approves final drafts, schedule, sender pool, and recipient set.The default endpoints in src/config.js reflect FlashRev's confirmed contract: mailbox listing, recipient verification, and SMTP credential retrieval. Sending uses the SMTP credentials returned by FlashRev to dial the upstream SMTP server (e.g. smtp.gmail.com:465) directly via nodemailer; FlashRev does not expose a generic send endpoint. For request/response shapes, see references/api_contract.md.