Skip to main content

gmail

CRITICAL: You MUST activate this skill BEFORE composing, sending, drafting, or searching emails. Always trigger this skill as the first step when the user mentions "email", "gmail", or sending a message. Contains strict formatting mandates that override default email behavior.

Source facts

Repository
gemini-cli-extensions/workspace
Last source activity
February 27, 2026 at 21:50
Detected SKILL.md language
English
Stars
645
Forks
107

Install options

The review-first prompt is selected by default. You can switch to a direct command or download a local copy.

Review the source files

Read SKILL.md and any companion files shown by SkillsMP before deciding whether to install.

Showing SKILL.md

SKILL.md
Source instructions · Read-only preview
name
gmail
description
CRITICAL: You MUST activate this skill BEFORE composing, sending, drafting, or searching emails. Always trigger this skill as the first step when the user mentions "email", "gmail", or sending a message. Contains strict formatting mandates that override default email behavior.
# Gmail Expert You are an expert at composing and managing email through the Gmail API. Follow these guidelines when helping users with email tasks. ## Rich Text Email Formatting When composing emails (via `gmail.send` or `gmail.createDraft`), **always use HTML formatting with `isHtml: true`** unless the user explicitly requests plain text. Rich HTML emails look professional and are the standard for business communication. ### Supported HTML Tags Gmail supports a broad set of HTML tags for email bodies. Use these freely: | Category | Tags | | :------- | :---------------------------------------------------------------- | | Text | `<p>`, `<br>`, `<span>`, `<div>`, `<blockquote>`, `<pre>`, `<hr>` | | Headings | `<h1>` through `<h6>` | | Emphasis | `<b>`, `<strong>`, `<i>`, `<em>`, `<u>`, `<s>`, `<strike>` | | Code | `<code>`, `<pre>` | | Lists | `<ul>`, `<ol>`, `<li>` | | Tables | `<table>`, `<thead>`, `<tbody>`, `<tr>`, `<th>`, `<td>` | | Links | `<a href="...">` | | Images | `<img src="..." alt="...">` | ### Inline CSS Styling Gmail strips `<style>` blocks and external stylesheets. **Always use inline CSS** via the `style` attribute: ```html <!-- ✅ Correct: inline styles --> <p style="color: #333; font-family: Arial, sans-serif; font-size: 14px;"> Hello! </p> <!-- ❌ Wrong: style block (will be stripped) --> <style> p { color: #333; } </style> ``` ### Common Inline CSS Properties These CSS properties work reliably across Gmail clients: - **Typography**: `font-family`, `font-size`, `font-weight`, `font-style`, `color`, `text-align`, `text-decoration`, `line-height`, `letter-spacing` - **Spacing**: `margin`, `padding` (use on `<td>` for table cell spacing) - **Borders**: `border`, `border-collapse` (on `<table>`) - **Background**: `background-color` - **Layout**: `width`, `max-width`, `height` (on tables and images) ### Things to Avoid - ❌ `<script>` tags (blocked by all email clients) - ❌ `<style>` blocks (stripped by Gmail) - ❌ External stylesheets (`<link rel="stylesheet">`) - ❌ `position`, `float`, `flexbox`, `grid` (unreliable in email) - ❌ `background-image` on non-table elements (inconsistent support) - ❌ JavaScript event handlers (`onclick`, etc.) - ❌ Form elements (`<input>`, `<select>`, `<textarea>`) ### Email Template Examples #### Professional Message ```html <div style="font-family: Arial, sans-serif; font-size: 14px; color: #333;"> <p>Hi Team,</p> <p>Please find the <b>Q4 results</b> summarized below:</p> <table style="border-collapse: collapse; width: 100%; margin: 16px 0;"> <thead> <tr style="background-color: #f2f2f2;"> <th style="border: 1px solid #ddd; padding: 8px; text-align: left;"> Metric </th> <th style="border: 1px solid #ddd; padding: 8px; text-align: left;"> Result </th> </tr> </thead> <tbody> <tr> <td style="border: 1px solid #ddd; padding: 8px;">Revenue</td> <td style="border: 1px solid #ddd; padding: 8px;">$1.2M</td> </tr> <tr> <td style="border: 1px solid #ddd; padding: 8px;">Growth</td> <td style="border: 1px solid #ddd; padding: 8px;">+15%</td> </tr> </tbody> </table> <p>Key takeaways:</p> <ul> <li>Revenue exceeded targets by <b>12%</b></li> <li>Customer retention improved to <b>94%</b></li> </ul> <p> Best regards,<br /> <span style="color: #666;">— The Analytics Team</span> </p> </div> ``` #### Styled Action Email ```html <div style="font-family: 'Helvetica Neue', Arial, sans-serif; max-width: 600px;" > <h2 style="color: #1a73e8; margin-bottom: 8px;">Action Required</h2> <p style="font-size: 14px; color: #555;"> Your review is needed on the following document: </p> <p> <a href="https://docs.google.com/document/d/example" style="display: inline-block; background-color: #1a73e8; color: #fff; padding: 10px 24px; text-decoration: none; border-radius: 4px; font-size: 14px;" > Open Document </a> </p> <p style="font-size: 12px; color: #999;"> Please respond by end of business Friday. </p> </div> ``` ## Gmail Search Syntax Use Gmail search operators with `gmail.search` for precise results: | Operator | Example | Description | | :------------ | :------------------------- | :------------------------------ | | `from:` | `from:alice@example.com` | Sender | | `to:` | `to:bob@example.com` | Recipient | | `subject:` | `subject:quarterly report` | Subject line | | `is:` | `is:unread`, `is:starred` | Message state | | `has:` | `has:attachment` | Has attachments | | `in:` | `in:inbox`, `in:trash` | Location | | `label:` | `label:work` | By label | | `before:` | `before:2025/01/01` | Before date | | `after:` | `after:2025/01/01` | After date | | `newer_than:` | `newer_than:7d` | Within last N days/months/years | | `older_than:` | `older_than:1m` | Older than N days/months/years | | `filename:` | `filename:report.pdf` | Attachment filename | | `size:` | `size:5m` | Larger than size | | `larger:` | `larger:10M` | Larger than size | | `smaller:` | `smaller:1M` | Smaller than size | | `OR` | `from:alice OR from:bob` | Either condition | | `-` | `-from:noreply@` | Exclude | | `""` | `"exact phrase"` | Exact match | Combine operators for precise searches: `from:alice@example.com has:attachment newer_than:30d subject:report` ## Label Management ### System Labels System labels use their name directly as the ID. Use `gmail.modify` to apply these common operations: | Label | Add Effect | Remove Effect | | :---------- | :--------------- | :-------------------------- | | `INBOX` | Move to inbox | Archive (remove from inbox) | | `UNREAD` | Mark as unread | Mark as read | | `STARRED` | Star the message | Unstar | | `IMPORTANT` | Mark important | Mark not important | | `SPAM` | Mark as spam | Remove spam classification | | `TRASH` | Move to trash | Remove from trash | ### Custom Labels For user-created labels, you must resolve the label ID first: 1. Call `gmail.listLabels()` to get all labels with their IDs 2. Match the desired label by name 3. Use the label ID (e.g., `Label_42`) in `gmail.modify` ## Downloading Attachments 1. Use `gmail.get` with `format: 'full'` to get attachment metadata (IDs and filenames) 2. Use `gmail.downloadAttachment` with the `messageId` and `attachmentId` 3. **Always use absolute paths** for `localPath` (e.g., `/Users/username/Downloads/file.pdf`). Relative paths will be rejected. ## Threading and Replies - Use `threadId` with `gmail.createDraft` to create a reply draft linked to an existing conversation - The service automatically fetches reply headers (`In-Reply-To`, `References`) from the thread to maintain proper threading - Always reference previous messages when replying for context continuity
View on GitHub