<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <title>Tianrun Qiu: Writing</title>
    <link href="https://r-q.name/blog/feed.xml" rel="self" />
    <link href="https://r-q.name/blog/" />
    <id>https://r-q.name/blog/</id>
    <updated>2026-09-25T12:00:00Z</updated>
    <author><name>Tianrun Qiu</name><uri>https://r-q.name/</uri></author>
    <entry>
        <title>I built an on-device AI that judges every screen in a second</title>
        <link href="https://r-q.name/blog/qualm/" />
        <id>https://r-q.name/blog/qualm/</id>
        <published>2026-09-25T12:00:00Z</published>
        <updated>2026-09-25T12:00:00Z</updated>
        <summary>My thesis app needed the cloud; on-device, one screen took 20 to 40 seconds. A new kind of model cut that to one second, and I built Qualm for the Mac in a day.</summary>
        <content type="html">&lt;figure class=&quot;post-video&quot;&gt;
&lt;video controls playsinline preload=&quot;none&quot; poster=&quot;https://r-q.name/blog/qualm/cover.jpg&quot; width=&quot;1280&quot; height=&quot;720&quot; aria-label=&quot;Qualm, a 61-second narrated video with captions&quot;&gt;
&lt;source src=&quot;https://r-q.name/blog/qualm/qualm.mp4&quot; type=&quot;video/mp4&quot;&gt;
&lt;/video&gt;
&lt;/figure&gt;&lt;p&gt;Almost no screen-time tool uses AI. The idea is obvious: judge every screen instead of blocking a site. But that is a model call every few seconds on everything you read. In the cloud it costs money and privacy; on the device it was too slow.&lt;/p&gt;
&lt;p&gt;I built the cloud version anyway. &lt;a href=&quot;https://seenot.site/&quot;&gt;SeeNot&lt;/a&gt;, for Android, was, as far as I know, the first to judge the screen itself, and it became my thesis at &lt;a href=&quot;https://www.sustech.edu.cn/en/&quot;&gt;SUSTech&lt;/a&gt;. It worked, and it never took off: people liked the idea, few downloaded it, and I never liked where the screenshots went.&lt;/p&gt;
&lt;p&gt;On September 15, &lt;a href=&quot;https://typesafe.ai/&quot;&gt;TypeSafe&lt;/a&gt; released &lt;a href=&quot;https://typesafe.ai/blog/introducing-system-one-models-and-jev&quot;&gt;Jev&lt;/a&gt;, a model that doesn&amp;#39;t write text. You give it a text and a list of questions with fixed answers (yes or no, or one option from a list), and it answers all of them at once, in well under a second; because nothing is generated, ten questions take about as long as one. That is exactly what my app had been asking a VLM to do with a page-long prompt. And &lt;a href=&quot;https://github.com/jaredpalmer/kev&quot;&gt;Kev&lt;/a&gt;, an open-source version of the same idea, does it on an Apple silicon Mac in about a second.&lt;/p&gt;
&lt;p&gt;What was new was where it could run. The on-device model I had tried for SeeNot took 20 to 40 seconds per judgment; this takes about one, with nothing sent anywhere. So I built the second try, Qualm, a Mac menu bar app.&lt;/p&gt;
&lt;p&gt;YouTube is a lecture and a Shorts feed; the lecture stays, and the Shorts get a pop-up that says why. Each new screen gets a short list of questions (what kind of page is this, what is it for, is it private, does it break each of my rules), and plain code decides. I no longer write a prompt; I choose the questions and write the code that acts on the answers.&lt;/p&gt;
&lt;p&gt;Most of what the first version taught me is a list of what the tool must never do. It never hard-blocks. It runs local by default, and you can switch to TypeSafe&amp;#39;s hosted Jev, but it never falls back to it quietly, because the tool reads everything you read. And rules are generalizable sentences, so &amp;quot;short videos made for endless swiping&amp;quot; catches a site nobody listed.&lt;/p&gt;
&lt;p&gt;A week after the Jev launch, I sat down with it, ran trials the first day, had a working app that evening, and have used it daily since. I built it with Claude Code, and for agents too: every setting is also a command, so an agent can add a rule, test it on your own recent screens, and undo it. The night before shipping I asked for an audit as a fresh user and went to sleep; by morning 77 subagents had filed 204 problems, two of them serious.&lt;/p&gt;
&lt;p&gt;You can try it at &lt;a href=&quot;https://qualm.r-q.name/&quot;&gt;qualm.r-q.name&lt;/a&gt;, and the code is &lt;a href=&quot;https://github.com/RoderickQiu/qualm&quot;&gt;on GitHub&lt;/a&gt;.&lt;/p&gt;
</content>
    </entry>
</feed>
