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) });


