NeuroSquad on the Mac, a Grid next to the canvas, and agents in WSL and over SSH
The biggest release so far: a native macOS app, a Grid mode for when the squad is just working, workspaces that live in WSL or on a remote machine, and a “needs attention” signal that goes away the moment you answer.
Until now NeuroSquad was a Windows app. The question we heard most was simple: when is the Mac version coming? It is here. This release also changes how you look at a working squad, where its agents can run, and how much you can trust the orange “needs attention” badge. Here is what changed, and what we found on the way.
NeuroSquad for macOS
NeuroSquad runs on macOS 12 Monterey or newer, with separate builds for Apple silicon and Intel. It is not a Windows window dropped onto a Mac. The window has the native traffic lights in the sidebar’s top row, the app has a real macOS menu (Settings… with Cmd+Comma, Check for Updates…, full screen), shortcuts use Cmd, and on a Mac keyboard Backspace deletes selected cards. Closing the window hides it, a click on the Dock icon brings it back, and Cmd+Q quits.
Voice dictation needs two permissions on a Mac: the Microphone to record, and Accessibility for the global hotkey. Settings → Dictation shows which of them macOS still has to allow, with a button that asks or opens the right page of System Settings.
Updates that keep your permissions
The app updates itself on macOS too: a new version downloads in the background, is checked against its SHA-256 checksum and replaces the app bundle on the next start. We wrote this updater ourselves instead of using the usual framework, which accepts only apps signed with an Apple developer certificate.
The second half of that problem is the signature. macOS remembers permissions such as Microphone and Accessibility for a specific app signature. A build signed differently every time is a new app to macOS, and it would ask for everything again after each update. So every NeuroSquad build is signed with the same certificate, and permissions you granted stay granted.
Three ways to install
The one-liner picks the build for your Mac, checks its SHA-256 checksum, puts NeuroSquad into Applications and opens it:
curl -fsSL https://neurosquad.ai/install.sh | bashWith Homebrew, from our own tap:
brew install --cask glmn-ai/neurosquad/neurosquadOr download the .dmg for Apple silicon or Intel from the download page. Not sure which Mac you have? Apple menu → About This Mac: “Chip: Apple M…” is Apple silicon, “Processor: Intel” is Intel.
Tested on real Macs, every release
Before each release, an end-to-end test drives the app on real macOS machines the way a person would: install with the script, sign in, start agents, send prompts, draw arrows to MCP servers, skills and plugins, dictate. It caught two things no unit test would have.
The first: Claude Code asks “Do you trust the files in this folder?” when it opens a new folder, and NeuroSquad answers it for you, because you already chose the folder as a workspace. On macOS the question is drawn with different cursor moves than on Windows, and the scan that recognizes it missed it. It now treats every cursor move as a gap, and the question is answered on both systems.
The second was a crash on quit. Every terminal is watched by a native thread that reports when its process exits. If a CLI took a moment to die — Claude Code needs about two seconds after the hang-up signal — that report could arrive while the app was already shutting down, and the process aborted: “NeuroSquad quit unexpectedly”. Now the quit waits until every terminal process has reported its exit, with a hard stop for any process that ignores the signal. A separate test launches and quits the app over and over with live terminals and checks for crash reports after every stage.
Grid mode: the squad at work
The canvas is where you build a squad: cards anywhere, arrows between them, groups. When the squad is just working, you usually want the opposite — every agent’s terminal on screen at once, lined up. That is Grid mode, one toggle in the title bar or Ctrl+Shift+G (Cmd+Shift+G on a Mac).
- Layouts: all tiles, one, two side by side, 2 × 2, 3 × 2, or one large agent with up to three stacked next to it. Agents that don’t fit wait in a strip under the grid; click one to bring it in.
- Arrange: drag the line between tiles to resize, drag a tile by its header onto another to swap, maximize one tile, move between tiles from the keyboard. The grid has its own undo.
- What’s connected: chips under each tile show its arrows — the agents it leads or reports to, the note, browser, MCP server, skill or plugin it uses. Hover a tile and the tiles it is wired to light up.
- Filters: “Only agents” leaves just the AI agents; the cards strip keeps notes, to-dos and the rest one glance away; the Squad panel opens with one click.
Switching never restarts anything. The same terminals move between the canvas and the grid, and each workspace remembers its own mode.
Workspaces in WSL and over SSH
A workspace used to be a folder on this computer. Now the workspace dialog asks where it lives: this computer, a WSL distro on Windows, or a remote host over SSH. Cards then run the CLIs installed there, while everything on the app side keeps working: statuses and notifications, MCP tools by arrow, the prompt queue, transcripts for the journal and hand-off.
For WSL you pick a distro and a Linux folder, and Check starts the distro, confirms the folder and lists the agent CLIs it finds there. For SSH you add a host in Settings → SSH hosts, by hand or from your ~/.ssh/config, and browse to the project folder on it.
SSH is built in rather than calling the system ssh per card. That gives one connection per host, shared by every card on it, instead of a new login for every card and every transcript read. Host keys are verified against your known_hosts; an unknown key shows its fingerprint and connects only after you trust it, and a changed key is refused. Your keys and your SSH agent are used, passwords are asked in the app and saved only if you tick “Remember”. If the network drops, the connection comes back on its own; cards restart, and Claude Code resumes its session.
The agent on the remote host still has to reach the app — that is how its status and MCP tools work. It does, through the same SSH connection, on a port on the remote host’s loopback, and every request carries the agent’s own token, as on this computer.
“Needs attention” you can trust
A card that says an agent needs you is only useful if it is right. Too often it wasn’t: you answered a question in the terminal and the badge stayed, or pressed Escape and got a “finished” chime for a turn that never finished.
We measured what the CLIs actually report. Claude Code, for example, sends no event at all when you press Escape or answer “No” to a permission question — the turn just stops. So the app no longer waits for the CLI to tell it. Your own keys on a waiting card count: Enter, a menu number or y/n switch it back to working at once; Escape or Ctrl+C set it to idle. Pasted text doesn’t count, and neither does anything the app types itself. If the terminal then stays quiet, the agent is back at its prompt.
Every signal from every CLI now passes one state machine before it reaches the card, the phone, Telegram or the Squad panel. Repeats are dropped, a stale “finished” right after you dismissed something is dropped, and a restarted agent starts clean instead of keeping an old alert.
Smaller things, and an audit
- The context meter shows the window the CLI really uses — 1M on a second Claude account, where it used to read 200K.
- Moving and resizing cards on the canvas can be undone and redone.
- Workspaces, cards and settings are saved atomically: a crash in the middle of a save can’t leave a half-written file.
- Costs below a millionth of a dollar no longer show as $0, and OpenCode on your own provider shows “no price” instead of $0.
- On Windows the tray icon disappears the moment you quit, and a watchdog makes sure no process without a window stays behind.
We also went through the whole codebase in a security and stability review and fixed what it found, finding by finding. The ones that matter most: “Open in editor” could be made to run commands through a crafted path in a terminal’s output, and now can’t; a path check that could be escaped is closed; the OpenRouter relay only talks to its own host; and channels to secrets that were reachable from a connected phone are removed.
What’s next
More agent CLIs in WSL and over SSH, and a Linux version of the app. If you are on a Mac, we would especially like to hear how it works for you — “Report a problem” in the account menu, or our Discord.
Get it on the download page; the Mac install is described step by step in the docs, and every change is in the changelog.