Skip to content
MrJev

Vibe Check for X

Chrome and Firefox extension that scores a draft X post on a dozen dimensions and gives a send-or-don't verdict before you publish.

View on GitHub →

Hands-on review

A Chrome extension that scores your draft on a dozen rubrics before you hit Post. Minimal permissions, but the image toggle is on before you add a key.

Good for

  • A second opinion on a draft, with a probability per rubric
  • Permissions a reviewer can read in one line: storage, and two API hosts
  • Rubrics you can rewrite: they are a JSON list in the options page

Watch out for

  • Media description is on by default, so adding a vision key starts sending images
  • Auto-analysis is on: drafts go out as you type, debounced
  • No licence file, and five commits

Tested Sep 21, 2026 at d834d501e3de · Chromium in Docker with the extension loaded; its 13 tests, and its own settings and message handlers driven from the extension page

How we reviewed this: we loaded the unpacked extension into Chromium in a container, read its settings through its own message handlers, ran its test file, and read the request construction. We did not run it against x.com — we don’t test on other people’s sites — so the on-page behaviour is read rather than observed.

What it does

A Chrome and Firefox extension that runs your draft X post through Jev before you publish and renders a scorecard under the composer: virality, funniness, informativeness, clarity, insult level, ragebait, cringe, “sounds AI-written”, regret risk, typo detection, the most likely crowd reaction, and an overall verdict — “Send it / Fine, mid / Probably don’t / Sleep on it”.

The rubrics are data, not code: a JSON list you can edit in the options page, each entry a question and a type. That is the right way round for something this subjective, and it means the scorecard you get is the one you asked for rather than the author’s taste.

Permissions worth reading

"permissions": ["storage"],
"host_permissions": ["https://api.typesafe.ai/*", "https://api.openai.com/*"],
"content_scripts": [{"matches": ["https://x.com/*", "https://twitter.com/*", "https://pro.x.com/*"]}]

That is close to the floor for what this has to do: no tabs, no scripting, no <all_urls>, two API hosts and three X origins. Compare it with a browser agent like Jev for Chrome, which needs debugger and every URL, and you can see how much of a permission request is the job rather than the author.

One request per analysis carries the draft and its context — the tweet you are replying to as reply_to, a quoted tweet as quoting — plus the rubric questions.

The media toggle is on before you have a key

The second host, api.openai.com, is for describing images: when a draft carries media, a vision model is asked what the picture shows so the rubrics can score it. That means images from the compose view — including from the tweet you are replying to — leave for OpenAI.

It is opt-in by key, but not by toggle. We loaded the extension with only a Jev key configured and asked it for its settings through its own handler:

defaults, only a Jev key:     {"describeMedia": true, "hasOpenAI": false}
after adding a vision key:    {"describeMedia": true, "hasOpenAI": true}

describeMedia defaults to on. Without an OpenAI key the describe path throws NO_OPENAI_KEY and nothing is sent, which is why nothing leaks today. But the moment someone pastes a vision key into the options page, image sending is already enabled — there is no separate “and also send my images” step. Defaulting that to off, or prompting once on the first image, would make the choice explicit.

While you are in there, note that auto-analysis is on by default too, with a 1,200 ms debounce: your draft goes out as you type, not when you ask.

Engineering

Thirteen tests, all passing, covering the background script’s rubric handling and error paths. Errors come back as readable strings — we pointed it at the real API with a deliberately wrong key and got TypeSafe: invalid API key (401). Check it in Vibe Check settings. rather than a stack trace. Retries use backoff. The extension is plain JavaScript with no build step, which makes it easy to audit in an afternoon.

Five commits, created 18 September, and no licence file, so strictly nobody may reuse it.

Verdict

The nicest small extension in this batch: a real use for a decision model, a scorecard you can rewrite, and a permission list you can read out loud. If you post often and have ever regretted one, it is worth the ten minutes.

Before you add a vision key, decide whether you want images from your compose view going to OpenAI, because the extension has already decided yes. And ask the author for a licence.

For the same idea pointed at a conversation rather than a draft, see Crush Monitor; for an agent that drives the page instead of scoring it, Jev for Chrome.

See how it compares with other tools in Best Jev tools, tested hands-on.

Review updated Sep 21, 2026. Numbers quoted from the project are its author's own; we don't publish our own measurements of Jev.

More in Apps & Browser Extensions

Jev Chat Assistant

★ 8.2k▲ 105

jev-chat/jev-chat-jarvis

Android chat assistant that reads the conversation on screen through the accessibility service, has Jev judge the other person's intent and the risk, and fills in a drafted reply that you send yourself. Chinese and English editions.

Kotlin

OpenMuse

★ 6.1k▲ 479

CopilotKit/openmuse

CopilotKit's self-hosted personal agent with its own browser, terminal and files; Jev decides whether a reply becomes a clarification panel, a comparison of options or plain prose, and overrides the agent only when confident. Alpha.

TypeScriptReviewed

Shapeshift

★ 1.1k▲ 16

anishfn/shapeshift

One text box that turns what you type into the right small interface, an event card or a checklist or a bill split, with Jev choosing which; falls back to rules when no key is set.

TypeScriptReviewed

Get new Jev projects every week

New Jev releases, pricing changes, and the best new projects, once a week. No spam; unsubscribe anytime.

Powered by Buttondown. See our privacy policy.