gmail
The Gmail skill enables reading, searching, sending, and organizing emails across multiple Google accounts through the Gmail API. Use this skill when users request email management tasks such as checking or reading messages, composing and sending emails, replying to conversations, searching the inbox, or managing labels and folders. The skill includes a structured five-step workflow for email composition that involves gathering context, checking previous conversations, drafting with user feedback, test sending, and final delivery, with automatic signature appending to outgoing messages.
git clone --depth 1 https://github.com/team-attention/plugins-for-claude-natives /tmp/gmail && cp -r /tmp/gmail/plugins/gmail/skills/gmail ~/.claude/skills/gmailSKILL.md
# Gmail Skill
Manage emails through Gmail API - read, search, send, and organize across multiple Google accounts.
## Account Setup
**Before running any command, read `accounts.yaml` to check registered accounts.**
> If `accounts.yaml` is missing or empty → Read `references/setup-guide.md` for initial setup
```yaml
# accounts.yaml example
accounts:
personal:
email: user@gmail.com
description: Personal Gmail
work:
email: user@company.com
description: Work account
```
## Email Sending Workflow (5 Steps)
When sending emails, **create 5 Tasks with TaskCreate** and execute sequentially:
| Step | Task | Key Action |
|------|------|----------|
| 1 | Gather context | Run Explore SubAgents **in parallel**: recipient info, related projects, background context |
| 2 | Check previous conversations | Search `--query "to:recipient OR from:recipient newer_than:90d"` → AskUserQuestion for thread selection |
| 3 | Draft email | Compose draft → AskUserQuestion for feedback |
| 4 | Test send | Send `[TEST]` email to user's own address → Open in Gmail web → Request confirmation |
| 5 | Actual send | Send to recipient → Report completion |
**Signature**: Append `---\nSent with Claude Code` to all outgoing emails
### Workflow Example: "Send a meeting email to John"
```
1. Create 5 Tasks
2. Step 1: Run parallel Explore SubAgents
- Search recipient (John) info (partners/, projects/, context.md, etc.)
- Search meeting context (calendar, recent meeting notes, etc.)
3. Step 2: Search "to:john@company.com OR from:john@company.com"
→ If previous conversation exists, AskUserQuestion (reply/new email)
4. Step 3: Draft email → AskUserQuestion (proceed/revise)
5. Step 4: Test send to my email → Open in Gmail web (`open "https://mail.google.com/mail/u/0/#inbox/{message_id}"`) → Request confirmation
6. Step 5: Actual send → Done
```
## CLI Quick Reference
```bash
# List messages
uv run python scripts/list_messages.py --account work --query "is:unread" --max 10
# Send email
uv run python scripts/send_message.py --account work --to "user@example.com" --subject "Subject" --body "Content"
# Check profile
uv run python scripts/manage_labels.py --account work profile
```
> Detailed CLI usage: `references/cli-usage.md`
> Search query reference: `references/search-queries.md`
## View Email in Web
After sending, use the returned Message ID to view directly in Gmail web:
```bash
# URL format
https://mail.google.com/mail/u/0/#inbox/{message_id}
# Example: Open in browser after test send
open "https://mail.google.com/mail/u/0/#inbox/19c145bbd47ddd01"
```
> **Note**: `u/0` is the first logged-in account, `u/1` is the second account
## File Structure
```
skills/gmail/
├── SKILL.md
├── accounts.yaml # Account metadata
├── scripts/ # CLI scripts
├── references/
│ ├── setup-guide.md # Initial setup guide
│ ├── cli-usage.md # Detailed CLI usage
│ ├── search-queries.md # Search query reference
│ └── credentials.json # OAuth Client ID (gitignore)
├── assets/
│ ├── accounts.default.yaml # Account config template
│ ├── email-templates.md # Email body templates
│ └── signatures.md # Signature templates (Plain/HTML)
└── accounts/ # Per-account tokens (gitignore)
```
## Error Handling
| Situation | Resolution |
|-----------|------------|
| accounts.yaml missing | Read `references/setup-guide.md` for initial setup |
| Token missing | Guide user to run `setup_auth.py --account <name>` |
| Token expired | Auto-refresh; if failed, guide re-authentication |Collect and synthesize opinions from multiple AI agents. Use when users say "summon the council", "ask other AIs", or want multiple AI perspectives on a question.
개발 커뮤니티에서 기술 주제에 대한 다양한 의견 수집. "개발자 반응", "커뮤니티 의견", "developer reactions" 요청에 사용. Reddit, HN, Dev.to, Lobsters 등 종합.
This skill should be used when the user asks to "트윗 가져와", "트윗 번역", "X 게시글 읽어줘", "tweet fetch", "트윗 내용", "트윗 원문", or provides an X/Twitter URL (x.com, twitter.com) and wants to read, translate, or analyze the tweet content. Also useful when other skills need to fetch tweet text programmatically.
Google 캘린더 일정 조회/생성/수정/삭제. "오늘 일정", "이번 주 일정", "미팅 추가해줘" 요청에 사용. 여러 계정(work, personal) 통합 조회 지원.
This skill should be used when user wants to access, capture, or reference Claude Code session history. Trigger when user says "capture session", "save session history", or references past/current conversation as a source - whether for saving, extracting, summarizing, or reviewing. This includes any mention of "what we discussed", "today's work", "session history", or when user treats the conversation itself as source material (e.g., "from our conversation").
This skill should be used when the user asks to "카톡 보내줘", "카카오톡 메시지", "KakaoTalk message", "채팅 읽어줘", "~에게 메시지 보내줘", or needs to send/read messages via KakaoTalk on macOS.
This skill should be used when the user is building, planning, or strategizing and the key question is whether to optimize content (what) or change form (how/medium). Trigger on "내용 vs 형식", "content vs form", "metamedium", "형식을 바꿔볼까", "새로운 포맷", "관점 전환", "perspective shift", "다른 방법 없을까", "같은 방식이 안 먹혀", "diminishing returns". Applies Alan Kay's metamedium concept to surface form-level alternatives. For requirement clarification use vague; for strategy blind spots use unknown.
Generate Korean podcast episodes from any source (URLs, tweets, articles, PDFs) — analyzes content, writes a script, generates audio via OpenAI TTS, converts to MP4, and auto-uploads to YouTube. Use this skill whenever the user says 'make a podcast', 'convert to podcast', 'podcast', 'create an episode', 'turn this into audio', 'YouTube podcast', 'turn this article into a podcast', 'publish as audio', or provides sources and wants them transformed into a listenable format. Supports partial execution: script-only, TTS-only, or upload-only.