Blog

How EmDash uses Clef to moderate the plugin registry

Every plugin listing in the EmDash registry is now screened by Cloudflare's Clef decision model. Here's how one fast, multimodal model helps us catch phishing, impersonation, offensive content, and other abuse before a plugin appears in the catalog.

Every plugin listing in the official EmDash plugin registry is now screened by Cloudflare's Clef decision model before it can appear in the catalog. Clef reviews the listing metadata, outbound links, icon, and screenshots for phishing, impersonation, offensive content, scams, and attempts to manipulate the moderation system.

The registry is built on AT Protocol, so plugin authors publish signed releases from their own accounts. EmDash doesn't control the underlying record, but it does decide what appears on plugins.emdashcms.com. Automated moderation lets authors keep that open publishing model without making the catalog an open door for abuse.

One model for text and images

Clef is a decision model: instead of generating prose, it answers bounded questions with typed probabilities that application code can act on. It also accepts images. Those two properties fit the registry well because a plugin listing mixes structured metadata and links with visual assets.

When a plugin is published, the EmDash labeler asks Clef nine questions about its text and links, covering:

  • explicit sexual content, hateful or dehumanizing content, and graphic violence;
  • phishing or credential requests, impersonation, scams, and spam;
  • deceptive links, misleading media or claims, and attempts to manipulate moderation.

The labeler asks eight corresponding questions about each icon and screenshot. Links are evaluated from their text and destination rather than from screenshots, which avoids flagging ordinary screenshots of spam filters and link-checking tools.

Clef returns a probability for each category. A result of 0.45 or higher sends the listing to an operator for review. The model never has the final say to block a plugin.

You can read the source code for the Clef adapter and its questions on GitHub.

Why we chose Clef

Our choice of models used by our automation tools are always driven by evals, and we regularly evaluate new models. The previous moderation pipeline needed two general-purpose models to agree on text, plus another pass for images. That was slower and gave the system more ways to time out or return an incomplete result. We were excited to evaluate Jev when it was released, but unfortunately it underperformed our baseline. However, our results for Clef were much better. We were particularly pleased that it is a multimodal model, so we can use the same model for text and images.

“Previously we had to use a mix of models to get reliable results, but Clef beat them all, while being much faster.”

Matt Kane, EmDash lead maintainer

We tested Clef against the public regression cases built for the registry and a separate protected corpus. Across three repeats of 21 public text fixtures, Clef made the expected pass-or-review decision in all 63 runs, with no invalid output or disagreement between repeats. Across those 63 fixture runs, end-to-end text moderation latency was 1.64 seconds at p95. Clef also passed all 37 plugin profiles and all 43 listing images that were live in the registry when we ran the evaluation.

Replacing the earlier bundle with Clef gives the registry one multimodal model and one probability-based interface for the whole listing. That makes moderation faster and the implementation easier to inspect, while preserving a fail-closed path to human review.

Publish a plugin

The moderation change doesn't add a new step for plugin authors. Scaffold and publish with the EmDash plugin CLI, and the registry runs the checks before adding the release to discovery. If a listing needs review, the release remains signed and available from your account while the EmDash team decides whether to show it.

Browse the plugin registry, read the publishing guide, or join the EmDash Discord to get started on your plugin publishing journey.

Keep reading

All posts