Air-gapped sites
Install 3AM where servers can't reach the internet. Download a signed release elsewhere, check it, carry it in, and install it with nothing fetched.
An air-gapped install works like any other, except the download happens on a different machine. The release you carry in has everything inside it, and the installer never reaches the network.
1. Download the release
On any machine with internet access, download without installing. Use your code, so the release includes your organisation's sealed packs (the checks 3AM runs):
curl -fsSL https://get.3am.si | sh -s -- --code 3AM-DL-XXXXX-XXXXX-XXXXXA trial code (3AM-TRIAL-…) works too. Download codes come from Keychain → Install on another machine in the console of an
install you already have, or from us.
This leaves a 3am-<version> folder. Pack it up to carry across:
tar -cf 3am-0.4.41.tar 3am-0.4.41
sha256sum 3am-0.4.41.tar # note this, to compare on the other side2. Check it on the other side
Compare the checksum after the transfer, then unpack:
sha256sum 3am-0.4.41.tar
tar -xf 3am-0.4.41.tar && cd 3am-0.4.41The installer checks every file against SHA256SUMS, and checks that file's signature against 3AM's release key. To
do it yourself first:
sha256sum -c SHA256SUMS
openssl pkeyutl -verify -pubin -inkey 3am-release.pub -rawin -in SHA256SUMS -sigfile SHA256SUMS.sig
openssl pkey -pubin -in 3am-release.pub -outform DER | openssl dgst -sha256The last line must print 3AM's release key:
f50802ccfd18ca2a18f8f6f6de28ed28ba18d616c38b7aa7a9a2899d2cb0323aIf it doesn't, stop: the release wasn't signed by us.
3. Install
The models need an endpoint inside your network, or a GPU in the server:
./install.sh --model-url https://llm.example.internal/v1 --model meta-llama/Llama-3.3-70B-Instruct \
--model-key-file ~/llm.key --s1-url https://llm.example.internal/v1/systemoneFor a GPU in the server, download with --profile gpu. That release carries the model runtime and its weights, about
11 GB instead of 400 MB. Then plain ./install.sh is enough.
4. Add the licence
The console's licence step shows this install's fingerprint. From any machine with internet access, open warden.3am.si/redeem, enter your trial code and the fingerprint, and download the licence file. Upload it in the console.
With no route to 3am.si, 3AM checks the licence offline, from its signature. There's nothing to turn off.
Kubernetes
Push the images from the release into your registry, then install the chart that comes with it:
podman load -i images/3am-core.tar
podman tag localhost/3am-core:0.4.41 registry.example.internal/3am/3am-core:0.4.41
podman push registry.example.internal/3am/3am-core:0.4.41
kubectl create namespace 3am
kubectl -n 3am create secret generic 3am-packs --from-file=config/packs/
helm install 3am helm/3am-0.4.41.tgz -n 3am \
--set image.repository=registry.example.internal/3am/3am-core --set image.tag=0.4.41 \
--set packs.existingSecret=3am-packs <your model settings>The model settings are the same as on a connected cluster (Kubernetes → Models).
Common questions
The installer, 3AM's images, your sealed packs, the Helm chart, Compose files, the revocation list and signed checksums of every file. A GPU release adds the model runtime and weights.
Each release carries the current signed revocation list. Installing new releases keeps it up to date.
Download the new release the same way, check it, and run its ./install.sh with no options. Your settings, data and
tokens are kept.
Download the signed usage statement from Settings → Licence and send it to us with your renewal.
Yes, on Enterprise and Strategic. Seal the Keychain into a file on one install and set up the other from it (Keychain).
Kubernetes
Install 3AM into a Kubernetes or OpenShift cluster, with one command or with Helm directly. Models, the console, the values you'll change, and upgrades.
Models
Where 3AM's models run. Your own endpoint, OpenRouter, or a GPU in the server, never the CPU. How to choose, and how to set each one up.