Source profileQuality 86/100

MoizIbnYousaf/marketing-cli/skills/agent-email-inbox/SKILL.md

agent-email-inbox

Use when setting up a secure email inbox for any AI agent — configuring inbound email via Resend, webhooks, tunneling for local development, and implementing security measures to prevent prompt injection attacks. Also use when someone mentions 'agent email', 'bot inbox', 'receive emails for agent', 'agent webhook', 'email security for AI', 'prompt injection via email', 'inbound email for bot', or wants their AI agent to receive and respond to emails securely.

Source repository stars
27
Declared platforms
0
Static risk flags
0
Last source update
2026-07-28
Source checked
2026-07-28

Decision brief

What it does—and where it fits

Set up a secure email inbox that lets an AI agent receive and respond to emails, with protection against prompt injection and email-based attacks.

Best for

  • Use when setting up a secure email inbox for any AI agent — configuring inbound email via Resend, webhooks, tunneling for local development, and implementing security measures to prevent prompt injection attacks.

Not for

  • Tasks that require unconfirmed production actions or broad system permissions.
  • Environments where the pinned source and install steps cannot be inspected.

Compatibility matrix

Platform support, with evidence labels

PlatformStatusEvidenceWhat to check
CodexNot declaredNo explicit evidencePortability before use
Claude CodeNot declaredNo explicit evidencePortability before use
CursorNot declaredNo explicit evidencePortability before use
Gemini CLINot declaredNo explicit evidencePortability before use
Open the compatibility checker

Installation

Inspect first. Install second.

The source command is displayed only when detected. A safe inspection prompt is always available so your agent can explain every action before execution.

Source-detected install commandSource
npx skills add https://github.com/MoizIbnYousaf/marketing-cli --skill "skills/agent-email-inbox"
Safe inspection promptEditorial

Inspect the Agent Skill "agent-email-inbox" from https://github.com/MoizIbnYousaf/marketing-cli/blob/f12fbcbe4929584697b309b9096c9427b0cfce8e/skills/agent-email-inbox/SKILL.md at commit f12fbcbe4929584697b309b9096c9427b0cfce8e. List every install step, command, network request, credential, file read/write, external action, and rollback step. Explain whether it fits my task. Do not install or execute anything until I approve.

Workflow

What the source asks the agent to do

  1. 01

    Before You Start: Account & API Key Setup

    Ask the user: - New account just for the agent? → Simpler setup, full account access is fine - Existing account with other projects? → Use domain-scoped API keys to limit what the agent can access. Even if the key leaks, it can only send from one domain.

    New account just for the agent? → Simpler setup, full account access is fineExisting account with other projects? → Use domain-scoped API keys to limit what the agent can access. Even if the key leaks, it can only send from one domain.Ask the user: - New account just for the agent? → Simpler setup, full account access is fine - Existing account with other projects? → Use domain-scoped API keys to limit what the agent can access. Even if the key leaks…
  2. 02

    Domain Setup

    Use your auto-generated address: @.resend.app. No DNS configuration needed.

    Use your auto-generated address: @.resend.app. No DNS configuration needed.The user enables receiving in the Resend dashboard, then adds an MX record:Use a subdomain (e.g., agent.yourdomain.com) to avoid disrupting existing email services on your root domain — otherwise all email routes to Resend.
  3. 03

    Option 1: Resend-Managed Domain (Recommended for Getting Started)

    Use your auto-generated address: @.resend.app. No DNS configuration needed.

    Use your auto-generated address: @.resend.app. No DNS configuration needed.
  4. 04

    Webhook Setup

    The user registers a webhook in Resend dashboard (Webhooks → Add Webhook → select email.received). They need the endpoint URL you'll create and the signing secret for verification.

    The user registers a webhook in Resend dashboard (Webhooks → Add Webhook → select email.received). They need the endpoint URL you'll create and the signing secret for verification.Resend retries failed deliveries with exponential backoff over 6 hours. Emails are stored even if webhooks fail.
  5. 05

    Cloudflare named tunnel (free but more setup)

    cloudflared tunnel run my-agent-webhook typescript async function processWithAgent(email: ProcessedEmail) { const message = New Email\nFrom: ${email.from}\nSubject: ${email.subject}\n\n${email.body}.trim(); await sendToAgent(message); } bash RESENDAPIKEY=rexxxxxxxxx RESENDWEBHOO…

    delivered@resend.dev — simulates successful deliverybounced@resend.dev — simulates hard bounceSend from non-allowlisted addresses to verify rejection works

Permission review

Static risk signals and limitations

No configured static risk pattern was detected

This is not proof of safety. Runtime behavior, indirect dependencies, and hidden external systems are outside the static scan.

Evidence record

Why each signal appears

EvidenceSourceComputedTestedEditorial
SignalValueEvidence typeMeaning
Quality score86/100ComputedDocumentation, specificity, maintenance, and trust rules
Repository stars27SourceRepository attention, not individual Skill quality
Compatibility0 platformsSourceDeclared in the catalog source record
Usage guideautomated source guideEditorialGenerated or reviewed according to the visible evidence level

Pinned source

Provenance and original SKILL.md

Repository
MoizIbnYousaf/marketing-cli
Skill path
skills/agent-email-inbox/SKILL.md
Commit
f12fbcbe4929584697b309b9096c9427b0cfce8e
License
MIT
Collected
2026-07-28
Default branch
main
View the original SKILL.md

AI Agent Email Inbox

Set up a secure email inbox that lets an AI agent receive and respond to emails, with protection against prompt injection and email-based attacks.

Core principle: An AI agent's inbox is a potential attack vector. Malicious actors can email instructions that the agent might blindly follow. Security configuration is not optional — it's the first thing you implement, not the last.

This skill is context-independent — it does not use brand/ files and works identically in any project.

On Activation

  1. Ask the user which agent needs an email inbox and what framework they're using (Next.js, Express, etc.).
  2. Determine environment: local development or production deployment.
  3. Walk through domain setup (Resend-managed or custom).
  4. Set up webhook endpoint with signature verification.
  5. If local dev: configure tunneling.
  6. Implement security level — read references/security-levels.md and present options to the user.
  7. Connect webhook to agent processing.

Output: A configured webhook handler file, environment variable checklist, and security configuration.

Architecture

Sender → Email → Resend (MX) → Webhook → Your Server → AI Agent
                                              ↓
                                    Security Validation
                                              ↓
                                    Process or Reject

Before You Start: Account & API Key Setup

Ask the user:

  • New account just for the agent? → Simpler setup, full account access is fine
  • Existing account with other projects? → Use domain-scoped API keys to limit what the agent can access. Even if the key leaks, it can only send from one domain.

Don't paste API keys in chat! They'll persist in conversation history. Have the user write directly to .env or use a secrets manager.

Domain Setup

Option 1: Resend-Managed Domain (Recommended for Getting Started)

Use your auto-generated address: <anything>@<your-id>.resend.app. No DNS configuration needed.

Option 2: Custom Domain

The user enables receiving in the Resend dashboard, then adds an MX record:

SettingValue
TypeMX
HostYour domain or subdomain (e.g., agent.yourdomain.com)
ValueProvided in Resend dashboard
Priority10 (lowest number takes precedence)

Use a subdomain (e.g., agent.yourdomain.com) to avoid disrupting existing email services on your root domain — otherwise all email routes to Resend.

Webhook Setup

The user registers a webhook in Resend dashboard (Webhooks → Add Webhook → select email.received). They need the endpoint URL you'll create and the signing secret for verification.

// app/api/webhooks/email/route.ts (Next.js App Router)
import { Resend } from 'resend';
import { NextRequest, NextResponse } from 'next/server';

const resend = new Resend(process.env.RESEND_API_KEY);

export async function POST(req: NextRequest) {
  try {
    const payload = await req.text();

    const event = resend.webhooks.verify({
      payload,
      headers: {
        'svix-id': req.headers.get('svix-id'),
        'svix-timestamp': req.headers.get('svix-timestamp'),
        'svix-signature': req.headers.get('svix-signature'),
      },
      secret: process.env.RESEND_WEBHOOK_SECRET,
    });

    if (event.type === 'email.received') {
      const { data: email } = await resend.emails.receiving.get(
        event.data.email_id
      );
      // Security validation happens here (see Security Levels)
      await processEmailForAgent(event.data, email);
    }

    return new NextResponse('OK', { status: 200 });
  } catch (error) {
    console.error('Webhook error:', error);
    return new NextResponse('Error', { status: 400 });
  }
}

Resend retries failed deliveries with exponential backoff over ~6 hours. Emails are stored even if webhooks fail.

Local Development with Tunneling

Your local server isn't accessible from the internet. Use tunneling to expose it:

OptionPersistent URL?Cost
ngrok (paid)Yes (static subdomain)$8/mo
Cloudflare named tunnelYes (your own domain)Free
ngrok (free)No (changes on restart)Free
VS Code Port ForwardingNo (changes per session)Free

For webhooks, persistent URLs matter — otherwise you re-register the URL every time the tunnel restarts. See the tunneling docs for each tool for setup instructions.

# ngrok (paid - recommended for persistent dev)
ngrok http --domain=myagent.ngrok.io 3000

# Cloudflare named tunnel (free but more setup)
cloudflared tunnel run my-agent-webhook

Production Deployment

For a reliable agent inbox, deploy to production rather than relying on tunnels:

  • Serverless (Vercel, Netlify, Cloudflare Workers) — zero server management, automatic HTTPS
  • VPS/cloud — webhook handler runs alongside your agent, use nginx/caddy for HTTPS
  • Existing infrastructure — add webhook route to your agent's existing web server

Security Levels

This is the most critical part of the setup. An AI agent that processes emails without security is dangerous.

There are 5 graduated security levels. Read references/security-levels.md for complete code examples and implementation details. Present the options to the user and help them choose:

LevelApproachBest For
1. Strict AllowlistOnly process emails from approved addressesPersonal assistant agents
2. Domain AllowlistAllow any address at approved domainsTeam/org internal agents
3. Content FilteringAccept from anyone, filter injection patternsCustomer support agents
4. Sandboxed ProcessingAccept all, restrict agent capabilitiesPublic-facing agents
5. Human-in-the-LoopRequire human approval for untrusted sendersHigh-stakes agents

Levels can be combined (e.g., Domain Allowlist + Content Filtering).

Security Best Practices

PracticeWhy
Verify webhook signaturesSpoofed events let attackers control your agent
Log all rejected emailsAudit trail reveals attack patterns
Use allowlists where possibleExplicit trust is safer than trying to filter bad input
Rate limit email processingA flood of emails can overwhelm your agent or exhaust API quotas
Separate trusted/untrusted handlingDifferent risk levels need different agent capabilities

What to Avoid

Anti-PatternRisk
Processing emails without validationAnyone can control your agent by sending an email
Trusting email headers for authentication"From:" headers are trivially spoofed — use webhook verification instead
Executing code from email contentRemote code execution — the most dangerous vulnerability
Storing email content in prompts verbatimPrompt injection attacks bypass your security layer entirely
Giving untrusted emails full agent accessOne malicious email could compromise your entire system

Agent Integration

Connect your webhook to your AI agent:

async function processWithAgent(email: ProcessedEmail) {
  const message = `New Email\nFrom: ${email.from}\nSubject: ${email.subject}\n\n${email.body}`.trim();
  await sendToAgent(message);
}

Alternatively, the agent can poll the Resend API during heartbeats instead of using webhooks — simpler architecture but less immediate.

Complete Example

See references/security-levels.md for the complete secure agent inbox implementation with configurable security levels, rate limiting, content truncation, and rejection logging.

Environment Variables

RESEND_API_KEY=re_xxxxxxxxx
RESEND_WEBHOOK_SECRET=whsec_xxxxxxxxx
SECURITY_LEVEL=strict                    # strict | domain | filtered | sandboxed
ALLOWED_SENDERS=you@example.com,trusted@example.com
ALLOWED_DOMAINS=yourcompany.com
OWNER_EMAIL=you@example.com             # For security notifications

Common Mistakes

MistakeWhy It's a ProblemFix
No sender verificationAnyone can control your agentImplement a security level (start with Level 1)
Trusting email headersHeaders are trivially spoofedRely on webhook signature verification only
Same treatment for all emailsTrusted and untrusted senders have different risk profilesUse capability-based access control
Using ephemeral tunnel URLsURL changes on restart, breaking webhook deliveryUse paid ngrok or Cloudflare named tunnels
No rate limitingFlooding attacks can overwhelm the agentImplement per-sender rate limits
Processing HTML directlyHTML can contain hidden injection contentStrip to plain text before processing

Testing

  • delivered@resend.dev — simulates successful delivery
  • bounced@resend.dev — simulates hard bounce
  • Send from non-allowlisted addresses to verify rejection works

Related Skills

  • send-email — sending emails from your agent
  • resend-inbound — detailed inbound email processing (domain setup, content retrieval, attachments)

Alternatives

Compare before choosing