Install on a Pi.
Flash a fresh Raspberry Pi OS Lite (64-bit) (or Debian 12), log in over SSH or with a monitor + keyboard, and run:
curl -fsSL https://sudo.abhishekslab.xyz/install.sh | bashWhat the installer does
- Installs base packages (
curl,git, Node 20). - Creates a
sudoassistservice user and adds it to theaudio,dialout, anddockergroups. - Fetches the Sudo source tree to
/home/sudoassist/sudo. - Drops a narrow
sudoersfile so the wizard can install Docker and friends later without prompting. - Runs
npm ci && npm run buildon the onboarding app. - Installs and starts
sudo-onboarding.service(systemd). - Prints the URL.
Everything heavier — Docker, docker-compose-plugin, portaudio, Home Assistant images, Wyoming voice models — is installed later by the onboarding flow itself. This keeps the one-liner fast and restartable.
Prerequisites
- Raspberry Pi 5 (8 GB recommended) with an SSD on USB 3.
- USB or HAT microphone; any 3.5mm or USB speaker.
- Outbound HTTPS from the Pi — no inbound ports required.
- A Claude API key, baked in at install time (see below). The onboarding UI does not prompt for it.
Providing the Claude API key
Sudo expects the key to be present on the host before the wizard brings up services — so users never paste it into a form. Pass it to the installer as an env var:
sudo SUDO_CLAUDE_API_KEY=sk-ant-your-real-key \
bash ./install.shThe wizard reads it from the environment when it writes .env. If you forget, a placeholder is used and the voice loop won't reach Claude until you replace it in /home/sudoassist/sudo/.env.
Opening the app
The onboarding service binds 0.0.0.0:3000, so from any browser on the same LAN:
http://<pi-ip>:3000No passphrase or login — whoever holds the device runs the setup. For stricter deployments, firewall :3000 or point the service at 127.0.0.1 and reach it via SSH port-forward.
Self-hosting the installer
The default installer URL hits our CDN. For an air-gapped office or your own network, serve the tarball and the install script from Caddy:
1. Caddyfile
sudo.abhishekslab.xyz {
root * /var/www/sudo
file_server
encode zstd gzip
@script path /install.sh
header @script Content-Type "text/x-shellscript; charset=utf-8"
}2. Build + upload the tarball
# From the Sudo repo root on your dev machine:
./web/scripts/tarball.sh /tmp/sudo-latest.tar.gz
scp /tmp/sudo-latest.tar.gz install.sh root@your.host:/var/www/sudo/3. Install from your own host
SUDO_TARBALL=https://sudo.abhishekslab.xyz/sudo-latest.tar.gz \
curl -fsSL https://sudo.abhishekslab.xyz/install.sh | bashInstall from a local tarball
Already have the tarball on the Pi? Skip the download step:
scp /tmp/sudo-latest.tar.gz install.sh pi@<pi-ip>:~
ssh pi@<pi-ip>
sudo SUDO_TARBALL=file://$HOME/sudo-latest.tar.gz \
SUDO_CLAUDE_API_KEY=sk-ant-... \
bash ./install.shUninstall
sudo systemctl disable --now sudo-onboarding.service
sudo rm /etc/systemd/system/sudo-onboarding.service
sudo rm /etc/sudoers.d/sudo-onboarding
cd /home/sudoassist/sudo && docker compose down -v
sudo rm -rf /home/sudoassist/sudo