Qualm
macOS menu bar screen-time app that asks Kev or Jev whether each screen breaks your rules and steps in with a pop-up.
Overview
Qualm is a local-first screen-time app for Apple silicon Macs. It reads the screen as text through the Accessibility API and, on each new screen, asks a System One model what kind of page it is, whether it is for learning, work or entertainment, whether it is private, and how likely it breaks each of your rules. Rules are sentences rather than site lists, so a YouTube lecture can stay while Shorts get a pop-up. Plain code decides from the probabilities.
By default it runs Kev-4B locally via MLX (about 1 s per check, nothing leaves the Mac); hosted Jev 1.13 is an opt-in alternative at about 0.2 s and, per the README, around $1 a month, and is never a silent fallback. It never intervenes on payment, login or banking pages. A list summary reports that on 119 trial pages with Kev, the short-video, feed, livestream and video rules had precision 1.00. Rule changes can be made through Claude Code, Codex or Cursor.
What the decision model decides
| Type | Question | Answers |
|---|---|---|
| Choice | How likely does this screen break each user rule (e.g. 'short videos made for endless swiping')? | — |
| Yes / no | Is this a payment, login or banking screen? | — |
| Choice | Is this page for learning, work or entertainment? | learning · work · entertainment |
How it works
- Read the new screen as text via the Accessibility API
- Ask Kev (local) or Jev (hosted) typed questions per rule plus a sensitive-page check
- Skip intervention on sensitive pages
- Show a pop-up only when a rule's probability clears its threshold; user answers tune thresholds
Strengths
- Default local model keeps screen text on the Mac
- Rules in plain language catch unlisted sites
- No intervention on sensitive pages by design
Caveats
- App is not notarized yet
- Local model needs M1+, macOS 14 and 6-7 GB free memory
- Precision figure is from a small 119-page trial
Getting started
Download Qualm.dmg from GitHub Releases and pick Kev or Jev in setup; from source: uv sync && uv run qualm setup && uv run qualm app.At a glance
- Type
- Service
- Status
- beta
- Language
- Python
- Runtime
- macOS menu bar app
- Has code
- yes
- License
- GPL-3.0-or-later
Use cases and integrations
How curated lists describe it
Digital wellbeing: macOS menu bar app that reads the screen as text through the Accessibility API and asks Jev (or Kev, its local open-source counterpart) one `Choice` per user rule plus a `Noul` on whether the page is a payment, login or banking screen, stepping in with a pop-up only when a rule's probability clears its threshold and never on sensitive pages; on 119 trial pages with Kev, the short-video, feed, livestream and video rules had precision 1.00.
yibie/awesome-jev
Frequently asked questions
What does Qualm decide?
Whether the current screen breaks one of your sentence-style rules and whether it is a sensitive page to leave alone.
Does it need a TypeSafe key?
No; the default is the local Kev model. Jev is optional and needs a key.
What leaves my Mac?
With Kev, only a daily update check; with Jev, the text of each new screen goes to TypeSafe.
Related projects
Focus mode for Omarchy/Hyprland that has Jev judge each screen against your declared task and escalates gently when you drift.
ProjectbetaSelf-hosted podcast ad remover that transcribes episodes and uses an LLM or System One to detect and cut ad segments.
ServicebetaChrome extension that asks Jev to score YouTube videos as likely time-wasters and covers them with a dismissible shield.
Browser extensionprototypeJavaScriptPrompt reviewer for Claude Code and Codex where Jev decides whether each prompt needs review before a light model lists blind spots.
CLIbetaTypeScriptIDE and browser extensions to find and install agent Skills and Subagents, with an opt-in Jev check when local detection can't decide.
Browser extensionproductionTypeScriptChrome extension that groups and orders all tabs in a window by meaning and your rules with a single Jev request.
ServiceproductionTypeScript