A Claude Code skill that triages my Gmail inbox

Jake Hodges ยท September 4, 2026

This one saves me real time. I check my email in Claude now. It reads the whole inbox, keeps only the threads actually waiting on me, labels and archives the rest, and never deletes anything. The open problem I am still working on is running it across several Gmail accounts at once. If you have solved that, tell me.

Download the skill (5 KB, zip)

If you have not used a skill before, the short version is in the site launch post: a skill is a set of instructions you drop into a folder, and Claude follows it when the work matches.

The single rule

The inbox should contain only threads where someone is waiting on a reply or an action from you.

That is the whole idea. Everything else gets a topic label for later reference, gets marked read, and gets archived. Archiving removes the inbox label and nothing else, so every message stays searchable and every run is reversible.

How it decides: every thread runs four checks in order. Carries a never touch label, so it is left alone. A person is waiting on you, so it stays tagged Need to reply. An unresolved billing or security problem, so it stays tagged Need to review. Already handled by your calendar, so it is labeled and archived. Everything else gets one topic label and is archived, and nothing is ever deleted.

What you need

  • A Gmail connection with modify access, meaning it can add labels and archive. Read-only access is not enough, and the skill stops and tells you rather than retrying in a loop.
  • A Google Calendar connection with read access. Optional, but it is where a lot of the value comes from.
  • Labels already created in Gmail. The skill does not create them for you, on purpose, so it never invents a filing system you did not choose.

Step 1. Install it

Download the zip and unpack it into your personal skills folder.

On macOS or Linux:

unzip ~/Downloads/gmail-inbox-triage-skill.zip -d ~/.claude/skills/

On Windows, in PowerShell:

Expand-Archive -Path "$env:USERPROFILE\Downloads\gmail-inbox-triage-skill.zip" -DestinationPath "$env:USERPROFILE\.claude\skills"

You should end up with a folder called gmail-inbox-triage containing SKILL.md. Restart Claude so it picks up the new skill.

Step 2. Create your labels in Gmail

Make these in Gmail first. The names are yours to change, but this set covers most people's mail.

Two labels for things that stay in the inbox:

  • Need to reply, for when a person asked you something.
  • Need to review, for an unresolved account, billing, security, or compliance problem, or an event you have not answered yet.

Then the buckets for everything that gets archived: newsletters, operational alerts, events and invites, billing and vendors, cold outbound, and real people where no reply is owed. Add your own as you notice patterns.

Step 3. Fill in the configuration

This is the step that decides whether the thing works well or annoys you. Open SKILL.md and complete the configuration block near the top.

Your label IDs. Ask Claude to list your Gmail labels and paste the IDs in. Do not guess them, and do not rely on searching by label name, since that breaks with emoji or renamed labels.

Context about you. One paragraph on what you do, who writes to you, and anything that changes how mail should be read. This is what lets it tell a customer escalation from a vendor newsletter.

Known aliases. Any person who writes to you from more than one address. Getting this wrong is the most common cause of a false alarm, because the same person looks like two strangers.

Teammates. Internal people, so their messages read as internal rather than as an outside ask.

Never touch labels. Threads carrying these are left completely alone. Starred and draft threads belong here, along with anything you already track by hand. This is your escape hatch.

Step 4. Run it

Ask for an inbox triage in plain words. It works through the whole inbox rather than a time window, which matters more than it sounds: if a run fails or you skip a few days, the next run picks up everything that was missed instead of quietly stranding it.

It then classifies each thread. A real person asking you something stays. An unresolved problem with something you run stays. A one-time verification code does not, since it has expired by the time you read it. A notice saying a problem was already fixed does not either. When it cannot decide, it keeps the thread and names it in the report, on the reasoning that burying a real request costs you far more than a wrongly kept newsletter costs.

Step 5. The calendar cross-check

This is the part I did not expect to like as much as I do.

If someone asked to find time and a meeting now exists on your calendar with their address on it, the ask is already satisfied, so the thread gets filed instead of sitting in your inbox as a fake to-do. Invites for events that already happened, or that you already accepted or declined, get filed too.

It works the other direction as well. If a proposed time collides with something already on your calendar, the thread stays and both get named. If an invite went to a different person than the one who asked, that stays too, though it checks your alias list first so a colleague's second address does not trigger a false alarm. It only raises an unanswered invitation when your attendance actually matters, meaning you organized it, you are the only person from your side, or someone outside is expecting you specifically.

Calendar access is read-only. It never creates, edits, or answers an event for you.

The safety rules

These are stated as absolutes in the skill, and they are the reason I am comfortable running it unattended.

  • It never deletes or trashes anything. Labels and archiving only.
  • It never sends an email.
  • It never writes or edits a draft, even when a reply is obviously needed. It describes the reply in the report and leaves the writing to you.
  • It never creates, changes, or answers a calendar event.

What you get back

A short report. How many were archived, how many kept, and for each one kept, who sent it, what it is about, and why it stayed. Anything the calendar turned up. Anything it was unsure about. Security and payment problems are called out by name rather than folded into a count.

It only interrupts you when something actually needs you now: a real security or payment problem, a customer escalation, a deadline expiring today, or the routine itself failing to run.

Worth knowing before you trust it

Expect to adjust the buckets for the first week or two, then leave them alone. Most inboxes settle into six to ten stable categories.

The aliases and teammates lists are what make it accurate. Fill those in properly before letting it run on a schedule.

And the thing I have not solved: running it across several Gmail accounts in one pass. Right now it is built for one person and one inbox. If you have a good approach, I would like to hear it.

TLDR

  • A Claude Code skill that empties your inbox down to only the threads waiting on a reply or an action from you.
  • Everything else gets one topic label and is archived. Nothing is ever deleted, so every run is reversible.
  • It reads your calendar too, so a request that already turned into a meeting stops sitting in your inbox as a fake to-do.
  • It never sends mail, never writes a draft, and never answers a calendar invite. It reports and leaves the writing to you.
  • You need Gmail connected with permission to label and archive. Calendar is optional but is where a lot of the value is.
  • Setup is mostly filling in your labels, your known aliases, and your teammates. Those three decide how accurate it is.

Copy for your AI

Paste this into ChatGPT, Claude, Gemini, or Grok to decide whether it suits how you work, or to get help setting it up.

I am considering a Claude Code skill called "gmail-inbox-triage" that cleans
an inbox on a schedule. Here is exactly what it does. Help me decide if it
suits how I work, and if so help me fill in the configuration.

The single rule: the inbox should contain only threads where someone is
waiting on a reply or an action from the owner. Everything else gets one
topic label, gets marked read, and gets archived. Archiving only removes the
INBOX label, so nothing is deleted and everything stays searchable.

How it runs:
- Searches the WHOLE inbox every time, not a time window. That makes a missed
  or failed run self-healing instead of silently stranding mail.
- Collects every thread before making changes, so archiving does not shift
  pagination underneath it.
- Fetches the full thread before keeping or reporting one, because search
  previews truncate and can omit the newest message.

The four checks, in order:
1. Does the thread carry a "never touch" label (starred, drafts, anything the
   owner already tracks)? Leave it completely alone.
2. Did a real person write the latest message asking the owner something?
   Keep it in the inbox, tagged "need to reply".
3. Is there an unresolved account, billing, security or compliance problem?
   Keep it, tagged "need to review". Expired verification codes and
   already-resolved notices do not count and get archived.
4. Is it already handled by the calendar? Archive it.
Anything else: one best-fit bucket label, then archive.

Calendar cross-check (read-only):
- A scheduling ask that now has a matching event with that person on it is
  satisfied, so it gets filed rather than kept.
- An invite that went to a different person than the one who asked is flagged,
  unless it is a known alias of the same person.
- Unanswered invitations are raised only when the owner's attendance actually
  matters: they organized it, they are the only person from their side, or an
  outside party expects them specifically.
- Past events, and events already accepted or declined, get filed.
- A proposed time that collides with an existing event is kept and flagged.

Hard constraints: never delete or trash anything, never send an email, never
create or edit a draft, never create or RSVP to a calendar event.

Configuration to fill in per account: Gmail label IDs (looked up, never
guessed), a paragraph of context about the owner and who writes to them,
known aliases (people using more than one address), teammates, never-touch
labels, and the bucket labels. Aliases and teammates are what prevent false
alarms.

Requirements: Gmail connected with modify access (labels and archive), and
optionally Google Calendar with read access. Labels must already exist in
Gmail; the skill does not create them.

Reporting: counts archived and kept, each kept thread with sender, subject and
reason, anything the calendar surfaced, anything it was unsure about, and any
security or payment problem called out by name.

My situation: [describe your mail volume, whether you use labels today, how
many accounts, and what you would want kept in your inbox].

Download the skill (5 KB, zip)