Fetch recent unread Gmail (yesterday + today) and send a digest to the user.
Scanned 9/10/2026
Install to Claude Code
npx -y skills add luokai0/ai-agent-skills-by-luo-kai --skill gmail-summarize --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Gmail Summarize?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/luokai0-gmail-summarize)More formats (shields.io, HTML) on the badges page.
---
name: gmail-summarize
description: Fetch recent unread Gmail (yesterday + today) and send a digest to the user.
metadata: {
"skill": {
"emoji": "📬",
"requires": {
"runtime": "python3",
"env_vars": {
"required": ["IMAP_USERNAME", "IMAP_PASSWORD"],
"optional": ["IMAP_HOST", "IMAP_PORT", "IMAP_MAX_BODY_CHARS", "EMAIL_CONFIG_PATH"]
},
"credentials": [
"IMAP_USERNAME (env, required) — IMAP login username",
"IMAP_PASSWORD (env, required) — IMAP login password / app-password",
"IMAP_HOST (env, optional, default: imap.gmail.com)",
"IMAP_PORT (env, optional, default: 993)"
],
"config": "$EMAIL_CONFIG_PATH or ~/.config/gmail-summarize/config.json (used only when IMAP_USERNAME/IMAP_PASSWORD env vars are absent)",
"config_fields": ["email.imapHost", "email.imapPort", "email.imapUsername", "email.imapPassword"],
"external_connections": ["IMAP server specified in IMAP_HOST or email.imapHost"]
}
}
}
---
# Gmail Recent Digest
## Requirements
- **Python 3** must be available in the container environment (`python` command).
- IMAP credentials must be supplied via **one** of the following methods (env vars take precedence):
### Option A — Environment variables (recommended)
| Variable | Description | Default |
|---|---|---|
| `IMAP_HOST` | IMAP server hostname | `imap.gmail.com` |
| `IMAP_PORT` | IMAP server port | `993` |
| `IMAP_USERNAME` | IMAP login username | *(required)* |
| `IMAP_PASSWORD` | IMAP login password / app-password | *(required)* |
| `IMAP_MAX_BODY_CHARS` | Max body characters per email | `2000` |
### Option B — Config file
Set `EMAIL_CONFIG_PATH` to point to a JSON file, or place the file at `~/.config/gmail-summarize/config.json`.
The file must contain **only** the fields below (no other sensitive data should be stored in this file):
```json
{
"email": {
"imapHost": "imap.gmail.com",
"imapPort": 993,
"imapUsername": "your@gmail.com",
"imapPassword": "your-app-password",
"maxBodyChars": 2000
}
}
```
## Security notes
- **Preferred**: supply credentials via environment variables (`IMAP_HOST`, `IMAP_PORT`, `IMAP_USERNAME`, `IMAP_PASSWORD`) so no file on disk is read at all.
- When a config file is used, it should contain **only** the `email` fields listed above. The script reads only those four fields and nothing else from the file.
- The only external connection made is to the IMAP server declared in `IMAP_HOST` / `email.imapHost`. No other endpoints are contacted.
- Credentials are used solely to authenticate the IMAP session and are not logged or stored elsewhere by this skill.
## When to use
- User asks "check my Gmail", "summarize my emails", "邮件摘要"
- Cron trigger message contains "gmail_digest"
## Workflow
1. Run the fetch script via exec tool:
`python {workspace}/skills/gmail-summarize/scripts/fetch_unseen.py`
(replace {workspace} with your actual workspace root)
2. Parse the JSON array. Each item has: sender, subject, date, body
3. For each email compose one line:
`[date] sender | subject — one-sentence body summary`
4. Send the full digest via MessageTool in this format:
📬 **邮件摘要** (N封,覆盖 MM/DD–MM/DD)
• [日期] 发件人 | 主题 — 一句话摘要
• [日期] 发件人 | 主题 — 一句话摘要
...
5. If result is empty, send: 📭 近两日暂无未读邮件
## Output Rules
- Send the digest message ONLY. Do NOT add any extra comments, greetings, explanations, or follow-up questions before or after the digest.
- Do NOT say things like "主人,以下是您的邮件摘要" or "如需了解详情请告知" etc.
- The digest message itself is the complete and final response.
- The one-sentence body summary MUST be translated into Chinese. Sender names and subjects should keep their original text as-is.
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!