skills/gmail-skill/SKILL.md
Manage Gmail - send, read, search emails, manage labels and drafts. Use when user wants to interact with their Gmail account for email operations.
npx skillsauth add jeffvincent/claude-config gmail-skillInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
This skill provides comprehensive Gmail integration through lightweight CLI scripts. All operations are token-efficient and composable.
Before using this skill, you must set up OAuth authentication:
Install dependencies:
cd ~/.claude/skills/gmail-skill && npm install
Set up Google Cloud credentials:
docs/google-cloud-setup.mdcredentials.json and save to scripts/auth/credentials.jsonAuthenticate:
cd ~/.claude/skills/gmail-skill && npm run setup
This will open a browser for Google OAuth and save your token locally.
The Gmail skill supports multiple accounts (e.g., personal and work email):
# Add a second account (from skill directory)
npm run setup -- --account work
# Add a third account
npm run setup -- --account personal
Each account needs separate OAuth authentication.
# List all configured accounts
node scripts/manage-accounts.js --list
# Set default account (used when --account is not specified)
node scripts/manage-accounts.js --set-default work
# Remove an account
node scripts/manage-accounts.js --remove old-account
All Gmail operations support the --account parameter:
# Send email from work account
node gmail-send.js --account work --to "[email protected]" --subject "..." --body "..."
# Send from personal (or omit --account to use default)
node gmail-send.js --account personal --to "[email protected]" --subject "..." --body "..."
# Search work emails
node gmail-search.js --account work --query "is:unread"
If --account is not specified, the default account is used.
When first using Gmail operations, read the comprehensive README:
cat ~/.claude/skills/gmail-skill/README.md
This provides detailed usage examples for all operations.
All scripts are in the scripts/ directory and output JSON for easy parsing:
cd ~/.claude/skills/gmail-skill/scripts
All scripts return JSON. Parse the output and present relevant information to the user in a friendly format.
Save intermediate results to files when chaining operations:
# Search for emails
node gmail-search.js --query "from:[email protected]" > /tmp/search-results.json
# Read first message from results
MESSAGE_ID=$(cat /tmp/search-results.json | jq -r '.messages[0].id')
node gmail-read.js --id "$MESSAGE_ID"
node gmail-send.js --to "[email protected]" --subject "Subject" --body "Body text"
Email Formatting: The --body parameter accepts markdown and automatically converts it to styled HTML for email rendering. Use markdown headers (##), bold (**text**), lists (- item), and paragraphs (double newlines) for well-formatted emails. If you need raw HTML, use --html instead.
IMPORTANT: When sending long-form content (analyses, reports, briefings), ALWAYS use markdown formatting:
## headers to create visual sections**bold** for emphasis and key terms- bullet lists for structured points--- for horizontal rule separators between major sectionsFor long emails, use --body-file /path/to/file.md instead of --body. Write the markdown content to a temp file first, then pass the path. This avoids shell argument length limits.
node gmail-search.js --query "is:unread" --limit 10
node gmail-read.js --id "MESSAGE_ID"
# List all labels
node gmail-labels.js --action list
# Add label to message
node gmail-labels.js --action add --id "MESSAGE_ID" --label "Important"
# Create draft
node gmail-drafts.js --action create --to "[email protected]" --subject "Subject" --body "Draft body"
# Send draft
node gmail-drafts.js --action send --id "DRAFT_ID"
If scripts fail:
token.json exists in scripts/auth/npm run setup againThis skill is designed for minimal token usage:
tools
Render a video clip with captions overlaid, using the Remotion captioner at `/Users/jvincent/Projects/remotion-captioner/`. Use when user provides a video file and wants to add captions/subtitles, mentions "caption this video", "add captions", "burn in subtitles", or provides a video + SRT file pair.
development
Upload video files to Wistia projects using the Data API. Use when user wants to upload videos to their Wistia account for hosting, transcription, or sharing.
development
Transcribe voice memos to text using Whisper. Use when user provides audio/video files (.m4a, .mp3, .mov, etc.) and asks to transcribe them into text and SRT format with timestamps.
testing
# Voice Authenticity Reviewer ## Purpose Review any written content for alignment with authentic speaking and writing voice using analyzed patterns from 7 meeting transcripts and strategic memos. ## When to Use This Skill - Before sharing strategic memos with leadership - Before sending important emails - When drafting presentation scripts - When reviewing documentation for external sharing - As part of Writing /produce-memo workflow (Step 6) - Anytime voice authenticity verification is needed