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:

Install on a Pibash
$curl -fsSL https://sudo.abhishekslab.xyz/install.sh | bash

What the installer does

  1. Installs base packages (curl, git, Node 20).
  2. Creates a sudoassist service user and adds it to the audio, dialout, and docker groups.
  3. Fetches the Sudo source tree to /home/sudoassist/sudo.
  4. Drops a narrow sudoers file so the wizard can install Docker and friends later without prompting.
  5. Runs npm ci && npm run build on the onboarding app.
  6. Installs and starts sudo-onboarding.service (systemd).
  7. 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:

bash
sudo SUDO_CLAUDE_API_KEY=sk-ant-your-real-key \
     bash ./install.sh

The 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:

bash
http://<pi-ip>:3000

No 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

caddy
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

bash
# 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

bash
SUDO_TARBALL=https://sudo.abhishekslab.xyz/sudo-latest.tar.gz \
  curl -fsSL https://sudo.abhishekslab.xyz/install.sh | bash

Install from a local tarball

Already have the tarball on the Pi? Skip the download step:

bash
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.sh

Uninstall

bash
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