Windows
The CLI runs on Windows from WSL2 or Git Bash. WSL2 is the path we recommend, because the CLI behaves there exactly as it does on Linux. PowerShell and CMD stop the CLI at startup with a message that sends you to one of the two.
Pick a shell
| Shell | Works | What to know |
|---|---|---|
| WSL2 (Ubuntu) | Yes | Same behaviour as Linux. Smart App Control and AppLocker do not check the Linux binaries it runs |
| Git Bash | Yes | The CLI downloads the Windows build of frpc, which Windows can block. See below |
| PowerShell/CMD | No | The CLI exits with unsupported_platform |
Both working shells need Docker. With WSL2, Docker Desktop works as long as its WSL2 integration is on for your Ubuntu distribution.
Set up WSL2
Install Ubuntu from PowerShell, then reboot:
wsl --install -d UbuntuOpen the Ubuntu terminal and install Node 24 and pnpm there. The Node you installed on Windows is a different install, so do not call it from WSL2.
Install the CLI inside Ubuntu and sign in:
pnpm add -g @stackbone/cli stackbone loginKeep your workspace on the Linux file system (for example
~/code/my-agent), not under/mnt/c/. File watching across the two file systems is slow and misses changes.
Use Git Bash
Git Bash works for every command. Two things behave differently from Linux.
Ctrl-C. Git Bash terminals do not always give the CLI a real
pseudo-terminal, so the CLI re-runs itself under winpty for stackbone dev.
If winpty is not on your PATH, run winpty stackbone dev. See
Ctrl-C does not stop stackbone dev in Git Bash.
The tunnel binary. stackbone dev always opens a tunnel, and it uses
frpc for that. The first run downloads the Windows frpc.exe into
~/.cache/stackbone/bin/ and extracts it with PowerShell. Windows may refuse
to run that file. The next section covers what to do.
If Windows blocks frpc
Symptom: stackbone dev stops at the tunnel stage with
The OS refused to run frpc (error.code is permission). Running
frpc.exe by hand gives Permission denied, and Defender's protection history
shows nothing.
Cause: Windows is blocking an unsigned executable. It is not the file
mode and not your PATH. The usual reasons:
| Blocker | Where it logs |
|---|---|
| Mark of the Web | Nowhere. A browser tags every file it downloads |
| Smart App Control | Event Viewer, under CodeIntegrity |
| Microsoft Defender | Protection history, often as a HackTool |
| AppLocker or WDAC | Your IT department's policy logs |
Fix: try these in order. The error message prints the full path to the binary, so use that path in the commands.
If you downloaded
frpcwith a browser, remove the download tag in PowerShell:Unblock-File "$HOME\.cache\stackbone\bin\frpc-.exe" Add an exclusion for the folder in Windows Security, under Virus & threat protection > Manage settings > Exclusions.
Check App & browser control > Smart App Control. Turning it off lets the binary run, but Windows may not let you turn it back on without a reinstall. Decide that one for yourself.
On a laptop your company manages, you usually cannot change any of these. Use WSL2 instead.
frpc versions are not interchangeable. The CLI pins the version that matches
the Stackbone relay, and it only looks for that version in the cache. If you
download frpc by hand, take the version the error message names, or point
STACKBONE_FRPC_BIN at your binary. See
Using a system frpc binary.
What's next
- Getting started: from zero to a running agent.
- Local development: what
stackbone devdoes at each stage. - Troubleshooting: the other failures, keyed on
error.code.