triage

triage is a skill for Claude Code from csitte/mailwarden. It costs 96 tokens per session (1,538 once invoked), scanned A, original, MIT.

A Gmail inbox workflow for mailwarden, covering search, bulk changes, snoozing, unsubscribing, and recurring checks. It includes safeguards because Gmail search indexes can sometimes return inaccurate message labels.

In plain words
What is it for?
Finding mail, cleaning up inboxes, applying bulk actions, snoozing threads, unsubscribing, and checking an inbox repeatedly.
Why use it?
It reduces the risk of archiving, labeling, or changing messages that do not actually match the intended query.

Skill for Claude Code

Written for Claude Code: shipped in a Claude Code plugin.

Part of the mailwarden plugin — 2 skills, 1 MCP server shipped together

Good fit Finding mail, cleaning up inboxes, applying bulk actions, snoozing threads, unsubscribing, and checking an inbox repeatedly.

Compare 6 skills from other repositories ↓
Install with agentmods
npx agentmods add skills/csitte/mailwarden/triage
Install

Getting it into your agent

One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.

Any agent
npx skills add csitte/mailwarden --skill triage
Clone the repo
git clone --depth 1 https://github.com/csitte/mailwarden

Made for: Claude Code.

Or install mailwarden, the plugin that ships this one along with the rest of its 2 skills, 1 MCP server.

Wrote this? Show the measurements

A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.

agentmods badge for triage

README.md
[![agentmods](https://agentmods.dev/badge/skills/csitte/mailwarden/triage/github.svg)](https://agentmods.dev/skills/csitte/mailwarden/triage)
Your own site
<a href="https://agentmods.dev/skills/csitte/mailwarden/triage"><img src="https://agentmods.dev/badge/skills/csitte/mailwarden/triage/github.svg" alt="Measured on agentmods" height="20"></a>

Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.

agentmods 80×15 button for triage

Your own site · 80×15
<a href="https://agentmods.dev/skills/csitte/mailwarden/triage"><img src="https://agentmods.dev/badge/skills/csitte/mailwarden/triage.svg" alt="Reviewed on agentmods" width="80" height="20"></a>
Per session 96 Skills are progressive disclosure: only the name and description are preloaded; the body loads when the skill is used.
When invoked 1,538 The whole file, excluding the scripts and references it only reads on demand.
Security scan A 0 findings. A grade says what 26 rules found in the file — not that it is safe.
Origin original No closer match found in the catalogue.
Token cost

What it costs to keep this loaded

Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.

ModelPer sessionOnce invoked
Fable 5.1 $0.00096 $0.01538
Opus 5.5 $0.00038 $0.00615
Sonnet 5.5 $0.00019 $0.00308
Haiku 4.5 $0.00010 $0.00154

Measured 9d ago against content hash 81a49d8def92, method: parsed. Prices are Anthropic first-party input rates as of 2026-10-07, from the pricing page.

Security

Grade A, and why

triage scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 9d ago.

A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.

Nothing flagged

None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.

skills/triage/SKILL.md · 100 lines

How it starts

The opening of the file, as written. The whole thing — 100 lines — stays where its author put it; the contents beside it link to each section on GitHub.

Triage a mailbox with mailwarden

The tools are self-describing; this is about the handful of places where the obvious call is the wrong one. Everything below is a property of the tools, not a style preference.

The one rule that prevents lost mail

search re-verifies its hits. bulk_modify does not. search fetches every thread it returns anyway, so it checks each one's live labels against your query and drops the index's false positives. A bulk action is sized in thousands and cannot pay that, so it acts on what Gmail's index returned.

That matters because the index can be wrong about read state in a way that is neither rare nor uniform: in one measured mailbox, category:updates is:unread matched 131 threads through the thread index of which only 17 held an unread message — a bulk archive over that query would have moved 114 threads the user had already read. Another mailbox, measured the same day, drifted not at all. A server cannot tell which kind of mailbox it is in, and neither can you.

So:

  • Every bulk_modify result carries unverifiedPredicates. Empty means the query had no condition worth distrusting — proceed. Non-empty (+UNREAD, -INBOX, …) means those conditions rest on the index alone.
  • When it is non-empty and a wrong hit would matter — anything the user would notice or cannot easily undo — resolve the set with search first and act on the thread ids it returns.
  • dryRun: true does not close this gap. It re-reads the same index, so it confirms how big the set is, never whether it is right. Use it for size, not for correctness.
  • crossCheck: true is the cheap middle option: it re-asks each predicate as a label filter and drops messages the two routes disagree about, for one extra list call per predicate. Read a disagreement as real and agreement as nothing — both routes read the same index.
  • create_filter with applyToExisting carries no unverifiedPredicates at all — do not read its absence as an empty list. The sweep's query is built from your criteria, and the way it is built (parentheses around a query criterion, quotes around every address or subject) switches the derivation off for every filter that can be defined, so the field would be empty even where the criteria do rest on read state. Treat a sweep as acting on the index's answer, always. When the set has to be right before anything is written, resolve it with search and use bulk_modify on those thread ids instead — then create the filter for future mail.

Read the full file on GitHub · 100 lines

Changes

What this file has done since we first saw it

Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.

  1. 9d ago Changed · +6 lines 81a49d8def92
  2. 1mo ago Changed · +7 lines 43cbf01715c7
  3. 1mo ago Changed · +1 lines 89c3f5a5be35
  4. 1mo ago First seen · 86 lines · 96 tokens per session scan A 25f65324add0

Subscribe to this mod's changes

triage is a skill published in the GitHub repository csitte/mailwarden (0 stars, last pushed yesterday), licensed MIT. It adds 96 tokens to every session and 1,538 once invoked, about $0.0004 per session on Opus 5.5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-09-04.

Related

Other skills, from other repositories

gmail

Send, read, and manage Gmail messages and email attachments automatically.

AbdullahMalik17/malikclaw · 15 tokens

google-workspace

Google Workspace integration - Gmail, Calendar, Drive operations via Google APIs.

chainlesschain/chainlesschain · 17 tokens

gmail-tool

Gmail integration tool. Performs unread check, body retrieval, and draft creation via Gmail API using OAuth2. Use when: Use when: you need to check received emails, read email bodies, create drafts, search the inbox, or work with labeled emails.

xuiltul/animaworks · 55 tokens

mail-operations

Use this skill whenever the user wants to interact with email. This includes reading inbox, sending emails, replying, searching messages, managing labels and categories, downloading attachments, setting up auto-reply rules, or triggering agents to handle incoming emails. Supports Gmail, Outlook, and IMAP/SMTP (QQ…

desirecore/market · 151 tokens

email

Search and read the user's mail through the your-mail MCP server, a read-only mirror of their IMAP accounts indexed by notmuch. Use it to find messages, read threads, summarise and triage mail, and pull details (booking references, invoices, what someone promised) into other work. It cannot send, delete, move or…

wildsurfer/your-mail-mcp · 73 tokens

c-email

Read, send, search, and label email via gog (Gmail CLI) or himalaya (IMAP). Supports inbox management, drafting replies, thread viewing, and label/folder operations across Gmail and standard IMAP accounts.

daxaur/openpaw · 49 tokens