Chrome extension · Jev + Grok

Your feed, on the record.

Every post in your LinkedIn feed gets scored for corporate bullshit before you've finished reading it. The ones that earn it get a second opinion from Grok.

This page
0
Lightly buffed

It's a landing page. Some buffing is structural.

Exhibit A

It shows its working

A score, the genre, six signal meters, a plain-English translation of what the post actually said, and then the joke. Rendered inside the post, in LinkedIn's own dark mode, where the post already was.

Verdict card scoring a post 50 out of 100 as Certified bullshit, genre thought-leader cosplay, with six signal meters, a plain-English translation, and a Grok roast.
50/100 on a post arguing that AGI has quietly already arrived. Top signal: 72% AI-written prose.
Exhibit B

We pointed it at its own launch announcement

Jev is the model doing the detecting. So we scrolled to TypeSafe's post announcing Jev — first person, funding round, opening line about co-inventing ChatGPT — and let it grade its own homework.

Verdict card scoring the Jev launch post 40 out of 100: Lightly buffed, actually genuine, no roast, with signal meters topping out at 70 percent AI-written prose.
374ms. 1,518 tokens. No roast issued.

40/100. Actually genuine.

Underneath the framing there was a real product, a real number and a real thing being shipped — which is the entire distinction this is built to draw. It drew it on the one post where it had every incentive to flatter itself.

Its highest signal was 70% AI-written prose. Given the subject matter, we are choosing to read that as calibration.

The scale

Four bands, one number

0–24 Reads as genuine A person said a true thing plainly. Rare. Treasure it.
25–49 Lightly buffed Real content wearing a blazer.
50–74 Certified bullshit The blazer is now the content.
75–100 Weapons-grade No information survives contact with the prose.

Below 45, nothing gets roasted. There has to be something worth roasting.

What it measures

Nine questions, one round trip

Corporate jargon synergy, leverage, unlock, north star, 10x — as filler
Humblebrag humbled, blessed, honored, still processing
Engagement bait "Agree? 👇", comment a word, tag someone, withheld payoffs
Performed vulnerability a failure with a tidy lesson and a flattering ending
AI-written prose relentless tricolons, em-dash cadence, no specific detail
Hustle moralising 5am starts as evidence of your moral superiority

Plus severity, genre and substance — the three that decide the number — and a bonus tell for broetry.

One sentence per line. For rhythm. Because it makes you sound. Profound.
Architecture

One model detects. The other one talks.

The detector

Jev

A System One model: unstructured state in, typed probabilistic decisions out, every answer generated in parallel. Fast and cheap enough to run on every post you scroll past, which is the only way a feed filter works at all.

Latency 70–500 ms
Input $0.042 / M tokens
Questions 9 per round trip
Runs on every post
The commentary

Grok

Decides nothing. It gets handed Jev's verdict and writes the two things a classifier can't: what the post actually says with the performance stripped out, and a joke about it.

Model grok-4.7
Threshold 45 / 100
Aims at the writing
Runs on the guilty

Running a frontier chat model on every post and doing arithmetic on its output is the slow, expensive version of this product. Ask us how we know.

Install

Four commands and a folder

# the server holds your keys — the extension never sees them
cd server && npm install
cp .env.example .env   # TYPESAFE_API_KEY, and XAI_API_KEY for roasts
npm run dev

# then build the extension
cd ../extension && npm install && npm run build

Then chrome://extensions → Developer mode → Load unpacked → pick extension/dist. Open LinkedIn. Scroll. Feel something.

An extension that called xAI directly would ship your API key to every page it runs on, which is its own category of bullshit. Hence the server.

Known failure modes

LinkedIn will break this

Not might. The feed is server-driven UI now: every CSS class is a content hash that regenerates on deploy, and the old urn:li:activity attributes are gone. The first build of this extension found exactly zero posts, because it was written against an architecture that had already stopped existing.

What replaced it is more stable, and it all lives in one file:

WhatHook
Feed[data-testid="mainFeed"]
One post[componentkey^="update-card-focus"]
Body[data-testid="expandable-text-box"]
Authorbutton[aria-label^="Open control menu for post by …"]
Headlinethe text node right after the connection degree
Ads[aria-label*="Sponsored"]

Detection tries four tiers and reports which one hit. When all four miss it prints diagnostics to the console after five seconds instead of sitting there silently, because silence is the failure mode that wastes the most of your evening.