Mirror of the public Nokido wiki (source of truth: https://github.com/Nokido-labs/nokido/wiki/11-Cross-OS-Notes). Edits belong there.
Updated: 2026-08-27
Nokido supports Linux · macOS · Windows. This page lists OS-specific
behaviors, gotchas, and the path each subsystem takes per platform.
| Subsystem | Linux | macOS | Windows | Notes |
|---|---|---|---|---|
Hub MCP :8766 |
✅ | ✅ | ✅ | Pure Python, Starlette. No OS-specific code. |
| RAG (FTS5 + FAISS) | ✅ | ✅ | ✅ | SQLite + faiss-cpu cross-platform. |
brain_worker (BGE-M3) |
✅ | ✅ | ✅ | Rust + ONNX. Backend selection per OS (see below). |
| Vault | ✅ | ✅ | ✅ | DPAPI / Keychain / libsecret (see 08). |
forge_semantic_firewall |
✅ | ✅ | ✅ | Pure Python. |
forge_sovereign_membrane |
✅ | ✅ | ✅ | SQLite WAL — cross-platform. |
| MCP clients (Claude/Gemini/Codex/Cline) | ✅ | ✅ | ✅ | Client-side, OS-agnostic. |
| TUI (Textual) | ✅ | ✅ | ✅ | Modern Terminal recommended on Win (Windows Terminal, not cmd.exe). |
| Docker compose | ✅ | ✅ | ✅ | Docker Desktop required on Win/macOS. |
tools/restart_claude.py |
❌ | ❌ | ✅ | Windows-only (NSSM + PowerShell). |
| NSSM services | — | — | ✅ | Windows-only service manager. |
| Sandbox accounts | — | — | ✅ | LaForgeSbxOnline, LaForgeSbxOffline are Win-specific. |
| netcfg-agent | ✅ | ✅ | ✅ | asyncssh works everywhere. |
bash_guard hook |
✅ | ✅ | ✅ | Hook runs in the Claude Code harness — OS-agnostic. |
Nokido requires Python 3.12+. Recommendations :
pyenv install 3.12.8. Use a venv :python3 -m venv .venv && source .venv/bin/activate.brew install python@3.12. Same venv pattern.python_toolchain documents the split : ~/miniforge3/python.exeThe install.sh / install.ps1 scripts detect the right Python
automatically. If you have multiple Pythons in PATH, set LAFORGE_PYTHON
env var explicitly.
⚠ Never run python raw in any Nokido-touching script — always
use the venv's absolute path. See CLAUDE.md rule #11.
Nokido code uses :
ROOT = Path(__file__).resolve().parent.parent
…and os.environ.get("LAFORGE_ROOT", str(...)) for override. No
hardcoded ~/ paths in tracked code (audit Phase 4 pre-public).
If you find one, open an issue.
Path objects. They workinstall.sh uses /. install.ps1 uses \ (PowerShell/ too.~ or Path.home().%USERPROFILE% env var, mapped to Path.home() by Python.The vault store goes to :
~/.local/share/nokido/machine_vault.dat (XDG) or<repo>/data/machine_vault.dat (current default).<repo>/data/machine_vault.dat (DPAPI machine-scope).⚠️
brain_worker(:5557) has been disabled since 2026-06-03 (BGE-M3 ONNX, bad
allocation). The live embedder isNokidoLlamaEmbed(:8099), reached through
forge_embed_router. This section is kept as an archive, should :5557 be repaired.
brain_worker (Rust + ONNX) auto-detects :
| Platform | Default backend | Alternatives |
|---|---|---|
| Windows | DirectML (Radeon 780M, Intel Arc, NVIDIA) | Vulkan, CPU |
| Linux | OpenVINO (Intel), ROCm (AMD), CUDA (NVIDIA) | Vulkan, CPU |
| macOS | CoreML (M1+) | Metal, CPU |
Override : BRAIN_WORKER_BACKEND=cpu|directml|vulkan|openvino|coreml|cuda.
Memory npu_xdna1_limits documents : AMD NPU XDNA1 (in Radeon 780M /
Strix Point) is ops-light only — can't do BGE-M3 batch or LLM
inference. Use the iGPU via DirectML/Vulkan instead.
See 08 — Vault & secrets. Summary :
CRYPTPROTECT_LOCAL_MACHINE).ctypes, zero deps.keyring package. Per-user, hardware-attestedkeyring. Requireslibsecret-1-0 + a running keyring daemon (GNOME Keyring or KWallet).sudo apt install libsecret-1-0 gnome-keyringsudo dnf install libsecretsudo pacman -S libsecret gnome-keyringIf no keyring daemon is running on Linux (e.g. headless server), keyring
falls back to the chain : WCM → .env → os.environ. For headless
deployments, use a .env with chmod 600 OR mount a Docker secret.
| OS | Tool | Config |
|---|---|---|
| Windows | NSSM | Services : LaForge-Master, LaForgeMCP, BrainWorker, etc. See tools/forge_nssm_hardening.py. |
| Linux | systemd | Service files in deploy/*.service. Install via sudo cp deploy/*.service /etc/systemd/system/ && sudo systemctl enable --now laforge-master. |
| macOS | launchd | Plist in deploy/com.nokido.master.plist. Install via cp deploy/com.nokido.master.plist ~/Library/LaunchAgents/ && launchctl load -w ~/Library/LaunchAgents/com.nokido.master.plist. |
On all OSes, you can also run the hub directly (no service manager) for
dev :
laforge-hub
# or
python -m tools.nokido_hub
Docker abstracts most OS differences. Two notes :
linux/amd64 images runlibsecret needed for vault (see above).ml extras : CUDA wheels assume NVIDIA + matching driver. ROCm or--extra-index-url https://download.pytorch.org/whl/cpu.deploy/ — review user/group before enabling.ml extras if you only need inference (use Ollamapython@3.12 recommended over the system Python.HKLM\SYSTEM\CurrentControlSet\Control\FileSystem\LongPathsEnabled = 1)embeddings.db (380k rows, frequent writes) cripplesCI matrix runs on ubuntu-latest, macos-latest, windows-latest with
Python 3.12. See .github/workflows/ci.yml.
Run locally on all three :
# Linux/macOS
EXTRAS=hub,rag,llm bash install.sh
source .venv/bin/activate
pytest tests/test_forge_scorecard.py
# Windows
.\install.ps1
.\.venv\Scripts\Activate.ps1
pytest tests/test_forge_scorecard.py
core.autocrlf=true). Don't fight it — .gitattributes handles mostgit checkout -- <file> to reset..db-wal files don't always release ondatabase is locked, kill stale Python processes.: ? | etc. break under WSL mounts.PYTHONIOENCODING=utf-8 and PYTHONUTF8=1 in theinstall.sh do this automatically.cp1252 by default → emoji and non-ASCIIforge_vault_seed_agent_tokens.py script uses