Skip to content
recoup-platform-email-helper logo

Sending email from a task

recoup-platform-email-helper

Send an email via the Recoup API the reliable way — a Node helper that serializes the body correctly and fails loudly instead of sending an empty email. Use whenever a task needs to email a report/summary/notification to the account owner or a recipient. ALWAYS use this script to send email; never hand-build `curl … -d "{…}"` with inline `jq`/shell interpolation (that silently produces empty "Message from Recoup" footer-only emails). Pairs with recoup-platform-api-access (which it sends through).

recoupable/skills4.5Kinstalls5stars

SKILL.md

Full skill instructions

Sending email from a task

Send email by running the bundled Node script — do not assemble JSON in the shell.

Why this exists

Hand-rolling the send (curl -sS … -d "{… \"html\": $(echo "$HTML" | jq -R -s '.') …}") is fragile: depending on quoting/​escaping it produces a malformed body, and the API used to silently deliver an empty footer-only email titled "Message from Recoup" with success:true. The model gets this wrong stochastically. This script removes shell serialization entirely.

How to send

  1. Write the email body to a file (recommended for HTML — avoids all escaping issues):

    cat > /​tmp/​report.html <<'HTML'
    <h1>Daily Report</​h1>
    <p>…your real content…</​p>
    HTML
    
  2. Send it:

    node "$SKILL_DIR/​scripts/​send-email.mjs" \
      --subject "Daily Report — $(date '+%B %d, %Y')" \
      --html-file /​tmp/​report.html \
      --to [email protected]
    

$SKILL_DIR is this skill's install directory (~/​.agents/​skills/​recoup-platform-email-helper); use the absolute path to scripts/​send-email.mjs.

Flags

FlagMeaning
--subject <s>Subject line (optional — the API derives one from the body if omitted).
--html-file <path> / --html <s>HTML body. Prefer --html-file.
--text-file <path> / --text <s>Plain-text body.
--to <email>Recipient (repeatable). Omit to default to the account's own email ("email me this").
--cc <email>CC (repeatable).
--chat-id <id>Room id for the footer "continue the conversation" link.
--dry-runSerialize + validate and print the payload; do not send. Use to preview.

Rules

  • Exactly one body is required. The script refuses to send (exit code 2) if there is no non-empty --html/--text. Never try to send an empty email.
  • Check the exit code. Non-zero means it did not send — read stderr and fix it; do not report success. The script prints the Resend message id on a real send.
  • The script reads RECOUP_API_KEY / RECOUP_ACCESS_TOKEN and RECOUP_API_BASE from the environment — these are already set in the sandbox. Never print or hard-code them.
  • Node only (the sandbox runtime is node22; python3 is not guaranteed). Zero dependencies.

More skills from recoupable

See who's on your roster — answers "what artists do I have" by walking the workspace and falling back to your live account when the filesystem is empty. Use for "what artists do I have", "list my roster", "who's on my roster", or "what's in this sandbox". To add a new artist use recoup-roster-add-artist; to work inside one artist's files use recoup-roster-manage-artist.

5 4.3K
View

Popular AI tools

Kaiber logo
Video

Kaiber

Generate, edit, and beat-sync AI video with leading models in one workspace.

Paid
View
Vimcal logo
Productivity

Vimcal

The world's fastest calendar for remote work

Free
View

Transform Your Design with AI Designer by ImgCreator.ai

Freemium
View
Akool AI logo
Content & writing

Akool AI

Revolutionizing Video Production with AI-Powered Creativity

Paid
View

Extend an image past the frame and let AI fill the new aspect ratio.

Freemium
View
StarByFace logo
Security

StarByFace

Discover your celebrity doppelgänger with StarByFace!

Free
View
C

ChainClarity explains 700+ crypto whitepapers in plain English, with layered summaries, comparisons, research tools, alerts, and a $4.99 Pro plan.

Freemium
View
Opus Clip logo
Coding & apps

Opus Clip

Opus.ai: Revolutionize Your Web Experience

Free
View