agentsclimarketplace

Business email drafter

Skill nicholashidalgo/claude-skillforge/writing/business-email-drafter

Install
npx -y skills add nicholashidalgo/claude-skillforge --skill business-email-drafter

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

One thing to look at

  • 1 stars1 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.

What its author says it does

Copied from the file, not written here

Writes clear, direct professional emails. Removes sycophancy, filler, and AI tells.

SKILL.md

4.1 KB, as published. Nobody here has run it

email-writer

Purpose: Convert a brief or messy email draft into a direct, natural-sounding professional email free of AI tells.

Input Schema

FieldTypeRequiredNotes
subject_linestringyesProposed subject or topic
intentstringyesWhat the email needs to accomplish
key_factsstring[]yesFacts, names, dates that must be preserved
tonestringyesOne of: direct, formal, concise, warm-professional
raw_draftstringnoRough draft to clean up
{
  "subject_line": "API deprecation timeline",
  "intent": "Notify the payments team that v1 API endpoints are deprecated and cutover is required by March 31.",
  "key_facts": ["March 31 deadline", "v1 API", "payments team", "docs at /api/migration"],
  "tone": "direct",
  "raw_draft": "I hope this email finds you well! I wanted to reach out and touch base regarding the important and crucial matter of our API deprecation timeline going forward."
}

Output Schema

{
  "subject": "v1 API deprecation - cutover required by March 31",
  "body": "The v1 API endpoints will be shut off March 31. If your team is still using them, migrate before then - the guide is at /api/migration. Reply here or ping me in Slack if you hit anything unexpected.",
  "patterns_removed": [7, 19, 22],
  "word_count": 52
}

Prompt Flow

Pass 1: Apply core email rewrite. Remove: chatbot openers (P19), sycophancy (P21), em dashes (P13), AI vocab (P7), filler (P22), negative parallelisms (P9), excessive hedging (P23), copula avoidance (P8). Preserve key_facts.

Pass 2 Audit: "What makes this email so obviously AI-generated?" - list remaining tells.

Pass 2 Final: Rewrite removing remaining tells. Keep under 150 words unless facts require more.

Examples

Short - API notification

Before: "I hope this email finds you well! I wanted to reach out regarding the crucial API deprecation timeline, which stands as a pivotal moment in our infrastructure evolution." After: "The v1 API endpoints shut down March 31. Migrate before then - guide at /api/migration."

Medium - Status update

Before: "Just wanted to circle back and provide an update. At this point in time, we have completed the initial phase of the project." After: "Quick status: phase 1 is done. Phase 2 (auth integration) starts Monday. We're on track for the April 15 launch."

Long - Escalation with context

Before: "Great question regarding the outage. Additionally, industry observers have noted that distributed systems face challenges typical of complex environments. The future looks bright." After: "The March 14 outage (9:41-11:23 PM PT) was a misconfigured load balancer after the 11 PM deploy. 4,300 requests timed out. Fix: config rollback. Post-mortem at [link]. I've added a deploy checklist item to catch this going forward."

Unit Tests

# tests/skills/test_email_writer.py
import pytest
from ai_pattern_scrubber import detect_patterns

SHORT_FINAL = "The v1 API endpoints shut down March 31. Migrate before then - guide at /api/migration."
MEDIUM_FINAL = "Quick status: phase 1 is done. Phase 2 (auth integration) starts Monday. On track for April 15."
LONG_FINAL = (
    "The March 14 outage (9:41\u201311:23 PM PT) was a misconfigured load balancer. "
    "4,300 requests timed out. Fix: config rollback. Post-mortem at [link]."
)

def high_severity_hits(text):
    return [h for h in detect_patterns(text) if h.severity == "high"]

def test_email_short_no_high_severity_flags():
    assert high_severity_hits(SHORT_FINAL) == []

def test_email_medium_no_high_severity_flags():
    assert high_severity_hits(MEDIUM_FINAL) == []

def test_email_long_no_high_severity_flags():
    assert high_severity_hits(LONG_FINAL) == []

Keep looking

Skills are one crate of 328,083. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.