Skip to main content

Quick Start

Provision a fresh Raspberry Pi 5 into a working Intern device. The provisioning script installs all dependencies, registers systemd services, brings up a Wi-Fi access point for pairing, and starts the captive portal.

Prerequisites

  • Raspberry Pi 5 (4 GB RAM minimum)
  • Fresh Raspberry Pi OS Bookworm 64-bit flashed to a 64 GB+ microSD
  • Wired internet or pre-configured Wi-Fi for the initial download
  • Root access (sudo)

The script targets linux/arm64 only. Pi 4 and earlier are not supported.

Install

SSH into the Pi (or open a terminal on the device) and run:

curl -fsSL \
-H "Cache-Control: no-cache" -H "Pragma: no-cache" \
https://cdn.autonomous.ai/intern/setup.sh \
| sudo bash

The script runs ~10 stages and takes 5–10 minutes on a fresh Pi 5.

What it installs

StageWhat happens
LocaleEnsures C.UTF-8
Prerequisiteshostapd, dnsmasq, nginx, wpa_supplicant, xvfb, chromium, Node.js 22, jq, curl, nscd
Pi 5 stabilityDisables IPv6, disables Wi-Fi power-save
SPIEnables dtparam=spi=on in /boot/firmware/config.txt for the LED ring (reboot required)
OTA metadataFetches build URLs from GCS (or OTA_METADATA_URL)
BinariesInstalls /usr/local/bin/intern-server and /usr/local/bin/bootstrap-server
OpenClawintern-server openclaw install (npm global), seeds /root/openclaw/, registers openclaw.service
NginxReverse-proxies /api/127.0.0.1:5000, serves the React SPA from /usr/share/nginx/html/setup
Wi-Fi APBroadcasts Intern-XXXX (last 4 of Pi serial), open SSID, DHCP 192.168.100.50-150, gateway 192.168.100.1

Optional environment overrides

AP_BAND=5 # 2.4 or 5 GHz (default 5)
AP_CHANNEL=36 # 6 for 2.4 GHz, 36+ for 5 GHz
COUNTRY_CODE=US
OPENCLAW_VERSION=latest # npm version tag
OPENCLAW_HOME=/root/openclaw
OTA_METADATA_URL=<url> # override OTA source

Example:

COUNTRY_CODE=US AP_BAND=2.4 AP_CHANNEL=6 \
curl -fsSL https://cdn.autonomous.ai/intern/setup.sh | sudo bash

Verify

After the script finishes and the device reboots:

systemctl status intern bootstrap openclaw nginx --no-pager

All four units should be active (running).

Live logs:

journalctl -u intern -f
journalctl -u openclaw -f
journalctl -u bootstrap -f

The device also writes verbose logs to /var/log/intern.log at slog DEBUG level.

What's next

The device is now broadcasting Intern-XXXX but has no Wi-Fi credentials, no channel tokens, and no LLM key. Continue with Pairing & Wi-Fi to walk through the captive portal.

Troubleshooting

SymptomLikely cause
LED stays red after setupInspect /var/log/intern.log; usually a missing OTA binary or unreachable GCS
No Intern-XXXX SSIDhostapd failed to bind — check journalctl -u hostapd
openclaw.service flappingnpm install incomplete — re-run intern-server openclaw install
SPI / LED ring not workingdtparam=spi=on requires a reboot after first install