See what content is engineered to do to your brain — before it gets the chance.
Limen is a Chrome extension that scans headlines, posts, and video titles on any website and tells you what kind of emotional response they're built to trigger. You click a small badge next to a headline and Limen returns:
- A manipulation index (0–100)
- The target emotion — outrage, fear, tribal contempt, anxiety, moral disgust, etc.
- The techniques in play — loaded language, us-vs-them, curiosity gap, outrage bait, and so on
- A neutral rephrase — the same information stated without the engineered emotional pull
The thesis is simple: manipulation only works in the dark. Limen turns the lights on.
Right now, the only way to know a headline was engineered is to notice your own reaction after it already got you. Limen reads the other direction — content goes in, the framing pattern comes out, before you click play.
Every http(s) site.
- Reddit and YouTube get specialized detection tuned to their DOM (modern + old Reddit; YouTube homepage, search, sidebar, and watch page).
- Everywhere else a generic detector finds headline-shaped text — heading tags and known headline classes — and walks up to the surrounding card. It's a heuristic: on news sites it's accurate, on other sites it may occasionally badge text that isn't a headline. Badges are inert until you click them, so the noise costs nothing.
- Don't want it somewhere? Click the Limen toolbar icon on that site → Turn off for this site. The setting covers the site and its subdomains, persists forever, and badges vanish immediately — no reload needed. Same place to turn it back on.
Scoring is done by a TRIBE v2 endpoint. TRIBE v2 is Meta's open-source brain encoding model — it predicts fMRI-resolution brain responses to multimodal stimuli (text, audio, video).
One important thing to understand: TRIBE v2 is not a hosted service. There is no official API, and Meta does not issue API keys — the weights are on Hugging Face and you run inference yourself. So Limen talks to a small scoring server that you (or someone you trust) host: it wraps the TRIBE v2 model, maps its predicted brain responses onto Limen's manipulation schema, and authenticates requests with an API key that you choose yourself when you set the server up.
Your server needs to implement exactly one route:
POST <your endpoint URL>
Authorization: Bearer <your API key>
Content-Type: application/json
{"text": "<headline / post / video title>"}
and respond 200 with:
{
"manipulation_index": 0-100,
"target_emotion": "outrage" | "fear" | "tribal_contempt" | "moral_disgust" | "anxiety" | "envy" | "shame" | "schadenfreude" | "none",
"techniques": ["loaded_language", "us_vs_them", "moral_panic", "fear_uncertainty", "vague_authority", "cherry_picking", "misleading_framing", "emotional_exaggeration", "tribal_signaling", "outrage_bait", "curiosity_gap"],
"explanation": "<one sentence on what the framing does to the reader>",
"neutral_rephrase": "<same information stripped of the engineered emotional pull>"
}Return 401/403 for a bad key. How you map TRIBE v2's cortical predictions to the 0–100 index is the interesting research problem — the extension doesn't care, it just renders what your endpoint returns.
Limen isn't on the Chrome Web Store yet. Manual install takes a few minutes.
- Clone facebookresearch/tribev2 and follow its setup (local GPU, or the demo Colab)
- Wrap it in a small HTTP server implementing the contract above
- Pick an API key for it — any secret string; this is the key you'll paste into Limen
Either clone the repo:
git clone https://github.com/MowkE/limen
…or click the green Code button on this page → Download ZIP and unzip it somewhere you'll remember.
- Open Chrome and go to
chrome://extensions - Top-right corner: turn on Developer mode
- Top-left: click Load unpacked
- Select the Limen folder (the one containing
manifest.json)
Chrome will note that Limen can "read and change your data on all websites" — that's what lets it find headlines on any site and reach the scoring server you configure. It sends nothing anywhere until you click a badge (see Privacy).
- Click the puzzle-piece icon in the Chrome toolbar; pin Limen so it stays visible
- Click the Limen icon → Settings (the popup also holds the per-site on/off toggle)
- Enter your TRIBE v2 server URL and API key → Save
Open any site with headlines and look for a small ◐ badge in the top-right corner of headlines / posts / video cards. Click it.
"TRIBE v2 server rejected the API key" — there is no key to get from Meta or anyone else; the key is whatever secret you configured your own scoring server with. The key in Limen's settings and the key your server expects must match exactly. Fix either side so they agree.
"Could not reach the TRIBE v2 server" — the server isn't running, or the URL in Limen's settings is wrong. Check that the URL includes the scheme and route (e.g. http://localhost:8000/analyze) and that curl -X POST <url> gets any response at all.
"Timed out after 30 seconds" — the server is up but the model isn't answering. First inference after a cold start can be slow while weights load onto the GPU; try again, or warm the model at server startup.
"Did not return valid JSON" / "missing manipulation_index" — your server responded, but not with the contract above. Compare its response to the endpoint contract.
No badges on a page — first check you haven't turned Limen off for that site (click the toolbar icon; the popup shows the site's on/off state). Otherwise: the generic detector only picks up headline-shaped text (roughly 25–240 characters, inside heading-like markup, outside nav/footer). Some app-like sites simply have nothing that qualifies.
Every setup-related error panel also includes a short version of this guide and an Open Limen settings button.
- Your server URL and API key are stored locally in your browser via
chrome.storage.local. They never leave your machine. - Limen runs on every site, but it only sends anything when you click a badge — and then only the badge's text, only to the TRIBE v2 endpoint you configured. If you run the server yourself, nothing ever leaves machines you control.
- Limen has no analytics, no tracking, no telemetry. It does not phone home.
This is an early version. Things that are intentionally simple right now:
- The extension defines the endpoint contract but ships no server — the TRIBE v2 → manipulation-index mapping lives server-side, and building a good one is open research.
- On-demand scanning only — click the badge to trigger a scan. No automatic background scanning.
- English-language content.
Concept inspired by Spira and rooted in Meta's TRIBE v2.