원클릭으로
gmail
Send, draft, read, reply, forward, and triage Gmail emails using the gws CLI. Use when the user asks to do anything with email.
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
메뉴
Send, draft, read, reply, forward, and triage Gmail emails using the gws CLI. Use when the user asks to do anything with email.
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
SOC 직업 분류 기준
Convert a Markdown file into a clean, print-ready PDF. Use when the user asks to render a `.md` to PDF, generate a resume/report PDF from markdown, or produce a polished printable document from a markdown source. Wraps pandoc + Chrome headless and ships with a sensible default stylesheet you can swap out.
Search songs, manage playlists, control playback queue, and play/pause on Spotify. Use when the user asks anything about Spotify — music, playlists, queue, playing, searching for songs.
Read and edit Google Docs using the gws CLI — insert, delete, replace text, apply formatting, manage headings, lists, tables, and images. Use when the user asks to read, edit, update, or format a Google Doc.
| name | gmail |
| description | Send, draft, read, reply, forward, and triage Gmail emails using the gws CLI. Use when the user asks to do anything with email. |
| allowed-tools | ["Bash","Read","Write","Edit","Glob","Grep"] |
This skill uses the gws CLI (/opt/homebrew/bin/gws) to interact with Gmail. The CLI handles OAuth, MIME encoding, and base64 automatically.
Activate this skill whenever the user asks to:
gws gmail +send --to "recipient@example.com" --subject "Subject" --body "Body text"
Options:
--cc, --bcc — additional recipients (comma-separated)--from — send-as alias-a / --attach <PATH> — attach file (repeatable, 25MB total limit)--html — treat body as HTML (use fragment tags like <p>, <b>, <a>, no wrapper needed)Drafts require building a .eml file and uploading it:
# 1. Write the .eml file (MUST be in current working directory — gws blocks paths outside cwd)
cat > draft-email.eml << 'EOF'
From: me
To: recipient@example.com
Subject: Your subject here
Content-Type: text/plain; charset="UTF-8"
Email body goes here.
EOF
# 2. Create the draft
gws gmail users drafts create \
--params '{"userId":"me"}' \
--upload draft-email.eml \
--upload-content-type message/rfc822
# 3. Clean up
rm draft-email.eml
The response includes id (draft ID) and message.id (message ID).
For CC/BCC in drafts, add headers to the .eml file:
Cc: someone@example.com
Bcc: hidden@example.com
For HTML drafts, change the Content-Type and use HTML in the body:
Content-Type: text/html; charset="UTF-8"
<p>Hello <b>world</b></p>
gws gmail users drafts list --params '{"userId":"me"}'
gws gmail users drafts send --params '{"userId":"me"}' --json '{"id":"DRAFT_ID"}'
# Write updated .eml file, then:
gws gmail users drafts update \
--params '{"userId":"me","id":"DRAFT_ID"}' \
--upload updated-draft.eml \
--upload-content-type message/rfc822
gws gmail users drafts delete --params '{"userId":"me","id":"DRAFT_ID"}'
Warning: This permanently deletes the draft — it does NOT trash it.
# Plain text body
gws gmail +read --id MESSAGE_ID
# With headers (From, To, Subject, Date)
gws gmail +read --id MESSAGE_ID --headers
# JSON output
gws gmail +read --id MESSAGE_ID --format json
# HTML body
gws gmail +read --id MESSAGE_ID --html
# Show unread inbox (default: 20 messages)
gws gmail +triage
# Limit results
gws gmail +triage --max 5
# Custom search query
gws gmail +triage --query "from:boss@company.com"
gws gmail +triage --query "subject:urgent is:unread"
# Show labels
gws gmail +triage --labels
# Table format (default) or JSON
gws gmail +triage --format table
gws gmail +triage --format json
# Reply to sender only
gws gmail +reply --message-id MESSAGE_ID --body "Thanks, got it!"
# Reply with CC
gws gmail +reply --message-id MESSAGE_ID --body "Looping in Carol" --cc carol@example.com
# Reply with attachment
gws gmail +reply --message-id MESSAGE_ID --body "See attached" -a report.pdf
# HTML reply
gws gmail +reply --message-id MESSAGE_ID --body "<b>Noted</b>" --html
# Reply to all recipients
gws gmail +reply-all --message-id MESSAGE_ID --body "Sounds good!"
# Reply-all but exclude someone
gws gmail +reply-all --message-id MESSAGE_ID --body "Updated" --remove bob@example.com
# Forward with optional note
gws gmail +forward --message-id MESSAGE_ID --to dave@example.com --body "FYI see below"
# Forward with attachment
gws gmail +forward --message-id MESSAGE_ID --to dave@example.com -a notes.pdf
# List messages matching a query
gws gmail users messages list --params '{"userId":"me","q":"from:someone@example.com subject:invoice"}'
# Get a specific message
gws gmail users messages get --params '{"userId":"me","id":"MESSAGE_ID"}'
gws gmail users messages trash --params '{"userId":"me","id":"MESSAGE_ID"}'
gws gmail users messages untrash --params '{"userId":"me","id":"MESSAGE_ID"}'
# Add/remove labels from multiple messages
gws gmail users messages batchModify --params '{"userId":"me"}' \
--json '{"ids":["MSG_ID_1","MSG_ID_2"],"addLabelIds":["STARRED"]}'
gws CLI — install via brew install talktoajayprakash/tap/gws (typically at /opt/homebrew/bin/gws on Apple Silicon or /usr/local/bin/gws on Intel Mac)--params '{"userId":"me"}' for low-level API calls (drafts, messages)+send, +read, +triage, +reply, +forward) do NOT need userId.eml file after creation+triage is read-only and never modifies the mailbox