Mail stream capture, campaign clustering, the suggestion approval queue, greylist-window verdicts, borderline review and learn-queue management.

    Mail Streams

    What it does

    Define capture rules based on symbols, scores, or header patterns. Stream entries appear in the Mail Streams viewer with full message detail: decoded body, MIME structure, headers, and scan results.

    The Ask LLM panel sends the captured message to your chosen model with a curated preset or custom prompt. Responses are cached so repeat lookups are instant.

    What question it answers

    Show me all the messages my classifier got wrong. What does this phishing campaign look like? Why is this sender hitting my custom rule?

    Streams let you curate investigation queues. The LLM integration accelerates analysis: explain the verdict, classify the pattern, suggest improvements.

    LLM integration

    The Ask LLM panel offers curated presets — explain a verdict, explain a suspected false positive, surface a missed-spam signal, or suggest a rule — plus custom prompts. The model receives only the decoded message and its scan results, never raw payloads.

    Mail Streams

    Example: Phishing campaign analysis

    An operator defines a stream catching messages that combine freemail senders with suspicious URLs. The stream fills with 200 entries from a single sender domain. Opening one entry and clicking Ask LLM with the 'Is this a known phishing kit?' prompt returns an analysis identifying the kit variant and suggesting header patterns for a new composite rule.

    Suggestions

    What it does

    An approval queue for corrective actions: block this sender domain, add this address to a blocklist, ship this composite rule. Auto-triage and the campaign judge file proposals here instead of touching your filter. In the product's own words — nothing runs until approved.

    Each row shows who proposed the action and with what confidence, what the action would do, and how often it has been proposed. Approve it and it goes through the rescan-verifying remediation engine; every applied action is revertible.

    Judged by a second model

    Before an operator ever sees a proposal, a second, adversarial model reviews it — accept, unsure, or reject, with a confidence. It is configured to be a different model from the one that proposed the action, so the reviewer isn't marking its own homework.

    The result is a queue where the easy calls are obvious and the contested ones are flagged for you.

    What question it answers

    What does the system want to change, and should I let it? Which of these proposals do two independent models agree on?

    Automation you can audit: the LLM proposes, a second model challenges, a human approves.

    Suggestions

    Example: automation with the safety catch on

    Auto-triage sees the same phishing campaign 40 times overnight and files one deduplicated proposal — block the sender domain — with a ×40 badge. The judge model reviews the action and returns 'accept, 0.94'. In the morning the operator reads one row instead of 40 messages, approves it, and the map update is verified by rescan before it goes live. Had the judge disagreed, the row would be sitting in the queue flagged as contested.

    Campaigns

    What it does

    Campaigns clusters slipped (non-rejected) mail by sender domain, ranking campaigns by near-misses — messages that came close to rejection but slipped through.

    Instead of triaging 500 individual messages from the same attack, you see one campaign row. One campaign = one decision: investigate, learn fuzzy, add to a map, or dismiss.

    What question it answers

    What's hitting us repeatedly? Which campaigns are trending? What nearly got caught?

    The campaigns panel surfaces the needles in the haystack: coordinated attacks that spread across many messages but share a sender domain or pattern.

    Campaign judge

    The LLM-assisted campaign judge evaluates samples from a whole campaign at once. It returns a verdict plus one-click actions (train Bayes/neural, fuzzy-enqueue, add to map) — applied across the campaign.

    Campaigns

    Example: One campaign, not 500 headaches

    A phishing operation sends 500 variations from the same domain. Individually, each message scores below the reject threshold. Campaigns clusters these into one row ranked by near-misses. The operator clicks into the campaign, sees the pattern, and uses the LLM judge to batch-train fuzzy across all 500 samples. One click, one campaign handled.

    Second Chance

    What it does

    Greylisting already delays borderline mail and asks the sender to retry. Second Chance spends that waiting time productively: while a message sits parked, an enrichment worker forms a verdict on it — from an LLM, from cluster evidence, or both — and the retry is decided with information the first scan never had.

    Fail-open by design: if no verdict arrives, the retry simply re-scans against reputation feeds that have had time to catch up. You are never worse off than plain greylisting.

    Arming it is one reversible switch

    Second Chance is armed by enabling the greylist action threshold — an override applied live through Score What-If, not a config rebuild. Disarming is the same switch, and takes effect just as fast.

    The panel shows what the window bought you: rescued spam (parked below the reject threshold, released at or above it), released-unchanged, and still awaiting retry.

    One-time codes don't wait

    A login or verification code that gets greylisted arrives after it has expired. A monitor on the same page detects code-bearing mail, tracks how much of it is being delayed, and learns the confirmed templates worth fast-pathing.

    Detection runs in shadow: candidates are flagged and confirmed campaigns learned, but greylisting is not yet bypassed — you can see exactly what the bypass would do before you trust it with your transactional mail.

    Second Chance

    Example: the greylist window pays for itself

    A borderline message parks at score 5.2 — under the reject threshold, so plain greylisting would release it on retry. During the retry window the enrichment worker recognises it as a member of a cluster already judged spam. The sender retries four minutes later, the parked verdict is consumed, and the message is rejected. No new rule was written, and no legitimate sender saw extra delay.

    Borderline Queue

    What it does (opt-in module)

    The Borderline Queue captures messages that landed near the action threshold — the risky middle band where small score changes flip verdicts. These are the messages most likely to be misclassified.

    Queue entries show full message detail: decoded body, MIME structure, headers, and scan symbols. Operators review and reclassify messages, feeding back into Bayes, neural, or fuzzy learning.

    Not enabled by default. Deployments that prefer an automated path route near-threshold mail through a capture stream into auto-triage instead.

    What question it answers

    Which messages are borderline cases? What's scoring this message right at the threshold? Should this be spam or ham?

    The Borderline Queue focuses human review on the messages where operator judgment matters most — the edge cases that automated systems get wrong.

    Human-in-the-loop training

    Reclassify borderline messages and feed the results back into your classifiers. One operator's review improves the system's handling of similar messages going forward.

    Example: Edge-case training

    The Borderline Queue fills with marketing newsletters that score 14.5–15.5 — right around the reject threshold. Operators review 50 samples and reclassify 40 as legitimate ham, learning the patterns that distinguish these newsletters from spam. The reclassification feeds back into Bayes training. A week later, similar newsletters score 8–10 — safely below threshold.

    Learn Queues

    What it does

    Rspamd Console provides queue management for Bayes, Neural, and Fuzzy learning. Queue entries by type, monitor queue depth, and drain on schedule instead of per-message.

    The Learn Queues panel shows pending entries per queue, drain progress, and recent drain results. Schedule drains or trigger manually from the dashboard.

    What question it answers

    How many Bayes learn operations are pending? Did the last neural train succeed? Which fuzzy hashes failed to learn?

    The queue overview gives visibility into learning state. Drain progress shows OK/fail/total counts so you can verify training succeeded.

    Batch vs per-message

    Per-message learning adds latency. Batch learning lets you drain queues on your schedule — overnight, during low-traffic windows, or on-demand.

    The dashboard exposes this via the Learn Queues panel. Configure schedules, monitor queue depth, and trigger drains from a single interface.

    Learn Queues

    Example: Scheduled neural training

    An operator configures the neural queue to drain daily at 0200 UTC. The Learn Queues panel shows 500 pending entries. The scheduled drain processes all 500, updating the ANN profile. The operator reviews the drain result (487 OK, 8 fail, 5 duplicate) and verifies that the new profile is active in the Neural panel.

    Ready to see it on your own traffic?