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 agentmods add instructions/csitte/mailwarden/claude-mdgit clone --depth 1 https://github.com/csitte/mailwardenWhat 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 | $0.04026 | $0.04026 |
| Opus 5 | $0.02013 | $0.02013 |
| Sonnet 5 | $0.00805 | $0.00805 |
| Haiku 4.5 | $0.00403 | $0.00403 |
Grade A, and why
mailwarden CLAUDE.md 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 2d 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 — 175 lines — stays where its author put it; the contents beside it link to each section on GitHub.
mailwarden — Projektinstruktionen
Native Gmail-MCP-Server (TypeScript, Node ≥20). Veröffentlicht als npm-Paket mailwarden
und in der MCP-Registry als io.github.csitte/mailwarden.
Harte Design-Regeln (nicht ohne Rücksprache ändern)
- Kein Senden — by design. Es gibt keine compose/reply/forward/send-Tools. Das ist die
zentrale Sicherheitszusage gegen Prompt-Injection-Exfiltration und der wichtigste
Differenzierer — siehe
SECURITY.md. Auchcreate_filtererzeugt nie eine Forwarding-Regel. Präzise formulieren: von Google erzwungen ist das nur imread-Tier (gmail.readonly);gmail.modifyist bei Google fürmessages.sendzulässig (13.08.2026 live bestätigt), dort trägt die Tool-Oberfläche die Zusage. Nie wieder „die Scopes können nicht senden" schreiben. Das prüft seit 26.08. ein Test (test/send-claims.test.ts+scripts/lib/send-claims.mjs): jede scope-verankerte No-Send-Aussage muss in einer Allowlist stehen — dieselbe Mechanik wie beim Egress-Guard. Eine neue Formulierung brichtnpm test, bis jemand sie einträgt. Anlass: die Regel stand hier schon und wurde trotzdem zweimal verletzt (13.08. in sechs Dateien, 26.08. in 0.15.0 ausgeliefert). Seit 20.08. zusätzlichsrc/egress.ts: ein Checkpoint umrequest()des Auth-Clients, Allowlist der 15 tatsächlich genutzten Endpunkte — das sind 13 Einträge inALLOWED, weil einermodify|trash|untrashin einem Ausdruck zusammenfasst; wer die Datei zählt, kommt auf 13, wer Endpunkte zählt, auf 15 (csitte kam bei der Verifikation auf 14, und das kam aus genau dieser Doppeldeutigkeit) — plus vorgeschaltete Denylist (send/drafts/import/insert/Hard-Delete/settings außer filters). Damit ist die Zusage im Server erzwungen — aber weiter nicht am Token: ein gestohlenesgmail.modify-Refresh-Token sendet von woanders. Wer einen Endpunkt neu benutzt, muss ihn dort eintragen, sonst fliegt der Aufruf. Die beiden Listen sind bewusst asymmetrisch (23.08.): die Denylist matcht einen normalisierten Pfad (Upload-Präfixe gestrippt, Mehrfach-Slashes gefaltet), weilgoogleapisbeimediaauf/upload/gmail/v1/...zielt — ein realer Sendeweg, den auf/gmail/v1verankerte Regeln nie sahen. Die Allowlist matcht weiter roh und darf das nie ändern: sonst bekäme jeder erlaubte Endpunkt eine zweite, ungeprüfte Schreibweise. Merksatz: Denylist so breit wie die API wirklich ist, Allowlist so eng wie mailwarden wirklich ist. - Kein Hard-Delete. Nur
trash/untrash(wiederherstellbar). - Live-API, kein Cache. Kein Mailbox-Spiegel, kein Suchindex. Einziger lokaler Zustand:
~/.mailwarden/(credentials.json,token.json, ggf.token.<account>.json). - Suchtreffer werden re-verifiziert.
threads.list(nicht „der Suchindex") kann Read-State-Operatoren aus einem veralteten **Thread-**Read-State beantworten (gemessen 15.08.2026: 131 Treffer fürcategory:updates is:unread, davon 114 ohne eine einzige ungelesene Nachricht = 87 %; in der Nacht darauf über beide Endpunkte nachgemessen 132/114 — eine Mail kam dazwischen, beide Zahlen stehen, und welche Zahl aus welcher Messung stammt, steht indocs/measurements.json(ein Test prüft, dass keine Zahl ohne Beleg im Repo steht) — im selben Durchgang ein zweites Postfach mit 0 Drift, und dieselbe Query übermessages.listim selben Postfach in derselben Minute: 19 Treffer, 0 veraltet).search()geht überthreads.listund prüft deshalb jeden Treffer gegen die echten Labels; der Message-Pfad (bulk_modify) ist ein anderer Fall. Drei Formulierungen sind verbrannt und nicht wiederzubeleben: der Index „verwerfeis:unread" (falsch — dieselbe Query ohne das Prädikat liefert 800+, es wirkt also), es liege an bestimmten Operator-Kombinationen (falsch — auch die simpelste Query zeigt den Effekt; „größter Effekt" nur absolut, 136 Threads, in Prozent ist sie mit 58 % die schwächste), und es betreffeis:unreadallgemein (unbelegt — das zweite Postfach widerspricht). Belegt ist: postfachabhängig, und ein Server kann vorher nicht wissen, in welchem er steckt. Demo gegen eine Fake-API:node scripts/demo-reverify.mjs; Messung im eigenen Postfach:node scripts/probe-reverify.mjs.
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.
- 2d ago First seen · 175 lines · 4,026 tokens per session scan A f00123811420
mailwarden CLAUDE.md is an instructions file published in the GitHub repository csitte/mailwarden (0 stars, last pushed 2d ago), licensed MIT. It adds 4,026 tokens to every session, about $0.0201 per session on Opus 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-08-31.
Other instructions, from other repositories
gmail-multi-mcp CLAUDE.md
Claude Code instructions for ishaan-skyacres/gmail-multi-mcp, covering claude.md, project overview, key dependencies, development commands and build cli only.
Gmail-MCP-Server CLAUDE.md
Instructions for ArtyMcLabin/Gmail-MCP-Server, covering claude.md - gmail mcp server, branch workflow and pr & issue review.
google-mcp CLAUDE.md
Instructions for quinnjr/google-mcp, covering claude.md, commands, architecture, entry & server and auth.
proton-mail-bridge-client AGENTS.md
Instructions for googlarz/proton-mail-bridge-client, covering memory context and claude-mem status.
gmail-mcp CLAUDE.md
Instructions for cunicopia-dev/gmail-mcp, covering gmail mcp — development guide, what it is, layout, module responsibilities and oauth model.
your-mail-mcp CLAUDE.md
Instructions for wildsurfer/your-mail-mcp, covering your-mail-mcp, status, invariants, design decisions and layout.