Back to blog
·Marco

Why I Built Highwind

How a script for starting my dev servers turned into a Mac app for services, AI agents and browser panes.

Too many terminal tabs

I run several products under Simply Fluent, so on most days I work in several codebases. Each one has its own stack, run commands, ports and dependencies. Every time I sat down to work, I did the same thing: open a terminal, cd into the right folder, try to remember whether it was npm run dev, yarn start or make serve, and then do it again for the next project.

You stop noticing that kind of friction because it's always there. It still costs a few minutes here and there, every day.

So I built a small tool where I could define my projects and start them with one click. It was a list of commands and a button.

I couldn't find my windows

Some of my projects share a backend. I'd have the API running in one terminal while working on two frontends that both need it. That meant five or six terminal windows, and I could never remember which one had the backend logs. I kept pressing Cmd+Tab and scanning windows, and I lost my train of thought each time.

So I added views. A view puts several terminals side by side: the API logs next to the frontend logs, for example. You save the arrangement and switch between views depending on what you're working on. The same terminal can appear in several views, because it's the same running process.

Crashes and reboots were their own problem. I had to remember what was running, on which ports, and where each window was. Highwind now remembers that for me. When I quit and reopen it, the services, browser panes and agent sessions come back where they were.

Claude was in another terminal

I was running Claude Code in a separate terminal. Every time I needed it, I switched away from Highwind, explained what was happening, and copied logs into it. Then I switched back to check whether the fix worked, and back to Claude again.

So I put Claude in the app, as a pane next to my logs. Once that worked, I added Gemini and Codex the same way. Any CLI coding agent can run as a pane in Highwind.

Then the browser

It was the same with the browser. I checked localhost, reloaded the page, opened the dev tools, switched to the terminal for the logs, and switched back.

So I added a browser pane. It uses WebKit and has a URL bar, navigation and console capture. Now my logs, my agent and the page I'm working on are on screen at the same time.

Then tasks

By then I had a rule: whenever I switched to another app, I asked whether that thing could be in Highwind instead.

Task tracking was next. I added a small kanban board with columns and cards, so I can track what I'm working on without leaving the window. A keyboard shortcut adds a task.

Then voice

I was already talking to Claude through the agent pane, but typing long prompts while watching the browser and the logs was awkward. So I added dictation: press a shortcut, talk, press it again, and the text goes to the agent. Now I can tell Claude what I see while we both look at the same page and the same logs:

"Take a screenshot of the app and check the layout."

"Show me the errors from the API server."

"Fix it and restart the backend when you're done."

MCP

The agent panes became much more useful with MCP, the Model Context Protocol. It's an open standard that lets AI agents call tools that other programs provide.

Highwind has a built-in MCP server with more than 50 tools. Claude, Gemini or Codex can read logs, check the browser console, take screenshots, restart services and run commands without me copying anything.

Without MCP, I'm the go-between. I copy the logs to Claude, copy the fix back, restart, check the browser and report back. Then I do it again.

With MCP, I can say "the API is returning 500 errors, find out why and fix it." Claude reads the logs, checks the browser, finds the bug, fixes it, restarts the server, takes a screenshot to check, and tells me it's done.

Why native

Highwind is a native macOS app written in SwiftUI. It isn't built on Electron.

  • •Managing processes needs the operating system. Starting processes, tracking PIDs, catching crashes and sending signals are easier and more reliable in native code.
  • •The browser panes need a real engine. WKWebView gives me console capture, screenshots and proper lifecycle handling.
  • •I use it all day. If a tool feels out of place on my Mac, I stop using it within a week.

Where it ended up

Highwind started as a way to start my projects faster. It grew into a single window for my running services, the browser, my AI agents and my tasks, and I no longer act as the go-between for the agent and the dev environment.

If you want to try it, download Highwind. You can also join me on Discord and tell me what it should do next.


Highwind is a native macOS app by Simply Fluent. Requires macOS 14 (Sonoma) or later.