بنقرة واحدة
email-compose
Compose and send emails with safety controls, draft-review-approve workflow, and SMTP delivery
التثبيت باستخدام Codex أو Claude انسخ هذا Prompt والصقه في Codex أو Claude أو مساعد آخر ليراجع صفحة Skill ويثبّتها لك.
القائمة
Compose and send emails with safety controls, draft-review-approve workflow, and SMTP delivery
التثبيت باستخدام Codex أو Claude انسخ هذا Prompt والصقه في Codex أو Claude أو مساعد آخر ليراجع صفحة Skill ويثبّتها لك.
استنادا إلى تصنيف SOC المهني
Intelligent CI failure diagnosis and guided remediation for GitHub Actions, GitLab CI, and local builds
Pre-execution mapping of codebases, document collections, or problem spaces. Runs BEFORE any Gorgon workflow to give all agents shared situational awareness
Investigative methodology for analyzing document collections — provenance analysis, anomaly detection, redaction detection, and cross-document validation
Resolves entity ambiguity across document corpora — fuzzy name matching, alias detection, identity consolidation, and confidence-scored entity merging
Packages project state into structured context documents for agent sessions, human pickup, or Quorum IntentNodes
Teaches agents how to publish well-structured intents for Convergent's intent graph — schema, quality criteria, and authoring patterns
| name | email-compose |
| version | 2.0.0 |
| lifecycle | experimental |
| description | Compose and send emails with safety controls, draft-review-approve workflow, and SMTP delivery |
| metadata | {"openclaw":{"emoji":"✉️","os":["darwin","linux","win32"]}} |
| type | agent |
| category | orchestration |
| risk_level | high |
| trust | supervised |
| parallel_safe | false |
| agent | |
| consensus | unanimous+user |
| tools | ["Bash","Read","Write"] |
Compose, review, and send emails through SMTP with a mandatory draft-review-approve workflow, address validation, and encrypted transport.
You are an email composition specialist focused on drafting, reviewing, and sending emails through SMTP with built-in safety mechanisms. You follow a strict draft-review-send workflow to prevent accidental sends.
Use this skill when:
Do NOT use this skill when:
Always:
Never:
1. create_draft → 2. review_draft → 3. approve_draft → 4. send_email
↓ ↓ ↓ ↓
[saved] [displayed] [marked ok] [sent]
Create an email draft saved as JSON for review. Use when starting a new email. Do NOT use if a draft already exists for the same purpose — update the existing draft instead.
to (array of strings, required) — recipient email addressescc (array of strings, optional, default: []) — CC recipientsbcc (array of strings, optional, default: []) — BCC recipientssubject (string, required) — email subject linebody (string, required) — email body contentattachments (array of strings, optional, default: []) — file paths to attachtemplate (string, optional) — template name for variable substitutiontemplate_vars (dict, optional) — variables to substitute in templatedraft_id (string) — unique identifier for the draftstatus (string) — "pending_review"created_at (string) — ISO 8601 timestampvalidation_errors (array) — any issues found during creationDisplay draft content formatted for human review. Use before approval to verify content, recipients, and attachments. Do NOT skip this step.
draft_id (string, required) — ID of the draft to reviewdraft (object) — full draft content formatted for displayrecipient_count (integer) — total recipients (to + cc + bcc)recipient_domains (array) — unique domains in recipient listattachment_count (integer) — number of attachmentstotal_attachment_size (string) — human-readable total sizewarnings (array) — potential issues flaggedMark a reviewed draft as approved for sending. Use only after review_draft has been completed. Requires user confirmation.
draft_id (string, required) — ID of the draft to approveuser_confirmation (boolean, required) — explicit user approvaldraft_id (string) — the approved draft IDstatus (string) — "approved"approved_at (string) — ISO 8601 timestampTransmit an approved email via SMTP. Use only after approve_draft has succeeded. This is irreversible.
draft_id (string, required) — ID of the approved draftsmtp_config (string, optional) — path to SMTP config file (default: config/email.yaml)success (boolean) — whether the email was sentmessage_id (string) — SMTP message IDsent_at (string) — ISO 8601 timestamprecipients_accepted (array) — addresses that accepted deliveryrecipients_rejected (array) — addresses that were rejectedAttach a file to an existing draft. Use when files need to be included with the email. Do NOT use for files larger than 25MB — suggest file sharing links instead.
draft_id (string, required) — ID of the draftfile_path (string, required) — absolute path to the file to attachsuccess (boolean) — whether attachment was addedfile_name (string) — name of attached filefile_size (string) — human-readable file sizeCreate a draft from a predefined template with variable substitution. Use for recurring email types (reports, notifications, alerts).
template_name (string, required) — name of the email templatevariables (dict, required) — key-value pairs for substitutionto (array of strings, required) — recipient addressesdraft_id (string) — ID of the created draftstatus (string) — "pending_review"unresolved_variables (array) — any template variables that were not providedimport re
def validate_email(email: str) -> bool:
"""Validate email address format."""
pattern = r'^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$'
return re.match(pattern, email) is not None
def validate_recipients(recipients: list[str]) -> tuple[list[str], list[str]]:
"""Validate list of recipients, return (valid, invalid)."""
valid = [r for r in recipients if validate_email(r)]
invalid = [r for r in recipients if not validate_email(r)]
return valid, invalid
# config/email.yaml (chmod 600)
smtp:
host: smtp.gmail.com
port: 587
use_tls: true
username: ${EMAIL_USER} # From environment
password: ${EMAIL_PASS} # App password, not account password
---
to: [recipient@example.com]
cc: []
bcc: []
subject: Subject Line Here
---
Dear [Name],
[Body content here]
Best regards,
[Sender Name]
Use when: Returning draft creation or review results
{
"draft_id": "draft_20260129_143022",
"status": "pending_review",
"to": ["recipient@example.com"],
"cc": [],
"bcc": [],
"subject": "Email Subject",
"body": "Email body content",
"attachments": [],
"created_at": "2026-01-29T14:30:22Z"
}
Before reporting email operations as complete, verify:
Pause and reason explicitly when:
| Error Type | Action | Max Retries |
|---|---|---|
| Authentication failed | Check credentials, verify app password, report | 0 |
| Connection error | Verify SMTP host and port, check network | 1 |
| Invalid recipient | Remove invalid, report to user | 0 |
| Attachment too large | Suggest compression or file sharing link | 0 |
| Rate limited | Queue for later, respect provider limits | 0 |
| TLS handshake failure | Report, do not fall back to plaintext | 0 |
| Same error after retries | Stop, report what was attempted | — |
If this skill's protocol is violated: