CtrlK
BlogDocsLog inGet started
Tessl Logo

email-drafter

Use this skill when the user wants to draft, improve, or respond to emails — cold outreach, follow-ups, escalations, team announcements, or any professional communication.

67

Quality

80%

Does it follow best practices?

Run evals on this skill

Adds up to 20 points to the overall score

View guide

SecuritybySnyk

Passed

No findings from the security scan

SKILL.md
Quality
Evals
Security

Email Drafter

Overview

Draft professional emails across any context and tone. Provides subject line variants, adjusts formality level, and adapts to the recipient relationship.

Draft Email

import anthropic

client = anthropic.Anthropic()

def draft_email(
    purpose: str,
    recipient: str,
    context: str,
    tone: str = "professional",  # professional, casual, formal, urgent
    length: str = "medium",  # short (3 sentences), medium (2 paragraphs), long (full)
    include_variants: int = 1,
) -> dict:
    system = f"""You are an expert email writer. Write emails that are {tone} in tone.
    Length: {length} ({{"short": "2-3 sentences", "medium": "2-3 paragraphs", "long": "full email"}}.get(length, "2-3 paragraphs")).
    Always provide a subject line. Be direct and get to the point in the first sentence."""

    response = client.messages.create(
        model="claude-opus-4-6",
        max_tokens=1024,
        system=system,
        messages=[{
            "role": "user",
            "content": f"""Write an email for this situation:

Purpose: {purpose}
Recipient: {recipient}
Context: {context}

Provide:
1. Subject: [subject line]
2. Body: [email body]
{"3. Alternative subject lines: [3 variants]" if include_variants else ""}"""
        }],
    )
    return {"draft": response.content[0].text}

Email Types with Templates

EMAIL_CONTEXTS = {
    "cold-outreach": "First contact — establish credibility quickly, lead with value, single CTA",
    "follow-up": "Following up after no response — add value, don't just check in",
    "escalation": "Escalating an unresolved issue — factual, specific timeline, clear ask",
    "announcement": "Team/company announcement — clear, positive, what changes for the reader",
    "apology": "Apologizing for an error — own it, specific, next steps to prevent recurrence",
    "rejection": "Declining a request/candidate — kind, brief, no false hope",
    "introduction": "Introducing yourself or two parties — why this matters to the reader",
    "request": "Asking for something — what you need, why, when, how much work for them",
}

def draft_by_type(email_type: str, **kwargs) -> dict:
    context = EMAIL_CONTEXTS.get(email_type, "professional email")
    return draft_email(
        purpose=f"{email_type}: {context}",
        **kwargs
    )

Improve Existing Email

def improve_email(existing_email: str, improvement_goal: str) -> str:
    response = client.messages.create(
        model="claude-opus-4-6",
        max_tokens=1024,
        system="Improve emails for clarity, impact, and professionalism. Keep the sender's voice.",
        messages=[{
            "role": "user",
            "content": f"""Improve this email. Goal: {improvement_goal}

Email:
{existing_email}

Show the improved version with a brief note on what you changed and why."""
        }],
    )
    return response.content[0].text

Quick Reference

Email TypeKey Principle
Cold outreachValue first, ask last
Follow-upAdd new information, don't just ping
EscalationTimeline + specific ask
RejectionKind, brief, no door left open
ApologyOwn it, fix it, prevent it
Repository
ProwlrBot/prowlr-marketplace
Last updated
First committed

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.