Troubleshooting
SpecForge releases are unsigned, so every operating system asks a question the first time you run one. Here is the answer on each — plus the other things that most often need explaining: WSL2 latency, specforge-serve exposure, and workspace validation.
macOS — Gatekeeper
Gatekeeper warns on first launch. Instead of double-clicking, right-click the app and choose Open, then confirm in the dialog. macOS remembers the decision, so this is a one-time step.
If that dialog does not appear — some managed Macs suppress it — clear the quarantine flag from the installed app instead, which has the same effect:
xattr -dr com.apple.quarantine /Applications/SpecForge.appmacOS — the standalone binaries
The terminal UI and the headless server ship as command-line binaries. For these clearing the quarantine flag is the only route, not an alternative one: there is no right-click ▸ Open affordance, because that dialog belongs to the Finder and these are not launched from it. Clear the flag before the first run:
xattr -dr com.apple.quarantine specforge-tui
xattr -dr com.apple.quarantine specforge-serveWindows — SmartScreen
SmartScreen may warn that the publisher is unrecognised. Choose More info, then Run anyway.
Windows — WebView2 on older machines
The single-file portable .exe relies on the system WebView2 runtime. It is preinstalled on current Windows; on an older machine you may need to install it manually.
Linux — .deb and .AppImage
Install the .deb with your package manager. For the .AppImage, make it executable and run it:
chmod +x SpecForge_*.AppImage
./SpecForge_*.AppImageWindows — workspaces inside WSL2
A workspace living in the WSL2 filesystem is supported, but the \\wsl.localhost share reports no filesystem events, so updates arrive on a periodic re-scan rather than instantly. If changes seem slow to appear, that is the scan interval — tune it in Settings ▸ WSL workspaces, and see Workspaces ▸ WSL2 for how git is handled.
specforge-serve is unauthenticated
specforge-serve binds 127.0.0.1:4317 by default, which is reachable only from that machine. Passing --bind 0.0.0.0 (or another interface address) publishes it on the network without authentication — only do that on a network you trust. Run specforge-serve --help for the full flag and environment-variable reference, and see Web UI & remote access for the safe remote routes.
“Not an OpenSpec workspace”
The full message reads “not an OpenSpec workspace (no openspec/ subdirectory)”, and it means what it says: a folder is only accepted if it contains an openspec/ directory. Point SpecForge at the repository root rather than at openspec/ itself, and remember that a repository’s worktrees are discovered automatically — you do not add them separately. See Workspaces.