WYRE-AI/msp-claude-plugins/msp-claude-plugins/spamtitan/spamtitan/skills/quarantine/SKILL.md
SpamTitan Quarantine
SpamTitan quarantine queue: quarantine types, release vs. delete semantics, message aging, email flow statistics, and the tenant-isolation limit — the queue listing accepts no domain filter, so on a multi-tenant appliance it spans every customer.
- Source repository stars
- 42
- Declared platforms
- 0
- Static risk flags
- 1
- Last source update
- 2026-08-28
- Source checked
- 2026-08-28
Decision brief
What it does: where it fits
SpamTitan quarantine queue: quarantine types, release vs. delete semantics, message aging, email flow statistics, and the tenant-isolation limit — the queue listing accepts no domain filter, so on a multi-tenant appliance it spans every customer.
Not for
- Tasks that require unconfirmed production actions or broad system permissions.
- Environments where the pinned source and install steps cannot be inspected.
Compatibility matrix
Platform support, with evidence labels
| Platform | Status | Evidence | What to check |
|---|---|---|---|
| Codex | Not declared | No explicit evidence | Portability before use |
| Claude Code | Not declared | No explicit evidence | Portability before use |
| Cursor | Not declared | No explicit evidence | Portability before use |
| Gemini CLI | Not declared | No explicit evidence | Portability before use |
Installation
Inspect first. Install second.
The source command is displayed only when detected. A safe inspection prompt is always available so your agent can explain every action before execution.
npx skills add https://github.com/WYRE-AI/msp-claude-plugins --skill "msp-claude-plugins/spamtitan/spamtitan/skills/quarantine"Inspect the Agent Skill "SpamTitan Quarantine" from https://github.com/WYRE-AI/msp-claude-plugins/blob/5005f73ba2f52cd299f58aa6bb79f4e70ae87103/msp-claude-plugins/spamtitan/spamtitan/skills/quarantine/SKILL.md at commit 5005f73ba2f52cd299f58aa6bb79f4e70ae87103. List every install step, command, network request, credential, file read/write, external action, and rollback step. Explain whether it fits my task. Do not install or execute anything until I approve.
Workflow
What the source asks the agent to do
- 01
Daily Quarantine Review
1. Call spamtitangetstats with period=today (and domain for one customer) to get a quick overview of email volume and spam rates 2. Call spamtitangetqueue to list held messages. There is no date filter, so page through and cut by receivedat yourself; there is no domain filter ei…
Call spamtitangetstats with period=today (and domain for oneCall spamtitangetqueue to list held messages. There is no date filter,Sort by score — low-scoring probablespam messages are most likely to be false positives - 02
Anti-triggers
Managing a sender list as a decision in its own right — allowlisting
Managing a sender list as a decision in its own right — allowlistingMail that already reached the mailbox — SpamTitan filters in frontA quarantine belonging to a different gateway — every mail security - 03
Key Concepts
SpamTitan maintains separate quarantine queues for different threat categories:
Spam — High-confidence unsolicited commercial emailProbable Spam — Lower-confidence spam; may include false positivesPhishing — Detected phishing or credential harvesting attempts - 04
Quarantine Types
SpamTitan maintains separate quarantine queues for different threat categories:
Spam — High-confidence unsolicited commercial emailProbable Spam — Lower-confidence spam; may include false positivesPhishing — Detected phishing or credential harvesting attempts - 05
Release vs. Delete
Release — Delivers the held message to the recipient's inbox. Use for confirmed false positives.
Release — Delivers the held message to the recipient's inbox. Use for confirmed false positives.Delete — Permanently removes the message. Use for confirmed spam or malicious mail.Virus-quarantined messages should never be released — malware detections are high-confidence.
Permission review
Static risk signals and limitations
Network access
The documentation includes network, browsing, or remote request actions.
"links": ["https://vendor-newsletter.com/weekly-update/2026-03-02"],Evidence record
Why each signal appears
| Signal | Value | Evidence type | Meaning |
|---|---|---|---|
| Quality score | 92/100 | Computed | Documentation, specificity, maintenance, and trust rules |
| Repository stars | 42 | Source | Repository attention, not individual Skill quality |
| Compatibility | 0 platforms | Source | Declared in the catalog source record |
| Usage guide | automated source guide | Editorial | Generated or reviewed according to the visible evidence level |
Pinned source
Provenance and original SKILL.md
- Repository
- WYRE-AI/msp-claude-plugins
- Skill path
- msp-claude-plugins/spamtitan/spamtitan/skills/quarantine/SKILL.md
- Commit
- 5005f73ba2f52cd299f58aa6bb79f4e70ae87103
- License
- Apache-2.0
- Collected
- 2026-08-28
- Default branch
- main
View the original SKILL.md
SpamTitan Quarantine Management
Overview
SpamTitan's quarantine holds inbound emails that its filtering engine determines are likely spam, phishing, or malware. Administrators and end users can review held messages and either release legitimate emails (false positives) or permanently delete spam. For MSPs managing multiple clients, efficient quarantine management is critical to preventing false positives from disrupting business communications while ensuring malicious mail is never delivered.
Anti-triggers
- Managing a sender list as a decision in its own right — allowlisting
the sender of one released message is a follow-up call, covered here.
Auditing, scoping, or removing list entries is
SpamTitan Lists. - Mail that already reached the mailbox — SpamTitan filters in front
of the tenant and cannot reach into an inbox. Clawing back delivered
mail is
Abnormal Security ThreatsorIRONSCALES Incidents. - A quarantine belonging to a different gateway — every mail security
product in this fleet has one and none of them share message IDs. Use
Mimecast Message Trackingfor its hold queue,Proofpoint Quarantine, orCheckpoint Avanan Quarantine.
Key Concepts
Quarantine Types
SpamTitan maintains separate quarantine queues for different threat categories:
- Spam — High-confidence unsolicited commercial email
- Probable Spam — Lower-confidence spam; may include false positives
- Phishing — Detected phishing or credential harvesting attempts
- Virus/Malware — Emails containing detected malware (generally never released)
- Blocked — Emails matching admin blocklist rules
Release vs. Delete
- Release — Delivers the held message to the recipient's inbox. Use for confirmed false positives.
- Delete — Permanently removes the message. Use for confirmed spam or malicious mail.
- Virus-quarantined messages should never be released — malware detections are high-confidence.
Message Aging
Quarantined messages are retained for a configurable period (typically 30 days). Messages older than the retention period are automatically purged. Review the queue regularly to catch time-sensitive false positives before they expire.
Multi-Domain Management — the queue is not tenant-scoped
In MSP deployments SpamTitan typically filters mail for multiple client
domains, and the natural instinct is to scope the quarantine listing to one
customer. You cannot. spamtitan_get_queue accepts no domain
parameter. Its shipped input schema is exactly page, per_page, sender,
recipient, subject, reason
(spamtitan-mcp/src/domains/quarantine.ts:21-53).
What follows from that:
- An operator who asks for "customer X's quarantine" gets the appliance-wide queue, across every tenant, unless you narrow it yourself.
- Per-customer filtering is a client-side operation on the
recipientfield after the results come back. There is no server-side tenant boundary on this call other than the API key itself. - Never describe an unfiltered listing as belonging to one customer, and never
act on "the first result" from one. The release and delete that follow are
scoped only by
message_id, so a cross-tenant listing leads directly to a cross-tenant action. - The asymmetry is what makes this easy to miss: the sibling
spamtitan_get_statsdoes takedomain, so per-domain statistics are genuinely scoped while the queue beside them is not.
The server does help a little: calling spamtitan_get_queue with none of
sender, recipient, subject, or reason triggers an elicitation asking
the caller for a recipient filter. That is a prompt, not a control — an
unattended agent cannot answer it, and a caller can decline it.
API Patterns
List Quarantine Queue
spamtitan_get_queue
Parameters (this is the complete list — there is no domain,
quarantine_type, date_from, or date_to):
page— Page number (1-based, default 1)per_page— Results per page (default 50, max 200)sender— Filter by sender email addressrecipient— Filter by recipient email address. The only lever that approximates per-customer scope, and it matches a full address, not a domainsubject— Filter by subject (partial match)reason— Filter by quarantine reason (e.g.spam,virus,policy)
Example response (the domain field appears in the response payload; it is
not a request parameter):
{
"messages": [
{
"id": "q-00192873",
"from": "[email protected]",
"to": "[email protected]",
"subject": "Your Weekly Industry Update",
"received_at": "2026-03-02T07:30:00Z",
"quarantine_type": "probable_spam",
"score": 6.8,
"domain": "clientcorp.com"
}
],
"page": 1,
"per_page": 50
}
On a multi-tenant appliance the messages array will contain entries whose
to and domain belong to other customers. That is the expected result of
an unfiltered call, not a bug — filter on to before you use it.
Get Message Details
spamtitan_get_message
Parameters:
message_id— The quarantine message ID (required, and the only parameter)
Example response:
{
"id": "q-00192873",
"from": "[email protected]",
"to": "[email protected]",
"subject": "Your Weekly Industry Update",
"received_at": "2026-03-02T07:30:00Z",
"quarantine_type": "probable_spam",
"score": 6.8,
"score_breakdown": {"rdns": 0.5, "spf": 0.0, "dkim": 0.0, "content": 5.2, "uri": 1.1},
"headers": {
"reply_to": "[email protected]",
"received_spf": "pass",
"dkim": "pass",
"list_unsubscribe": "<mailto:[email protected]>"
},
"links": ["https://vendor-newsletter.com/weekly-update/2026-03-02"],
"attachments": [],
"domain": "clientcorp.com"
}
Release a Quarantined Message
spamtitan_release_message
Parameters:
message_id— The quarantine message ID to release (required, and the only parameter). There is noadd_to_allowlistoption — releasing and allowlisting are two separate calls.
To release and allowlist the sender, make the second call explicitly:
spamtitan_manage_allowlist with action: "add", sender, and a note.
Doing it in two steps is not a workaround; it is the only shape the server
offers, and it means the allowlist grant is a deliberate decision of its own
rather than a checkbox on a release. Treat it that way — an allowlist entry is
a durable bypass of spam scoring for that sender, and spoofed mail claiming to
be that sender inherits it.
Example — {"message_id": "q-00192873"} returns
{"success": true, "message": "Message q-00192873 released successfully"}.
Delete a Quarantined Message
spamtitan_delete_message
Parameters:
message_id— The quarantine message ID to delete (required, and the only parameter). There is no bulk-delete tool; one call deletes one message.
Example response:
{
"success": true,
"message": "Message q-00192874 deleted successfully"
}
Get Email Statistics
spamtitan_get_stats
Parameters:
period— One oftoday,yesterday,last_7_days,last_30_days,last_90_days(defaulttoday). These are the only accepted values; there is no custom date range.domain— Filter to a single customer domain (omit for appliance-wide stats). This is the one place per-domain scoping works — the queue listing has no equivalent.
Example — one customer's last seven days:
{
"period": "last_7_days",
"domain": "clientcorp.com"
}
Example response:
{
"stats": {
"inbound": {"total": 4821, "delivered": 4102, "quarantined": 687, "blocked": 32},
"quarantine_breakdown": {"spam": 512, "probable_spam": 143, "phishing": 28, "virus": 4},
"spam_rate": 0.1424,
"top_quarantine_senders": [{"sender": "[email protected]", "count": 84}]
},
"period": "last_7_days",
"domain": "clientcorp.com"
}
The server echoes domain as "all" when you omit it — a useful check that
the scope you got is the scope you meant.
Common Workflows
Daily Quarantine Review
- Call
spamtitan_get_statswithperiod=today(anddomainfor one customer) to get a quick overview of email volume and spam rates - Call
spamtitan_get_queueto list held messages. There is no date filter, so page through and cut byreceived_atyourself; there is no domain filter either, so if this is a per-customer review, filter the results on the recipient's domain before you look at anything else - Sort by score — low-scoring probable_spam messages are most likely to be false positives
- Review subject lines and senders for obvious spam vs. legitimate business mail
- Release confirmed false positives with
spamtitan_release_message(onemessage_idper call) - Delete confirmed spam and phishing with
spamtitan_delete_message - For frequently falsely-quarantined senders, make a separate
spamtitan_manage_allowlistcall withaction: "add"— release does not allowlist
Investigating a Specific Held Message
- Get full message details with
spamtitan_get_message - Review the score breakdown — high content and URI scores indicate spam/phishing; high rdns scores may indicate misconfigured legitimate senders
- Check SPF and DKIM pass/fail status — passing auth for a low-score message suggests a legitimate sender
- Look for
List-Unsubscribeheaders — legitimate marketing mail from reputable senders includes this - Evaluate the links — legitimate newsletters link to recognizable domains
- Release if confident it is legitimate; delete if spam or phishing
Handling a Client Complaint About Missing Email
- Identify the expected sender and recipient
- Call
spamtitan_get_queuewithsenderandrecipientfilters to find the held message — this is the one workflow where the available filters do scope tightly, because you have a full recipient address - Review the message details and score to confirm it was incorrectly quarantined
- Release the message with
spamtitan_release_message - To prevent recurrence, make a second call to
spamtitan_manage_allowlistwithaction: "add", thesender, and anoterecording why. Verify the sender is genuinely legitimate first — this grants a durable scoring bypass that spoofed mail claiming to be that sender will inherit - Communicate the resolution to the client with a note that the sender has been allowlisted
Monitoring for Phishing Campaigns
- Call
spamtitan_get_queuewithreasonset to the appliance's phishing reason string. There is noquarantine_typeparameter and no date filter, so page the queue and cut to the last 24 hours yourself - Review sender domains and subject patterns for coordinated campaign indicators
- If multiple recipients received the same phishing mail, check whether any slipped through (quarantine miss)
- Delete all confirmed phishing messages
- If the sending domain is new, add it to the blocklist to prevent future delivery
Error Handling
Message Not Found
Cause: Invalid message ID, or message has already expired from the retention period Solution: List the quarantine queue to verify the correct ID; check retention settings if messages are expiring sooner than expected
Release Failed — Virus Quarantine
Cause: SpamTitan blocks release of virus-quarantined messages by default Solution: Virus-quarantined messages should not be released; if a false positive is suspected, contact TitanHQ support for manual review
Permission Denied on Domain
Cause: The API key may not have access to all domains in multi-tenant deployments Solution: Verify the API key scope. Note that the API key is the only tenant boundary on the quarantine tools — there is no per-call domain scope to fall back on.
Statistics Return Zero
Cause: The domain value passed to spamtitan_get_stats may not match the configured domain name exactly
Solution: Call spamtitan_get_stats without domain to get appliance-wide
numbers, and spamtitan_status to see the domains the connection reports
Best Practices
- Review the quarantine queue at least once per business day; twice daily for high-volume clients
- Treat every
spamtitan_get_queueresult as cross-tenant until you have filtered it yourself. There is no domain filter on the call; filter onrecipient, or cut the results on the recipient's domain, before showing an operator anything labelled as one customer's quarantine - Release and allowlist are separate calls —
spamtitan_release_messagethenspamtitan_manage_allowlistwithaction: "add"and anote - Never release virus-quarantined messages — deletion is the only appropriate action
- Use
spamtitan_get_statswithdomainto identify customers with unusually high spam rates; this is the one call that does scope per domain - Keep an eye on the
top_quarantine_senderslist — persistent senders should be blocklisted - Delete acts on one
message_idat a time; document each batch you work through in your PSA ticketing system for client audit trails
Related Skills
- api-patterns - Authentication, pagination, and error handling
- lists - Allowlist and blocklist management
Frequently asked questions
What to verify before installation and use
What does the SpamTitan Quarantine source document cover?
SpamTitan quarantine queue: quarantine types, release vs. delete semantics, message aging, email flow statistics, and the tenant-isolation limit — the queue listing accepts no domain filter, so on a multi-tenant appliance it spans every customer.
How do I install SpamTitan Quarantine?
The source record exposes this install command: npx skills add https://github.com/WYRE-AI/msp-claude-plugins --skill "msp-claude-plugins/spamtitan/spamtitan/skills/quarantine". Inspect the command and pinned source before running it.
Which permission-related actions were detected?
Static rules flagged network in the source; the page lists the matching lines and excerpts.
Alternatives
Compare before choosing
vasilyu1983/AI-Agents-public
qa-testing-ios
Guides iOS testing with XCTest, XCUITest, Swift Testing, simctl, and xcresult. Use when choosing destinations, controlling flakes, or parsing test artifacts for native apps.
garrytan/gbrain
brain-pdf
Generate a publication-quality PDF from any brain page via the gstack make-pdf binary. Strips YAML frontmatter, sanitizes emoji, applies running headers and page numbers. Brain page is always the source of truth; PDF is a rendering.
NVIDIA/skills
rtvi-cv-customize-model
How to swap the DeepStream CV detection model in the VSS Alerts Blueprint verification (2d_cv) mode - covers ONNX export, custom bbox parsers, compose mount gotchas, nvinfer config, runtime TRT engine build, deployment, and a segmentation-capable model addendum handoff.
awslabs/agent-plugins
aws-lambda-managed-instances
Evaluate, configure, and migrate workloads to AWS Lambda Managed Instances (LMI). Triggers on: Lambda Managed Instances, LMI, capacity provider, multi-concurrency Lambda, dedicated instance Lambda, EC2-backed Lambda, cold start elimination, Graviton Lambda, instance type for Lambda, scheduled scaling for LMI, Lambda cost optimization with Reserved Instances or Savings Plans. Also trigger when users describe high-volume predictable workloads seeking cost savings, want to scale LMI capacity on a s