CtrlK
BlogDocsLog inGet started
Tessl Logo

agent-email-inbox

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.

62

Quality

78%

Does it follow best practices?

Run evals on this skill

Adds up to 20 points to the overall score

View guide
SecuritybySnyk

Low

Low-risk findings worth noting

Fix and improve this skill with Tessl

tessl review fix ./skills/agent-email-inbox/SKILL.md
SKILL.md
Quality
Evals
Security

Quality

Content

71%Weight 40%Scale 1-5

Reviews the quality of instructions and guidance provided to agents. Good implementation is clear, handles edge cases, and produces reliable results.

A well-engineered skill body: executable webhook code with signature verification baked in, a clearly sequenced setup workflow with security-first ordering, and exemplary progressive disclosure to three real, well-signaled reference files. The main drag is token efficiency — an explanatory rationale section, repeated boilerplate warnings, and an aging SDK version table add tokens without adding guidance for Claude.

Suggestions

Delete or compress the 'Why Webhook-Based Receiving?' section — Claude already understands webhooks vs polling, and the six bullets are justification, not instruction; the same applies to consolidating the triple-repeated 'install the resend skill' note into Related Skills.

Move the per-language SDK minimum-version table into a reference file or trim it to the user's actual language, since pinned version numbers are time-sensitive and will age; a single 'install latest, requires webhooks.verify() and emails.receiving.get()' statement covers the intent.

Define or de-reference the undefined helpers — `isAllowedToReply()` and the `EmailReceivedEvent`/`EmailContent` types are used in body code without definition, so either inline them, point to the reference that defines them, or remove them from the examples.

DimensionReasoningScore

Conciseness

The body is dense with tables and executable code, but includes padding Claude doesn't need: the 'Why Webhook-Based Receiving?' section justifying webhooks vs polling ('Real-time responsiveness', 'No polling overhead', 'Event-driven architecture'), the admonition to 'Install the `resend` skill' repeated three times, and 'The webhook endpoint MUST be a POST route' stated twice. The 8-language SDK minimum-version table is also time-sensitive content that will age. Not a 2 because most sections are tight and information-bearing; not a 4 because multiple sections could be trimmed without losing guidance.

3 / 5

Actionability

Mostly copy-paste-ready guidance: complete Next.js and Express webhook routes with svix signature verification, a working allowlist implementation, a reply-sending function, exact MX record settings, test addresses, and a curl-based verification checklist. Falls short of 5 due to minor gaps — `isAllowedToReply()` and `notifyOwnerOfRejectedEmail()` are called but never defined in the body, and the `EmailReceivedEvent`/`EmailContent` types are introduced without import or definition.

4 / 5

Workflow Clarity

The 7-step Quick Start establishes a clear order (ask for email address → choose security level → domain → webhook → tunneling → registration → agent connection), the 'choose security level BEFORE the webhook endpoint' dependency is stated emphatically, and the Testing section provides a 4-item verification checklist. Not a 5 because there is no error-recovery feedback loop — the checklist verifies but doesn't say what to do when a check fails, and the DNS 48-hour propagation note lacks a re-check step.

4 / 5

Progressive Disclosure

Clean one-level-deep structure: all three referenced files (security-levels.md, webhook-setup.md, advanced-patterns.md) exist and are linked at the exact points they're needed (tunneling/registration after the endpoint code, per-level implementations after the level table, rate limiting in Common Mistakes). The split is appropriate — only Level 1's code is inline while levels 2–5, webhook registration, and rate limiting live in references. Not lower because nothing in the body obviously belongs in a separate file and no nested references exist.

5 / 5

Total

16

/

20

Passed

Description

78%Weight 40%Scale 1-5

Based on the skill's description, can an agent find and select it at the right time? Clear, specific descriptions lead to better discovery.

A strong description with best-practice trigger design: explicit 'Use when' clauses, natural user phrasings, a deliberate catch for users who don't say 'agent', and a distinct inbound-email niche. Its main limitation is that the 'what' — the concrete capabilities the skill provides — is implied through trigger scenarios and a security-patterns parenthetical rather than stated directly.

DimensionReasoningScore

Specificity

Names concrete system types ('AI agent inboxes, automated support handlers, email-to-task pipelines') and specific security mechanisms ('sender allowlists, content filtering, sandboxed processing'). Falls short of 5 because it never states the skill's direct actions (e.g., setting up receiving domains, webhook endpoints, validation) — the 'what' is conveyed indirectly through trigger scenarios.

4 / 5

Completeness

The 'when' is explicit and concrete ('Use when building any system where email content triggers actions', 'Always use this skill when the user wants to receive emails and act on them programmatically'), and the security-patterns clause conveys much of the 'what'. Not a 5 because the core capability statement is woven into trigger conditions rather than clearly and separately stated — a reader must infer that the skill sets up a secure inbound email pipeline.

4 / 5

Trigger Term Quality

Good natural-phrase coverage: 'receive emails and act on them programmatically', 'email-to-task pipelines', 'automated support handlers', plus the explicit catch 'even if they don't mention "agent"'. A few natural variations are missing (e.g., 'email automation', 'reply to emails', 'parse inbound email'), keeping it below the comprehensive synonym coverage of a 5.

4 / 5

Distinctiveness Conflict Risk

It carves out a clear niche — processing untrusted inbound email that drives agent actions — that is distinct from generic email-sending skills, and the trigger conditions ('receive', 'inbound', 'act on them') won't fire for plain send-email requests. Minimal conflict risk with a companion sending skill since the trigger is scoped to receiving and acting.

5 / 5

Total

17

/

20

Passed

Validation

87%

Checks the skill against the spec for correct structure and formatting. All validation checks must pass before discovery and implementation can be scored.

Validation — 14 / 16 Passed

Validation for skill structure

CriteriaDescriptionResult

metadata_field

'metadata' should map string keys to string values

Warning

frontmatter_unknown_keys

Unknown frontmatter key(s) found; consider removing or moving to metadata

Warning

Total

14

/

16

Passed

Repository
resend/resend-skills
Reviewed

Table of Contents

Is this your skill?

If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.