jevmod
Message moderation that asks Jev for probabilities of spam, scam, harassment and other harms plus your own plain-English rules.
Overview
jevmod moderates messages for communities and apps. Each message gets a probability for spam, scam, harassment, NSFW, off-topic, self-harm, doxxing and sexual content involving minors, as well as for rules you write in plain English. You set the thresholds and actions, and every decision is logged with its numbers. It runs on Jev as yes/no questions, and the README estimates about $0.04 per 1,000 messages with all categories enabled.
There are entry points for different users: a Discord bot tuned with commands (plus Telegram and Reddit variants) for non-technical community owners; a CLI, Python and npm packages or a single HTTP call for developers; and an MCP server and Claude Code skill for coding agents. It is flag-only by default, fails open when Jev is unreachable, and treats self-harm as flag-only so a moderator can reach out. A benchmark of 2,531 messages reports the best AUROC among the compared systems in each category of OpenAI's human-labelled set, with caveats in a separate file.
What the decision model decides
| Type | Question | Answers |
|---|---|---|
| Yes / no | Is this message a scam? | — |
| Yes / no | Is this message harassment / spam / NSFW / doxxing / self-harm? | — |
| Yes / no | Does this message break this plain-English community rule? | — |
How it works
- Message arrives from the bot, CLI, package or HTTP API
- Jev answers one yes/no question per enabled category and custom rule
- Per-category thresholds map probabilities to actions
- Default is flag-only; deletion must be enabled explicitly
- Decision and probabilities are logged; Jev outages fail open
Strengths
- Custom rules in plain English alongside built-in categories
- Benchmark with AUROC and calibration published
- Safe defaults: flag-only, fail-open, self-harm flag-only
- Discord bot for non-technical owners and MCP for agents
Caveats
- Requires a TypeSafe key for every surface
- Fail-open means messages pass unchecked during outages
- Benchmark caveats are documented separately
Getting started
pip install "jevmod[keys]" && jevmod init, then jevmod check "<message>".At a glance
- Type
- Project
- Status
- beta
- Language
- Python
- Runtime
- CLI, Python/npm packages, Discord bot, MCP server
- Has code
- yes
- License
- MIT
Use cases and integrations
How curated lists describe it
Moderation for communities and apps: every message gets a probability for \*\*spam, scam, harassment, nsfw, off-topic, self-harm, doxxing, sexual content involving minors\*\*, and for \*\*rules you write in plain English\*\*. You set the thresholds and the actions. Every decision is logged with its numbers.
logicrw/awesome-jev-projects
Frequently asked questions
What does jevmod decide?
A probability per harm category and per custom rule for each message; your thresholds decide the action.
Will it delete messages automatically?
Not by default; it only flags until you enable deletion.
What does it cost?
The README estimates about $0.04 per 1,000 messages with all categories on, billed to your TypeSafe key.
Related projects
Chrome extension that uses your Jev key to hide high-confidence sexual and solicitation replies on X behind reversible placeholders.
Browser extensionproductionTypeScriptDiscord bot where Jev flags spam and scam links in real time, drives an escalating timeout ladder and profiles members.
ProjectbetaPythonWordPress plugin that triages comments in the background with Jev questions on relevance, spam and abuse.
ProjectbetaPHPChrome extension and Workers API that score X posts and replies for AI writing, solicitation and paraphrase bots using Jev.
Browser extensionbetaTypeScriptChrome extension that labels every X post you scroll past with six typed Jev questions and shows a live cost counter.
Browser extensionbetaTypeScriptMinimal grammY Telegram bot that asks Jev whether each group message is spam and deletes only high-confidence matches.
ModelbetaTypeScript