<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Rishideep Mandavilli</title>
    <description>The latest articles on DEV Community by Rishideep Mandavilli (@rishideep_mandavilli_a160).</description>
    <link>https://dev.to/rishideep_mandavilli_a160</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4220234%2Fffb80ee1-0e9b-40c2-aa6d-6545e2517977.jpg</url>
      <title>DEV Community: Rishideep Mandavilli</title>
      <link>https://dev.to/rishideep_mandavilli_a160</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/rishideep_mandavilli_a160"/>
    <language>en</language>
    <item>
      <title>I Built Chunks: an On-Device AI That Sees My Mac Screen and Acts Without Stealing My Mouse</title>
      <dc:creator>Rishideep Mandavilli</dc:creator>
      <pubDate>Tue, 03 Nov 2026 18:46:13 +0000</pubDate>
      <link>https://dev.to/rishideep_mandavilli_a160/i-built-chunks-an-on-device-ai-that-sees-my-mac-screen-and-acts-without-stealing-my-mouse-2eoh</link>
      <guid>https://dev.to/rishideep_mandavilli_a160/i-built-chunks-an-on-device-ai-that-sees-my-mac-screen-and-acts-without-stealing-my-mouse-2eoh</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/mlh-hackathon"&gt;MLH x DEV Writing Challenge&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Built
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Chunks&lt;/strong&gt; is a native macOS menu-bar and notch companion. You talk to it, it looks at your screen, explains what's going on, and can act on your apps for you. And it does all of that without grabbing your cursor or sending your screen to a cloud server.&lt;/p&gt;

&lt;p&gt;I built it because the "computer use" agents I tried annoyed me. They warp your physical mouse, so you can't touch your laptop while they work. They take 30 to 60 seconds per step. They ship full-screen screenshots off to someone else's backend. Meanwhile, normal AI chat sits in a browser tab and knows nothing about the app you're stuck in.&lt;/p&gt;

&lt;p&gt;I wanted something that felt like a friend sitting next to me: it sees what I see, points at the right button, and does the boring clicks only when I say yes.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fx1lyy6ipyjudb9yi1rvj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fx1lyy6ipyjudb9yi1rvj.png" alt="Chunks conversation window answering questions about what's on screen" width="800" height="546"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  How it works
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Accessibility-first actions, not fake mouse events.&lt;/strong&gt; Chunks uses the macOS Accessibility API (&lt;code&gt;AXUIElement&lt;/code&gt;) through a driver I call &lt;code&gt;AXTDriver&lt;/code&gt;. It finds controls by meaning (&lt;code&gt;app="Notes" role=button name="New Note"&lt;/code&gt;), climbs the accessibility tree to find something pressable, checks focus before typing, and fires &lt;code&gt;AXUIElementPerformAction&lt;/code&gt;. My real mouse never moves. A smooth Bezier "pointer trail" shows you where it's acting instead.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Two brains.&lt;/strong&gt; A fast cloud path uses Gemini Flash with my own key. Requests are hedged in parallel at 3.5s to cut tail latency, with &lt;code&gt;"store": false&lt;/code&gt;. A fully offline path runs &lt;strong&gt;Gemma 4&lt;/strong&gt; (&lt;code&gt;gemma4:e2b-it-qat&lt;/code&gt; and &lt;code&gt;gemma4:e4b-it-qat&lt;/code&gt;) locally through Ollama on Apple Silicon. A full vision turn finishes in about 2.3 seconds with nothing leaving the laptop.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;One coordinate system to rule them all.&lt;/strong&gt; Retina scaling and the AppKit vs CoreGraphics origin flip caused my worst bugs. So the model always reasons on a 0–1000 grid, and a single &lt;code&gt;CoordinateSpace&lt;/code&gt; layer maps that to device pixels, window coordinates and "Circle-to-Explain" crops.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Privacy and safety by design.&lt;/strong&gt; There's zero backend. Keys live in the macOS Keychain. Memory is a 2 KB local markdown file, and a &lt;code&gt;SecretSweeper&lt;/code&gt; scrubs API keys, JWTs and passwords before anything is written. A &lt;code&gt;ConsentGate&lt;/code&gt; asks before any state-changing action, and a &lt;code&gt;PolicyGate&lt;/code&gt; blocks risky commands. One rule I'm proud of: something Chunks &lt;em&gt;infers from the screen&lt;/em&gt; can never overwrite something I &lt;em&gt;said out loud&lt;/em&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Foomf5b44kkdfvkjmmmz1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Foomf5b44kkdfvkjmmmz1.png" alt="Chunks settings panel with model choice, consent toggle, routines and local memory" width="784" height="2007"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Stack:&lt;/strong&gt; Swift 6, AppKit, SwiftUI, ScreenCaptureKit, ApplicationServices (AXUIElement), AVFoundation, Speech.framework, Ollama, Gemini API.&lt;/p&gt;

&lt;p&gt;It's backed by a dependency-free suite of 710+ unit tests and live OS probes (&lt;code&gt;--probe-local&lt;/code&gt;, &lt;code&gt;--probe-ax&lt;/code&gt;, &lt;code&gt;--probe-semantic&lt;/code&gt;).&lt;/p&gt;

&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;

&lt;p&gt;60-second demo: &lt;a href="https://drive.google.com/file/d/1gIBZRcIgqB2CSNadLQVepUED_W06cSpv/view?usp=sharing" rel="noopener noreferrer"&gt;https://drive.google.com/file/d/1gIBZRcIgqB2CSNadLQVepUED_W06cSpv/view?usp=sharing&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Code: &lt;a href="https://github.com/Rishideep-Mandavilli/chunks" rel="noopener noreferrer"&gt;https://github.com/Rishideep-Mandavilli/chunks&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Partner Technologies
&lt;/h2&gt;

&lt;p&gt;I entered the &lt;strong&gt;Gemma track&lt;/strong&gt;, and Gemma is what makes the "private" part real. Running Gemma 4 2B and 4B quantized models through Ollama meant I could do screen understanding fully offline on a MacBook. A few things I learned:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Streaming &lt;code&gt;/api/chat&lt;/code&gt; as NDJSON with &lt;code&gt;think: false&lt;/code&gt; made the difference between "usable" and "waiting".&lt;/li&gt;
&lt;li&gt;The 2B model is fast enough for quick "what is this?" questions. The 4B model is noticeably better at picking the right UI element when the screen is busy.&lt;/li&gt;
&lt;li&gt;Keeping prompts tied to the normalized grid made small models far more reliable at pointing at things.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Gemini Flash stays as an optional fast cloud mode, but Chunks works end to end without it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Hackathon Experience
&lt;/h2&gt;

&lt;p&gt;I built Chunks for &lt;strong&gt;Hacktoberfest Hack Day × AI in Vizag&lt;/strong&gt; on November 1, 2026, in the Gemma use-case track. Honestly, I didn't present it as well as I wanted, and Chunks didn't place. But I did win the special prize for my LinkedIn post about the day, which was a nice surprise.&lt;/p&gt;

&lt;p&gt;What I'll remember most is the energy of a room full of people building with open models on a Sunday, and the moment Chunks typed into Notes while my hands were off the trackpad. Next time I'll practise the demo as hard as I practised the code.&lt;/p&gt;

&lt;p&gt;What's next: a signed release so anyone can try it, and better small-model accuracy on crowded screens.&lt;/p&gt;

&lt;p&gt;Thanks for reading! If you've fought with computer-use agents too, I'd love to hear what broke for you.&lt;/p&gt;

</description>
      <category>mlhacks</category>
      <category>devchallenge</category>
      <category>hackathon</category>
      <category>ai</category>
    </item>
  </channel>
</rss>
