Skip to content

jevmod

Message moderation that asks Jev for probabilities of spam, scam, harassment and other harms plus your own plain-English rules.

ProjectbetaMIT

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

TypeQuestionAnswers
Yes / noIs this message a scam?—
Yes / noIs this message harassment / spam / NSFW / doxxing / self-harm?—
Yes / noDoes this message break this plain-English community rule?—

How it works

  1. Message arrives from the bot, CLI, package or HTTP API
  2. Jev answers one yes/no question per enabled category and custom rule
  3. Per-category thresholds map probabilities to actions
  4. Default is flag-only; deletion must be enabled explicitly
  5. 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 extensionproductionTypeScript
  • Discord bot where Jev flags spam and scam links in real time, drives an escalating timeout ladder and profiles members.

    ProjectbetaPython
  • WordPress plugin that triages comments in the background with Jev questions on relevance, spam and abuse.

    ProjectbetaPHP
  • Chrome extension and Workers API that score X posts and replies for AI writing, solicitation and paraphrase bots using Jev.

    Browser extensionbetaTypeScript
  • Chrome extension that labels every X post you scroll past with six typed Jev questions and shows a live cost counter.

    Browser extensionbetaTypeScript
  • Minimal grammY Telegram bot that asks Jev whether each group message is spam and deletes only high-confidence matches.

    ModelbetaTypeScript