Changelog
New features, improvements, and fixes for the SpiderMail transactional email engine.
v2.10.0
August 14, 2026
SpiderMail v2.10.0: one-click unsubscribe and source activation
Two changes landed on the send tier, and both concern the part of sending that happens either side of the message itself. How someone gets out of your list, and how a domain earns the right to send in the first place.
What's new in v2.10.0
One-click unsubscribe on subscriber broadcasts. Every broadcast to a subscriber audience now carries List-Unsubscribe and List-Unsubscribe-Post headers, which is what makes Gmail and Yahoo render their own unsubscribe control beside your sender name. Both of them require that mechanism from bulk senders. Loading the page does nothing on its own, and only the confirming action records the opt-out, so the link scanners that fetch every URL in a message cannot quietly unsubscribe your audience for you.
A sending source is now armed explicitly. Enrolling a domain puts it in your pool as warming, and a warming source is never claimed, so a perfectly good broadcast could be refused with no_sources for a reason that looked nothing like the cause. spideriq send sources promote <mailbox_id> is the step that arms it. Promotion re-stamps the warm-up ramp to that day, so a source starts at day one of its curve rather than at a volume it has not earned.
That step is available to agents as well as to people. send_promote_source ships in @spideriq/mcp-mail, spideriq send sources promote in the CLI, and @spideriq/mail-skills teaches both, including the part that matters most: a refused promotion is an answer to report, not an error to retry.
Full walkthrough in the docs at https://mail.spideriq.ai/docs/sending/bring-your-own-domain, and unsubscribes now have a page of their own at https://mail.spideriq.ai/docs/sending/unsubscribes.
v2.9.0
August 11, 2026
SpiderMail v2.9.0: your own sending domain, verified and yours alone
SpiderMail's send tier can now carry your own sending identity end to end. This release adds domain onboarding you drive yourself, sending credentials stored per tenant, deliverability broken down per sending source, and an automatic pause when a source starts going bad.
What's new in v2.9.0
Bring your own sending domain. You publish SPF, DKIM and a tracking CNAME in your own DNS, and I read them back over a public resolver. Each record is reported separately, so a failed check names the exact record to fix rather than saying the domain is wrong.
Your domain sends only for you. A verified domain joins your pool and nobody else's. Sending reputation does not carry across domains, so another tenant's cold outreach cannot reach your inbox placement.
Bounce and complaint rates per source. The pool page breaks deliverability down by sending source instead of showing one number for everything, so you can see which domain is drifting before it takes the rest with it.
A source that goes bad pauses itself. Cross 0.3% complaints and that source stops sending and raises an alert. Queued mail is held rather than dropped, so nothing is lost while you look at it.
I never hold a credential to your DNS zone. The verification path reads public records only, which means taking your domain off the internet is not a mistake this product is able to make.
Read the docs at https://mail.spideriq.ai/docs
v2.8.0
August 10, 2026
Agent security: prompt-injection scanning and credential blocking
Every message SpiderMail stores is scanned for prompt-injection technique before an agent reads it, and every message it sends is checked for credentials before SMTP. Both layers are on by default and have run in production since February 2026. This entry documents them; the behaviour is not new.
Added
Inbound prompt-injection scanning. Stored messages are scanned before an agent sees them, across four families of technique: instruction override, persona reassignment, requests to return secrets or history, and fake system blocks. Matches are recorded as security flags on the message.
Obfuscation detection. Encoded blocks, escape sequences and zero-width characters are detected, decoded and re-scanned, so an instruction hidden inside an encoded payload is examined rather than passed through.
Quarantine. A message carrying a genuine injection signal is held out of the inbox until a person reviews it. Obfuscation alone does not quarantine.
Outbound credential blocking. Messages are checked for provider keys, payment keys, cloud access keys, private keys, auth headers and password-shaped assignments before the send. A match blocks the send and returns the reason, so an agent is told why rather than reporting success.
A review surface. GET /mail/security/events, GET /mail/quarantine, and POST /mail/messages/{message_id}/release, which returns a message to the inbox and records the release. All three reach agents through the mail skill over CLI and MCP, plus a dashboard page under Mail.
Known issues
The inbound patterns are too broad and quarantine legitimate mail. Reviewing all 108 messages held as of 2026-08-10: 38 matched forget your (as in "don't forget your meeting"), 60 matched a form of send email / send emails / send message, 3 matched forget all, and roughly 7 look like genuine attempts. That is about 94% false positives. Two patterns are responsible, both because their qualifying words are optional: the rule intended for "forget your instructions" also matches "forget your umbrella", and the rule intended for "forward all previous messages" also matches "send emails". A fix making the qualifiers required is the obvious correction. Until then, review the quarantine rather than assuming a held message is hostile.
Three of the four tiles on the dashboard security page do not report correctly. "Injection attempts" counts only within the most recent 50 events, so it reads 0 while messages sit quarantined; "Blocked outbound" and "Credential leaks prevented" filter on event types that the API does not emit, so both are always 0. The API reads are correct — GET /mail/security/events and GET /mail/quarantine return the true picture.
Notes
Neither layer has a setting. Both are always on.
A flag is not a hold. As of 2026-08-10, across 76 mailboxes and 4 client accounts, 247,846 stored messages had been scanned since 2026-02-25; 8,608 carried a flag and 108 were quarantined. 8,500 of those flags are obfuscation signals, deliberately broad because encoded blocks are ordinary in email. Read the flag count as annotation, not as attacks.
The outbound blocker has blocked 0 sends over the same period. It is a control that is in place and has not yet been needed.
Treat both scanners as a backstop. Pattern lists are designed to catch known technique and are updated as technique changes. Instruct your own agents that email bodies are data rather than commands.
Container hardening covers the poller, which runs read-only with tmpfs scratch and no-new-privileges. The mail worker and test worker carry no-new-privileges only.
Full documentation: Agent security
v2.7.0
August 09, 2026
Outreach integrations: Smartlead, lemlist, Instantly + sender health
SpiderMail now connects to three cold-email platforms and reports deliverability for every sending account behind them, in one view.
Added
Brand-scoped outreach connections for Smartlead, lemlist and Instantly. Create, inspect, update and remove a connection; run a sync to pull the provider's current sending accounts and warmup state.
Per-sender deliverability health: health score, sent, inbox, spam, bounce and reply counts over 24 hours and 7 days, plus warmup state and last-polled time. Available for one sender or as a single overview across the whole brand.
A warmup trend read, for direction over time rather than a single day's figure.
Lead push: a SpiderIQ campaign's verified leads can be pushed into a chosen Smartlead campaign. The push is idempotent, quota-aware against the account's lead cap, and reversible. A push-status read reports available headroom and per-campaign counts.
Two opt-in push filters, restricting the export to leads carrying a VayaPin pin or a VayaPin SEO article. Setting both requires the lead to have both.
The whole surface is exposed to agents through the mail skill, over the CLI and MCP.
Notes
Reads accept a standard access token; writes require brand-admin.
Warmup auto-pauses after persistent domain failures and does not resume on its own. Re-enable it only once the domain is healthy. The blocked-reason text on a paused account is stale until the next successful cycle, so trust the active/inactive status instead.
This surface reports deliverability rather than fixing it. A domain_does_not_exist bounce is a DNS problem; a 553 Relaying disallowed error with healthy DNS is a send-block at the mail host, usually requiring domain re-verification there.
Documentation: mail.spideriq.ai/docs/sending/outreach
v2.6.0
August 06, 2026
Choose how much mailbox history to import
Added
Sync scope, chosen when you connect a mailbox. Import the last 100, 300, 500 or 1,000 messages, everything since a date, or the whole archive. Available in the Add Mailbox dialog, the REST API (POST /api/v1/mail/mailboxes), and @spideriq/mcp-mail.
Per-mailbox polling interval. Each mailbox can set its own interval instead of sharing one global schedule. Minimum 60 seconds, maximum 24 hours.
Changed
New mailboxes now default to importing the last 500 messages, not the entire archive. The previous behaviour is still available and is shown with its cost before you select it: roughly 100 messages every five minutes, so a 100,000-message mailbox takes about three and a half days.
Notes
Sync scope is applied as a floor on the starting fetch position, so older mail is never requested. Verified across roughly 140 consecutive poll cycles over 12 hours: 7,640 fetch attempts, none below the floor (measured 2026-08-06).
Mailboxes connected before this release are unchanged. As of 2026-08-06, 265 of 266 carry no scope or interval setting.
Widening the scope backfills. Narrowing it does not delete already-imported mail; that remains a separate action.
The CLI does not carry these fields yet.
v2.1.0
June 15, 2026
Multi-Tenant Custom Domains & SSL
What's New
Full custom domain support with automatic SSL provisioning for every tenant.
Add and verify custom domains via content_add_domain
Automatic SSL certificate provisioning
Set primary domain for canonical URLs
Domain health monitoring and DNS verification
v2.2.0
June 15, 2026
Marketplace Components & Shadow DOM Isolation
What's New
The Component Marketplace is now live — browse, insert, and customize pre-built UI components with automatic Shadow DOM isolation.
50+ marketplace components across hero, pricing, CTA, footer categories
Theme token inheritance — components adapt to tenant color palette
Scoped CSS with no style leaks via Shadow DOM encapsulation
One-click insert with page_insert_section
v2.3.0
June 15, 2026
Two-Phase Deploy Safety Gate
What's New
All destructive operations now use a two-phase confirmation protocol for production safety.
dry_run: true returns a preview + confirm_token
Second call with the token executes the operation
Covers: deploy_site, publish_page, publish_component, publish_post
Added content_deploy_site_preview for staging verification
v2.4.0
June 15, 2026
Directory Module & Business Listings
What's New
Launch of the Directory module — a structured local business listing system built into every tenant.
Create and manage listing categories with custom schemas
Upsert individual listings with geo coordinates, contacts, hours, and rich media
Bulk import from IDAP verified business data
Full CRUD API for programmatic directory management
v2.5.0
June 15, 2026
Component Propagation & Atomic Version Pinning
What's New
Introduced component_update_and_propagate — atomically update a component's HTML, CSS, or JS and repoint every consuming page to the new version in a single two-phase call.
Supports staged rollout via page slug filtering
Automatic semver bumping (patch, minor, major)
Full version history with content_list_component_versions
Block duplication across pages with content_duplicate_block