Skip to main content
Goal: OpenClaw Gateway running on an exe.dev VM, reachable at https://<vm-name>.exe.xyz. This guide assumes exe.dev’s default exeuntu image. Map packages accordingly on other distros.

What you need

  • exe.dev account
  • ssh exe.dev access to exe.dev VMs (optional, for manual setup)

Beginner quick path

  1. Open https://exe.new/openclaw
  2. Fill in your auth key/token as needed
  3. Click “Agent” next to your VM and wait for Shelley to finish provisioning
  4. Open https://<vm-name>.exe.xyz/ and authenticate with the configured shared secret (token auth by default; password auth also works if you switch gateway.auth.mode)
  5. Approve pending device pairing requests with openclaw devices approve <requestId>

Automated install with Shelley

Shelley, exe.dev’s agent, can install OpenClaw from a prompt:

Manual installation

1

Create the VM

From your device:
Then connect:
Keep this VM stateful. OpenClaw stores openclaw.json, per-agent auth-profiles.json, sessions, and channel/provider state under ~/.openclaw/, plus the workspace under ~/.openclaw/workspace/.
2

Install prerequisites (on the VM)

3

Install OpenClaw

4

Configure nginx to proxy to port 8000

Edit /etc/nginx/sites-enabled/default:
Overwrite forwarding headers instead of preserving client-supplied chains. OpenClaw trusts forwarded IP metadata only from explicitly configured proxies, and append-style X-Forwarded-For chains are treated as a hardening risk.
5

Trust nginx and allow the public browser origin

Configure the exact public origin and trust only the loopback nginx hop:
The browser origin check is fail-closed for public hostnames. The proxy allowlist lets OpenClaw use nginx’s overwritten X-Forwarded-For value instead of treating every request as if it originated from the loopback proxy. Keep this list limited to proxies you control.
6

Access OpenClaw and approve devices

Open https://<vm-name>.exe.xyz/ (see the Control UI output from onboarding). If it prompts for auth, paste the configured shared secret from the VM.This guide uses token auth by default, so run openclaw gateway auth-token --show in an interactive terminal to retrieve the configured token. If no token is configured, generate one with openclaw doctor --generate-gateway-token and restart the Gateway. If you switched the gateway to password auth, use gateway.auth.password / OPENCLAW_GATEWAY_PASSWORD instead.Approve devices with openclaw devices list and openclaw devices approve <requestId>. When in doubt, use Shelley from your browser.

Remote channel setup

For remote hosts, prefer one config patch call over many SSH calls to config set. Keep real tokens in the VM environment or ~/.openclaw/.env, and put only SecretRefs in openclaw.json. See Secrets management for the full SecretRef contract. On the VM, make the service environment contain the secrets it needs:
From your local machine, create a patch file and pipe it to the VM:
Use --replace-path when a nested allowlist should become exactly the patch value, for example replacing a Discord channel allowlist:
See Discord and Slack for full channel config reference.

Remote access

exe.dev handles authentication for remote access. By default, HTTP traffic from port 8000 is forwarded to https://<vm-name>.exe.xyz with email auth.

Updating

See Updating for channel switches and manual recovery.