
Running OpenClaw is not the same as launching a typical desktop app or SaaS tool. It’s an agentic system that stays active, listens for events, executes commands, and interacts with external services on your behalf. That means how you run it—where it lives, what it can access, and how it stays online—directly shapes both its usefulness and its risk profile.
Formerly known as Clawdbot (and briefly Moltbot), OpenClaw runs locally or on a server you control, rather than inside a managed cloud environment. This design gives users flexibility and transparency, but it also shifts operational responsibility to the person running it. There’s no managed runtime, no default guardrails, and no “set it and forget it” mode. Once OpenClaw is running, it behaves more like a long-lived service than a chat interface.
In this guide, we’ll focus specifically on how to run OpenClaw across common environments—from cloud deployments like DigitalOcean to local machines such as Mac minis, Windows PCs, and Linux servers. The goal isn’t to rush through commands, but to help you understand what’s actually happening when OpenClaw is running, what stays active in the background, and what trade-offs each environment introduces.
Step 1 — Install WSL2 and Ubuntu
wsl --installOr install a specific Ubuntu version:
wsl --list --online
wsl --install -d Ubuntu-24.04sudo tee /etc/wsl.conf >/dev/null <<'EOF'
[boot]
systemd=true
EOFwsl --shutdownsystemctl --user statusgit clone https://github.com/openclaw/openclaw.git
cd openclawpnpm install
pnpm ui:build
pnpm build
openclaw onboardopenclaw onboard --install-daemonopenclaw gateway install
openclaw configure
openclaw doctor
PowerShell (Admin) example:
$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=$TargetPort
New-NetFirewallRule -DisplayName "WSL SSH $ListenPort" -Direction Inbound `
-Protocol TCP -LocalPort $ListenPort -Action Allownetsh interface portproxy delete v4tov4 listenport=$ListenPort listenaddress=0.0.0.0
netsh interface portproxy add v4tov4 listenport=$ListenPort listenaddress=0.0.0.0 `
connectaddress=$WslIp connectport=$TargetPortImportant Notes for Windows Users
Example:
ssh user@windows-host -p 2222127.0.0.1Check status with:
openclaw status --alllistenaddress=0.0.0.0 for LAN access127.0.0.1 to keep services local onlyWindows Companion App Status
What the macOS App Does
system.runopenclaw) via npm or pnpm Local vs Remote Mode
Local Mode (Default)
launchdUses:
openclaw gateway installRemote Mode
Launchd Control (macOS)
bot.molt.gatewaybot.molt.<profile>Start Gateway
launchctl kickstart -k gui/$UID/bot.molt.gateway
Stop Gateway
launchctl bootout gui/$UID/bot.molt.gatewaybot.molt.<profile> when using named profilescom.openclaw.* agents still unload correctlyInstall the LaunchAgent via:
openclaw gateway installNode Capabilities (macOS)
Canvas
canvas.present
canvas.navigate
canvas.eval
canvas.snapshot
canvas.a2ui.*Camera
camera.snap
camera.clipScreen
screen.recordSystem
system.runsystem.notifyNode Service and App IPC
system.run executes inside the macOS appFlow
Exec Approvals (system.run)
Rules stored locally at:
~/.openclaw/exec-approvals.jsonExample Configurationa
{
"version": 1,
"defaults": {
"security": "deny",
"ask": "on-miss"
},
"agents": {
"main": {
"security": "allowlist",
"ask": "on-miss",
"allowlist": [
{ "pattern": "/opt/homebrew/bin/rg" }
]
}
}
}Deep Links (openclaw://)
openclaw:// URL schemeTrigger an Agent
open 'openclaw://agent?message=Hello%20from%20deep%20link'Supported Parameters
message (required)sessionKeythinkingdelivertochanneltimeoutSecondskey (unattended mode)Safety Rules
key: user confirmation requiredkey: runs unattended (personal automation use)Typical macOS Onboarding Flow
Build and Development Workflow (Native)
Build macOS app:
cd apps/macos
swift build
swift run OpenClawPackage app:
scripts/package-mac-app.shDebug Gateway Connectivity (macOS CLI)
cd apps/macos
swift run openclaw-mac connect --json
swift run openclaw-mac discover --timeout 3000 --jsonConnect Options
Discovery Options
openclaw gateway discover --jsonRemote Connection Plumbing (SSH Tunnels)
Control Tunnel
18789)Behavior
SSH Shape
ssh -N -L <local>:127.0.0.1:<remote>System Control
Connection Architecture
ws://<gateway-host>:18789Prerequisites
openclaw CLI on the Gateway host (local or SSH)Step 1 — Start the Gateway
On the Gateway host:
openclaw gateway --port 18789 --verboselistening on ws://0.0.0.0:18789Set gateway.bind to tailnet in:
~/.openclaw/openclaw.jsonStep 2 — Verify Discovery (Optional)
From the Gateway host:
dns-sd -B _openclaw-gw._tcp localTailnet Discovery Across Networks
openclaw.internal.)_openclaw-gw._tcp recordsStep 3 — Connect from the Android App
Step 4 — Approve Pairing (Gateway CLI)
On the Gateway host:
openclaw nodes pendingopenclaw nodes approve <requestId>Step 5 — Verify Node Connection
Check node status:
openclaw nodes statusOr via Gateway call:
openclaw gateway call node.list --params "{}"Step 6 — Chat and History
chat.historychat.sendchat.subscribe → event:"chat"Step 7 — Canvas and Camera Capabilities
18793Create:
~/.openclaw/workspace/canvas/index.htmlNavigate Android node (LAN):
openclaw nodes invoke \
--node "<Android Node>" \
--command canvas.navigate \
--params '{"url":"http://<gateway-host>.local:18793/__openclaw__/canvas/"}'
Tailnet setups:
Example:
http://<gateway-magicdns>:18793/__openclaw__/canvas/
A2UI host at:
http://<gateway-host>:18793/__openclaw__/a2ui/Canvas Commands (Foreground Only)
canvas.evalcanvas.snapshotcanvas.navigate { "url": "" } or { "url": "/" } to return to scaffold{ format, base64 }jpegcanvas.a2ui.pushcanvas.a2ui.resetcanvas.a2ui.pushJSONLCamera Commands (Foreground Only)
camera.snap (JPEG)What the iOS App Does
node.invoke commandsRequirements
openclaw.internal.)openclaw CLI on the Gateway hostQuick Start — Pair and Connect
Start the Gateway on the host machine:
openclaw gateway --port 18789Approve pairing on the Gateway host:
openclaw nodes pending
openclaw nodes approve <requestId>Verify the connection:
openclaw nodes status
openclaw gateway call node.list --params "{}"
Discovery Paths
_openclaw-gw._tcp on local.Tailnet (Cross-Network)
openclaw.internal.)Manual Host and Port
18789)Canvas and A2UI Support
Navigate to Canvas
openclaw nodes invoke \
--node "iOS Node" \
--command canvas.navigate \
--params '{"url":"http://<gateway-host>:18793/__openclaw__/canvas/"}'
/__openclaw__/canvas/Return to built-in scaffold:
{"url":""}Canvas Eval and Snapshot
Execute JavaScript
openclaw nodes invoke \
--node "iOS Node" \
--command canvas.eval \
--params '{"javaScript":"(() => { const {ctx} = window.__openclaw; ctx.clearRect(0,0,innerWidth,innerHeight); ctx.lineWidth=6; ctx.strokeStyle=\"#ff2d55\"; ctx.beginPath(); ctx.moveTo(40,40); ctx.lineTo(innerWidth-40, innerHeight-40); ctx.stroke(); return \"ok\"; })()"}'
Take Snapshot
openclaw nodes invoke \
--node "iOS Node" \
--command canvas.snapshot \
--params '{"maxWidth":900,"format":"jpeg"}'Voice Wake and Talk Mode
Common Errors and Fixes
canvasHost in the Gateway configurationRun:
openclaw nodes pendingApprove manually with:
openclaw nodes approve <requestId>Running OpenClaw across platforms shows just how powerful agentic systems can be, but also how much responsibility they place on the user. Whether it’s cloud deployments, desktop environments, or mobile companion nodes, OpenClaw requires careful configuration, ongoing monitoring, and a strong security posture to avoid missteps.
That’s why many teams now look for an OpenClaw alternative that delivers similar automation benefits without exposing their systems to unnecessary risk. Multiple industry reports and independent analyses continue to highlight OpenClaw security issues, ranging from misconfigurations to overbroad system access. These concerns make OpenClaw better suited to advanced users who are comfortable managing their own infrastructure and security.
Knolli stands out as a powerful OpenClaw alternative built with security and operational control at its core. Instead of unrestricted system access, Knolli focuses on structured workflows, scoped permissions, and predictable outputs, making it a more secure choice for teams that want dependable AI copilots without the operational overhead.
If your goal is to move fast and stay secure, choosing a platform designed with guardrails from day one can make all the difference.