AI-assisted defenses against the kind of spam keyword filters miss — pseudo-personalised wide-scrape outreach, AI-faked impersonation, and tracking-pixel surveillance. Capture samples to a personal corpus, analyse intent, surface filter patterns, scan for tracking pixels (incl. ad-tracker blocking), draft manual unsubscribe replies, push server-side blocks via an email MCP, and contribute to collaborative public blocklists.
npx claudepluginhub danielrosehill/claude-code-plugins --plugin spamholeOne-time setup for AdGuard Home integration. Captures the AdGuard Home base URL, credentials, and target blocklist filename, validates connectivity, and persists to corpus/config.json. Use before adguard-push.
Push the user's accumulated tracking-pixel + ad-tracker domains from the SpamHole corpus into a self-hosted AdGuard Home instance, using the credentials configured by adguard-configure. Network-layer block — every device on the LAN benefits, not just one mailbox. Use when the user wants to apply their corpus findings at the DNS layer.
Run the full SpamHole analysis pipeline on a single email — semantic spam reasoning, tracking-pixel detection, sender block, processed-emails log, markdown report. Use when the user wants a deep dive on one email rather than the lighter capture-spam-sample flow.
Create a server-side Gmail filter that auto-trashes (or labels + archives) future mail from a sender, via an available email MCP. Falls back to recording the block in the local sender-blocklist.json if no MCP is wired up. Use when the user says "block this sender" or "make sure I never see another email from X".
Process every unanalysed .eml file in the user's corpus inputs/emails/ directory through the full analyse-email pipeline. Skips files that already have a corresponding analysis report. Use when the user has dropped many .eml files into the corpus at once.
Capture an unsolicited email into the user's SpamHole corpus, ask why it's spam (what pattern it represents), copy the raw email into the corpus, suggest a filter pattern, suggest system-prompt tuning to catch similar emails, optionally push a server-side Gmail filter via an email MCP, and draft a manual unsubscribe-request reply. Use when the user says "save this as a spam example" or "add this to my SpamHole".
Strip per-recipient identifiers from the user's tracking inventories and prepare a redacted contribution suitable for opening a PR against collaborative public anti-tracking lists (EasyPrivacy, hagezi, oisd, Pi-hole community, AdGuard's tracker filter). Outputs a sanitised diff plus a draft PR description. Does NOT open the PR automatically — the user reviews and submits.
Draft (and optionally send) a manual unsubscribe-request reply to a spam sender — used when the email has no working List-Unsubscribe header or the user wants to make the request human-to-human. Threads on the original message via the available email MCP. Use when the user says "tell them to take me off the list" or "reply asking to be removed".
Aggregate the user's accumulated tracking-domains.json + ad-trackers.json into a portable DNS blocklist (Pi-hole / AdGuard / hosts / dnsmasq formats). Writes to corpus/exports/. Use when the user wants to push their pixel inventory to a network-level blocker.
Bulk scan of recent inbox messages (default last 30) for tracking pixels and ad-tracker beacons. For every detection logs which email it came from, sender, time, recipient, the raw pixel URL, and a suggested block pattern. Appends to the user's tracking inventories. Requires an email MCP (e.g. gws-personal). Use when the user wants visibility into how much pixel surveillance is hitting their inbox right now.
Scan a single email (raw .eml or live message via email MCP) for tracking pixels and ad-tracker beacons, then append every detected pixel host to the user's tracking inventories (tracking-domains.json + ad-trackers.json). Use when the user wants to surgically extract pixels from one email without running the full capture pipeline.
First-run setup for SpamHole. Creates the user's spam-corpus workspace (configurable path) and seeds the JSON inventories — tracking-domains, sender-blocklist, processed-emails, ad-trackers. Use when the user first installs the plugin or wants to point it at a different corpus location.
Summarise the user's accumulated tracking-pixel and ad-tracker inventory — totals by type, top domains, top senders, recent additions. Read-only — does not modify any inventory. Use when the user wants visibility into what their corpus has captured.
Uses power tools
Uses Bash, Write, or Edit tools
Share bugs, ideas, or general feedback.
Own this plugin?
Verify ownership to unlock analytics, metadata editing, and a verified badge.
Sign in to claimOwn this plugin?
Verify ownership to unlock analytics, metadata editing, and a verified badge.
Sign in to claimClaude Code plugin for AI-assisted defenses against the kind of spam that keyword filters miss — pseudo-personalised wide-scrape outreach, AI-faked "I care" impersonation, and tracking-pixel surveillance.
The premise: traditional spam filtering looks at infrastructure (DKIM, SPF, sender reputation). The new wave of spam passes all of that. It's commercial scraped-list outreach with valid auth, real domains, and AI-generated pseudo-personalisation that pretends to engage with you. The signal is in the intent, not the headers — exactly the kind of thing an LLM is well-suited to reason about.
SpamHole is a personal-corpus tool. You feed it the spam that bothers you, it learns the patterns, and it helps you tune filters, push DNS-level blocks, and (optionally) contribute findings to public anti-tracking lists.
| Skill | Purpose |
|---|---|
setup-corpus | First-run scaffolding — creates the user's per-machine spam corpus and seeds inventory files |
capture-spam-sample | Lightweight capture flow — save one annoying email, get a filter pattern + system-prompt tuning suggestion + optional unsubscribe reply |
analyse-email | Heavier forensic pipeline — full SSA, tracking detection, markdown report |
bulk-analyse | Run analyse-email over every queued .eml |
scan-tracking-pixels | Surgical pixel scan on one email |
scan-recent-pixels | Bulk pixel sweep across recent inbox messages — reconnaissance |
tracking-report | Read-only summary of accumulated tracker inventory |
block-sender | Server-side Gmail filter via an email MCP, with local-only fallback |
draft-unsubscribe-reply | Compose (and optionally send) a manual unsubscribe-request reply |
export-dns-blocklist | Materialise inventory as Pi-hole / AdGuard / hosts / dnsmasq / unbound |
adguard-configure | One-time setup for AdGuard Home integration |
adguard-push | Push the corpus's tracker domains directly into AdGuard Home (network-wide block) |
contribute-blocklist | Sanitise and prepare a PR-ready contribution to public anti-tracking lists (EasyPrivacy, hagezi, oisd, AdGuard) |
mcp/adguard-home/ ships a minimal stdio MCP server wrapping the AdGuard Home REST API. Optional — the adguard-* skills can also drive AdGuard Home directly via HTTP.
gws-personal / gws-business) that capture-spam-sample, block-sender, draft-unsubscribe-reply, and scan-recent-pixels use to read messages and create Gmail filters.By default, your corpus lives at ${CLAUDE_USER_DATA:-~/.local/share/claude}/spamhole/corpus/. You can override via setup-corpus — many users will want to point it at a private GitHub repo so the corpus is backed up and versioned.
The plugin itself never reads or writes user data outside the configured corpus path.
.eml files often contain personal identifiers (recipient address embedded in tracking links, internal references). Default to keeping the corpus local and private.contribute-blocklist strips per-recipient identifiers, sender display names, subject lines, and full URLs before exporting — only domain-level data leaves the corpus.op-vault plugin) is recommended for any credentials this plugin handles.claude plugins install spamhole@danielrosehill
The corpus is the hole you toss the spam into. SpamHole is also a deliberate riff on Pi-hole — the spiritual cousin of this plugin at the network layer. SpamHole + Pi-hole / AdGuard Home is the pairing.
v0.1 — converted from the earlier Claude-Spam-Processor workspace template. Skills work; the AdGuard Home MCP is a minimal stub that covers the surface the skills need. Expect breaking changes before v1.0.
MIT — see LICENSE.
Ultra-compressed communication mode. Cuts ~75% of tokens while keeping full technical accuracy by speaking like a caveman.
Comprehensive UI/UX design plugin for mobile (iOS, Android, React Native) and web applications with design systems, accessibility, and modern patterns
No description provided.