<?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: Nico</title>
    <description>The latest articles on DEV Community by Nico (@nico_app_ai).</description>
    <link>https://dev.to/nico_app_ai</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%2F4225694%2F0ba3fd01-09c1-4eae-8038-f31343bbe14e.png</url>
      <title>DEV Community: Nico</title>
      <link>https://dev.to/nico_app_ai</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/nico_app_ai"/>
    <language>en</language>
    <item>
      <title>Why We Run Our AI Agent on Your Mac Instead of a Cloud Computer</title>
      <dc:creator>Nico</dc:creator>
      <pubDate>Wed, 04 Nov 2026 08:35:09 +0000</pubDate>
      <link>https://dev.to/nico_app_ai/why-we-run-our-ai-agent-on-your-mac-instead-of-a-cloud-computer-2fej</link>
      <guid>https://dev.to/nico_app_ai/why-we-run-our-ai-agent-on-your-mac-instead-of-a-cloud-computer-2fej</guid>
      <description>&lt;p&gt;A lot of personal AI agents now come with their own computer: a virtual machine in the cloud with a browser, a file system and a model driving it. It's a clean design. The agent gets a sandbox it fully controls, and nothing it does can touch your machine.&lt;/p&gt;

&lt;p&gt;The catch shows up on the first real task. Your files are on your laptop. Your logins live in your browser. Your mail, calendar and the odd desktop app your team uses are all local. So you upload documents, sign in to your accounts again on a remote machine, and download whatever it makes.&lt;/p&gt;

&lt;p&gt;We build &lt;a href="https://nico.app/?ref=devto" rel="noopener noreferrer"&gt;Nico&lt;/a&gt;, a personal agent for the Mac, and we went the other way: the agent works on the Mac you're already using. This post covers the design choices that fell out of that, and a few things we learned building it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Two Agents Behind One Character
&lt;/h2&gt;

&lt;p&gt;Nico shows up as a small character on your desktop. You hold the right ⌘ key, say what you need, and let go. Behind that there are two agents with very different jobs.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The front agent talks with you.&lt;/strong&gt; It has to answer fast, follow speech that changes its mind halfway ("Thursday, no, Friday"), and stay available while work is running. It doesn't do long tasks itself. It works out what you mean, hands a task off, and decides when to tell you how it went.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Worker does the work.&lt;/strong&gt; It plans, reads files, works in your apps and browser, makes what you asked for, and checks its own results. Tasks can take minutes, get queued, pause, and resume after the app restarts.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F0loondya6yamnffvoip0.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F0loondya6yamnffvoip0.webp" alt="Two small Nico figures under the line “Not one agent, two agents”: one labeled “One talks with you,” the other digging through a box of documents, labeled “One does the work”" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Splitting them keeps voice latency independent of task length. You can ask for a report, then ask something unrelated while the report is still being written, and the front agent answers right away.&lt;/p&gt;

&lt;h2&gt;
  
  
  Built on pi, With Our Own Tools
&lt;/h2&gt;

&lt;p&gt;The Worker runs on &lt;a href="https://github.com/earendil-works/pi" rel="noopener noreferrer"&gt;pi&lt;/a&gt;, an open-source agent harness. pi owns the loop that sends requests to the model, gets back tool calls and returns results. It also connects to model providers and subscription logins, saves sessions, and retries on errors.&lt;/p&gt;

&lt;p&gt;Nico owns everything around that loop: every tool the Worker can call (including replacements for pi's built-in ones), the check before each step, confirmation cards, a log of outbound actions, the system prompt, and what happens when the context fills up.&lt;/p&gt;

&lt;p&gt;That last one is a good example of why we split things this way. When the context is full, pi's default is to have the model write a summary that keeps the first 2,000 characters of each tool result. We ran a comparison: the Worker reads three long pages, each ending with a reference number, the context fills up, and then we ask for the three numbers.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;With the default summary, none of the three models we tried got a single number right. Two of them also recorded emails they had already answered as still unanswered.&lt;/li&gt;
&lt;li&gt;With our own compaction summary, all three got every number right.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Our summary also attaches the outbound actions already taken, marked as done and not to be repeated. An agent that forgets it already sent an email will cheerfully send it again.&lt;/p&gt;

&lt;h2&gt;
  
  
  Every Step Gets a Risk Level
&lt;/h2&gt;

&lt;p&gt;Running on your real Mac means the agent can reach real things, so every step is classified before it runs: do it directly, send it to review, ask the user, or refuse.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Review&lt;/strong&gt; checks the step against what the task was authorized to do. Typing into a page or tidying files in a folder you approved goes straight through. Other steps go to an automatic review, and if review says no, the reason goes back to the Worker instead of stopping the task.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Asking the user&lt;/strong&gt; is reserved for things that shouldn't be automated. Sending an email from Mail shows a card with the account, recipients, subject, full text and attachments, and it waits for a click on Send. Payments, account authorization and credentials always go back to you.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Steps with an unknown outcome&lt;/strong&gt; (say the app quit mid-send) are checked read-only first, for example by looking in the Sent folder, before anything is retried.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Some actions get a floor regardless of what the review thinks: sending, submitting, permanent deletion, sharing and privacy changes are always treated as high risk.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F26c2mjlkbgwpx9hbtr6i.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F26c2mjlkbgwpx9hbtr6i.webp" alt="An expense report filled in from a hotel receipt in Chrome, with Nico asking “All filled in. Should I submit it?” and the options Submit, Not yet and Other" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Local Means Your Logins Just Work
&lt;/h2&gt;

&lt;p&gt;Because the Worker runs on your Mac:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Files are read where they are, and results are saved locally.&lt;/li&gt;
&lt;li&gt;Websites see your usual network and your existing sessions. The Worker uses its own browser on your Mac, or your Chrome through the Nico extension.&lt;/li&gt;
&lt;li&gt;Mail, Calendar, Reminders, Notes, Finder, Preview and other apps are within reach. Desktop apps are driven through &lt;a href="https://github.com/trycua/cua" rel="noopener noreferrer"&gt;cua-driver&lt;/a&gt;, and Nico decides which tools and system permissions it gets.&lt;/li&gt;
&lt;li&gt;Memory is stored on your Mac, and you can see, change or delete it.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Bring Your Own Model
&lt;/h2&gt;

&lt;p&gt;The Worker always runs on your own model account: ChatGPT, Claude, Gemini, GitHub Copilot, DeepSeek, Qwen, Kimi, Mistral, OpenRouter, or any OpenAI- or Anthropic-compatible endpoint. Credentials go in the macOS Keychain, and requests go straight from your Mac to the provider you picked. Nico's servers never see what the Worker reads or writes.&lt;/p&gt;

&lt;p&gt;If you've already got a coding plan or API key, there's no second AI subscription just to run tasks.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try It
&lt;/h2&gt;

&lt;p&gt;Nico is free for Apple silicon Macs on macOS 15.4 or later. The Free plan runs tasks on your own model and replies in text. Plus ($15/month) adds voice replies, and new accounts get a 7-day Plus trial with no card required.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://nico.app/?ref=devto" rel="noopener noreferrer"&gt;Get Nico at nico.app&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If you're building agents yourself, we'd love to hear how you handle compaction and outbound actions. Drop a comment.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>agents</category>
      <category>macos</category>
      <category>productivity</category>
    </item>
  </channel>
</rss>
