agentleFS
KirKruglovKirKruglov/claude-project-manager/skills/send-email/SKILL.md

send-email

Skill6 starsChanged 7 months agoMITView on GitHub

Internal service skill for delivering project emails via Gmail MCP. Activated automatically when any project management skill needs to send an email: deadline reminders (E6), weekly status reports (E7), approval requests (E3), client questionnaires (E1), deviation alerts (E4, E5), or meeting notifications (E8). Handles three autonomy levels: Level 1 sends immediately without confirmation, Level 2 sends with PM copied, Level 3 shows a draft and waits for PM approval. Converts .md attachments to .docx for external recipients using the Cowork docx skill. Falls back to a saved .md draft when Gmail is unavailable. Not triggered directly by users — activated by other agent skills passing email_type, recipients, body, and autonomy_level. RU triggers (from calling skills): 'отправить письмо', 'send-email', 'уведомить стейкхолдеров'. EN triggers: 'send email', 'notify stakeholders', 'deliver report'.

27 other projects use a version of this.

Adopted by

Most recently taken up by

Used with

Projects with it also use aeon-update, auto-workflow and 10 more.

Other files people use alongside this one.

Files found in the same public projects as a version of this one, more often than they turn up anywhere else. Each project counts once, large collections count for less, and this file's own repository is left out.
  • aaronjmarsSkill

    aeon-update

    Pull framework updates from the upstream Aeon repo into this instance - 3-way merges canon's new commits into a PR, never clobbering operator config.

    Also in 4 projects that use this

  • aaronjmarsSkill

    auto-workflow

    Two-mode aeon.yml workflow builder - analyze inspects URLs and emits a tiered, signal-verified skill-enablement plan plus an aeon.yml diff; enable flips slugs to enabled:true and opens a PR.

    Also in 4 projects that use this

  • +10 more from aaronjmars

The file

We split this skill into the rules it gives an agent

11 rules. 0 are common, 5 are distinctive, and 6 are very specific to this project.

  • 0

    Common

    Most of the 22 edited versions we read keep these.

  • 5

    Distinctive

    This author's own choices. Worth a look.

  • 6

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Very specific:

    If called directly by a user (not as part of a skill chain): Detection: input is natural language without structured parameters — at least …

    line 55
  2. Very specific:

    Check required fields: email_type, to, subject, body_md, autonomy_level.

    line 63
  3. Distinctive:

    If any field is missing → ask PM for the missing data.

    line 64
  4. Very specific:

    If email_type is unknown or outside E1–E8 → default to autonomy level 3.

    line 65
  5. Very specific:

    Read project-state.md: get pm_email, project_name, language.

    line 66
  6. Very specific:

    If attachments is set AND convert_to_docx = true:

    line 70
  7. Distinctive:

    Wait for PM response:

    line 101
  8. Distinctive:

    Use format from the Email Type Registry section: header (To, Subject, CC, Attachments) + body + attachment paths.

    line 123
  9. Distinctive:

    Does NOT generate email content — receives rendered content from calling skill

    line 163
  10. Distinctive:

    Does NOT select recipients — set by calling skill

    line 164
  11. Very specific:

    Does NOT update project-state.md — updated by calling skill

    line 165

“Common” is measured: kept by at least 6 in 10 of the 22 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

Skill: send-email

Internal service skill for sending project emails via Gmail MCP. Called exclusively by other agent skills — not directly by the user. Receives a rendered email from the calling skill, applies autonomy level rules, converts attachments if needed, and delivers via Gmail or saves a fallback draft.


Activation Context

This skill is activated when another agent skill instructs Claude to send an email. The calling skill provides all content; send-email handles delivery, autonomy logic, and fallback.

Calling skills: generate-questionnaire, generate-approval-letter, monitor-progress, coordinate-meeting, coordinate-executors.


Language Detection

Determine language from project-state.md field language. If absent: scan project artifacts for Cyrillic → RU. Default: EN.


Input

Parameters passed by the calling skill:

ParameterRequiredDescription
email_typeyesE1–E8 (email type from artifacts registry)
toyesRecipient email(s)
subjectyesEmail subject (already filled by caller)
body_mdyesEmail body in Markdown (already rendered by caller)
autonomy_levelyes1 / 2 / 3
attachmentsnoFile paths (.md, .xlsx)
convert_to_docxnoConvert .md attachments to .docx. Default: false
cc_pmnoPM email for Level 2 (if absent — read from project-state.md)

Output

ResultPathCondition
Email sent via Gmail— (external)Level 1/2, Gmail available; Level 3 confirmed
drafts/email-draft-{type}-{YYYY-MM-DD}.mddrafts/Level 3 pending; Gmail unavailable
Log entry in logs/log.mdlogs/Always

Instructions

Step 1 — Guard-rail

If called directly by a user (not as part of a skill chain): Detection: input is natural language without structured parameters — at least one of email_type, to, subject, body_md, autonomy_level is absent. Respond: "send-email is an internal service skill activated automatically during email delivery. To send a project email, trigger the relevant skill (e.g., coordinate-executors for reminders, generate-approval-letter for approvals)."

Caller contract (for calling skills): body_md MUST be fully rendered Markdown text — not a file path, template variable, or reference. The calling skill is responsible for loading its own template from templates/, populating all placeholders, and passing the result as a string. send-email has no templates/ folder of its own.

Step 2 — Validate Parameters

  1. Check required fields: email_type, to, subject, body_md, autonomy_level.
    • If any field is missing → ask PM for the missing data.
  2. If email_type is unknown or outside E1–E8 → default to autonomy level 3.
  3. Read project-state.md: get pm_email, project_name, language.

Step 3 — Convert Attachments

If attachments is set AND convert_to_docx = true:

  • Level 1/2: convert here, before sending.
  • Level 3: defer conversion until PM confirms — perform at the start of Step 5.

For each file (when converting):

  • .md files → convert via Cowork docx skill → produce .docx (same filename).
  • .xlsx files → use as-is.
  • Other formats → attach as-is, warn PM in chat.
  • On conversion error → log error, attach original .md, notify PM.

Step 4 — Apply Autonomy Level

LevelEmail TypesAction
1 — autoE6, E7Send immediately, no preview
2 — CC PME4, E5Add PM to CC, send immediately
3 — confirmE1, E2, E3, E8Show draft, wait for PM approval

Level 3 flow:

  1. Save draft to drafts/email-draft-{email_type}-{YYYY-MM-DD}.md.
  2. Display in chat:
    Draft ready ({email_type}):
    — To: {to}
    — Subject: {subject}
    — Attachments: {list or "none"}
    [body preview: first 5 lines or full if < 15 lines]
    
    Confirm: type "send" / "отправить" — or provide edits.
  3. Wait for PM response:
    • "send", "отправить", "confirm", "подтвердить" → proceed to Step 5.
    • Edit text → apply changes, update draft, show again.
    • "cancel", "отмена" → log "cancelled by PM", end skill.

Step 5 — Send via Gmail MCP

Primary path (Gmail available):

Call Gmail MCP:

  • to: recipient list from to parameter
  • subject: from subject parameter
  • body: body_md content
  • cc: PM email (Level 2 only) or empty
  • attachments: converted files (if any)

On success → proceed to Step 6.

Fallback (Gmail unavailable or MCP error):

  1. Save draft to drafts/email-draft-{email_type}-{YYYY-MM-DD}.md (for levels 1/2 this is the first time the draft is created; for level 3 it is overwritten). Use format from the Email Type Registry section: header (To, Subject, CC, Attachments) + body + attachment paths.
    # Email Draft: {email_type}
    Date: {YYYY-MM-DD}
    To: {to}
    Subject: {subject}
    CC: {cc or "—"}
    Attachments: {list or "—"}
    ---
    {body_md}
  2. Notify PM: "Gmail unavailable. Draft saved at drafts/email-draft-{email_type}-{YYYY-MM-DD}.md. Please send manually."
  3. Proceed to Step 6.

Step 6 — Log

Write to logs/log.md:

  • Sent: {DATE}: send-email — sent {email_type} → {to} (level {N})
  • Fallback: {DATE}: send-email — fallback, draft saved drafts/email-draft-{type}-{DATE}.md
  • Cancelled: {DATE}: send-email — cancelled by PM, {email_type} not sent

Email Type Registry

TypePurposeLevelConvert to docx
E1Client questionnaire3yes
E2Team lessons questionnaire2no (.md)
E3Document approval request3yes
E4Deadline deviation alert2yes
E5Stream sync deviation alert2yes
E6Deadline reminder1no (no attachment)
E7Weekly status report1yes
E8Meeting status distribution3yes

Constraints

  • Does NOT generate email content — receives rendered content from calling skill
  • Does NOT select recipients — set by calling skill
  • Does NOT update project-state.md — updated by calling skill
  • Mass send (>10 recipients) requires explicit PM confirmation regardless of level
  • Level 3 draft awaits confirmation within the current session; if session closes, draft remains in drafts/
  • Direct user invocation is not supported

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.