Windows
Windows
Section titled “Windows”OpenClaw supports both native Windows and WSL2. WSL2 is the more stable path and recommended for the full experience — the CLI, Gateway, and tooling run inside Linux with full compatibility. Native Windows works for core CLI and Gateway use, with some caveats noted below.
Native Windows companion apps are planned.
WSL2 (recommended)
Section titled “WSL2 (recommended)”- Getting Started (use inside WSL)
- Install & updates
- Official WSL2 guide (Microsoft): https://learn.microsoft.com/windows/wsl/install
Native Windows status
Section titled “Native Windows status”Native Windows CLI flows are improving, but WSL2 is still the recommended path.
What works well on native Windows today:
- website installer via
install.ps1 - local CLI use such as
openclaw --version,openclaw doctor, andopenclaw plugins list --json - embedded local-agent/provider smoke such as:
openclaw agent --local --agent main --thinking low -m "Reply with exactly WINDOWS-HATCH-OK."Current caveats:
openclaw onboard --non-interactivestill expects a reachable local gateway unless you pass--skip-healthopenclaw onboard --non-interactive --install-daemonandopenclaw gateway installtry Windows Scheduled Tasks first- if Scheduled Task creation is denied, OpenClaw falls back to a per-user Startup-folder login item and starts the gateway immediately
- if
schtasksitself wedges or stops responding, OpenClaw now aborts that path quickly and falls back instead of hanging forever - Scheduled Tasks are still preferred when available because they provide better supervisor status
If you want the native CLI only, without gateway service install, use one of these:
openclaw onboard --non-interactive --skip-healthopenclaw gateway runIf you do want managed startup on native Windows:
openclaw gateway installopenclaw gateway status --jsonIf Scheduled Task creation is blocked, the fallback service mode still auto-starts after login through the current user’s Startup folder.
Gateway
Section titled “Gateway”Gateway service install (CLI)
Section titled “Gateway service install (CLI)”Inside WSL2:
openclaw onboard --install-daemonOr:
openclaw gateway installOr:
openclaw configureSelect Gateway service when prompted.
Repair/migrate:
openclaw doctorGateway auto-start before Windows login
Section titled “Gateway auto-start before Windows login”For headless setups, ensure the full boot chain runs even when no one logs into Windows.
1) Keep user services running without login
Section titled “1) Keep user services running without login”Inside WSL:
sudo loginctl enable-linger "$(whoami)"2) Install the OpenClaw gateway user service
Section titled “2) Install the OpenClaw gateway user service”Inside WSL:
openclaw gateway install3) Start WSL automatically at Windows boot
Section titled “3) Start WSL automatically at Windows boot”In PowerShell as Administrator:
schtasks /create /tn "WSL Boot" /tr "wsl.exe -d Ubuntu --exec /bin/true" /sc onstart /ru SYSTEMReplace Ubuntu with your distro name from:
wsl --list --verboseVerify startup chain
Section titled “Verify startup chain”After a reboot (before Windows sign-in), check from WSL:
systemctl --user is-enabled openclaw-gatewaysystemctl --user status openclaw-gateway --no-pagerAdvanced: expose WSL services over LAN (portproxy)
Section titled “Advanced: expose WSL services over LAN (portproxy)”WSL has its own virtual network. If another machine needs to reach a service running inside WSL (SSH, a local TTS server, or the Gateway), you must forward a Windows port to the current WSL IP. The WSL IP changes after restarts, so you may need to refresh the forwarding rule.
Example (PowerShell as Administrator):
$Distro = "Ubuntu-24.04"$ListenPort = 2222$TargetPort = 22
$WslIp = (wsl -d $Distro -- hostname -I).Trim().Split(" ")[0]if (-not $WslIp) { throw "WSL IP not found." }
netsh interface portproxy add v4tov4 listenaddress=0.0.0.0 listenport=$ListenPort ` connectaddress=$WslIp connectport=$TargetPortAllow the port through Windows Firewall (one-time):
New-NetFirewallRule -DisplayName "WSL SSH $ListenPort" -Direction Inbound ` -Protocol TCP -LocalPort $ListenPort -Action AllowRefresh the portproxy after WSL restarts:
netsh interface portproxy delete v4tov4 listenport=$ListenPort listenaddress=0.0.0.0 | Out-Nullnetsh interface portproxy add v4tov4 listenport=$ListenPort listenaddress=0.0.0.0 ` connectaddress=$WslIp connectport=$TargetPort | Out-NullNotes:
- SSH from another machine targets the Windows host IP (example:
ssh user@windows-host -p 2222). - Remote nodes must point at a reachable Gateway URL (not
127.0.0.1); useopenclaw status --allto confirm. - Use
listenaddress=0.0.0.0for LAN access;127.0.0.1keeps it local only. - If you want this automatic, register a Scheduled Task to run the refresh step at login.
Step-by-step WSL2 install
Section titled “Step-by-step WSL2 install”1) Install WSL2 + Ubuntu
Section titled “1) Install WSL2 + Ubuntu”Open PowerShell (Admin):
wsl --install# Or pick a distro explicitly:wsl --list --onlinewsl --install -d Ubuntu-24.04Reboot if Windows asks.
2) Enable systemd (required for gateway install)
Section titled “2) Enable systemd (required for gateway install)”In your WSL terminal:
sudo tee /etc/wsl.conf >/dev/null <<'EOF'[boot]systemd=trueEOFThen from PowerShell:
wsl --shutdownRe-open Ubuntu, then verify:
systemctl --user status3) Install OpenClaw (inside WSL)
Section titled “3) Install OpenClaw (inside WSL)”Follow the Linux Getting Started flow inside WSL:
git clone https://github.com/openclaw/openclaw.gitcd openclawpnpm installpnpm ui:build # auto-installs UI deps on first runpnpm buildopenclaw onboardFull guide: Getting Started
Windows companion app
Section titled “Windows companion app”We do not have a Windows companion app yet. Contributions are welcome if you want contributions to make it happen.