docs/platforms/mac/remote.md
This flow lets the macOS app act as a full remote control for an OpenClaw gateway running on another host (desktop/server). It’s the app’s Remote over SSH (remote run) feature. All features—health checks, Voice Wake forwarding, and Web Chat—reuse the same remote SSH configuration from Settings → General.
-o BatchMode plus your chosen identity/key and a local port-forward.Remote mode supports two transports:
ssh -N -L ... to forward the gateway port to localhost. The gateway will see the node’s IP as 127.0.0.1 because the tunnel is loopback.In SSH tunnel mode, discovered LAN/tailnet hostnames are saved as
gateway.remote.sshTarget. The app keeps gateway.remote.url on the local
tunnel endpoint, for example ws://127.0.0.1:18789, so CLI, Web Chat, and
the local node-host service all use the same safe loopback transport.
Browser automation in remote mode is owned by the CLI node host, not by the
native macOS app node. The app starts the installed node host service when
possible; if you need browser control from that Mac, install/start it with
openclaw node install ... and openclaw node start (or run
openclaw node run ... in the foreground), then target that browser-capable
node.
pnpm install && pnpm build && pnpm link --global).openclaw is on PATH for non-interactive shells (symlink into /usr/local/bin or /opt/homebrew/bin if needed).user@host (optional :port).
wss://gateway.example.ts.net (or ws://... for local/LAN).openclaw entrypoint/binary (auto-filled when advertised).openclaw status --json runs correctly. Failures usually mean PATH/CLI issues; exit 127 means the CLI isn’t found remotely.node.list / node.describe so agents know what’s available.~/.ssh/known_hosts.gateway.auth.mode: "trusted-proxy".openclaw channels login --verbose on the remote host. Scan the QR with WhatsApp on your phone.openclaw isn’t on PATH for non-login shells. Add it to /etc/paths, your shell rc, or symlink into /usr/local/bin//opt/homebrew/bin.openclaw status --json).paired · disconnected. For wss://*.ts.net Tailscale Serve endpoints, the app detects stale legacy TLS leaf pins after certificate rotation, clears the stale pin when macOS trusts the new certificate, and retries automatically. If the certificate is not system-trusted or the host is not a Tailscale Serve name, review the certificate or switch to Remote over SSH.Pick sounds per notification from scripts with openclaw and node.invoke, e.g.:
openclaw nodes notify --node <id> --title "Ping" --body "Remote gateway ready" --sound Glass
There is no global “default sound” toggle in the app anymore; callers choose a sound (or none) per request.