Skip to content

./unrager

unrager

Keep x.com. Lose the rage.

A browser extension for the x.com you already use. A small model on your own computer reads each post before X shows it and hides the rage bait, the dunking and the doom. You can see what it hid and why, and one click brings a post back.

GPL-3.0 free & open source Chrome Brave Edge Vivaldi Arc
$ curl -fsSL unrager.com/install.sh | bash

macOS & Linux · then add the extension, three clicks · iPhone app

  • Tested on 1,049 real posts: about 3 in 4 rage posts gone, about 1 good post in 31 hidden by mistake
  • Every hidden post says which rule caught it, and one click brings it back
  • Ships with unrager-4b, a 2.7 GB model trained for this filter and the default; bigger ones hide more of what you wanted
  • No account, no cloud; your feed never leaves your machine

./unrager --how-it-works

How unrager works

It only reads what X already sends your browser and never asks X for anything else. The judging happens on your computer, before the page shows the post.

Your browser already has your timeline: X sent it. The extension hands each new post to unrager on your own computer, your model judges it against your rules, and the posts it hides never appear. Nothing goes anywhere else.

./unrager --install

Three steps, about five minutes

You need a Chromium browser on macOS or Linux and a model to run. unrager does the rest, and keeps running in the background.

  1. Run a model

    Install Ollama from ollama.com, then pull the default model, unrager-4b, which was trained for this filter. It’s 2.7 GB and judges a post in a fraction of a second.

    $ ollama pull hf.co/guitaripod/unrager-4b:Q4_K_M

    Already running LM Studio, vLLM, llama.cpp or SGLang? Skip this: step 2 finds it and prints the lines to put in filter.toml.

  2. Install unrager

    One program for macOS and Linux. The script runs unrager setup for you: it checks that your model answers, starts unrager in the background so it comes back after a restart, and unpacks the extension.

    $ curl -fsSL https://unrager.com/install.sh | bash
    $ cargo install unrager && unrager setup
  3. Add the extension

    In Chrome, Brave, Edge, Vivaldi or Arc:

    1. a. Open chrome://extensions.
    2. b. Turn on Developer mode.
    3. c. Click Load unpacked and pick the folder unrager setup printed.

    Then open x.com. Posts that match your rules never show up in For you and Following, and the unrager icon counts the ones it hid.

Later, unrager update updates everything, and the toolbar icon shows ↑ until you reload the extension. unrager doctor says what's wrong if anything is.

cat ~/.config/unrager/filter.toml

You write the rules

unrager starts with the usual suspects: electoral politics, culture-war fights, doom, engagement farming, crypto shilling. Change any of it from the extension's popup, in plain words. A post is hidden when a topic is the point of it, not when it mentions one in passing, so a physicist's joke about the election stays.

Pick how strict it is. Relaxed hides only posts clearly about your topics. Balanced, the default, also hides rage bait and dunking but keeps anything the model isn't sure about. Strict hides that too. Each topic shows how many posts it hid, so the one that hides too much stands out.

Curious what it caught? Show hidden posts brings them back dimmed, each labelled with the rule that caught it. Show this post keeps one for good, and right-clicking any post on Home hides it by hand. unrager remembers both, in every client and through rule changes.

unrager

12 posts hidden

148 posts checked on this tab.

Pause filtering

Show hidden posts

What gets hidden

How strict

RelaxedBalancedStrict

  • american electoral politics, presidents, congress, partisan fights Remove 41 hidden
  • economic fearmongering: tariff panic, inflation doom, market-crash prophecies Remove 23 hidden
  • rage-bait reply farming, ratio threads, inflammatory hot takes Remove 17 hidden
  • crypto and NFT shilling, pump-and-dump hype Remove 6 hidden

Add a topicAdd

Save rules

Settings

cat unrager/FEATURES.md

What unrager does

X's own app, your account and every feature stay. The posts that exist to make you angry go, and the only model that ever sees your timeline runs on your own machine.

Not interested, in one click

On For you, a frown next to X’s Grok button does what Not interested in this post does, without opening the menu. X gets the same feedback and shows you fewer posts like it.

Says why

Every hidden post names the rule it broke. Turn on Show hidden posts and they come back dimmed, each labelled “Hidden: war”, “Hidden: engagement farming”.

You overrule it

Show this post brings one back for good; right-click any post on Home to hide it by hand. Your call outranks the model in every client and survives rule changes.

As strict as you like

Relaxed, Balanced or Strict, and a count of what each rule hid since you last changed them, so the rule that hides too much stands out.

Your posts stay

Your own posts, retweets of them and the conversations you replied in are never hidden. Profiles, threads and search are never filtered: you went looking.

Any local model

unrager-4b on Ollama by default, or anything with an OpenAI-compatible API: LM Studio, vLLM, llama.cpp, SGLang, llama-swap. unrager eval scores yours on about 200 made-up posts.

Private by default

Posts go to unrager on localhost and to your model, nowhere else. No account, no telemetry, and the server refuses requests from web pages.

Fails open

If your model is off or slow, X works as usual: a new post shows after a couple of seconds, a failed check is never remembered, and the badge says what to fix.

Measured, not guessed

Tested on 1,049 real posts from one feed, the default model takes out about three in four rage posts and hides about one good post in 31. A good post hidden counts as the worse mistake, because you never see it, and every change to the prompt is scored on both before it ships.

./unrager --iphone

The same filter, in your pocket

An extension can't reach X's own iPhone app, so there's a native one. It talks to unrager on your computer: the model that judges your desktop timeline judges your phone's too, and Home opens instantly because your computer keeps it ready.

  • The unrager iPhone app on For you: a hiking photo from Field Notes with a Norwegian flag by the name, and below it a post by Mira Koski marked Kit Wren reposted. The Notifications tab carries a small blue badge.

    For you, a country flag on every author and the whole post behind a repost.

  • A list titled Hidden posts: three posts, each headed by the rule that hid it (culture-war threads, outrage bait, engagement bait) with a Show button beside it.

    What the filter hid, each post under the rule that caught it. Show brings one back.

  • A thread in the iPhone app: an illustration post with two options and, under it, replies nested under the replies they answer.

    Threads with replies under their parents, and who quoted a post.

  • A profile in the iPhone app: a header image, the name Mira Koski with a verified badge, a bio with a tappable mention and link, location and join date, follower counts and a pinned post.

    Profiles with bio, location, join date and the pinned post, plus Mute and Block.

  • A sheet titled Explain over a post, with an answer from the local model streaming in about why the sky is blue.

    Ask, Brief and Translate stream from your own model.

  • The Notifications tab: grouped likes, follows, replies and a mention, with the people behind each as stacked avatars.

    Notifications grouped by who did what, with a calm unread badge on the tab.

  • Hidden, not gone. Every post the filter hides is listed with the rule that caught it and a Show button. Your rules and strictness are editable on the phone too.
  • Your model on tap. Ask about a post, Brief an account, Translate a reply. The answer streams from the model on your computer, and you can stop it, retry it or read along.
  • A real X client. Threads, profiles, search, notifications, drafts, quotes, Mute and Block, and deleting your own posts. A repost shows the whole original, and links to x.com open in the app.
  • Made for iOS 26. Liquid Glass tabs, Dynamic Type up to the largest sizes, and every post a single VoiceOver stop with actions.

Put it on your iPhone, about ten minutes

It isn't on the App Store, because it runs on your own X session. You build it once on a Mac, and a free Apple ID is enough.

  1. Start the server for the app

    On the computer that runs unrager, signed in to x.com in your browser. It prints the address the app needs. Keep it on a private network such as Tailscale: unrager has no login of its own.

    $ unrager setup --apps --bind 0.0.0.0:7777
  2. Build it and put it on your phone

    On a Mac with Xcode 26, after brew install xcodegen, signed in to your Apple ID under Xcode > Settings > Accounts, with the phone plugged in, unlocked and trusted, and Developer Mode on. The script finds your phone and signing team, and asks for the address from step 1.

    $ git clone https://github.com/guitaripod/unrager
    $ cd unrager/ios && ./scripts/install.sh
  3. Trust it and open it

    On the phone: Settings > General > VPN & Device Management > your Apple ID > Trust, then open Unrager and allow the local network. A free Apple ID’s build stops opening after 7 days; run the script again to renew it.

The step-by-step guide explains every screen, what each error means and how to do it by hand in Xcode. The screens above show made-up posts.

ls models/

A model trained for it

unrager-4b is a custom model trained for unrager, and it is the default: setup points at it, so there is nothing to configure. It is Qwen3.5-4B fine-tuned on about 7,400 posts from one real feed, labelled against unrager’s default rules by a 26B model and a second model that had to agree. It reads a post and answers KEEP, or HIDE and the number of the rule that caught it. It hides half as many good posts as the 26B model, and it is small enough to stay loaded on a laptop.

1 in 31

good posts hidden

the Qwen3 4B it replaced hid 1 in 24, a 26B model 1 in 15

3 in 4

rage posts caught

on 1,049 real posts, scored by hand; the Qwen3 4B caught 3 in 5

2.7 GB

to download

Q4_K_M, 4.5 GB at Q8_0, runs on a laptop

Apache 2.0. Tuned to unrager’s default rules; the prompt ships with the weights.

ls unrager/

Also in the box

A terminal client

unrager began as an X client for the terminal, and it's still here: run unrager for your timeline with the same filter, threads in a split pane, inline images in Ghostty, Kitty and WezTerm, and a local model that translates posts and explains threads. Every text box is a small Vim editor.

A command line

unrager read, thread, search and friends print posts as text or JSON, and unrager eval scores your model on your own labelled posts. The README lists every command.

./unrager --faq

Frequently asked questions

How accurate is it?

Good, not perfect. Tested on 1,049 real posts from one person’s feed, judged against their own rules, the default model took out about three in four rage posts and hid about one good post in 31. Nothing it hides is gone: turn on Show hidden posts to see each one with the rule that caught it, and one click brings it back for good.

Does anything leave my computer?

No. The extension hands posts to unrager on localhost, and unrager hands them to your model. There’s no account and no telemetry. The background server that setup installs never reads your X login and never talks to X, and it refuses requests from web pages, so a site you visit can’t use it.

What if my model is off, or slow?

X works as usual. unrager fails open: a new post waits a couple of seconds for its verdict and then shows anyway, a failed check is never remembered, and unrager asks again shortly. The toolbar badge shows ! while posts can’t be checked, and the popup says what to run.

Which models work?

The default is unrager-4b on Ollama, and it’s small on purpose: on 1,049 real posts it hid about one good post in 31, where a 26B model hid one in 15. It is 2.7 GB, loads in about two seconds and stays loaded. Any instruction-tuned model that can answer HIDE or KEEP will do, served by Ollama or anything that speaks the OpenAI chat API. unrager eval tells you how well yours filters.

What is unrager-4b?

A model trained for unrager, and the default one: Qwen3.5-4B fine-tuned on about 7,400 posts from one feed, labelled against unrager’s default rules by a 26B model and a second model that had to agree. On 1,049 real posts it hid about one good post in 31 and caught about three in four rage posts, where the Qwen3 4B it replaced hid one in 24 and caught three in five. It is Apache 2.0, and its weights, GGUFs and prompt are on Hugging Face and as a torrent on Pirate Face. It is tuned to the default rules; with rules of your own it still follows them, so check it with unrager eval.

Can the model run on a different computer?

Yes. Run unrager setup --bind 0.0.0.0:7777 on the machine with the GPU, then enter its address under Settings in the extension’s popup. Keep that to a private network such as Tailscale: unrager has no login of its own.

Which browsers and systems?

Chromium browsers (Chrome, Brave, Edge, Vivaldi, Arc) on macOS and Linux. Firefox, Safari and Windows aren’t supported yet.

Is there an iPhone app?

Yes, but you build it yourself, once. X’s own iPhone app can’t run extensions, so unrager has a native client that talks to unrager on your computer: the same filter, with every hidden post listed under its rule, plus Ask, Brief and Translate on your model. It uses your X session, so it isn’t on the App Store: on a Mac with Xcode, one script builds it with your own (free) Apple ID and installs it on your phone, and it reaches your computer over a private network such as Tailscale.

Where do the country flags in the iPhone app come from?

From X’s own About this account lookup, asked one author at a time. When X rate-limits it, put community_cache = true under [about] in config.toml and unrager asks the X-Posed community cache first, in one request for everyone on screen. That sends the handles you are looking at to a third-party service and nothing else, which is why it is off by default.

Why load it unpacked instead of from the Chrome Web Store?

It isn’t listed yet. Loading it unpacked takes three clicks once; after that, unrager update keeps it current and the toolbar icon shows ↑ until you reload it.

Does it filter replies, search and profiles too?

No, only your Home timeline, For you and Following. When you open a profile, a thread or a search, you went looking, so you see all of it.

Does it cost anything?

No. unrager is free and open source under the GPL-3.0, and it runs on hardware you own: no API key, no subscription, no per-post cost.

Keep x.com. Lose the rage.

Free, open source, and entirely on your own computer.

GPL-3.0 Not affiliated with X Corp github.com/guitaripod/unrager ↗ by Midgar Oy

cd ~