ワンクリックで
email-skill
Professional email management — inbox triage, drafting, sending, and follow-up tracking
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
メニュー
Professional email management — inbox triage, drafting, sending, and follow-up tracking
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
SOC 職業分類に基づく
Expert knowledge for AI deep research — methodology, source evaluation, search optimization, cross-referencing, synthesis, and citation formats
Expert knowledge for AI video clipping — yt-dlp downloading, whisper transcription, SRT generation, and ffmpeg processing
Expert knowledge for AI intelligence collection — OSINT methodology, entity extraction, knowledge graphs, change detection, and sentiment analysis
Expert knowledge for AI lead generation — web research, enrichment, scoring, deduplication, and report generation
Expert knowledge for AI forecasting — superforecasting principles, signal taxonomy, confidence calibration, reasoning chains, and accuracy tracking
Expert knowledge for AI Twitter/X management — API v2 reference, content strategy, engagement playbook, safety, and performance tracking
| name | email-skill |
| version | 1.0.0 |
| description | Professional email management — inbox triage, drafting, sending, and follow-up tracking |
Every email action has real consequences. Be conservative, always draft before sending, and always preserve context.
Classify every email into one of these buckets:
| Category | Action |
|---|---|
| Action required | Draft reply, notify user |
| FYI only | Read + archive, update knowledge graph |
| Waiting for reply | Check thread age, schedule follow-up |
| Spam/Newsletters | Flag for user, do NOT unsubscribe without approval |
| Financial/Legal | Always escalate to user — never auto-reply |
"Q2 Budget Review — Action Required by Friday""RE: RE: RE: meeting"[ACTION], [FYI], [URGENT], [WAITING][Greeting] — match formality to sender's tone
[Context] — one sentence reference to why you're writing
[Main Point] — the key message, clearly stated
[Action] — one explicit ask or next step with deadline
[Signature]
When draft_mode is ON (default):
import smtplib, os
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from datetime import datetime
msg = MIMEMultipart('alternative')
msg['From'] = os.environ['SMTP_USER']
msg['To'] = 'TO_ADDRESS'
msg['Subject'] = 'SUBJECT'
msg['Date'] = datetime.now().strftime('%a, %d %b %Y %H:%M:%S +0000')
text_body = 'PLAIN_TEXT_BODY'
html_body = '<p>HTML_BODY</p>'
msg.attach(MIMEText(text_body, 'plain'))
msg.attach(MIMEText(html_body, 'html'))
host = os.environ['SMTP_HOST']
port = int(os.environ.get('SMTP_PORT', '587'))
user = os.environ['SMTP_USER']
pwd = os.environ['SMTP_PASS']
with smtplib.SMTP(host, port) as s:
s.ehlo()
s.starttls()
s.login(user, pwd)
s.send_message(msg)
print(f'Sent to TO_ADDRESS at {datetime.now().isoformat()}')
import imaplib, email, os
from email.header import decode_header
host = os.environ.get('IMAP_HOST', os.environ['SMTP_HOST'])
user = os.environ['SMTP_USER']
pwd = os.environ['SMTP_PASS']
mail = imaplib.IMAP4_SSL(host)
mail.login(user, pwd)
mail.select('INBOX')
# Search unseen
typ, data = mail.search(None, 'UNSEEN')
ids = data[0].split()[-20:] # Last 20 unread
for num in ids:
typ, raw = mail.fetch(num, '(RFC822)')
msg = email.message_from_bytes(raw[0][1])
subject, enc = decode_header(msg['Subject'])[0]
if isinstance(subject, bytes):
subject = subject.decode(enc or 'utf-8')
sender = msg.get('From', '')
date = msg.get('Date', '')
body = ''
if msg.is_multipart():
for part in msg.walk():
if part.get_content_type() == 'text/plain':
body = part.get_payload(decode=True).decode('utf-8', errors='replace')
break
else:
body = msg.get_payload(decode=True).decode('utf-8', errors='replace')
print(f'FROM: {sender}\nDATE: {date}\nSUBJECT: {subject}\n\n{body[:500]}\n---')
For every contact encountered:
knowledge_add_entity({
"type": "contact",
"name": "Full Name",
"email": "email@domain.com",
"company": "Company Name",
"last_interaction": "ISO date"
})
When waiting for a reply:
schedule_create({
"name": "follow-up: [subject] to [person]",
"cron": "0 9 * * 1",
"task": "Check if [person] replied to [subject] thread"
})