Building Custom AI Skills with InstructLab Taxonomy
Create domain-specific AI capabilities using InstructLab's taxonomy system—from writing skill definitions to generating synthetic training data and validating fine-tuned models.
OpenClaw ships with a browser-based Control UI (dashboard) for managing your AI agent. It’s where you monitor conversations, configure settings, manage devices, and interact with the agent directly.
The dashboard runs on the same port as the gateway (default: 18789) and serves under the root path / (or a custom basePath).
The safest way to access the Control UI from your Azure VM is through an SSH tunnel. No public ports, no NSG rules, no origin configuration needed.
On the VM:
cd ~/openclaw
nano .envSet:
OPENCLAW_GATEWAY_BIND=loopbackRestart:
docker compose down
docker compose up -dOn your local machine (not the VM), open a terminal and run:
ssh -L 18789:127.0.0.1:18789 azureuser@<VM_PUBLIC_IP>This forwards your local port 18789 to the VM’s localhost 18789.
Navigate to:
http://127.0.0.1:18789You should see the OpenClaw Control UI login/pairing screen.
Tip: Keep the SSH tunnel terminal open while you use the dashboard. Closing it will disconnect the tunnel.
If you need direct access via the VM’s public IP (e.g., for team access or when SSH tunnels aren’t practical):
cd ~/openclaw
nano .envSet:
OPENCLAW_GATEWAY_BIND=landocker compose run --rm openclaw-cli config set \
gateway.controlUi.allowedOrigins \
'["http://<VM_PUBLIC_IP>:18789"]'In the Azure Portal:
18789Any)1001AllowOpenClawdocker compose down
docker compose up -dOpen in your browser:
http://<VM_PUBLIC_IP>:18789When you first access the Control UI, OpenClaw requires device pairing — a security mechanism that ensures only authorized browsers/devices can control the agent.
cd ~/openclaw
# List pending device pairing requests
docker compose run --rm openclaw-cli devices list
# Approve a specific device
docker compose run --rm openclaw-cli devices approve <requestId>If you need a fresh authenticated dashboard URL:
docker compose run --rm openclaw-cli dashboard --no-openThis outputs a URL with an embedded auth token — open it in your browser.
Once authenticated, the Control UI provides:
github-copilot/claude-opus-4.6)Each browser/device that accesses the Control UI needs to be paired. To pair additional devices:
docker compose run --rm openclaw-cli devices list
docker compose run --rm openclaw-cli devices approve <requestId># Generate a new dashboard link with auth token
docker compose run --rm openclaw-cli dashboard --no-open
# Or approve pending devices
docker compose run --rm openclaw-cli devices list
docker compose run --rm openclaw-cli devices approve <requestId>This usually means the Control UI assets weren’t built. Check:
docker compose logs --tail=50 openclaw-gateway | grep "control-ui\|controlUi\|assets"If you see “Control UI assets not found”:
docker compose down
docker compose up -d --build --force-recreatedocker compose psNow that you can access the dashboard, let’s harden the security: Security Hardening for OpenClaw on Azure.
AI & Cloud Advisor with 18+ years experience. Author of 8 technical books, creator of Ansible Pilot. Speaker at KubeCon EU & Red Hat Summit 2026.
Create domain-specific AI capabilities using InstructLab's taxonomy system—from writing skill definitions to generating synthetic training data and validating fine-tuned models.
End-to-end guide to building a complete persistent memory system for your OpenClaw AI agent. Combine memory flush, hybrid search, file-backed notes, SQLite indexing, and session hooks into a cohesive knowledge architecture.
Deep dive into OpenClaw gateway bind modes (loopback, lan, tailnet, auto, custom), Control UI origin enforcement, and the allowedOrigins vs dangerouslyAllowHostHeaderOriginFallback trade-off.