ISO builder, firstboot wizard, installer
Find a file
2026-06-04 20:04:23 +02:00
.archive/completed-work docs: consolidate and archive completed work 2026-06-04 20:04:22 +02:00
.opencode/plans Unify ISO and fix GPU installation gap (Sam & ZAI) 2026-06-04 20:04:22 +02:00
doc Align live installer defaults before image rebuild (Sam & Codex) 2026-06-04 20:04:23 +02:00
docs Align ISO config docs with post-install setup 2026-06-04 20:04:23 +02:00
firstboot Bundle current pi package and enable evdev 2026-06-04 20:04:23 +02:00
live/installer-session Wire live installer commit path (Sam & Codex) 2026-06-04 20:04:22 +02:00
packages Wire live installer commit path (Sam & Codex) 2026-06-04 20:04:22 +02:00
runner docs(runner): add edk2-bhyve to build automation prerequisites 2026-06-04 20:04:21 +02:00
scripts Bundle current pi package and enable evdev 2026-06-04 20:04:23 +02:00
skills/build-iso Make ISO builds cleaner by default (Sam & Codex) 2026-06-04 20:04:22 +02:00
vps Align ISO config docs with post-install setup 2026-06-04 20:04:23 +02:00
.gitignore Ignore local Aider artifacts 2026-06-04 20:04:22 +02:00
ADMIN-PANEL.md Unify ISO and fix GPU installation gap (Sam & ZAI) 2026-06-04 20:04:22 +02:00
AGENTS.md Enable mac_do framework during bootstrap (Codex) 2026-06-04 20:04:22 +02:00
build-vps.sh feat(firstboot): unify setup import across USB and VPS 2026-06-04 20:04:22 +02:00
build.cfg Make installer image UEFI bootable 2026-06-04 20:04:23 +02:00
BUILD.md Refresh ISO build and setup docs 2026-06-04 20:04:23 +02:00
build.sh Make installer image UEFI bootable 2026-06-04 20:04:23 +02:00
CHANGELOG.md docs: update ISO docs for Aider+Pi harness completion and sync with main codebase 2026-06-04 20:04:22 +02:00
CLAWDIE-ISO.md feat(firstboot): unify setup import across USB and VPS 2026-06-04 20:04:22 +02:00
FUNDING.md refactor: Rename clawdie-shell-*.sh to shell-*.sh (remove redundant prefix) 2026-06-04 20:04:21 +02:00
INSTALLER-PLAN.md fix(installer): Phase A — stable ZFS, safe upgrades, module matrix 2026-06-04 20:04:22 +02:00
installerconfig Add ISO build manifest metadata 2026-06-04 20:04:22 +02:00
LUMINA-INTEGRATION.md Clawdie Shell specification v0.9.0-rc1 2026-06-04 20:04:21 +02:00
NETWORKING.md Clean up warden0 bridge documentation 2026-06-04 20:04:23 +02:00
PHASE4-SUMMARY.md Default ISO code hosting: git (no Forgejo) 2026-06-04 20:04:22 +02:00
PHASE4-TESTING-INSTRUCTIONS.md Default ISO code hosting: git (no Forgejo) 2026-06-04 20:04:22 +02:00
QT6-IMPLEMENTATION-PLAN.md Merge remote-tracking branch 'origin/main' 2026-06-04 20:04:22 +02:00
README.md Clean up docs: fix /login wording, add VPS doc link, remove dead build.cfg IMAGE_NAME, delete stale handoff (Sam & Claude) 2026-06-04 20:04:23 +02:00
RELEASE-NOTES-v0.9.0.md Add v0.9.0 release notes (Sam & ZAI) 2026-06-04 20:04:22 +02:00
REQUIREMENTS.md Clean up docs: fix /login wording, add VPS doc link, remove dead build.cfg IMAGE_NAME, delete stale handoff (Sam & Claude) 2026-06-04 20:04:23 +02:00
ROADMAP-v1.0.0.md docs: v1.0.0 release roadmap (Sam & Claude) 2026-06-04 20:04:22 +02:00
SHELL-ARCHITECTURE.md feat(iso): bundle clawdie-ai node_modules for offline install 2026-06-04 20:04:22 +02:00
SHELL-MODULES.md feat(firstboot): unify setup import across USB and VPS 2026-06-04 20:04:22 +02:00
TESTING.md Fix stale TESTING.md banner and embedding bake-through in .env seed (Sam & Claude) 2026-06-04 20:04:23 +02:00

Clawdie ISO

Unified FreeBSD installer image for Clawdie-AI.

The current ISO boots into a live Lumina/QML installer, installs FreeBSD to disk, then finishes Clawdie setup on the first boot of the installed system.

Current validation target: bootable dev image with BUILD_CHANNEL=dev and bundled Clawdie-AI from main. Public release images should use BUILD_CHANNEL=release and a pinned Clawdie-AI tag.


What You Get

Boot a USB, complete the live installer, reboot once, then finish setup in the controlplane:

  • FreeBSD 15.0 base system
  • PF firewall with jail NAT through warden0
  • Bastille jail substrate and Clawdie service installation
  • Offline package repository bundled on the USB image
  • Clawdie-AI tarball with offline node_modules
  • Live QML installer for disk/user/network handoff
  • Post-install setup page at http://127.0.0.1:3100/setup
  • Optional Tailscale remote access for SSH tunneling to the setup page

Provider keys, Telegram, and browser sign-in are configured after first boot through the controlplane setup page, not during ISO install.


Pre-Install Requirements

Build host:

  • FreeBSD 15.0+
  • pkg, curl, Node/npm, Qt6 build tools
  • root or sudo for image assembly (mdconfig, mount, bootcode)
  • 150 GB free build space recommended
  • 64 GB USB key minimum for the default 50 GB image

Optional but strongly recommended:

  • Tailscale account and auth key (tskey-auth-...) for secure remote SSH
  • SSH public key for the installed operator account

Tailscale is recommended, not mandatory. If no auth key is supplied, the ISO build continues with a warning and first boot leaves public SSH on port 22 available so the operator can still reach the host.


Quick Start: Build Image

git clone https://codeberg.org/Clawdie/Clawdie-ISO.git
cd Clawdie-ISO

# Recommended for secure remote access after first boot.
export TAILSCALE_AUTHKEY="tskey-auth-..."

# Full build: fetch FreeBSD, packages, Clawdie-AI, then assemble image.
sudo ./build.sh

Useful alternatives:

# Fetch/cache only. Does not assemble an image.
./build.sh --fetch-only

# Reuse cached packages and image inputs.
# Safe for pinned tags/commits. For moving refs, build.sh caches by resolved commit.
sudo ./build.sh --skip-fetch

# Validation build from current Clawdie-AI main.
sudo ./build.sh --clawdie-ref main

# Release build from a pinned Clawdie-AI tag.
BUILD_CHANNEL=release sudo ./build.sh --clawdie-version 0.10.0

The build prints provenance similar to:

ISO     : 0.1.0-dev
FreeBSD : 15.0-RELEASE amd64
Clawdie : main
Clawdie commit: <sha>

It also writes build-manifest.json into the image and onto the installed system under /usr/local/share/clawdie-iso/.


Write to USB

sudo dd if=tmp/output/clawdie-iso-unified-DD.mmm.YYYY.img of=/dev/daX bs=1M status=progress
sudo sync

Replace /dev/daX with the whole USB device, not a partition.

The image is sparse on the build host. build.sh prints both logical image size and allocated size; write the logical image to a USB key large enough for it.


Install on Hardware or VM

  1. Boot from the USB image.

  2. The live session starts Lumina and launches the Clawdie QML installer.

  3. Select install disk and provide identity/access details.

  4. The live commit step runs the FreeBSD install and copies the Clawdie payload.

  5. Reboot from the installed disk.

  6. First boot runs clawdie-firstboot, deploys Clawdie-AI, starts the loopback-bound controlplane, and generates a setup token.

  7. Open setup locally or over an SSH tunnel:

    ssh -L 3100:127.0.0.1:3100 clawdie@<tailnet-or-host-ip>
    

    Then open:

    http://127.0.0.1:3100/setup
    
  8. Read the bootstrap token on the installed host:

    cat /var/db/clawdie-installer/setup-token
    

After setup completes, Clawdie-AI removes or truncates the cleartext token file.

Do not expose port 3100 directly on the public internet. Loopback HTTP is OK; LAN/tailnet exposure should use TLS and allowlisting.


Documentation


Current Limitations

  • ISO live-install path is still under active validation.
  • Locale/keymap are currently neutral defaults (en_US.UTF-8, us.kbd) until QML exposes operator fields.
  • Provider/model and Telegram setup are intentionally post-install.
  • Tailscale is optional; without it, public SSH remains open and must be secured by the operator.

Last updated: 12.maj.2026