Skip to content
System One

Unclutter: a Jev browser extension that hides clutter

Unclutter is a WXT browser extension that removes page clutter using Jev decisions, with reusable template rules per site.

kitze/unclutter on GitHub

Stars
226
Forks
21
Language
TypeScript
License
MIT
Last push
18 Sep 2026

Read from GitHub on . Counts change daily.

Unclutter is a browser extension, built with the WXT framework for Chrome and Firefox, that strips nonessential elements from a page: things like cookie banners, promo modules, and other clutter that aren’t the content someone came for. On a page, Jev classifies which elements are nonessential, reached either through Vercel AI Gateway or directly through TypeSafe AI with the user’s own key.

Rather than reclassifying every page on every visit, the extension saves the hiding rules it learns per page template and reapplies them automatically the next time a matching page loads, so the model only needs to run once per template rather than once per page view. Analysis can run manually, by clicking Analyze page, or automatically when a visit hits a new template. Templates saved under the first rubric version show an “Update available” flag. One manual re-analysis, or one automatic refresh in on-visit mode, adds newly handled cases like cookie dialogs while keeping paused templates and elements the user chose to keep visible.

How it uses Jev

import type { Provider } from "./providers";

export const ENDPOINT = "https://ai-gateway.vercel.sh/v4/ai/evaluation-model";
export const TYPESAFE_ENDPOINT = "https://api.typesafe.ai/v1/systemone";
const answerSchema = z.object({
  type: z.literal("choice"),
  choice: z.enum(categories),
  probabilities: z.partialRecord(z.enum(categories), z.number().finite().min(0).max(1)).optional(),
  confidence: z.number().finite().min(0).max(1).optional(),
});
const responseSchema = z.object({ answers: z.record(z.string(), answerSchema) });

View in lib/jev.ts

Open on GitHub

More like this

Keep browsing