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.
npx skills add csitte/mailwarden --skill triagegit clone --depth 1 https://github.com/csitte/mailwardenWrote 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.
[](https://agentmods.dev/skills/csitte/mailwarden/triage)<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.
<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>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.
| Model | Per session | Once 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 |
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.
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_modifyresult carriesunverifiedPredicates. 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
searchfirst and act on the thread ids it returns. dryRun: truedoes 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: trueis 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_filterwithapplyToExistingcarries nounverifiedPredicatesat 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 aquerycriterion, 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 withsearchand usebulk_modifyon those thread ids instead — then create the filter for future mail.
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.
- 9d ago Changed · +6 lines 81a49d8def92
- 1mo ago Changed · +7 lines 43cbf01715c7
- 1mo ago Changed · +1 lines 89c3f5a5be35
- 1mo ago First seen · 86 lines · 96 tokens per session scan A 25f65324add0
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.
Other skills, from other repositories
gmail
Send, read, and manage Gmail messages and email attachments automatically.
google-workspace
Google Workspace integration - Gmail, Calendar, Drive operations via Google APIs.
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.
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…
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…
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.