<?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: The7thFreedom</title>
    <description>The latest articles on DEV Community by The7thFreedom (@the7thfreedom).</description>
    <link>https://dev.to/the7thfreedom</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%2F3968498%2F1584c064-8848-495b-8782-8e2d5cae4ff5.png</url>
      <title>DEV Community: The7thFreedom</title>
      <link>https://dev.to/the7thfreedom</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/the7thfreedom"/>
    <language>en</language>
    <item>
      <title>I ported a macOS-only AI agent tool to Windows — here's what I learned</title>
      <dc:creator>The7thFreedom</dc:creator>
      <pubDate>Thu, 04 Jun 2026 14:50:08 +0000</pubDate>
      <link>https://dev.to/the7thfreedom/i-ported-a-macos-only-ai-agent-tool-to-windows-heres-what-i-learned-1g1c</link>
      <guid>https://dev.to/the7thfreedom/i-ported-a-macos-only-ai-agent-tool-to-windows-heres-what-i-learned-1g1c</guid>
      <description>&lt;p&gt;I've been experimenting with multi-agent coding workflows for a &lt;br&gt;
while now — running Claude Code, Codex, and Cursor in parallel, &lt;br&gt;
each agent working on its own isolated branch. It's a genuinely &lt;br&gt;
different way to develop once you get it working.&lt;/p&gt;

&lt;p&gt;The best tool I found for orchestrating this is &lt;br&gt;
&lt;a href="https://superset.sh" rel="noopener noreferrer"&gt;Superset by superset-sh&lt;/a&gt;. It lets you spin &lt;br&gt;
up multiple CLI-based coding agents across isolated git worktrees, &lt;br&gt;
direct their work from a single interface, and merge results when &lt;br&gt;
done. Clean, fast, well-built.&lt;/p&gt;

&lt;p&gt;One problem: &lt;strong&gt;macOS only&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;I'm on Windows. So I did what any mildly stubborn developer would &lt;br&gt;
do — I ported it.&lt;/p&gt;


&lt;h2&gt;
  
  
  What Superset actually does
&lt;/h2&gt;

&lt;p&gt;Before getting into the port, it's worth explaining why I thought &lt;br&gt;
it was worth the effort.&lt;/p&gt;

&lt;p&gt;The core idea is &lt;strong&gt;parallel agent execution across git worktrees&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Instead of:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;You → one agent → one branch → wait → review → repeat
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You get:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;You → agent A (feature-1 worktree)
    → agent B (feature-2 worktree)  
    → agent C (bugfix worktree)
     → all running simultaneously
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Each agent has its own working directory, its own branch, no &lt;br&gt;
shared state. You review and merge when ready. For the right &lt;br&gt;
kind of tasks, it's a significant productivity shift.&lt;/p&gt;


&lt;h2&gt;
  
  
  Why the Windows port was non-trivial
&lt;/h2&gt;

&lt;p&gt;This wasn't a simple config change. A few things needed real work:&lt;/p&gt;
&lt;h3&gt;
  
  
  1. Terminal: macOS pty → Windows ConPTY
&lt;/h3&gt;

&lt;p&gt;The original uses node-pty, which works great on macOS/Linux but &lt;br&gt;
has historically been painful on Windows. I switched to &lt;br&gt;
&lt;strong&gt;Windows ConPTY&lt;/strong&gt; — the modern Windows pseudo-terminal API &lt;br&gt;
that's been available since Windows 10 1809.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// macOS: node-pty&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;pty&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;spawn&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;bash&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[],&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; 
  &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;xterm-color&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;env&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt; 
&lt;span class="p"&gt;})&lt;/span&gt;

&lt;span class="c1"&gt;// Windows: ConPTY via node-pty with Windows-specific flags&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;pty&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;spawn&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;powershell.exe&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[],&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;xterm-color&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;useConpty&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;env&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;
&lt;span class="p"&gt;})&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;ConPTY is solid now. The main gotcha is that some ANSI escape &lt;br&gt;
sequences behave slightly differently — took some time to &lt;br&gt;
normalize the output rendering.&lt;/p&gt;
&lt;h3&gt;
  
  
  2. File paths: backslashes everywhere
&lt;/h3&gt;

&lt;p&gt;Windows uses backslashes. The codebase assumed forward slashes &lt;br&gt;
throughout — in worktree paths, git commands, config files, &lt;br&gt;
log output, everything.&lt;/p&gt;

&lt;p&gt;The fix wasn't hard but it was tedious: normalize all internal &lt;br&gt;
paths to forward slashes, then convert at the system boundary &lt;br&gt;
only when actually calling Windows APIs.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Normalize on input&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;normalize&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;p&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;p&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;replace&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sr"&gt;/&lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="sr"&gt;/g&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;// Convert back only when calling Windows shell&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;toWin32&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;p&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;p&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;replace&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sr"&gt;/&lt;/span&gt;&lt;span class="se"&gt;\/&lt;/span&gt;&lt;span class="sr"&gt;/g&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  3. Shell integration: PowerShell / cmd / WSL
&lt;/h3&gt;

&lt;p&gt;On macOS, you assume bash or zsh. On Windows, you need to handle:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;PowerShell 7+&lt;/strong&gt; (recommended)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;cmd.exe&lt;/strong&gt; (legacy fallback)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;WSL&lt;/strong&gt; (Linux environment on Windows)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each has different ways to set environment variables, run &lt;br&gt;
scripts, and handle exit codes. I ended up with a shell adapter &lt;br&gt;
layer that normalizes the interface across all three.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Build pipeline: dmg → nsis/msi
&lt;/h3&gt;

&lt;p&gt;The upstream build targets macOS &lt;code&gt;.dmg&lt;/code&gt;. For Windows I switched &lt;br&gt;
the Electron-builder config to target:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;NSIS installer&lt;/strong&gt; (&lt;code&gt;.exe&lt;/code&gt;) — standard Windows installer with 
install/uninstall support&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;MSI&lt;/strong&gt; — for enterprise environments
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// electron-builder.ts (Windows targets)&lt;/span&gt;
&lt;span class="nx"&gt;win&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;target&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;target&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;nsis&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;arch&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;x64&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;target&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;msi&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;arch&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;x64&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  5. Keyboard shortcuts: ⌘ → Ctrl
&lt;/h3&gt;

&lt;p&gt;Every keyboard shortcut in the UI used macOS modifiers. Went &lt;br&gt;
through the entire shortcut map and remapped:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;⌘&lt;/code&gt; → &lt;code&gt;Ctrl&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;⌥&lt;/code&gt; → &lt;code&gt;Alt&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;⌘⇧&lt;/code&gt; → &lt;code&gt;Ctrl+Shift&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Small thing, but important for it to feel native on Windows.&lt;/p&gt;




&lt;h2&gt;
  
  
  What I notified upstream
&lt;/h2&gt;

&lt;p&gt;I opened an issue with the superset-sh team &lt;br&gt;
(&lt;a href="https://github.com/superset-sh/superset/issues/5011" rel="noopener noreferrer"&gt;superset-sh/superset#5011&lt;/a&gt;) &lt;br&gt;
to let them know about the port. SuperWin maintains the same &lt;br&gt;
&lt;strong&gt;Elastic License 2.0&lt;/strong&gt; as upstream and aims to stay rebased &lt;br&gt;
on upstream main.&lt;/p&gt;

&lt;p&gt;This is an unofficial community port — not affiliated with or &lt;br&gt;
endorsed by the superset-sh team. If they ever ship an official &lt;br&gt;
Windows build, great. Until then, SuperWin exists.&lt;/p&gt;




&lt;h2&gt;
  
  
  Current state
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;✅ Runs on Windows 10 (1809+) and Windows 11&lt;/li&gt;
&lt;li&gt;✅ PowerShell / cmd / WSL support&lt;/li&gt;
&lt;li&gt;✅ Claude Code, Codex, Cursor orchestration working&lt;/li&gt;
&lt;li&gt;✅ Isolated git worktree management&lt;/li&gt;
&lt;li&gt;⏳ No prebuilt installer yet — build from source for now&lt;/li&gt;
&lt;li&gt;⏳ Installer coming in a future release&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Requirements:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Bun v1.0+ for Windows&lt;/li&gt;
&lt;li&gt;Git for Windows 2.40+&lt;/li&gt;
&lt;li&gt;PowerShell 7+ (recommended)&lt;/li&gt;
&lt;/ul&gt;




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



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/the7thfreedom/superwin.git
&lt;span class="nb"&gt;cd &lt;/span&gt;superwin
Copy-Item .env.example .env
bun &lt;span class="nb"&gt;install
&lt;/span&gt;bun run dev
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;GitHub: &lt;a href="https://github.com/the7thfreedom/superwin" rel="noopener noreferrer"&gt;the7thfreedom/superwin&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  What I'd do differently
&lt;/h2&gt;

&lt;p&gt;If I were starting over:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Start with ConPTY from day one&lt;/strong&gt; — I spent too long trying 
to make node-pty work before switching&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Path normalization layer first&lt;/strong&gt; — add it as a utility 
module before touching anything else&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Test on WSL earlier&lt;/strong&gt; — WSL path handling is its own 
category of edge cases&lt;/li&gt;
&lt;/ol&gt;




&lt;p&gt;If you're a Windows developer doing AI-assisted coding and &lt;br&gt;
have been watching the agent orchestration space from the &lt;br&gt;
sidelines — this is your on-ramp.&lt;/p&gt;

&lt;p&gt;Questions, feedback, bug reports all welcome. What's your &lt;br&gt;
current AI coding workflow on Windows?&lt;/p&gt;

</description>
      <category>ai</category>
      <category>opensource</category>
      <category>devtools</category>
      <category>codingagent</category>
    </item>
    <item>
      <title>Hello DEV! Windows dev here, just ported a macOS-only AI tool to Windows 👋</title>
      <dc:creator>The7thFreedom</dc:creator>
      <pubDate>Thu, 04 Jun 2026 14:46:13 +0000</pubDate>
      <link>https://dev.to/the7thfreedom/hello-dev-windows-dev-here-just-ported-a-macos-only-ai-tool-to-windows-14n5</link>
      <guid>https://dev.to/the7thfreedom/hello-dev-windows-dev-here-just-ported-a-macos-only-ai-tool-to-windows-14n5</guid>
      <description>&lt;p&gt;Hey everyone!&lt;/p&gt;

&lt;p&gt;Just joined DEV and wanted to say hi.&lt;/p&gt;

&lt;p&gt;I'm a Windows developer who spends most of his time building &lt;br&gt;
with AI coding agents — Claude Code, Codex, that kind of thing.&lt;/p&gt;

&lt;p&gt;Recently got frustrated that Superset (a great tool for &lt;br&gt;
orchestrating AI agents across git worktrees) was macOS-only, &lt;br&gt;
so I did what any slightly-too-stubborn Windows dev would do: &lt;br&gt;
I ported it myself.&lt;/p&gt;

&lt;p&gt;The project is called SuperWin — still early, build-from-source &lt;br&gt;
only for now, but it runs well on Win10/11.&lt;/p&gt;

&lt;p&gt;Looking forward to being part of this community. If you're into &lt;br&gt;
AI-assisted development, agent workflows, or just fellow Windows &lt;br&gt;
devs tired of being second-class citizens — let's connect 👇&lt;/p&gt;

&lt;p&gt;What are you all building these days?&lt;/p&gt;

</description>
      <category>agents</category>
      <category>ai</category>
      <category>showdev</category>
      <category>tooling</category>
    </item>
  </channel>
</rss>
