Documentation Index
Fetch the complete documentation index at: https://docs.wednesdayai.dev/llms.txt
Use this file to discover all available pages before exploring further.
Remote access
By default the WednesdayAI gateway binds to loopback (127.0.0.1) and is only reachable from the machine it runs on. This is intentional — it avoids exposing the gateway to your local network or the internet before you have auth configured.
This page explains the supported ways to access the gateway remotely.
Recommended path: Tailscale Serve. It gives you HTTPS, a stable hostname, and Tailscale’s identity-based access control without changing the gateway bind address. The gateway stays on loopback.
Option 1 — Tailscale Serve (recommended)
Tailscale Serve creates an HTTPS endpoint on your tailnet (your private network of Tailscale-connected devices) that proxies to the local gateway. The gateway itself stays bound to loopback; Tailscale handles routing and TLS. Prerequisites: Tailscale installed and logged in on the gateway host. Config (~/.openclaw/openclaw.json):
https://<hostname>.ts.net/ from any device on your tailnet.
Optional: allow Tailscale identity auth (skip token prompts on the control panel for tailnet devices):
allowTailscale: true, control panel WebSocket connections from tailnet devices are accepted without a token. HTTP API endpoints still require token/password auth. Disable this if untrusted code may run on the gateway host.
Restart after config changes:
- Linux (systemd)
- macOS / manual
Option 2 — SSH tunnel
An SSH tunnel forwards the gateway’s loopback port to your local machine over an encrypted SSH connection. This works with any SSH access and requires no changes to the gateway config. On your local machine (laptop/desktop), run:http://127.0.0.1:18789/ on your local machine reaches the remote gateway.
Keep the tunnel alive:
The WednesdayAI macOS menubar app has built-in SSH tunnel support. Go to Settings → General → “WednesdayAI runs on” and select Remote over SSH. The app manages the tunnel and reconnects automatically.
Option 3 — Bind to tailnet IP directly
If you prefer the gateway to listen on your Tailscale IP rather than using Tailscale Serve:http://<tailscale-ip>:18789/ from any tailnet device.
Loopback (http://127.0.0.1:18789/) will not work in this mode — connect via the tailnet IP.
Option 4 — LAN binding
For trusted home networks where every device on the LAN should have access:http://<lan-ip>:18789/ from any device on the network.
Not recommended for untrusted networks — use Tailscale or SSH tunnels instead.
Public internet access (Tailscale Funnel)
Tailscale Funnel makes the gateway reachable from the open internet via a*.ts.net HTTPS URL. Because anyone can reach it, a shared password is required.
https://<hostname>.ts.net/.
Persisting a remote target in the CLI
If you regularly run CLI commands against a remote gateway, add the target to your config so you don’t have to pass--url every time:
openclaw gateway status, openclaw models status, and openclaw message send all reach the remote gateway transparently.
Security principles
| Scenario | Recommended approach |
|---|---|
| Personal use, remote from your own devices | Tailscale Serve + allowTailscale: true |
| Personal use, minimal setup | SSH tunnel |
| Team or multi-user access | Tailscale Serve + token auth, or trusted-proxy auth |
| Public access (uncommon) | Tailscale Funnel + shared password |
| Air-gapped / on-prem LAN | bind: "lan" + token auth + firewall |
bind: "lan" or bind: "custom" without a token or password — unauthenticated non-loopback binds are rejected at startup.
Troubleshooting
Control panel shows 'Unable to connect'
Control panel shows 'Unable to connect'
The gateway is not reachable at the expected address.
- Confirm the gateway is running:
openclaw gateway status(on the gateway host) - If using SSH tunnel: check the tunnel is up (
ssh -N -L ...process is running) - If using Tailscale: verify both devices are on the same tailnet (
tailscale status) - Check the configured port matches:
openclaw doctoron the gateway host shows the active port
WebSocket 1008 Unauthorized from a browser
WebSocket 1008 Unauthorized from a browser
Gateway refuses to start after changing bind
Gateway refuses to start after changing bind
If you changed Or set via env:
bind to a non-loopback value without setting auth, the gateway rejects the config. Add a token or password:OPENCLAW_GATEWAY_TOKEN=replace-meTailscale Serve not showing HTTPS URL
Tailscale Serve not showing HTTPS URL
Run
tailscale serve status to check what Tailscale has configured. If nothing shows, ensure Tailscale is running (tailscale status) and the gateway has been started at least once with tailscale.mode: "serve".Manual setup: