Skip to content

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:

  • apt sources point at /opt/deputyos/airgap/apt-mirror/, a baked-in Debian/Raspbian snapshot frozen at image-bake time.
  • nftables denies all egress except RFC1918 + mDNS + the local DNS resolver. Outbound chats with api.openai.com / api.anthropic.com /etc. are blocked.
  • A tier-appropriate LFM2 GGUF is baked under /var/lib/deputyos/models/ and served by llama.cpp on 127.0.0.1:8090. Wizard + chat default to it.

Tier sizes

TierDefault LLMCompressed image
leanLFM2-350M.Q4_K_M.gguf (~250 MB)~1.3 GB
standardLFM2-1.2B.Q4_K_M.gguf (~750 MB)~2.8 GB
richLFM2-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 register later) is the only path.
  • Pi 4 + airgap is supported only in the lean tier — the SoC can’t run 1.2B at usable t/s.

Search

Search index isn't built yet. Run npm run build to generate it (Pagefind writes to dist/pagefind/).