concepts
Air-gapped tier
AIRGAP=1 builds bake LFM2 + lock egress so the appliance works without internet.
The air-gapped tier is the truest expression of the batteries-included rule. The image works without ever reaching the public internet:
aptsources point at/opt/deputyos/airgap/apt-mirror/, a baked-in Debian/Raspbian snapshot frozen at image-bake time.nftablesdenies all egress except RFC1918 + mDNS + the local DNS resolver. Outbound chats withapi.openai.com/api.anthropic.com/etc. are blocked.- A tier-appropriate LFM2 GGUF is baked under
/var/lib/deputyos/models/and served byllama.cppon127.0.0.1:8090. Wizard + chat default to it.
Tier sizes
| Tier | Default LLM | Compressed image |
|---|---|---|
| lean | LFM2-350M.Q4_K_M.gguf (~250 MB) | ~1.3 GB |
| standard | LFM2-1.2B.Q4_K_M.gguf (~750 MB) | ~2.8 GB |
| rich | LFM2-2.6B.Q4_K_M.gguf (~1.6 GB) + Qwen2.5-Coder-1.5B-Instruct.Q4_K_M.gguf (~1.0 GB) | ~6.5 GB |
Exact numbers in docs/12-bundled-software.md §5.
Building
make build TARGET=qemu-x86_64 PROFILE=openclaw TIER=rich AIRGAP=1
AIRGAP=1 plumbs through Packer (-var airgap=1) into the role
(deputyos_airgap: true). When false (the default), every airgap-related
task is a no-op so non-airgap targets pay zero baking cost.
Unlocking the network post-boot
Air-gapped is the posture, not the prison. From the device:
deputyctl network unlock # flip mode=airgap → mode=open, reload nftables
The wizard surfaces the same toggle. Going back the other way
(deputyctl network lock --airgap) is also supported.
A middle mode — whitelist — is reserved for a future release and shares the same
/etc/deputyos/network-policy.json schema.
Updates over sneakernet
deputyctl update --from /mnt/deputyos/<usb>/manifest.json consumes a
manifest dropped onto a USB stick. The signature path is unchanged:
minisign + cosign + SLSA verification still gate the apply step. The
device just doesn’t fetch the bytes — the user does.
Caveats
- The baked apt mirror is frozen at image bake. Security patches arrive via signed image rebuilds, not in-place package upgrades.
- Cloud-API LLM providers are unreachable in airgap mode by design. The
baked LFM2 (and any GGUF you
deputyctl model registerlater) is the only path. - Pi 4 + airgap is supported only in the
leantier — the SoC can’t run 1.2B at usable t/s.