From spamhole
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.
npx claudepluginhub danielrosehill/claude-code-plugins --plugin spamholeThis skill uses the workspace's default tool permissions.
Take what SpamHole has learned from the user's mail and turn it into a network-wide DNS block on AdGuard Home.
Guides Next.js Cache Components and Partial Prerendering (PPR): 'use cache' directives, cacheLife(), cacheTag(), revalidateTag() for caching, invalidation, static/dynamic optimization. Auto-activates on cacheComponents: true.
Guides building MCP servers enabling LLMs to interact with external services via tools. Covers best practices, TypeScript/Node (MCP SDK), Python (FastMCP).
Share bugs, ideas, or general feedback.
Take what SpamHole has learned from the user's mail and turn it into a network-wide DNS block on AdGuard Home.
Standard resolver. Read <corpus>/config.json → adguard. If missing, run adguard-configure first.
If password_ref is a 1Password URI, resolve it via op read <ref> (the op-vault plugin handles this if installed; otherwise call op directly).
tracking, ads, or both (default).replace (overwrite SpamHole's section of user rules) or append (additive). Default replace for custom-rules strategy, since dedup matters at the DNS layer.min frequency.! ===== SpamHole start (managed — do not edit) =====
! Generated: <ISO timestamp>
||tracking.example.com^
||other.example.com^
! ===== SpamHole end =====
GET <base>/control/filtering/status (the user_rules field).POST <base>/control/filtering/set_rules with body { "rules": ["...", "..."] }.hosted_url location (Cloudflare R2, gist, local nginx — depends on adguard.list_name/hosted_url config).POST /control/filtering/add_url with { "name": "<list_name>", "url": "<hosted_url>", "whitelist": false }.POST /control/filtering/refresh with { "whitelist": false }.<corpus>/data/adguard-push-log.json: { pushed_at, source, count, strategy }.set_rules is destructive — it replaces ALL user rules. The start/end marker pattern above is essential to avoid wiping the user's hand-curated rules.list-manage.com also serves Mailchimp's hosted preference centres). The export-dns-blocklist skill flags these — surface those warnings here and let the user opt out per-domain before pushing.mcp/adguard-home MCP is wired in via .mcp.json, prefer its tools over raw HTTP calls. The MCP gives idempotent semantics that direct REST does not.