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
- MoizIbnYousaf/marketing-clitheir own version, first seen Nov 1, 2026
- freejam099-alt/Edge-Aitheir own version, first seen Oct 25, 2026
- aaronjmars/miroshark-aeontheir own version, first seen Oct 21, 2026
- aeonfun/aeontheir own version, first seen Oct 20, 2026
- jeffliu05042/send-email-skilltheir own version, first seen Oct 20, 2026
- MiroShark/miroshark-aeontheir own version, first seen Oct 17, 2026
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.
aaronjmarsSkillaeon-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
aaronjmarsSkillauto-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
Other versions27 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 27
- google-ai-edge/gallery★ 25ksame name
- floatpane/matcha★ 1.2ksame name
- jegly/Box★ 995same name
- aaronjmars/aeon★ 789same name
- aeonfun/aeon★ 789same name
- microsoft/vscode-java-pack★ 355same name
- refly-ai/refly-skills★ 204same name
- jonathanmalkin/jules★ 65same name
- MoizIbnYousaf/marketing-cli★ 33same name
- aaronjmars/miroshark-aeon★ 20same name
17 more not listed
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository20 other files it gives its agents.
- coordinate-executorsSkill
- coordinate-meetingSkill
- generate-approval-letterSkill
- generate-budgetSkill
- generate-change-impactSkill
- generate-charterSkill
- generate-checklistSkill
- generate-closure-reportSkill
- generate-comm-planSkill
- generate-comparison-tableSkill
- generate-estimateSkill
- generate-meeting-protocolSkill
- generate-plan-fact-reportSkill
- generate-project-planSkill
- generate-questionnaireSkill
- generate-resource-planSkill
- generate-response-planSkill
- generate-risk-registerSkill
- generate-stakeholder-mapSkill
- monitor-progressSkill
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
- Very specific: line 55
If called directly by a user (not as part of a skill chain): Detection: input is natural language without structured parameters — at least …
- Very specific: line 63
Check required fields: email_type, to, subject, body_md, autonomy_level.
- Distinctive: line 64
If any field is missing → ask PM for the missing data.
- Very specific: line 65
If email_type is unknown or outside E1–E8 → default to autonomy level 3.
- Very specific: line 66
Read project-state.md: get pm_email, project_name, language.
- Very specific: line 70
If attachments is set AND convert_to_docx = true:
- Distinctive: line 101
Wait for PM response:
- Distinctive: line 123
Use format from the Email Type Registry section: header (To, Subject, CC, Attachments) + body + attachment paths.
- Distinctive: line 163
Does NOT generate email content — receives rendered content from calling skill
- Distinctive: line 164
Does NOT select recipients — set by calling skill
- Very specific: line 165
Does NOT update project-state.md — updated by calling skill
“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.
Files
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:
| Parameter | Required | Description |
email_type | yes | E1–E8 (email type from artifacts registry) |
to | yes | Recipient email(s) |
subject | yes | Email subject (already filled by caller) |
body_md | yes | Email body in Markdown (already rendered by caller) |
autonomy_level | yes | 1 / 2 / 3 |
attachments | no | File paths (.md, .xlsx) |
convert_to_docx | no | Convert .md attachments to .docx. Default: false |
cc_pm | no | PM email for Level 2 (if absent — read from project-state.md) |
Output
| Result | Path | Condition |
| Email sent via Gmail | — (external) | Level 1/2, Gmail available; Level 3 confirmed |
drafts/email-draft-{type}-{YYYY-MM-DD}.md | drafts/ | Level 3 pending; Gmail unavailable |
Log entry in logs/log.md | logs/ | 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
- Check required fields:
email_type,to,subject,body_md,autonomy_level.- If any field is missing → ask PM for the missing data.
- If
email_typeis unknown or outside E1–E8 → default to autonomy level 3. - Read
project-state.md: getpm_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):
.mdfiles → convert via Cowork docx skill → produce.docx(same filename)..xlsxfiles → 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
| Level | Email Types | Action |
| 1 — auto | E6, E7 | Send immediately, no preview |
| 2 — CC PM | E4, E5 | Add PM to CC, send immediately |
| 3 — confirm | E1, E2, E3, E8 | Show draft, wait for PM approval |
Level 3 flow:
- Save draft to
drafts/email-draft-{email_type}-{YYYY-MM-DD}.md. - 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. - 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 fromtoparametersubject: fromsubjectparameterbody:body_mdcontentcc: PM email (Level 2 only) or emptyattachments: converted files (if any)
On success → proceed to Step 6.
Fallback (Gmail unavailable or MCP error):
- 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} - Notify PM: "Gmail unavailable. Draft saved at
drafts/email-draft-{email_type}-{YYYY-MM-DD}.md. Please send manually." - 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
| Type | Purpose | Level | Convert to docx |
| E1 | Client questionnaire | 3 | yes |
| E2 | Team lessons questionnaire | 2 | no (.md) |
| E3 | Document approval request | 3 | yes |
| E4 | Deadline deviation alert | 2 | yes |
| E5 | Stream sync deviation alert | 2 | yes |
| E6 | Deadline reminder | 1 | no (no attachment) |
| E7 | Weekly status report | 1 | yes |
| E8 | Meeting status distribution | 3 | yes |
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
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
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.

