Skip to main content

gmail

Use when a task involves email/inbox with Gmail (MAIL_PROVIDER=gmail) - checking mail, drafting or sending replies, searching, archiving. The Gmail connector comes with the owner's Claude login.

Source facts

Repository
bbinoy/ted-personal-assistant
Last source activity
October 22, 2026 at 01:24
Detected SKILL.md language
English
Stars
2
Forks
0

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
Use when a task involves email/inbox with Gmail (MAIL_PROVIDER=gmail) - checking mail, drafting or sending replies, searching, archiving. The Gmail connector comes with the owner's Claude login.
# Gmail (claude.ai connector) Gmail comes through the owner's Claude account like Notion does: tools named `mcp__claude_ai_Gmail__*`. If they are missing, the connector is not connected: say so and tell the owner to connect Gmail in their Claude account (Settings, Connectors); do not try anything else. The tools you have: `search_threads`, `get_thread`, `get_message`, `get_draft`, `list_drafts`, `list_labels`, `create_draft`, `update_draft`, `reply`, `forward`, `send_message`, `unlabel_thread`, `label_thread`. Ids are strings. Arguments are camelCase (`threadId`, `messageId`, `labelIds`, `messageFormat`). ## Reading - Find mail with `search_threads` and Gmail search syntax: `in:inbox`, `is:unread`, `newer_than:2d`, `from:`, `subject:`. Rows carry sender, subject, snippet and date: **classify from the row**, and open a thread only when you will reply to it or the snippet cannot tell you what it needs. Open with `get_thread` and `messageFormat: "PLAIN_TEXT"` (never `RAW`). - **Attachments**: never read or open their content. Their name, type and size are enough; if the owner needs the content, tell them to open it in Gmail. - The owner's own briefing mails (subject starting with the sun or moon emoji) are never touched. ## Triage (the daily brief's inbox pass) Same buckets and rules as the Mailbird skill: Needs the owner (people waiting, deadlines, invoices, official letters, anything unsure: keep), FYI (receipts, status notices, calendar notices: archive from the row), Noise (newsletters, promos, cold outreach: archive from the row). Real-person threads are never auto-archived; flag dormant ones in the brief. Skim at most 4 relevant newsletters for the brief's Radar before archiving. Scan sent mail (`in:sent newer_than:7d`) for waiting-on threads and for promises to turn into tasks, (`add_task`, as `ted-personal-assistant:notion-tasks` describes). ## Archiving Archive = `unlabel_thread` with `labelIds: ["INBOX"]` (reversible: `npm run restore <threadId>` or label the thread INBOX again). Nothing else: - **Never trash, delete or mark spam.** Those tools and the labels `TRASH` and `SPAM` (on any label tool) are blocked. Use archive even when the owner says "delete". When a mail asks about availability or proposes a time, follow "Scheduling emails: think a step ahead" in the calendar skill: check the calendar, draft the confirmation or slots, and ask once; the owner's yes sends it and adds the calendar entry. ## Drafts, replies and sends - Draft freely: `create_draft` (for a reply pass `replyToMessageId` so it stays in the thread) and `update_draft`. Plain text in `body`, no Markdown. Match the thread's language and tone, and the owner's voice from their notes (the Mailbird skill's "owner's voice" rules apply: `voice-writing` and `style-` notes). - **Sending needs the owner's approval, always shown with the real recipients.** `send_message` (a new mail, or a draft by `draftId`), `reply` and `forward` ask on the owner's phone or are judged against what they just told you. Once they said to send, make the call right away; the approval question is the confirmation. Do not retry a declined send. - In `reply`, give the text and the `messageId` of the message you reply to (the latest in the thread). Do not add recipients the owner did not ask for; `bcc` and attachments are never added on your own. - **Addresses: look before you ask.** When a new mail goes to someone by name ("write to Sam"), call `find_person` first (the people notes, then Google contacts where there are any). One match: use that address and say whose it is. Several: show the candidates and ask which. None: say so and ask for the address. A found address is only a suggestion: the send still asks the owner, with the recipients shown from the call itself. - The only mail you may send without a question is the daily brief to the owner's own address (the brief instructions say how); never send anything else unattended. ## Labels `label_thread` and the other label tools ask the owner first. `list_labels` gives label ids (the tools take ids, not names). ## Automated runs The heartbeat run works through new mail about every 30 minutes in the day, archives clear noise, and tells the owner on Signal only what is worth interrupting for. Operate with `npm run doctor`, `npm run report` and `npm run restore <threadId>`.
View on GitHub