Skip to content

Commit 6b9dd28

Browse files
committed
docs: enhance GitHub Pages with interactive diagrams and accurate claims
- Add interactive SVG diagrams with animations for architecture and workflows - Implement click-to-zoom modal for all three diagrams with viewport-responsive sizing - Add animated gradient background and scroll reveal effects - Use generic SSH host names in FAQ examples (juju-host instead of pico) - Fix diagram accuracy: - Correct scaling command from 'juju deploy -n 3' to 'juju add-unit -n 2' - Remove misleading 'Automatic Failover' claims - Change to 'Distributed Compute / Horizontal Scaling' (accurate) - Multi-unit scaling provides capacity, not HA - Gateway state is not shared between units - Use 'openclaw/leader' instead of 'openclaw/0' for approve-nodes action - Remove intrusive 'Click to enlarge' hover text from diagrams - Fix diagram layout (reposition scaling box to prevent arrow overlap)
1 parent 999d27b commit 6b9dd28

3 files changed

Lines changed: 912 additions & 137 deletions

File tree

FAQ.md

Lines changed: 87 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
- [Why do I get "disconnected (1008): control ui requires HTTPS or localhost"?](#why-do-i-get-disconnected-1008-control-ui-requires-https-or-localhost)
1010
- [Why do I get "disconnected (1008): unauthorized: gateway token missing"?](#why-do-i-get-disconnected-1008-unauthorized-gateway-token-missing)
1111
- [Can I disable the token requirement?](#can-i-disable-the-token-requirement)
12+
- [Why do I get "disconnected (1008): pairing required"?](#why-do-i-get-disconnected-1008-pairing-required)
1213
- [Configuration](#configuration)
1314
- [How do I change the gateway port?](#how-do-i-change-the-gateway-port)
1415
- [How do I bind the gateway to all network interfaces?](#how-do-i-bind-the-gateway-to-all-network-interfaces)
@@ -30,7 +31,7 @@
3031
- [Advanced](#advanced)
3132
- [How do I use a different JavaScript runtime?](#how-do-i-use-a-different-javascript-runtime)
3233
- [How do I access the Canvas host?](#how-do-i-access-the-canvas-host)
33-
- [Can I deploy multiple units for high availability or scaling?](#can-i-deploy-multiple-units-for-high-availability-or-scaling)
34+
- [Can I deploy multiple units for scaling?](#can-i-deploy-multiple-units-for-scaling)
3435
- [Can I run multiple OpenClaw instances?](#can-i-run-multiple-openclaw-instances)
3536
- [How do I backup OpenClaw data?](#how-do-i-backup-openclaw-data)
3637
- [How do I access OpenClaw logs?](#how-do-i-access-openclaw-logs)
@@ -195,6 +196,85 @@ No. Token authentication is required for security in OpenClaw 2026.1.29+. The to
195196

196197
---
197198

199+
### Why do I get "disconnected (1008): pairing required"?
200+
201+
This error appears when your browser tries to connect to the OpenClaw Gateway but hasn't been approved as a device yet. OpenClaw requires **device pairing** for security - the first operator device (your browser) must be manually approved.
202+
203+
**Symptoms:**
204+
- WebSocket connection closes immediately after entering gateway token
205+
- Error message: "disconnected (1008): pairing required"
206+
- Gateway logs show: `code=1008 reason=pairing required`
207+
208+
**Solution:**
209+
210+
1. **SSH into the gateway unit:**
211+
```bash
212+
juju ssh openclaw/0
213+
```
214+
215+
2. **List pending devices:**
216+
```bash
217+
sudo -u ubuntu bash -l <<EOF
218+
export NVM_DIR="/home/ubuntu/.nvm"
219+
[ -s "\$NVM_DIR/nvm.sh" ] && . "\$NVM_DIR/nvm.sh"
220+
nvm use 24 >/dev/null 2>&1
221+
openclaw devices list
222+
EOF
223+
```
224+
225+
You'll see output like:
226+
```
227+
Pending (1)
228+
┌──────────────────────────────────────┬──────────────────────┬──────────┬──────────────┐
229+
│ Request │ Device │ Role │ IP │
230+
├──────────────────────────────────────┼──────────────────────┼──────────┼──────────────┤
231+
│ 7b426990-8fbf-491b-92de-655553e99218 │ 82ba7068cbd9d04b... │ operator │ 10.235.133.1 │
232+
└──────────────────────────────────────┴──────────────────────┴──────────┴──────────────┘
233+
```
234+
235+
3. **Approve the device using the Request ID:**
236+
```bash
237+
sudo -u ubuntu bash -l <<EOF
238+
export NVM_DIR="/home/ubuntu/.nvm"
239+
[ -s "\$NVM_DIR/nvm.sh" ] && . "\$NVM_DIR/nvm.sh"
240+
nvm use 24 >/dev/null 2>&1
241+
openclaw devices approve 7b426990-8fbf-491b-92de-655553e99218
242+
EOF
243+
```
244+
245+
4. **Refresh your browser** - the dashboard should now connect successfully!
246+
247+
**Alternative (simplified command):**
248+
249+
For convenience with SSH tunnels through Juju, you can also use:
250+
251+
```bash
252+
# If you're accessing via: ssh -L 18789:10.235.133.100:18789 juju-host
253+
# And your Juju host is configured in ~/.ssh/config as 'juju-host'
254+
255+
ssh juju-host -- juju ssh openclaw/1 'sudo -u ubuntu bash -l <<EOF
256+
export NVM_DIR="/home/ubuntu/.nvm"
257+
[ -s "\$NVM_DIR/nvm.sh" ] && . "\$NVM_DIR/nvm.sh"
258+
nvm use 24 >/dev/null 2>&1
259+
openclaw devices list
260+
EOF'
261+
```
262+
263+
**Why does this happen?**
264+
265+
OpenClaw Gateway uses device pairing as a security mechanism:
266+
- The first operator must be manually approved (this is you!)
267+
- After approval, you can approve additional devices through the web UI
268+
- This prevents unauthorized access even if someone obtains the gateway token
269+
270+
**Note:** If you're using `gateway-bind=lan` mode, make sure the SSH tunnel forwards to the correct IP. For example:
271+
```bash
272+
# Forward to the LAN IP, not localhost
273+
ssh -L 18789:10.235.133.100:18789 juju-host
274+
```
275+
276+
---
277+
198278
## Configuration
199279
200280
### How do I change the gateway port?
@@ -738,7 +818,7 @@ http://localhost:18793/__openclaw__/canvas/
738818
739819
---
740820
741-
## Can I deploy multiple units for high availability or scaling?
821+
## Can I deploy multiple units for scaling?
742822
743823
Yes! The OpenClaw charm supports horizontal scaling with automatic Gateway-Node architecture:
744824
@@ -750,11 +830,11 @@ juju deploy openclaw --channel edge -n 3
750830
juju status --watch 1s
751831
752832
# Approve pending Nodes (new in charm v19+)
753-
juju run openclaw/0 approve-nodes
833+
juju run openclaw/leader approve-nodes
754834
755835
# Scale up
756836
juju add-unit openclaw -n 2
757-
juju run openclaw/0 approve-nodes
837+
juju run openclaw/leader approve-nodes
758838
759839
# Scale down
760840
juju remove-unit openclaw/4
@@ -778,10 +858,10 @@ openclaw/2 active Node - connected to openclaw/0
778858
779859
**Benefits:**
780860
781-
- High availability through Juju leader election
782861
- Horizontal scaling for increased capacity
783862
- Distributed compute for `system.run` commands
784-
- Automatic failover if Gateway unit fails
863+
- Multiple Nodes provide system access across machines
864+
- Dynamic scaling with `juju add-unit`
785865
786866
**Monitoring:**
787867
@@ -811,7 +891,7 @@ If Nodes show as "pending" and not connected:
811891
juju ssh openclaw/0 'openclaw devices list'
812892
813893
# Approve all pending Nodes
814-
juju run openclaw/0 approve-nodes
894+
juju run openclaw/leader approve-nodes
815895
816896
# Or manually approve a specific device
817897
juju ssh openclaw/0 'openclaw devices approve <request-id>'

README.md

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@ When deploying multiple units, Node devices require approval before they can con
8686

8787
```bash
8888
# Approve all pending Node devices
89-
juju run openclaw/0 approve-nodes
89+
juju run openclaw/leader approve-nodes
9090

9191
# Check which devices are pending
9292
juju ssh openclaw/0 'openclaw devices list'
@@ -356,11 +356,11 @@ juju deploy openclaw --channel edge -n 3 \
356356
juju status --watch 1s
357357

358358
# Approve pending Nodes
359-
juju run openclaw/0 approve-nodes
359+
juju run openclaw/leader approve-nodes
360360

361361
# Scale up to 5 units
362362
juju add-unit openclaw -n 2
363-
juju run openclaw/0 approve-nodes
363+
juju run openclaw/leader approve-nodes
364364

365365
# Scale down to 2 units
366366
juju remove-unit openclaw/2
@@ -385,10 +385,10 @@ openclaw/2 active Node - connected to openclaw/0
385385

386386
**Benefits:**
387387

388-
- **High availability**: If Gateway unit fails, Juju elects a new leader
388+
- **Horizontal scaling**: Add more nodes for increased capacity
389389
- **Load distribution**: Nodes can handle system.run commands across multiple machines
390-
- **Scalability**: Add more nodes for increased capacity
391-
- **Automatic coordination**: Nodes discover and connect to Gateway automatically
390+
- **Distributed access**: Nodes provide system access across different machines
391+
- **Automatic coordination**: Units discover and connect through peer relations
392392

393393
### Multiple Instances
394394

0 commit comments

Comments
 (0)