<?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>Forem: Damian Plewa</title>
    <description>The latest articles on Forem by Damian Plewa (@nixuuu).</description>
    <link>https://forem.com/nixuuu</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.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1376881%2F0b84ea5d-48d0-4c94-b274-4be0c6b6cc4d.png</url>
      <title>Forem: Damian Plewa</title>
      <link>https://forem.com/nixuuu</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/nixuuu"/>
    <language>en</language>
    <item>
      <title>Building a desktop application to manage AI coding agents across git worktrees</title>
      <dc:creator>Damian Plewa</dc:creator>
      <pubDate>Sat, 11 Apr 2026 15:36:40 +0000</pubDate>
      <link>https://forem.com/nixuuu/building-a-desktop-application-to-manage-ai-coding-agents-across-git-worktrees-4kno</link>
      <guid>https://forem.com/nixuuu/building-a-desktop-application-to-manage-ai-coding-agents-across-git-worktrees-4kno</guid>
      <description>&lt;h2&gt;
  
  
  Building a desktop application to manage AI coding agents across git worktrees
&lt;/h2&gt;

&lt;p&gt;At our company we manage dozens of projects across multiple languages. We started using tools like Claude Code and Gemini CLI on multiple pull request branches simultaneously.&lt;/p&gt;

&lt;p&gt;The workflow degraded fast. I often had 20 to 30 terminal tabs open. Each tab ran a different agent. Add the frontend and backend browser tabs for each project and it became impossible to track which agent was working, idle or waiting for input. The cognitive load of context switching was too high.&lt;/p&gt;

&lt;p&gt;We built Canopy to solve this problem. Our team usually builds applications for other companies. We wanted a product of our own to fix our specific workflow issue.&lt;/p&gt;

&lt;p&gt;Canopy is an Electron application built with Svelte 5 and xterm.js. It creates an isolated workspace for each git worktree. Every workspace gets its own terminal, agent session and an integrated browser tab. We spawn the agents as child processes and read stdout. The application does not proxy API calls or inject hidden instructions.&lt;/p&gt;

&lt;p&gt;The sidebar provides a visual overview of all active worktrees. Color indicators show if an agent is working or waiting for a prompt reply. There is an Inspector panel that tracks token usage and context window fill per session. You can visually track when a session reaches 90 percent capacity and run a compact command before the agent fails.&lt;/p&gt;

&lt;p&gt;We also built a diff panel where you can click a line in the uncommitted changes view and send a comment directly to the agent's stdin.&lt;/p&gt;

&lt;p&gt;Here are the technical choices and trade-offs we made:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Electron:&lt;/strong&gt; The application uses about 1 to 2.5 GB RAM depending on the number of open worktrees. We profiled the application to optimize the scrollback buffers and keep it stable during large agent outputs. We chose Electron because Chromium provides xterm.js and a real browser view per worktree without reinventing those components.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Security:&lt;/strong&gt; API keys are pulled directly from the native system keychain. Agents run in a filtered environment to prevent shell profile secrets from leaking. We do not proxy API calls through our servers.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Telemetry:&lt;/strong&gt; Just to count the Daily Active Users. The application makes one HTTP request per day to log basic system information like the operating system and application version. There are no user IDs and no IPs logged. A single checkbox in the settings turns this off completely. We self-host our analytics instance.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Source distribution:&lt;/strong&gt; The code is public so you can read it and file bugs. We restrict code contributions to our internal team because we lack the resources to review external pull requests right now.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We use this tool daily to maintain focus while working with CLI agents. It is free and requires no account. We would like to hear your thoughts and answer questions about the technical implementation.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Repo:&lt;/strong&gt; &lt;a href="https://github.com/itsoltech/canopy-desktop" rel="noopener noreferrer"&gt;https://github.com/itsoltech/canopy-desktop&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;Site:&lt;/strong&gt; &lt;a href="https://canopy.itsol.tech" rel="noopener noreferrer"&gt;https://canopy.itsol.tech&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>programming</category>
      <category>vibecoding</category>
      <category>productivity</category>
    </item>
    <item>
      <title>We Run Claude Code on 10+ Branches Daily, So We Built a Workstation to Keep Up</title>
      <dc:creator>Damian Plewa</dc:creator>
      <pubDate>Sat, 04 Apr 2026 15:17:34 +0000</pubDate>
      <link>https://forem.com/nixuuu/we-run-claude-code-on-10-branches-daily-so-we-built-a-workstation-to-keep-up-581a</link>
      <guid>https://forem.com/nixuuu/we-run-claude-code-on-10-branches-daily-so-we-built-a-workstation-to-keep-up-581a</guid>
      <description>&lt;p&gt;At our company we use Claude Code heavily - often running agents on 10+ branches in parallel across multiple projects. At some point we realized we were spending more time managing terminal tabs and browser windows than actually reviewing what the agents produced.&lt;/p&gt;

&lt;p&gt;The real pain was simple: you lose track. Which agent just finished? Which one is waiting for your permission? Which one asked you something 15 minutes ago? You end up cycling through tabs, trying to reconstruct what's happening where.&lt;/p&gt;

&lt;p&gt;So we built Canopy - a developer workstation that puts all your projects and branches in one sidebar with live status indicators. You open the app and immediately see what needs your attention.&lt;/p&gt;

&lt;p&gt;What helped us most:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A sidebar listing every project and worktree with color-coded agent status (idle, working, needs permission, done)&lt;/li&gt;
&lt;li&gt;On macOS, the notch shows all session statuses. I don't even need to switch to Canopy to know what's going on&lt;/li&gt;
&lt;li&gt;Each worktree gets its own isolated space - terminal panes, browser, AI inspector - so context doesn't bleed between branches&lt;/li&gt;
&lt;li&gt;I can see my Claude Code Max usage and context window consumption without digging for it&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It turned our workflow from "let me check all 12 tabs" into "let me glance at the sidebar." Honestly a bigger difference than we expected.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://canopy.itsol.tech?ref=dev.to"&gt;Canopy&lt;/a&gt; is open source and completely free - no accounts, no telemetry, no paid tiers. We're planning frequent updates and active development going forward. If you try it, we'd genuinely appreciate any feedback - what works, what doesn't, what's missing. We want to build this with the community, not in a vacuum.&lt;/p&gt;

&lt;p&gt;Website: &lt;a href="https://canopy.itsol.tech?ref=dev.to"&gt;https://canopy.itsol.tech&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;GitHub: &lt;a href="https://github.com/itsoltech/canopy-desktop" rel="noopener noreferrer"&gt;https://github.com/itsoltech/canopy-desktop&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>tooling</category>
      <category>productivity</category>
      <category>opensource</category>
    </item>
  </channel>
</rss>
