<?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: Murilo Prataviera</title>
    <description>The latest articles on DEV Community by Murilo Prataviera (@muriloprataviera).</description>
    <link>https://dev.to/muriloprataviera</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%2F4175727%2F955d06f9-6342-4fbc-a228-7bf14f2b925a.jpg</url>
      <title>DEV Community: Murilo Prataviera</title>
      <link>https://dev.to/muriloprataviera</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/muriloprataviera"/>
    <language>en</language>
    <item>
      <title>I run 10+ Claude Code sessions at once, so I built a Mac app to point at what needs fixing</title>
      <dc:creator>Murilo Prataviera</dc:creator>
      <pubDate>Sat, 10 Oct 2026 18:35:50 +0000</pubDate>
      <link>https://dev.to/muriloprataviera/i-run-5-claude-code-sessions-at-once-so-i-built-a-mac-app-to-point-at-what-needs-fixing-1513</link>
      <guid>https://dev.to/muriloprataviera/i-run-5-claude-code-sessions-at-once-so-i-built-a-mac-app-to-point-at-what-needs-fixing-1513</guid>
      <description>&lt;p&gt;Hi! This is my first public project, so be gentle (but honest). 🙂&lt;/p&gt;

&lt;h2&gt;
  
  
  The problem
&lt;/h2&gt;

&lt;p&gt;At my startup I run more than 10 Claude Code sessions at the same time, one per feature, each in its own git worktree. The fixes were fast. Explaining &lt;em&gt;where&lt;/em&gt; wasn't:&lt;/p&gt;

&lt;p&gt;screenshot → paste → "the button on the right, no, the other one" → switch tab… wrong tab.&lt;/p&gt;

&lt;p&gt;With one agent that's annoying. With ten, it's where most of my time went.&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Aki&lt;/strong&gt; is a small Mac app for that. Press ⇧⌘A, point at anything on the screen, write what should change, and press ⌘⏎. The note lands in the right agent's terminal, with the exact element. No screenshot.&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%2Fj5632jjnmznaz2b19ony.gif" 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%2Fj5632jjnmznaz2b19ony.gif" alt="Marking an element in Chrome with Aki and writing what should change" width="800" height="475"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In Chrome, Brave, Edge and Arc it asks the page (through Apple Events, no extension) for what's under your pointer: a unique CSS selector, the text, the HTML, and the React component's file in dev builds. The arrow keys walk the screen; ⇧ + arrow adds the next thing to the mark.&lt;/p&gt;

&lt;h2&gt;
  
  
  Not just the browser
&lt;/h2&gt;

&lt;p&gt;A terminal error, a file in Finder, a Figma frame. If it's on your screen, you can mark it. Outside the browser Aki uses the macOS Accessibility tree, and areas work in any app.&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%2Fppcu0c7ymeqd14qno5xe.gif" 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%2Fppcu0c7ymeqd14qno5xe.gif" alt="Marking a terminal error and a file in Finder" width="800" height="475"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The right session, by itself
&lt;/h2&gt;

&lt;p&gt;This is the part I needed most. A page on &lt;code&gt;localhost:3001&lt;/code&gt; belongs to a project, so Aki finds the process serving that port, its folder and worktree, and sends the marks to the agent session working there. Anything else goes to the session you picked in a small sidebar on the screen edge (one ring per Claude Code / Codex session: working, waiting for you, marks pending).&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%2F7kqh3dsevu9yzvmao4rj.gif" 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%2F7kqh3dsevu9yzvmao4rj.gif" alt="Sending the queue to the right agent session" width="800" height="475"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What the agent gets
&lt;/h2&gt;

&lt;p&gt;Text first. Each mark carries the text it covers, and a small crop goes along only when what you marked is visual, so the agent doesn't burn tokens reading a full screenshot. The agent reads the marks over a local MCP server (&lt;code&gt;read_annotations&lt;/code&gt;, &lt;code&gt;wait_for_annotations&lt;/code&gt;, &lt;code&gt;get_annotation_image&lt;/code&gt;, &lt;code&gt;resolve_annotation&lt;/code&gt;) or the &lt;code&gt;aki&lt;/code&gt; command, fixes the code and resolves each one.&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%2Fsyj9uibtpssd86djlgh6.gif" 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%2Fsyj9uibtpssd86djlgh6.gif" alt="Claude Code reading the marks and fixing the page" width="800" height="475"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  How it's built
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Native Swift (SwiftPM, no Xcode project), lives on the screen edge, no Dock icon.&lt;/li&gt;
&lt;li&gt;A small HTTP server inside the app, only on &lt;code&gt;127.0.0.1&lt;/code&gt;, checking Origin/Host. Marks stay on your Mac, in &lt;code&gt;~/.aki&lt;/code&gt;. No account.&lt;/li&gt;
&lt;li&gt;I built most of it with Claude Code itself, which made the "wrong tab" problem very real every day.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Honest limits
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Apple Silicon, macOS 14+.&lt;/li&gt;
&lt;li&gt;Aki types the request into the session by itself in the Orca terminal; in other terminals the agent picks the marks up via MCP or &lt;code&gt;aki wait&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;It's young. Expect rough edges.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Try it
&lt;/h2&gt;

&lt;p&gt;It's free, and the code is on GitHub (source-available, FSL-1.1-ALv2).&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-fsSL&lt;/span&gt; https://aki-updates.vercel.app/aki-install.sh | sh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Site: &lt;a href="https://useaki.vercel.app" rel="noopener noreferrer"&gt;https://useaki.vercel.app&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Code: &lt;a href="https://github.com/muriloprataviera/aki" rel="noopener noreferrer"&gt;https://github.com/muriloprataviera/aki&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It's my first time putting code out in the open, so feedback, tips and bug reports are very welcome. And if you also run several agents at once, I'd love to know how you deal with it today.&lt;/p&gt;

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