# Gmail Chrome

> Automate Gmail actions using Chrome DevTools MCP - search, read, compose, reply, and manage emails

- Skill: `different-ai/gmail-chrome` (Agent Skill, multi-file: 2 files)
- Install (CLI): `npx skillmds@latest add different-ai/gmail-chrome`
- Raw SKILL.md: https://api.skillmd.com/api/skills/different-ai/gmail-chrome/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: AI & ML
- License: MIT
- Author: different-ai (https://skillmd.com/u/different-ai)
- Updated: 2026-09-09
- Page: https://skillmd.com/skills/different-ai/gmail-chrome

---


## What I Do

- Search and read emails in Gmail
- Compose and send new emails
- Reply to existing threads
- Archive, delete, and label emails
- Navigate Gmail efficiently using keyboard shortcuts

## Prerequisites

- Chrome browser open with Gmail tab
- Chrome DevTools MCP server running (configured in opencode.json)
- Logged into Gmail in the browser

## Context Management Strategy

**IMPORTANT**: Gmail's DOM is complex. To prevent context overflow:

1. **Take snapshots sparingly** - Only snapshot when you need to find elements
2. **Use keyboard shortcuts** when possible (faster than clicking)
3. **Work in batches** - Complete one action fully before starting next
4. **Clear context** between major operations

## Core Gmail Operations

### 1. Navigate to Gmail

```
chrome_navigate_page(url: "https://mail.google.com")
chrome_wait_for(text: "Inbox")
```

### 2. Search for Emails

Gmail search is the fastest way to find emails:

```
# Take snapshot to find search box
chrome_take_snapshot()

# Find the search input (usually has placeholder "Search mail")
chrome_fill(uid: "<search-input-uid>", value: "from:sender@example.com")
chrome_press_key(key: "Enter")
chrome_wait_for(text: "results")
```

**Common search operators**:

- `from:email@example.com` - From specific sender
- `to:email@example.com` - To specific recipient
- `subject:keyword` - Subject contains keyword
- `is:unread` - Unread emails only
- `is:starred` - Starred emails
- `has:attachment` - Has attachments
- `after:2024/01/01` - After date
- `before:2024/12/31` - Before date
- `label:important` - Has label

### 3. Read an Email

```
# After search results appear, take snapshot
chrome_take_snapshot()

# Click on email row to open it
chrome_click(uid: "<email-row-uid>")

# Wait for email to load
chrome_wait_for(text: "Reply")

# Take snapshot to read content
chrome_take_snapshot()
```

### 4. Compose New Email

**Using keyboard shortcut (preferred)**:

```
# Press 'c' to compose (Gmail shortcut)
chrome_press_key(key: "c")
chrome_wait_for(text: "New Message")

# Take snapshot to find compose fields
chrome_take_snapshot()

# Fill in the compose form
chrome_fill(uid: "<to-field-uid>", value: "recipient@example.com")
chrome_press_key(key: "Tab")
chrome_fill(uid: "<subject-field-uid>", value: "Email Subject")
chrome_press_key(key: "Tab")
chrome_fill(uid: "<body-field-uid>", value: "Email body content here...")

# Send with Ctrl+Enter or click Send
chrome_press_key(key: "Control+Enter")
```

### 5. Reply to Email

```
# With email open, press 'r' to reply
chrome_press_key(key: "r")
chrome_wait_for(text: "Send")

# Take snapshot to find reply box
chrome_take_snapshot()

# Type reply
chrome_fill(uid: "<reply-body-uid>", value: "Your reply here...")

# Send
chrome_press_key(key: "Control+Enter")
```

### 6. Archive Email

```
# With email open or selected, press 'e' to archive
chrome_press_key(key: "e")
```

### 7. Delete Email

```
# With email open or selected, press '#' to delete
chrome_press_key(key: "Shift+3")  # '#' key
```

### 8. Star/Unstar Email

```
# Press 's' to star/unstar
chrome_press_key(key: "s")
```

### 9. Mark as Read/Unread

```
# Press 'Shift+i' to mark as read
chrome_press_key(key: "Shift+i")

# Press 'Shift+u' to mark as unread
chrome_press_key(key: "Shift+u")
```

### 10. Navigate Between Emails

```
# Press 'j' for next email
chrome_press_key(key: "j")

# Press 'k' for previous email
chrome_press_key(key: "k")

# Press 'u' to go back to list
chrome_press_key(key: "u")
```

## Gmail Keyboard Shortcuts Reference

| Action         | Shortcut      | Notes                        |
| -------------- | ------------- | ---------------------------- |
| Compose        | `c`           | Opens new compose window     |
| Reply          | `r`           | Reply to current email       |
| Reply all      | `a`           | Reply to all recipients      |
| Forward        | `f`           | Forward email                |
| Send           | `Ctrl+Enter`  | Sends composed email         |
| Archive        | `e`           | Archives selected/open email |
| Delete         | `#` (Shift+3) | Moves to trash               |
| Star           | `s`           | Toggle star                  |
| Mark read      | `Shift+i`     | Mark as read                 |
| Mark unread    | `Shift+u`     | Mark as unread               |
| Next email     | `j`           | Move to next in list         |
| Previous email | `k`           | Move to previous             |
| Back to list   | `u`           | Return to inbox view         |
| Search         | `/`           | Focus search box             |
| Select all     | `*+a`         | Select all visible           |
| Deselect all   | `*+n`         | Deselect all                 |

## Element Identification Tips

Gmail elements can be identified by:

1. **Aria labels**: Most buttons have descriptive aria-labels
   - "Compose" button
   - "Send" button
   - "Archive" button

2. **Placeholder text**: Input fields often have placeholders
   - "Search mail"
   - "To"
   - "Subject"

3. **Content text**: Email subjects and sender names

## Example: Find and Reply to Specific Email

```
# 1. Navigate to Gmail
chrome_navigate_page(url: "https://mail.google.com")
chrome_wait_for(text: "Inbox")

# 2. Search for the email
chrome_take_snapshot()  # Find search box
chrome_fill(uid: "<search-uid>", value: "from:important@client.com subject:urgent")
chrome_press_key(key: "Enter")
chrome_wait_for(text: "results")

# 3. Open the email
chrome_take_snapshot()  # Find email row
chrome_click(uid: "<email-row-uid>")
chrome_wait_for(text: "Reply")

# 4. Read the email content
chrome_take_snapshot()
# ... process the email content from snapshot ...

# 5. Reply
chrome_press_key(key: "r")
chrome_wait_for(text: "Send")
chrome_take_snapshot()  # Find reply body
chrome_fill(uid: "<reply-body-uid>", value: "Thank you for your email...")
chrome_press_key(key: "Control+Enter")
```

## Example: Bulk Archive Emails

```
# 1. Search for emails to archive
chrome_fill(uid: "<search-uid>", value: "is:read before:2024/01/01")
chrome_press_key(key: "Enter")
chrome_wait_for(text: "results")

# 2. Select all visible emails
chrome_press_key(key: "*")  # Open selection menu
chrome_press_key(key: "a")  # Select all

# 3. Archive all selected
chrome_press_key(key: "e")
```

## Troubleshooting

### Gmail Not Loading

- Check if logged in
- Try refreshing: `chrome_navigate_page(type: "reload")`

### Compose Window Not Opening

- Ensure keyboard shortcuts are enabled in Gmail settings
- Try clicking compose button instead of 'c' key

### Elements Not Found

- Gmail DOM is dynamic; take a fresh snapshot
- Wait for page to fully load
- Try scrolling to make elements visible

### Slow Response

- Gmail is heavy; allow extra time for actions
- Use `chrome_wait_for()` between major operations

## When to Use This Skill

- Automating email workflows
- Bulk email operations
- Reading and responding to emails programmatically
- Email search and analysis
- Testing email-related features

