Pairing & Wi-Fi
Out of the box, a freshly provisioned Intern runs in Access Point mode with no internet credentials. Pairing the device means joining its AP, opening the captive portal, and submitting the setup form. intern-server then switches to Station mode and joins your real Wi-Fi.
Connect to the Intern AP
After Quick Start finishes, look for an open Wi-Fi network named:
Intern-XXXX
where XXXX is the last four characters of the Pi's serial number. The network has no password.
Once connected, your laptop or phone gets a DHCP lease from 192.168.100.50–150 and the device is reachable at http://192.168.100.1.
Captive portal
Most operating systems auto-launch the captive portal on connect. If yours doesn't, open http://192.168.100.1 in a browser. The web UI presents a wizard whose fields map directly onto the SetupRequest body (see lib/openclaw/domain/setup.go):
- Wi-Fi —
ssid,password(both required). - Channel —
channel(telegram/slack/discord) plus the channel-specific token + user-ID fields. See Channels for the full per-channel field list. - LLM provider —
llm_base_url,llm_api_key,llm_model(all required). See LLM Provider. - Device ID —
device_id, a friendly label for the device.
Submit. The wizard POSTs to /api/device/setup, the handler returns immediately, and the actual setup runs asynchronously on the device.
What /api/device/setup does
The endpoint is mounted at POST /api/device/setup (proxied by nginx from :80 to intern-server on :5000). Briefly, the async pipeline:
- Join Wi-Fi — runs
/usr/local/bin/connect-wifi <ssid> <password>to drivewpa_supplicantand switch out of AP mode into STA. - Persist config — writes the LLM credentials, channel tokens, and device ID into
/root/config/config.json. - Configure OpenClaw —
SetupOpenclaw(inlib/openclaw/openclaw.go) merges the canonicalchannels.{telegram|slack|discord}block into/root/.openclaw/openclaw.json. - Allocate Supermemory (when internet is reachable) — calls
POST <llm_base_url>/supermemory/allocateand merges the returnedapiKey+containerTagintoplugins.entries.openclaw-supermemory.config. See Supermemory Overview. - Restart OpenClaw —
systemctl restart openclawso the gateway picks up the new channel + plugin config. - LED reflects the result — the LED engine moves between
booting,idle,error, etc. as the steps complete (state names listed below).
If step 1 fails (bad SSID/password, weak signal), intern-server returns the device to AP mode so you can re-pair. Failures in steps 4–5 are non-fatal: the status reporter retries them on every tick and the heartbeat reports supermemory_installed: false until allocation eventually succeeds.
Switching networks later
To move a paired device to a different Wi-Fi network, force it back into AP mode:
sudo device-ap-mode
The Intern-XXXX SSID returns. Re-run the wizard.
To go back to client mode without re-pairing (e.g. after edits to /etc/wpa_supplicant/wpa_supplicant.conf):
sudo device-sta-mode
To join a new network from the CLI without the wizard:
sudo connect-wifi "MyNetwork" "supersecret"
LED states
The LED ring is driven by intern-server and reports the device's high-level state. The state names (from lib/led/state.go in openclaw-lobster) are:
| State | When |
|---|---|
booting | Bringing up systemd services |
idle | Ring off — no recent interaction |
connectionmode | Has internet, but network / LLM / channel still unconfigured |
thinking | Processing your message |
working | Running a long-form task |
workingnointernet | In STA mode but unable to reach the internet |
error | Setup or runtime failure — check /var/log/intern.log |
factoryreset | GPIO 23 reset button held ≥10 s |
Specific colors are configured at the LED engine level and may change between firmware revisions — don't hard-code "green means ready" into your scripts; poll GET /api/led instead.
Verify connectivity
From your laptop, while still on the Intern-XXXX AP:
curl http://192.168.100.1/health/live # liveness probe
curl http://192.168.100.1/api/network/current # current Wi-Fi state
curl http://192.168.100.1/api/network/check-internet
A 200 OK from /health/live confirms intern-server is reachable. After the device joins your real Wi-Fi (STA mode), the same endpoints are reachable at the device's new IP — see SSH Access · Preflight for how to find that IP.